diff options
Diffstat (limited to 'tensorflow/tensorboard')
119 files changed, 25966 insertions, 0 deletions
diff --git a/tensorflow/tensorboard/BUILD b/tensorflow/tensorboard/BUILD new file mode 100644 index 0000000000..2dcb5e4fa9 --- /dev/null +++ b/tensorflow/tensorboard/BUILD @@ -0,0 +1,49 @@ +# Description: +# TensorBoard, a dashboard for investigating TensorFlow + +package(default_visibility = ["//tensorflow:internal"]) + +filegroup( + name = "tensorboard_frontend", + srcs = [ + "dist/index.html", + "dist/tf-tensorboard.html", + "//tensorflow/tensorboard/bower:bower", + ] + glob(["lib/**/*"]), +) + +py_library( + name = "tensorboard_handler", + srcs = ["tensorboard_handler.py"], + deps = [ + ":float_wrapper", + "//tensorflow/python:platform", + "//tensorflow/python:summary", + ], +) + +py_library( + name = "float_wrapper", + srcs = ["float_wrapper.py"], +) + +py_test( + name = "float_wrapper_test", + size = "small", + srcs = ["float_wrapper_test.py"], + deps = [ + ":float_wrapper", + "//tensorflow/python:platform_test", + ], +) + +py_binary( + name = "tensorboard", + srcs = ["tensorboard.py"], + data = [":tensorboard_frontend"], + deps = [ + ":tensorboard_handler", + "//tensorflow/python:platform", + "//tensorflow/python:summary", + ], +) diff --git a/tensorflow/tensorboard/README.md b/tensorflow/tensorboard/README.md new file mode 100644 index 0000000000..eb85a1e461 --- /dev/null +++ b/tensorflow/tensorboard/README.md @@ -0,0 +1,66 @@ +# TensorBoard + +TensorBoard is a suite of web applications for inspecting and understanding your +TensorFlow runs and graphs. + +Example Usage: + +``` +python tensorflow/tensorboard/tensorboard.py --logdir=path/to/logs +# if installed via pip +tensorboard --logdir=path/to/logs + +# if building from source +bazel build tensorflow/tensorboard:tensorboard +./bazel-bin/tensorflow/tensorboard/tensorboard --logdir=path/to/logs + +# then connect to http://localhost:6006 +``` + +Note that TensorBoard requires a `logdir` to read logs from. For info on +configuring TensorBoard, run `tensorboard --help`. + +TensorBoard includes a backend (tensorboard.py) that reads TensorFlow event data +from the *tfevents* files, and then serves this data to the browser. It also +includes a frontend (app/tf-tensorboard.html) that contains html and javascript +for displaying this data in a UI. + + +## Building the TensorBoard frontend + +### Install Node, npm, gulp, bower, and tsd in your machine +Get nodejs and npm through whatever package distribution system is appropriate +for your machine. For example, on Ubuntu 14.04, run +`sudo apt-get install nodejs nodejs-legacy npm`. Then, run +`sudo npm install -g gulp bower tsd`. + +### Install project dependencies + +Inside this directory (`tensorflow/tensorboard`), +run the following commands. + + npm install + bower install + tsd install + +### Run Gulp Vulcanize + +Inside this directory, run `gulp vulcanize`. That will compile all of the +html/js/css dependencies for TensorBoard into a monolithic index.html file under +dist/. Once you've done this, you can locally run your own TensorBoard instance +and it will have a working frontend. + +### Frontend General Dev Instructions + +To speed up the development process, we can run the frontend code independently +of the backend, and mock out the backend with static JSON files. This allows +testing the frontend's correctness without needing to find real data and spin +up a real server. Look at app/demo/index.html for an example. + +The following gulp commands are useful: + +* `gulp test` - build, test, and lint the code +* `gulp watch` - build, test, and rebuild on change +* `gulp server` - start a livereload server on localhost:8000 +* `gulp` - alias for `gulp watch` +* `gulp vulcanize` - diff --git a/tensorflow/tensorboard/__init__.py b/tensorflow/tensorboard/__init__.py new file mode 100755 index 0000000000..e69de29bb2 --- /dev/null +++ b/tensorflow/tensorboard/__init__.py diff --git a/tensorflow/tensorboard/app/demo/data/cos.json b/tensorflow/tensorboard/app/demo/data/cos.json new file mode 100644 index 0000000000..807e1f6dc0 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/cos.json @@ -0,0 +1 @@ +[[1434931200.0, 0.0, 1.0], [1434932928.0, 20000.0, 0.9999210442038161], [1434934656.0, 40000.0, 0.9996841892832999], [1434936384.0, 60000.0, 0.9992894726405892], [1434938112.0, 80000.0, 0.9987369566060175], [1434939840.0, 100000.0, 0.9980267284282716], [1434941568.0, 120000.0, 0.9971589002606139], [1434943296.0, 140000.0, 0.9961336091431725], [1434945024.0, 160000.0, 0.9949510169813002], [1434946752.0, 180000.0, 0.9936113105200084], [1434948480.0, 200000.0, 0.9921147013144779], [1434950208.0, 220000.0, 0.9904614256966512], [1434951936.0, 240000.0, 0.9886517447379141], [1434953664.0, 260000.0, 0.986685944207868], [1434955392.0, 280000.0, 0.9845643345292053], [1434957120.0, 300000.0, 0.9822872507286887], [1434958848.0, 320000.0, 0.9798550523842469], [1434960576.0, 340000.0, 0.9772681235681935], [1434962304.0, 360000.0, 0.9745268727865771], [1434964032.0, 380000.0, 0.971631732914674], [1434965760.0, 400000.0, 0.9685831611286311], [1434967488.0, 420000.0, 0.9653816388332739], [1434969216.0, 440000.0, 0.9620276715860859], [1434970944.0, 460000.0, 0.9585217890173758], [1434972672.0, 480000.0, 0.954864544746643], [1434974400.0, 500000.0, 0.9510565162951535], [1434976128.0, 520000.0, 0.9470983049947443], [1434977856.0, 540000.0, 0.9429905358928645], [1434979584.0, 560000.0, 0.9387338576538741], [1434981312.0, 580000.0, 0.934328942456612], [1434983040.0, 600000.0, 0.9297764858882515], [1434984768.0, 620000.0, 0.925077206834458], [1434986496.0, 640000.0, 0.9202318473658704], [1434988224.0, 660000.0, 0.9152411726209175], [1434989952.0, 680000.0, 0.9101059706849957], [1434991680.0, 700000.0, 0.9048270524660195], [1434993408.0, 720000.0, 0.8994052515663711], [1434995136.0, 740000.0, 0.8938414241512638], [1434996864.0, 760000.0, 0.8881364488135446], [1434998592.0, 780000.0, 0.8822912264349533], [1435000320.0, 800000.0, 0.8763066800438636], [1435002048.0, 820000.0, 0.8701837546695257], [1435003776.0, 840000.0, 0.8639234171928353], [1435005504.0, 860000.0, 0.8575266561936523], [1435007232.0, 880000.0, 0.850994481794692], [1435008960.0, 900000.0, 0.8443279255020151], [1435010688.0, 920000.0, 0.8375280400421418], [1435012416.0, 940000.0, 0.8305958991958127], [1435014144.0, 960000.0, 0.8235325976284275], [1435015872.0, 980000.0, 0.8163392507171839], [1435017600.0, 1000000.0, 0.8090169943749475], [1435019328.0, 1020000.0, 0.8015669848708766], [1435021056.0, 1040000.0, 0.7939903986478354], [1435022784.0, 1060000.0, 0.7862884321366189], [1435024512.0, 1080000.0, 0.7784623015670235], [1435026240.0, 1100000.0, 0.7705132427757893], [1435027968.0, 1120000.0, 0.7624425110114479], [1435029696.0, 1140000.0, 0.7542513807361038], [1435031424.0, 1160000.0, 0.7459411454241821], [1435033152.0, 1180000.0, 0.7375131173581739], [1435034880.0, 1200000.0, 0.7289686274214116], [1435036608.0, 1220000.0, 0.7203090248879069], [1435038336.0, 1240000.0, 0.7115356772092855], [1435040064.0, 1260000.0, 0.7026499697988492], [1435041792.0, 1280000.0, 0.6936533058128049], [1435043520.0, 1300000.0, 0.6845471059286886], [1435045248.0, 1320000.0, 0.6753328081210245], [1435046976.0, 1340000.0, 0.6660118674342517], [1435048704.0, 1360000.0, 0.6565857557529564], [1435050432.0, 1380000.0, 0.6470559615694443], [1435052160.0, 1400000.0, 0.6374239897486896], [1435053888.0, 1420000.0, 0.6276913612907006], [1435055616.0, 1440000.0, 0.6178596130903344], [1435057344.0, 1460000.0, 0.6079302976946055], [1435059072.0, 1480000.0, 0.5979049830575189], [1435060800.0, 1500000.0, 0.5877852522924731], [1435062528.0, 1520000.0, 0.5775727034222676], [1435064256.0, 1540000.0, 0.5672689491267565], [1435065984.0, 1560000.0, 0.5568756164881881], [1435067712.0, 1580000.0, 0.5463943467342691], [1435069440.0, 1600000.0, 0.5358267949789965], [1435071168.0, 1620000.0, 0.5251746299612957], [1435072896.0, 1640000.0, 0.5144395337815064], [1435074624.0, 1660000.0, 0.5036232016357609], [1435076352.0, 1680000.0, 0.49272734154829156], [1435078080.0, 1700000.0, 0.48175367410171516], [1435079808.0, 1720000.0, 0.47070393216533274], [1435081536.0, 1740000.0, 0.4595798606214879], [1435083264.0, 1760000.0, 0.44838321609003245], [1435084992.0, 1780000.0, 0.437115766650933], [1435086720.0, 1800000.0, 0.42577929156507266], [1435088448.0, 1820000.0, 0.41437558099328425], [1435090176.0, 1840000.0, 0.4029064357136627], [1435091904.0, 1860000.0, 0.39137366683720254], [1435093632.0, 1880000.0, 0.3797790955218011], [1435095360.0, 1900000.0, 0.3681245526846781], [1435097088.0, 1920000.0, 0.35641187871325075], [1435098816.0, 1940000.0, 0.344642923174517], [1435100544.0, 1960000.0, 0.3328195445229867], [1435102272.0, 1980000.0, 0.32094360980720943], [1435104000.0, 2000000.0, 0.30901699437494745], [1435105728.0, 2020000.0, 0.29704158157703486], [1435107456.0, 2040000.0, 0.28501926246997616], [1435109184.0, 2060000.0, 0.2729519355173254], [1435110912.0, 2080000.0, 0.260841506289897], [1435112640.0, 2100000.0, 0.24868988716485496], [1435114368.0, 2120000.0, 0.23649899702372476], [1435116096.0, 2140000.0, 0.22427076094938117], [1435117824.0, 2160000.0, 0.21200710992205474], [1435119552.0, 2180000.0, 0.199709980514407], [1435121280.0, 2200000.0, 0.18738131458572474], [1435123008.0, 2220000.0, 0.17502305897527604], [1435124736.0, 2240000.0, 0.16263716519488372], [1435126464.0, 2260000.0, 0.15022558912075706], [1435128192.0, 2280000.0, 0.13779029068463797], [1435129920.0, 2300000.0, 0.12533323356430426], [1435131648.0, 2320000.0, 0.1128563848734816], [1435133376.0, 2340000.0, 0.10036171485121491], [1435135104.0, 2360000.0, 0.08785119655074332], [1435136832.0, 2380000.0, 0.07532680552793275], [1435138560.0, 2400000.0, 0.06279051952931353], [1435140288.0, 2420000.0, 0.0502443181797696], [1435142016.0, 2440000.0, 0.037690182669934694], [1435143744.0, 2460000.0, 0.02513009544333753], [1435145472.0, 2480000.0, 0.012566039883352776], [1435147200.0, 2500000.0, 6.123233995736766e-17], [1435148928.0, 2520000.0, -0.012566039883352653], [1435150656.0, 2540000.0, -0.025130095443337407], [1435152384.0, 2560000.0, -0.037690182669934576], [1435154112.0, 2580000.0, -0.05024431817976947], [1435155840.0, 2600000.0, -0.0627905195293134], [1435157568.0, 2620000.0, -0.07532680552793262], [1435159296.0, 2640000.0, -0.0878511965507432], [1435161024.0, 2660000.0, -0.100361714851215], [1435162752.0, 2680000.0, -0.1128563848734817], [1435164480.0, 2700000.0, -0.12533323356430437], [1435166208.0, 2720000.0, -0.13779029068463805], [1435167936.0, 2740000.0, -0.15022558912075715], [1435169664.0, 2760000.0, -0.16263716519488358], [1435171392.0, 2780000.0, -0.17502305897527615], [1435173120.0, 2800000.0, -0.18738131458572482], [1435174848.0, 2820000.0, -0.1997099805144069], [1435176576.0, 2840000.0, -0.21200710992205438], [1435178304.0, 2860000.0, -0.22427076094938103], [1435180032.0, 2880000.0, -0.23649899702372443], [1435181760.0, 2900000.0, -0.24868988716485463], [1435183488.0, 2920000.0, -0.26084150628989666], [1435185216.0, 2940000.0, -0.27295193551732505], [1435186944.0, 2960000.0, -0.28501926246997605], [1435188672.0, 2980000.0, -0.29704158157703475], [1435190400.0, 3000000.0, -0.30901699437494734], [1435192128.0, 3020000.0, -0.3209436098072093], [1435193856.0, 3040000.0, -0.33281954452298657], [1435195584.0, 3060000.0, -0.3446429231745169], [1435197312.0, 3080000.0, -0.35641187871325064], [1435199040.0, 3100000.0, -0.368124552684678], [1435200768.0, 3120000.0, -0.379779095521801], [1435202496.0, 3140000.0, -0.3913736668372024], [1435204224.0, 3160000.0, -0.4029064357136626], [1435205952.0, 3180000.0, -0.41437558099328414], [1435207680.0, 3200000.0, -0.4257792915650727], [1435209408.0, 3220000.0, -0.4371157666509327], [1435211136.0, 3240000.0, -0.4483832160900321], [1435212864.0, 3260000.0, -0.4595798606214878], [1435214592.0, 3280000.0, -0.47070393216533263], [1435216320.0, 3300000.0, -0.48175367410171543], [1435218048.0, 3320000.0, -0.49272734154829145], [1435219776.0, 3340000.0, -0.5036232016357608], [1435221504.0, 3360000.0, -0.5144395337815065], [1435223232.0, 3380000.0, -0.5251746299612958], [1435224960.0, 3400000.0, -0.5358267949789969], [1435226688.0, 3420000.0, -0.546394346734269], [1435228416.0, 3440000.0, -0.5568756164881876], [1435230144.0, 3460000.0, -0.5672689491267563], [1435231872.0, 3480000.0, -0.5775727034222674], [1435233600.0, 3500000.0, -0.587785252292473], [1435235328.0, 3520000.0, -0.5979049830575185], [1435237056.0, 3540000.0, -0.6079302976946052], [1435238784.0, 3560000.0, -0.6178596130903342], [1435240512.0, 3580000.0, -0.6276913612907004], [1435242240.0, 3600000.0, -0.6374239897486897], [1435243968.0, 3620000.0, -0.647055961569444], [1435245696.0, 3640000.0, -0.6565857557529563], [1435247424.0, 3660000.0, -0.6660118674342516], [1435249152.0, 3680000.0, -0.6753328081210245], [1435250880.0, 3700000.0, -0.6845471059286887], [1435252608.0, 3720000.0, -0.6936533058128048], [1435254336.0, 3740000.0, -0.7026499697988491], [1435256064.0, 3760000.0, -0.7115356772092853], [1435257792.0, 3780000.0, -0.7203090248879069], [1435259520.0, 3800000.0, -0.7289686274214113], [1435261248.0, 3820000.0, -0.7375131173581738], [1435262976.0, 3840000.0, -0.7459411454241821], [1435264704.0, 3860000.0, -0.7542513807361039], [1435266432.0, 3880000.0, -0.762442511011448], [1435268160.0, 3900000.0, -0.7705132427757891], [1435269888.0, 3920000.0, -0.7784623015670233], [1435271616.0, 3940000.0, -0.7862884321366189], [1435273344.0, 3960000.0, -0.7939903986478354], [1435275072.0, 3980000.0, -0.8015669848708767], [1435276800.0, 4000000.0, -0.8090169943749473], [1435278528.0, 4020000.0, -0.8163392507171839], [1435280256.0, 4040000.0, -0.8235325976284275], [1435281984.0, 4060000.0, -0.8305958991958128], [1435283712.0, 4080000.0, -0.8375280400421417], [1435285440.0, 4100000.0, -0.8443279255020149], [1435287168.0, 4120000.0, -0.8509944817946917], [1435288896.0, 4140000.0, -0.8575266561936521], [1435290624.0, 4160000.0, -0.8639234171928353], [1435292352.0, 4180000.0, -0.8701837546695257], [1435294080.0, 4200000.0, -0.8763066800438634], [1435295808.0, 4220000.0, -0.8822912264349532], [1435297536.0, 4240000.0, -0.8881364488135445], [1435299264.0, 4260000.0, -0.8938414241512638], [1435300992.0, 4280000.0, -0.8994052515663711], [1435302720.0, 4300000.0, -0.9048270524660194], [1435304448.0, 4320000.0, -0.9101059706849957], [1435306176.0, 4340000.0, -0.9152411726209175], [1435307904.0, 4360000.0, -0.9202318473658704], [1435309632.0, 4380000.0, -0.9250772068344579], [1435311360.0, 4400000.0, -0.9297764858882513], [1435313088.0, 4420000.0, -0.934328942456612], [1435314816.0, 4440000.0, -0.9387338576538741], [1435316544.0, 4460000.0, -0.9429905358928645], [1435318272.0, 4480000.0, -0.9470983049947442], [1435320000.0, 4500000.0, -0.9510565162951535], [1435321728.0, 4520000.0, -0.954864544746643], [1435323456.0, 4540000.0, -0.958521789017376], [1435325184.0, 4560000.0, -0.9620276715860859], [1435326912.0, 4580000.0, -0.9653816388332739], [1435328640.0, 4600000.0, -0.9685831611286311], [1435330368.0, 4620000.0, -0.971631732914674], [1435332096.0, 4640000.0, -0.9745268727865772], [1435333824.0, 4660000.0, -0.9772681235681935], [1435335552.0, 4680000.0, -0.9798550523842469], [1435337280.0, 4700000.0, -0.9822872507286886], [1435339008.0, 4720000.0, -0.9845643345292053], [1435340736.0, 4740000.0, -0.986685944207868], [1435342464.0, 4760000.0, -0.988651744737914], [1435344192.0, 4780000.0, -0.9904614256966512], [1435345920.0, 4800000.0, -0.9921147013144778], [1435347648.0, 4820000.0, -0.9936113105200084], [1435349376.0, 4840000.0, -0.9949510169813002], [1435351104.0, 4860000.0, -0.9961336091431725], [1435352832.0, 4880000.0, -0.9971589002606139], [1435354560.0, 4900000.0, -0.9980267284282716], [1435356288.0, 4920000.0, -0.9987369566060175], [1435358016.0, 4940000.0, -0.9992894726405892], [1435359744.0, 4960000.0, -0.9996841892832999], [1435361472.0, 4980000.0, -0.9999210442038161], [1435363200.0, 5000000.0, -1.0], [1435364928.0, 5020000.0, -0.9999210442038161], [1435366656.0, 5040000.0, -0.9996841892832999], [1435368384.0, 5060000.0, -0.9992894726405892], [1435370112.0, 5080000.0, -0.9987369566060175], [1435371840.0, 5100000.0, -0.9980267284282716], [1435373568.0, 5120000.0, -0.9971589002606139], [1435375296.0, 5140000.0, -0.9961336091431725], [1435377024.0, 5160000.0, -0.9949510169813002], [1435378752.0, 5180000.0, -0.9936113105200084], [1435380480.0, 5200000.0, -0.9921147013144779], [1435382208.0, 5220000.0, -0.9904614256966512], [1435383936.0, 5240000.0, -0.9886517447379141], [1435385664.0, 5260000.0, -0.986685944207868], [1435387392.0, 5280000.0, -0.9845643345292053], [1435389120.0, 5300000.0, -0.9822872507286886], [1435390848.0, 5320000.0, -0.9798550523842469], [1435392576.0, 5340000.0, -0.9772681235681935], [1435394304.0, 5360000.0, -0.9745268727865771], [1435396032.0, 5380000.0, -0.9716317329146739], [1435397760.0, 5400000.0, -0.9685831611286311], [1435399488.0, 5420000.0, -0.9653816388332739], [1435401216.0, 5440000.0, -0.9620276715860859], [1435402944.0, 5460000.0, -0.9585217890173758], [1435404672.0, 5480000.0, -0.954864544746643], [1435406400.0, 5500000.0, -0.9510565162951535], [1435408128.0, 5520000.0, -0.9470983049947443], [1435409856.0, 5540000.0, -0.9429905358928644], [1435411584.0, 5560000.0, -0.9387338576538741], [1435413312.0, 5580000.0, -0.9343289424566119], [1435415040.0, 5600000.0, -0.9297764858882512], [1435416768.0, 5620000.0, -0.925077206834458], [1435418496.0, 5640000.0, -0.9202318473658705], [1435420224.0, 5660000.0, -0.9152411726209179], [1435421952.0, 5680000.0, -0.9101059706849959], [1435423680.0, 5700000.0, -0.9048270524660197], [1435425408.0, 5720000.0, -0.8994052515663712], [1435427136.0, 5740000.0, -0.8938414241512641], [1435428864.0, 5760000.0, -0.8881364488135448], [1435430592.0, 5780000.0, -0.8822912264349535], [1435432320.0, 5800000.0, -0.8763066800438637], [1435434048.0, 5820000.0, -0.8701837546695258], [1435435776.0, 5840000.0, -0.8639234171928356], [1435437504.0, 5860000.0, -0.8575266561936525], [1435439232.0, 5880000.0, -0.8509944817946921], [1435440960.0, 5900000.0, -0.8443279255020152], [1435442688.0, 5920000.0, -0.8375280400421418], [1435444416.0, 5940000.0, -0.8305958991958129], [1435446144.0, 5960000.0, -0.8235325976284277], [1435447872.0, 5980000.0, -0.816339250717184], [1435449600.0, 6000000.0, -0.8090169943749476], [1435451328.0, 6020000.0, -0.8015669848708769], [1435453056.0, 6040000.0, -0.7939903986478356], [1435454784.0, 6060000.0, -0.786288432136619], [1435456512.0, 6080000.0, -0.7784623015670236], [1435458240.0, 6100000.0, -0.7705132427757893], [1435459968.0, 6120000.0, -0.7624425110114481], [1435461696.0, 6140000.0, -0.754251380736104], [1435463424.0, 6160000.0, -0.7459411454241822], [1435465152.0, 6180000.0, -0.7375131173581739], [1435466880.0, 6200000.0, -0.7289686274214116], [1435468608.0, 6220000.0, -0.7203090248879072], [1435470336.0, 6240000.0, -0.7115356772092855], [1435472064.0, 6260000.0, -0.7026499697988493], [1435473792.0, 6280000.0, -0.6936533058128049], [1435475520.0, 6300000.0, -0.684547105928689], [1435477248.0, 6320000.0, -0.6753328081210246], [1435478976.0, 6340000.0, -0.6660118674342517], [1435480704.0, 6360000.0, -0.6565857557529564], [1435482432.0, 6380000.0, -0.6470559615694442], [1435484160.0, 6400000.0, -0.6374239897486895], [1435485888.0, 6420000.0, -0.6276913612907002], [1435487616.0, 6440000.0, -0.6178596130903348], [1435489344.0, 6460000.0, -0.6079302976946057], [1435491072.0, 6480000.0, -0.597904983057519], [1435492800.0, 6500000.0, -0.5877852522924732], [1435494528.0, 6520000.0, -0.5775727034222676], [1435496256.0, 6540000.0, -0.5672689491267564], [1435497984.0, 6560000.0, -0.5568756164881878], [1435499712.0, 6580000.0, -0.5463943467342689], [1435501440.0, 6600000.0, -0.5358267949789963], [1435503168.0, 6620000.0, -0.5251746299612953], [1435504896.0, 6640000.0, -0.5144395337815068], [1435506624.0, 6660000.0, -0.503623201635761], [1435508352.0, 6680000.0, -0.4927273415482917], [1435510080.0, 6700000.0, -0.48175367410171527], [1435511808.0, 6720000.0, -0.47070393216533246], [1435513536.0, 6740000.0, -0.45957986062148765], [1435515264.0, 6760000.0, -0.44838321609003196], [1435516992.0, 6780000.0, -0.4371157666509325], [1435518720.0, 6800000.0, -0.42577929156507216], [1435520448.0, 6820000.0, -0.41437558099328436], [1435522176.0, 6840000.0, -0.4029064357136628], [1435523904.0, 6860000.0, -0.3913736668372024], [1435525632.0, 6880000.0, -0.37977909552180183], [1435527360.0, 6900000.0, -0.3681245526846786], [1435529088.0, 6920000.0, -0.35641187871325125], [1435530816.0, 6940000.0, -0.3446429231745175], [1435532544.0, 6960000.0, -0.332819544522987], [1435534272.0, 6980000.0, -0.32094360980720976], [1435536000.0, 7000000.0, -0.30901699437494756], [1435537728.0, 7020000.0, -0.297041581577035], [1435539456.0, 7040000.0, -0.28501926246997694], [1435541184.0, 7060000.0, -0.27295193551732594], [1435542912.0, 7080000.0, -0.26084150628989755], [1435544640.0, 7100000.0, -0.2486898871648553], [1435546368.0, 7120000.0, -0.2364989970237251], [1435548096.0, 7140000.0, -0.2242707609493815], [1435549824.0, 7160000.0, -0.21200710992205485], [1435551552.0, 7180000.0, -0.1997099805144071], [1435553280.0, 7200000.0, -0.18738131458572463], [1435555008.0, 7220000.0, -0.17502305897527595], [1435556736.0, 7240000.0, -0.16263716519488428], [1435558464.0, 7260000.0, -0.15022558912075762], [1435560192.0, 7280000.0, -0.13779029068463852], [1435561920.0, 7300000.0, -0.1253332335643046], [1435563648.0, 7320000.0, -0.11285638487348193], [1435565376.0, 7340000.0, -0.10036171485121503], [1435567104.0, 7360000.0, -0.08785119655074321], [1435568832.0, 7380000.0, -0.07532680552793265], [1435570560.0, 7400000.0, -0.06279051952931321], [1435572288.0, 7420000.0, -0.05024431817977017], [1435574016.0, 7440000.0, -0.03769018266993504], [1435575744.0, 7460000.0, -0.025130095443337875], [1435577472.0, 7480000.0, -0.012566039883352897], [1435579200.0, 7500000.0, -1.8369701987210297e-16], [1435580928.0, 7520000.0, 0.012566039883352531], [1435582656.0, 7540000.0, 0.025130095443337507], [1435584384.0, 7560000.0, 0.03769018266993467], [1435586112.0, 7580000.0, 0.0502443181797698], [1435587840.0, 7600000.0, 0.06279051952931283], [1435589568.0, 7620000.0, 0.07532680552793229], [1435591296.0, 7640000.0, 0.08785119655074285], [1435593024.0, 7660000.0, 0.10036171485121467], [1435594752.0, 7680000.0, 0.11285638487348157], [1435596480.0, 7700000.0, 0.12533323356430423], [1435598208.0, 7720000.0, 0.13779029068463816], [1435599936.0, 7740000.0, 0.15022558912075726], [1435601664.0, 7760000.0, 0.16263716519488391], [1435603392.0, 7780000.0, 0.1750230589752756], [1435605120.0, 7800000.0, 0.18738131458572427], [1435606848.0, 7820000.0, 0.19970998051440675], [1435608576.0, 7840000.0, 0.2120071099220545], [1435610304.0, 7860000.0, 0.22427076094938114], [1435612032.0, 7880000.0, 0.23649899702372473], [1435613760.0, 7900000.0, 0.24868988716485493], [1435615488.0, 7920000.0, 0.2608415062898972], [1435617216.0, 7940000.0, 0.2729519355173256], [1435618944.0, 7960000.0, 0.2850192624699766], [1435620672.0, 7980000.0, 0.29704158157703464], [1435622400.0, 8000000.0, 0.30901699437494723], [1435624128.0, 8020000.0, 0.32094360980720943], [1435625856.0, 8040000.0, 0.3328195445229867], [1435627584.0, 8060000.0, 0.34464292317451717], [1435629312.0, 8080000.0, 0.3564118787132509], [1435631040.0, 8100000.0, 0.36812455268467825], [1435632768.0, 8120000.0, 0.3797790955218015], [1435634496.0, 8140000.0, 0.3913736668372021], [1435636224.0, 8160000.0, 0.40290643571366247], [1435637952.0, 8180000.0, 0.41437558099328403], [1435639680.0, 8200000.0, 0.4257792915650718], [1435641408.0, 8220000.0, 0.43711576665093216], [1435643136.0, 8240000.0, 0.4483832160900316], [1435644864.0, 8260000.0, 0.4595798606214873], [1435646592.0, 8280000.0, 0.47070393216533213], [1435648320.0, 8300000.0, 0.48175367410171493], [1435650048.0, 8320000.0, 0.49272734154829134], [1435651776.0, 8340000.0, 0.5036232016357607], [1435653504.0, 8360000.0, 0.5144395337815064], [1435655232.0, 8380000.0, 0.5251746299612949], [1435656960.0, 8400000.0, 0.535826794978996], [1435658688.0, 8420000.0, 0.5463943467342686], [1435660416.0, 8440000.0, 0.5568756164881876], [1435662144.0, 8460000.0, 0.5672689491267562], [1435663872.0, 8480000.0, 0.5775727034222673], [1435665600.0, 8500000.0, 0.5877852522924729], [1435667328.0, 8520000.0, 0.5979049830575188], [1435669056.0, 8540000.0, 0.6079302976946054], [1435670784.0, 8560000.0, 0.6178596130903344], [1435672512.0, 8580000.0, 0.6276913612906999], [1435674240.0, 8600000.0, 0.6374239897486893], [1435675968.0, 8620000.0, 0.647055961569444], [1435677696.0, 8640000.0, 0.6565857557529562], [1435679424.0, 8660000.0, 0.6660118674342514], [1435681152.0, 8680000.0, 0.6753328081210244], [1435682880.0, 8700000.0, 0.6845471059286886], [1435684608.0, 8720000.0, 0.693653305812805], [1435686336.0, 8740000.0, 0.7026499697988493], [1435688064.0, 8760000.0, 0.7115356772092849], [1435689792.0, 8780000.0, 0.7203090248879065], [1435691520.0, 8800000.0, 0.7289686274214112], [1435693248.0, 8820000.0, 0.7375131173581737], [1435694976.0, 8840000.0, 0.745941145424182], [1435696704.0, 8860000.0, 0.7542513807361038], [1435698432.0, 8880000.0, 0.7624425110114479], [1435700160.0, 8900000.0, 0.7705132427757894], [1435701888.0, 8920000.0, 0.7784623015670236], [1435703616.0, 8940000.0, 0.7862884321366186], [1435705344.0, 8960000.0, 0.793990398647835], [1435707072.0, 8980000.0, 0.8015669848708764], [1435708800.0, 9000000.0, 0.8090169943749473], [1435710528.0, 9020000.0, 0.8163392507171839], [1435712256.0, 9040000.0, 0.8235325976284275], [1435713984.0, 9060000.0, 0.8305958991958127], [1435715712.0, 9080000.0, 0.8375280400421419], [1435717440.0, 9100000.0, 0.8443279255020153], [1435719168.0, 9120000.0, 0.8509944817946921], [1435720896.0, 9140000.0, 0.8575266561936521], [1435722624.0, 9160000.0, 0.8639234171928352], [1435724352.0, 9180000.0, 0.8701837546695256], [1435726080.0, 9200000.0, 0.8763066800438636], [1435727808.0, 9220000.0, 0.8822912264349533], [1435729536.0, 9240000.0, 0.8881364488135446], [1435731264.0, 9260000.0, 0.8938414241512639], [1435732992.0, 9280000.0, 0.8994052515663712], [1435734720.0, 9300000.0, 0.9048270524660197], [1435736448.0, 9320000.0, 0.9101059706849955], [1435738176.0, 9340000.0, 0.9152411726209175], [1435739904.0, 9360000.0, 0.9202318473658703], [1435741632.0, 9380000.0, 0.9250772068344577], [1435743360.0, 9400000.0, 0.9297764858882511], [1435745088.0, 9420000.0, 0.9343289424566118], [1435746816.0, 9440000.0, 0.9387338576538738], [1435748544.0, 9460000.0, 0.9429905358928643], [1435750272.0, 9480000.0, 0.9470983049947441], [1435752000.0, 9500000.0, 0.9510565162951535], [1435753728.0, 9520000.0, 0.954864544746643], [1435755456.0, 9540000.0, 0.9585217890173756], [1435757184.0, 9560000.0, 0.9620276715860857], [1435758912.0, 9580000.0, 0.9653816388332737], [1435760640.0, 9600000.0, 0.968583161128631], [1435762368.0, 9620000.0, 0.9716317329146739], [1435764096.0, 9640000.0, 0.974526872786577], [1435765824.0, 9660000.0, 0.9772681235681934], [1435767552.0, 9680000.0, 0.9798550523842469], [1435769280.0, 9700000.0, 0.9822872507286887], [1435771008.0, 9720000.0, 0.9845643345292054], [1435772736.0, 9740000.0, 0.9866859442078679], [1435774464.0, 9760000.0, 0.988651744737914], [1435776192.0, 9780000.0, 0.9904614256966512], [1435777920.0, 9800000.0, 0.9921147013144778], [1435779648.0, 9820000.0, 0.9936113105200084], [1435781376.0, 9840000.0, 0.9949510169813002], [1435783104.0, 9860000.0, 0.9961336091431725], [1435784832.0, 9880000.0, 0.9971589002606139], [1435786560.0, 9900000.0, 0.9980267284282716], [1435788288.0, 9920000.0, 0.9987369566060175], [1435790016.0, 9940000.0, 0.9992894726405892], [1435791744.0, 9960000.0, 0.9996841892832999], [1435793472.0, 9980000.0, 0.9999210442038161], [1435795200.0, 10000000.0, 1.0], [1435796928.0, 10020000.0, 0.9999210442038161], [1435798656.0, 10040000.0, 0.9996841892832999], [1435800384.0, 10060000.0, 0.9992894726405892], [1435802112.0, 10080000.0, 0.9987369566060175], [1435803840.0, 10100000.0, 0.9980267284282716], [1435805568.0, 10120000.0, 0.9971589002606139], [1435807296.0, 10140000.0, 0.9961336091431725], [1435809024.0, 10160000.0, 0.9949510169813002], [1435810752.0, 10180000.0, 0.9936113105200084], [1435812480.0, 10200000.0, 0.9921147013144779], [1435814208.0, 10220000.0, 0.9904614256966512], [1435815936.0, 10240000.0, 0.988651744737914], [1435817664.0, 10260000.0, 0.986685944207868], [1435819392.0, 10280000.0, 0.9845643345292054], [1435821120.0, 10300000.0, 0.9822872507286887], [1435822848.0, 10320000.0, 0.979855052384247], [1435824576.0, 10340000.0, 0.9772681235681935], [1435826304.0, 10360000.0, 0.9745268727865771], [1435828032.0, 10380000.0, 0.971631732914674], [1435829760.0, 10400000.0, 0.9685831611286311], [1435831488.0, 10420000.0, 0.9653816388332739], [1435833216.0, 10440000.0, 0.9620276715860858], [1435834944.0, 10460000.0, 0.9585217890173757], [1435836672.0, 10480000.0, 0.9548645447466431], [1435838400.0, 10500000.0, 0.9510565162951536], [1435840128.0, 10520000.0, 0.9470983049947443], [1435841856.0, 10540000.0, 0.9429905358928645], [1435843584.0, 10560000.0, 0.9387338576538741], [1435845312.0, 10580000.0, 0.934328942456612], [1435847040.0, 10600000.0, 0.9297764858882513], [1435848768.0, 10620000.0, 0.9250772068344579], [1435850496.0, 10640000.0, 0.9202318473658702], [1435852224.0, 10660000.0, 0.9152411726209176], [1435853952.0, 10680000.0, 0.9101059706849958], [1435855680.0, 10700000.0, 0.9048270524660196], [1435857408.0, 10720000.0, 0.8994052515663711], [1435859136.0, 10740000.0, 0.8938414241512638], [1435860864.0, 10760000.0, 0.8881364488135444], [1435862592.0, 10780000.0, 0.8822912264349532], [1435864320.0, 10800000.0, 0.8763066800438634], [1435866048.0, 10820000.0, 0.8701837546695254], [1435867776.0, 10840000.0, 0.8639234171928354], [1435869504.0, 10860000.0, 0.8575266561936523], [1435871232.0, 10880000.0, 0.8509944817946918], [1435872960.0, 10900000.0, 0.8443279255020151], [1435874688.0, 10920000.0, 0.8375280400421417], [1435876416.0, 10940000.0, 0.8305958991958124], [1435878144.0, 10960000.0, 0.8235325976284272], [1435879872.0, 10980000.0, 0.8163392507171836], [1435881600.0, 11000000.0, 0.809016994374947], [1435883328.0, 11020000.0, 0.8015669848708762], [1435885056.0, 11040000.0, 0.7939903986478354], [1435886784.0, 11060000.0, 0.7862884321366189], [1435888512.0, 11080000.0, 0.7784623015670233], [1435890240.0, 11100000.0, 0.770513242775789], [1435891968.0, 11120000.0, 0.7624425110114477], [1435893696.0, 11140000.0, 0.7542513807361035], [1435895424.0, 11160000.0, 0.7459411454241818], [1435897152.0, 11180000.0, 0.7375131173581735], [1435898880.0, 11200000.0, 0.728968627421411], [1435900608.0, 11220000.0, 0.7203090248879069], [1435902336.0, 11240000.0, 0.7115356772092852], [1435904064.0, 11260000.0, 0.7026499697988496], [1435905792.0, 11280000.0, 0.6936533058128054], [1435907520.0, 11300000.0, 0.6845471059286896], [1435909248.0, 11320000.0, 0.6753328081210254], [1435910976.0, 11340000.0, 0.6660118674342524], [1435912704.0, 11360000.0, 0.6565857557529572], [1435914432.0, 11380000.0, 0.647055961569445], [1435916160.0, 11400000.0, 0.6374239897486903], [1435917888.0, 11420000.0, 0.627691361290701], [1435919616.0, 11440000.0, 0.6178596130903348], [1435921344.0, 11460000.0, 0.6079302976946058], [1435923072.0, 11480000.0, 0.5979049830575199], [1435924800.0, 11500000.0, 0.587785252292474], [1435926528.0, 11520000.0, 0.5775727034222684], [1435928256.0, 11540000.0, 0.5672689491267573], [1435929984.0, 11560000.0, 0.5568756164881887], [1435931712.0, 11580000.0, 0.5463943467342697], [1435933440.0, 11600000.0, 0.5358267949789972], [1435935168.0, 11620000.0, 0.5251746299612962], [1435936896.0, 11640000.0, 0.5144395337815069], [1435938624.0, 11660000.0, 0.5036232016357611], [1435940352.0, 11680000.0, 0.4927273415482925], [1435942080.0, 11700000.0, 0.48175367410171616], [1435943808.0, 11720000.0, 0.47070393216533335], [1435945536.0, 11740000.0, 0.45957986062148853], [1435947264.0, 11760000.0, 0.44838321609003284], [1435948992.0, 11780000.0, 0.43711576665093343], [1435950720.0, 11800000.0, 0.42577929156507305], [1435952448.0, 11820000.0, 0.4143755809932845], [1435954176.0, 11840000.0, 0.4029064357136629], [1435955904.0, 11860000.0, 0.39137366683720337], [1435957632.0, 11880000.0, 0.37977909552180195], [1435959360.0, 11900000.0, 0.36812455268467875], [1435961088.0, 11920000.0, 0.35641187871325136], [1435962816.0, 11940000.0, 0.3446429231745176], [1435964544.0, 11960000.0, 0.3328195445229871], [1435966272.0, 11980000.0, 0.3209436098072099], [1435968000.0, 12000000.0, 0.30901699437494773], [1435969728.0, 12020000.0, 0.2970415815770351], [1435971456.0, 12040000.0, 0.28501926246997705], [1435973184.0, 12060000.0, 0.27295193551732605], [1435974912.0, 12080000.0, 0.26084150628989766], [1435976640.0, 12100000.0, 0.24868988716485543], [1435978368.0, 12120000.0, 0.2364989970237252], [1435980096.0, 12140000.0, 0.22427076094938161], [1435981824.0, 12160000.0, 0.21200710992205496], [1435983552.0, 12180000.0, 0.19970998051440725], [1435985280.0, 12200000.0, 0.18738131458572474], [1435987008.0, 12220000.0, 0.17502305897527606], [1435988736.0, 12240000.0, 0.1626371651948844], [1435990464.0, 12260000.0, 0.15022558912075773], [1435992192.0, 12280000.0, 0.13779029068463863], [1435993920.0, 12300000.0, 0.12533323356430473], [1435995648.0, 12320000.0, 0.11285638487348205], [1435997376.0, 12340000.0, 0.10036171485121516], [1435999104.0, 12360000.0, 0.08785119655074333], [1436000832.0, 12380000.0, 0.07532680552793278], [1436002560.0, 12400000.0, 0.06279051952931332], [1436004288.0, 12420000.0, 0.050244318179770285], [1436006016.0, 12440000.0, 0.037690182669935166], [1436007744.0, 12460000.0, 0.025130095443337996], [1436009472.0, 12480000.0, 0.01256603988335302], [1436011200.0, 12500000.0, 3.061616997868383e-16], [1436012928.0, 12520000.0, -0.012566039883352408], [1436014656.0, 12540000.0, -0.025130095443337386], [1436016384.0, 12560000.0, -0.03769018266993455], [1436018112.0, 12580000.0, -0.050244318179769674], [1436019840.0, 12600000.0, -0.06279051952931271], [1436021568.0, 12620000.0, -0.07532680552793217], [1436023296.0, 12640000.0, -0.08785119655074272], [1436025024.0, 12660000.0, -0.10036171485121455], [1436026752.0, 12680000.0, -0.11285638487348144], [1436028480.0, 12700000.0, -0.12533323356430412], [1436030208.0, 12720000.0, -0.13779029068463805], [1436031936.0, 12740000.0, -0.15022558912075626], [1436033664.0, 12760000.0, -0.16263716519488378], [1436035392.0, 12780000.0, -0.17502305897527545], [1436037120.0, 12800000.0, -0.18738131458572502], [1436038848.0, 12820000.0, -0.19970998051440664], [1436040576.0, 12840000.0, -0.21200710992205524], [1436042304.0, 12860000.0, -0.224270760949381], [1436044032.0, 12880000.0, -0.23649899702372376], [1436045760.0, 12900000.0, -0.24868988716485482], [1436047488.0, 12920000.0, -0.2608415062898962], [1436049216.0, 12940000.0, -0.2729519355173255], [1436050944.0, 12960000.0, -0.2850192624699756], [1436052672.0, 12980000.0, -0.29704158157703536], [1436054400.0, 13000000.0, -0.3090169943749471], [1436056128.0, 13020000.0, -0.32094360980721015], [1436057856.0, 13040000.0, -0.33281954452298657], [1436059584.0, 13060000.0, -0.3446429231745162], [1436061312.0, 13080000.0, -0.3564118787132508], [1436063040.0, 13100000.0, -0.3681245526846773], [1436064768.0, 13120000.0, -0.3797790955218014], [1436066496.0, 13140000.0, -0.391373666837202], [1436068224.0, 13160000.0, -0.40290643571366314], [1436069952.0, 13180000.0, -0.4143755809932839], [1436071680.0, 13200000.0, -0.4257792915650733], [1436073408.0, 13220000.0, -0.4371157666509329], [1436075136.0, 13240000.0, -0.4483832160900331], [1436076864.0, 13260000.0, -0.45957986062148803], [1436078592.0, 13280000.0, -0.470703932165332], [1436080320.0, 13300000.0, -0.4817536741017156], [1436082048.0, 13320000.0, -0.49272734154829123], [1436083776.0, 13340000.0, -0.5036232016357614], [1436085504.0, 13360000.0, -0.5144395337815063], [1436087232.0, 13380000.0, -0.5251746299612964], [1436088960.0, 13400000.0, -0.5358267949789967], [1436090688.0, 13420000.0, -0.5463943467342699], [1436092416.0, 13440000.0, -0.5568756164881882], [1436094144.0, 13460000.0, -0.5672689491267561], [1436095872.0, 13480000.0, -0.577572703422268], [1436097600.0, 13500000.0, -0.5877852522924729], [1436099328.0, 13520000.0, -0.5979049830575194], [1436101056.0, 13540000.0, -0.6079302976946053], [1436102784.0, 13560000.0, -0.617859613090335], [1436104512.0, 13580000.0, -0.6276913612907006], [1436106240.0, 13600000.0, -0.6374239897486905], [1436107968.0, 13620000.0, -0.6470559615694446], [1436109696.0, 13640000.0, -0.6565857557529561], [1436111424.0, 13660000.0, -0.666011867434252], [1436113152.0, 13680000.0, -0.6753328081210243], [1436114880.0, 13700000.0, -0.6845471059286892], [1436116608.0, 13720000.0, -0.6936533058128049], [1436118336.0, 13740000.0, -0.7026499697988499], [1436120064.0, 13760000.0, -0.7115356772092842], [1436121792.0, 13780000.0, -0.7203090248879065], [1436123520.0, 13800000.0, -0.7289686274214106], [1436125248.0, 13820000.0, -0.7375131173581736], [1436126976.0, 13840000.0, -0.7459411454241813], [1436128704.0, 13860000.0, -0.7542513807361036], [1436130432.0, 13880000.0, -0.7624425110114472], [1436132160.0, 13900000.0, -0.7705132427757881], [1436133888.0, 13920000.0, -0.7784623015670229], [1436135616.0, 13940000.0, -0.7862884321366179], [1436137344.0, 13960000.0, -0.7939903986478349], [1436139072.0, 13980000.0, -0.8015669848708757], [1436140800.0, 14000000.0, -0.8090169943749472], [1436142528.0, 14020000.0, -0.8163392507171833], [1436144256.0, 14040000.0, -0.8235325976284273], [1436145984.0, 14060000.0, -0.8305958991958121], [1436147712.0, 14080000.0, -0.8375280400421408], [1436149440.0, 14100000.0, -0.8443279255020147], [1436151168.0, 14120000.0, -0.8509944817946911], [1436152896.0, 14140000.0, -0.857526656193652], [1436154624.0, 14160000.0, -0.8639234171928347], [1436156352.0, 14180000.0, -0.8701837546695256], [1436158080.0, 14200000.0, -0.876306680043863], [1436159808.0, 14220000.0, -0.8822912264349533], [1436161536.0, 14240000.0, -0.8881364488135441], [1436163264.0, 14260000.0, -0.893841424151263], [1436164992.0, 14280000.0, -0.8994052515663707], [1436166720.0, 14300000.0, -0.9048270524660189], [1436168448.0, 14320000.0, -0.9101059706849955], [1436170176.0, 14340000.0, -0.9152411726209171], [1436171904.0, 14360000.0, -0.9202318473658703], [1436173632.0, 14380000.0, -0.9250772068344577], [1436175360.0, 14400000.0, -0.9297764858882515], [1436177088.0, 14420000.0, -0.9343289424566118], [1436178816.0, 14440000.0, -0.9387338576538742], [1436180544.0, 14460000.0, -0.9429905358928643], [1436182272.0, 14480000.0, -0.9470983049947439], [1436184000.0, 14500000.0, -0.9510565162951534], [1436185728.0, 14520000.0, -0.9548645447466426], [1436187456.0, 14540000.0, -0.9585217890173758], [1436189184.0, 14560000.0, -0.9620276715860856], [1436190912.0, 14580000.0, -0.9653816388332739], [1436192640.0, 14600000.0, -0.968583161128631], [1436194368.0, 14620000.0, -0.971631732914674], [1436196096.0, 14640000.0, -0.974526872786577], [1436197824.0, 14660000.0, -0.9772681235681931], [1436199552.0, 14680000.0, -0.9798550523842469], [1436201280.0, 14700000.0, -0.9822872507286885], [1436203008.0, 14720000.0, -0.9845643345292053], [1436204736.0, 14740000.0, -0.9866859442078679], [1436206464.0, 14760000.0, -0.9886517447379141], [1436208192.0, 14780000.0, -0.9904614256966511], [1436209920.0, 14800000.0, -0.9921147013144779], [1436211648.0, 14820000.0, -0.9936113105200084], [1436213376.0, 14840000.0, -0.9949510169813001], [1436215104.0, 14860000.0, -0.9961336091431724], [1436216832.0, 14880000.0, -0.9971589002606138], [1436218560.0, 14900000.0, -0.9980267284282716], [1436220288.0, 14920000.0, -0.9987369566060175], [1436222016.0, 14940000.0, -0.9992894726405892], [1436223744.0, 14960000.0, -0.9996841892832999], [1436225472.0, 14980000.0, -0.9999210442038161], [1436227200.0, 15000000.0, -1.0], [1436228928.0, 15020000.0, -0.9999210442038161], [1436230656.0, 15040000.0, -0.9996841892832999], [1436232384.0, 15060000.0, -0.9992894726405893], [1436234112.0, 15080000.0, -0.9987369566060175], [1436235840.0, 15100000.0, -0.9980267284282716], [1436237568.0, 15120000.0, -0.9971589002606139], [1436239296.0, 15140000.0, -0.9961336091431725], [1436241024.0, 15160000.0, -0.9949510169813001], [1436242752.0, 15180000.0, -0.9936113105200084], [1436244480.0, 15200000.0, -0.992114701314478], [1436246208.0, 15220000.0, -0.9904614256966512], [1436247936.0, 15240000.0, -0.9886517447379142], [1436249664.0, 15260000.0, -0.986685944207868], [1436251392.0, 15280000.0, -0.9845643345292054], [1436253120.0, 15300000.0, -0.9822872507286886], [1436254848.0, 15320000.0, -0.979855052384247], [1436256576.0, 15340000.0, -0.9772681235681934], [1436258304.0, 15360000.0, -0.9745268727865772], [1436260032.0, 15380000.0, -0.9716317329146742], [1436261760.0, 15400000.0, -0.9685831611286311], [1436263488.0, 15420000.0, -0.9653816388332741], [1436265216.0, 15440000.0, -0.9620276715860858], [1436266944.0, 15460000.0, -0.9585217890173761], [1436268672.0, 15480000.0, -0.9548645447466428], [1436270400.0, 15500000.0, -0.9510565162951536], [1436272128.0, 15520000.0, -0.9470983049947441], [1436273856.0, 15540000.0, -0.9429905358928645], [1436275584.0, 15560000.0, -0.9387338576538744], [1436277312.0, 15580000.0, -0.934328942456612], [1436279040.0, 15600000.0, -0.9297764858882517], [1436280768.0, 15620000.0, -0.9250772068344579], [1436282496.0, 15640000.0, -0.9202318473658705], [1436284224.0, 15660000.0, -0.9152411726209174], [1436285952.0, 15680000.0, -0.9101059706849958], [1436287680.0, 15700000.0, -0.9048270524660192], [1436289408.0, 15720000.0, -0.8994052515663711], [1436291136.0, 15740000.0, -0.8938414241512633], [1436292864.0, 15760000.0, -0.8881364488135445], [1436294592.0, 15780000.0, -0.8822912264349536], [1436296320.0, 15800000.0, -0.8763066800438635], [1436298048.0, 15820000.0, -0.8701837546695259], [1436299776.0, 15840000.0, -0.863923417192835], [1436301504.0, 15860000.0, -0.8575266561936524], [1436303232.0, 15880000.0, -0.8509944817946915], [1436304960.0, 15900000.0, -0.8443279255020151], [1436306688.0, 15920000.0, -0.8375280400421412], [1436308416.0, 15940000.0, -0.8305958991958126], [1436310144.0, 15960000.0, -0.8235325976284278], [1436311872.0, 15980000.0, -0.8163392507171837], [1436313600.0, 16000000.0, -0.8090169943749477], [1436315328.0, 16020000.0, -0.8015669848708762], [1436317056.0, 16040000.0, -0.7939903986478355], [1436318784.0, 16060000.0, -0.7862884321366184], [1436320512.0, 16080000.0, -0.7784623015670235], [1436322240.0, 16100000.0, -0.7705132427757886], [1436323968.0, 16120000.0, -0.7624425110114477], [1436325696.0, 16140000.0, -0.7542513807361042], [1436327424.0, 16160000.0, -0.7459411454241819], [1436329152.0, 16180000.0, -0.7375131173581742], [1436330880.0, 16200000.0, -0.7289686274214111], [1436332608.0, 16220000.0, -0.7203090248879069], [1436334336.0, 16240000.0, -0.7115356772092847], [1436336064.0, 16260000.0, -0.7026499697988504], [1436337792.0, 16280000.0, -0.6936533058128055], [1436339520.0, 16300000.0, -0.6845471059286897], [1436341248.0, 16320000.0, -0.6753328081210248], [1436342976.0, 16340000.0, -0.6660118674342526], [1436344704.0, 16360000.0, -0.6565857557529566], [1436346432.0, 16380000.0, -0.6470559615694451], [1436348160.0, 16400000.0, -0.6374239897486911], [1436349888.0, 16420000.0, -0.6276913612907011], [1436351616.0, 16440000.0, -0.6178596130903357], [1436353344.0, 16460000.0, -0.6079302976946059], [1436355072.0, 16480000.0, -0.59790498305752], [1436356800.0, 16500000.0, -0.5877852522924735], [1436358528.0, 16520000.0, -0.5775727034222685], [1436360256.0, 16540000.0, -0.5672689491267566], [1436361984.0, 16560000.0, -0.5568756164881888], [1436363712.0, 16580000.0, -0.5463943467342706], [1436365440.0, 16600000.0, -0.5358267949789972], [1436367168.0, 16620000.0, -0.525174629961297], [1436368896.0, 16640000.0, -0.514439533781507], [1436370624.0, 16660000.0, -0.503623201635762], [1436372352.0, 16680000.0, -0.49272734154829184], [1436374080.0, 16700000.0, -0.48175367410171627], [1436375808.0, 16720000.0, -0.4707039321653327], [1436377536.0, 16740000.0, -0.45957986062148865], [1436379264.0, 16760000.0, -0.4483832160900338], [1436380992.0, 16780000.0, -0.43711576665093355], [1436382720.0, 16800000.0, -0.425779291565074], [1436384448.0, 16820000.0, -0.4143755809932846], [1436386176.0, 16840000.0, -0.4029064357136638], [1436387904.0, 16860000.0, -0.39137366683720265], [1436389632.0, 16880000.0, -0.37977909552180206], [1436391360.0, 16900000.0, -0.36812455268467803], [1436393088.0, 16920000.0, -0.3564118787132515], [1436394816.0, 16940000.0, -0.3446429231745169], [1436396544.0, 16960000.0, -0.33281954452298723], [1436398272.0, 16980000.0, -0.3209436098072108], [1436400000.0, 17000000.0, -0.30901699437494784], [1436401728.0, 17020000.0, -0.29704158157703603], [1436403456.0, 17040000.0, -0.28501926246997633], [1436405184.0, 17060000.0, -0.27295193551732616], [1436406912.0, 17080000.0, -0.26084150628989694], [1436408640.0, 17100000.0, -0.24868988716485554], [1436410368.0, 17120000.0, -0.23649899702372448], [1436412096.0, 17140000.0, -0.22427076094938173], [1436413824.0, 17160000.0, -0.21200710992205596], [1436415552.0, 17180000.0, -0.19970998051440736], [1436417280.0, 17200000.0, -0.18738131458572574], [1436419008.0, 17220000.0, -0.17502305897527617], [1436420736.0, 17240000.0, -0.1626371651948845], [1436422464.0, 17260000.0, -0.15022558912075698], [1436424192.0, 17280000.0, -0.13779029068463877], [1436425920.0, 17300000.0, -0.12533323356430395], [1436427648.0, 17320000.0, -0.11285638487348218], [1436429376.0, 17340000.0, -0.10036171485121616], [1436431104.0, 17360000.0, -0.08785119655074346], [1436432832.0, 17380000.0, -0.07532680552793379], [1436434560.0, 17400000.0, -0.06279051952931344], [1436436288.0, 17420000.0, -0.05024431817977041], [1436438016.0, 17440000.0, -0.037690182669934395], [1436439744.0, 17460000.0, -0.025130095443338118], [1436441472.0, 17480000.0, -0.012566039883352255], [1436443200.0, 17500000.0, -4.286263797015736e-16], [1436444928.0, 17520000.0, 0.012566039883351397], [1436446656.0, 17540000.0, 0.02513009544333726], [1436448384.0, 17560000.0, 0.03769018266993354], [1436450112.0, 17580000.0, 0.05024431817976955], [1436451840.0, 17600000.0, 0.0627905195293126], [1436453568.0, 17620000.0, 0.07532680552793293], [1436455296.0, 17640000.0, 0.08785119655074261], [1436457024.0, 17660000.0, 0.10036171485121531], [1436458752.0, 17680000.0, 0.11285638487348133], [1436460480.0, 17700000.0, 0.12533323356430312], [1436462208.0, 17720000.0, 0.1377902906846379], [1436463936.0, 17740000.0, 0.15022558912075612], [1436465664.0, 17760000.0, 0.16263716519488366], [1436467392.0, 17780000.0, 0.17502305897527534], [1436469120.0, 17800000.0, 0.1873813145857249], [1436470848.0, 17820000.0, 0.19970998051440653], [1436472576.0, 17840000.0, 0.21200710992205513], [1436474304.0, 17860000.0, 0.2242707609493809], [1436476032.0, 17880000.0, 0.23649899702372365], [1436477760.0, 17900000.0, 0.2486898871648547], [1436479488.0, 17920000.0, 0.2608415062898961], [1436481216.0, 17940000.0, 0.2729519355173254], [1436482944.0, 17960000.0, 0.2850192624699755], [1436484672.0, 17980000.0, 0.29704158157703525], [1436486400.0, 18000000.0, 0.309016994374947], [1436488128.0, 18020000.0, 0.32094360980721004], [1436489856.0, 18040000.0, 0.3328195445229864], [1436491584.0, 18060000.0, 0.3446429231745161], [1436493312.0, 18080000.0, 0.3564118787132507], [1436495040.0, 18100000.0, 0.3681245526846772], [1436496768.0, 18120000.0, 0.3797790955218013], [1436498496.0, 18140000.0, 0.3913736668372019], [1436500224.0, 18160000.0, 0.402906435713663], [1436501952.0, 18180000.0, 0.4143755809932838], [1436503680.0, 18200000.0, 0.4257792915650732], [1436505408.0, 18220000.0, 0.43711576665093277], [1436507136.0, 18240000.0, 0.448383216090033], [1436508864.0, 18260000.0, 0.4595798606214879], [1436510592.0, 18280000.0, 0.4707039321653319], [1436512320.0, 18300000.0, 0.4817536741017155], [1436514048.0, 18320000.0, 0.4927273415482911], [1436515776.0, 18340000.0, 0.5036232016357612], [1436517504.0, 18360000.0, 0.5144395337815062], [1436519232.0, 18380000.0, 0.5251746299612963], [1436520960.0, 18400000.0, 0.5358267949789965], [1436522688.0, 18420000.0, 0.5463943467342698], [1436524416.0, 18440000.0, 0.5568756164881881], [1436526144.0, 18460000.0, 0.567268949126756], [1436527872.0, 18480000.0, 0.5775727034222679], [1436529600.0, 18500000.0, 0.5877852522924728], [1436531328.0, 18520000.0, 0.5979049830575193], [1436533056.0, 18540000.0, 0.6079302976946052], [1436534784.0, 18560000.0, 0.617859613090335], [1436536512.0, 18580000.0, 0.6276913612907005], [1436538240.0, 18600000.0, 0.6374239897486904], [1436539968.0, 18620000.0, 0.6470559615694444], [1436541696.0, 18640000.0, 0.656585755752956], [1436543424.0, 18660000.0, 0.6660118674342519], [1436545152.0, 18680000.0, 0.6753328081210241], [1436546880.0, 18700000.0, 0.6845471059286892], [1436548608.0, 18720000.0, 0.6936533058128048], [1436550336.0, 18740000.0, 0.7026499697988497], [1436552064.0, 18760000.0, 0.7115356772092841], [1436553792.0, 18780000.0, 0.7203090248879064], [1436555520.0, 18800000.0, 0.7289686274214104], [1436557248.0, 18820000.0, 0.7375131173581735], [1436558976.0, 18840000.0, 0.7459411454241812], [1436560704.0, 18860000.0, 0.7542513807361036], [1436562432.0, 18880000.0, 0.7624425110114471], [1436564160.0, 18900000.0, 0.770513242775788], [1436565888.0, 18920000.0, 0.7784623015670229], [1436567616.0, 18940000.0, 0.7862884321366178], [1436569344.0, 18960000.0, 0.7939903986478349], [1436571072.0, 18980000.0, 0.8015669848708757], [1436572800.0, 19000000.0, 0.8090169943749471], [1436574528.0, 19020000.0, 0.8163392507171833], [1436576256.0, 19040000.0, 0.8235325976284272], [1436577984.0, 19060000.0, 0.8305958991958121], [1436579712.0, 19080000.0, 0.8375280400421408], [1436581440.0, 19100000.0, 0.8443279255020146], [1436583168.0, 19120000.0, 0.8509944817946911], [1436584896.0, 19140000.0, 0.857526656193652], [1436586624.0, 19160000.0, 0.8639234171928346], [1436588352.0, 19180000.0, 0.8701837546695255], [1436590080.0, 19200000.0, 0.876306680043863], [1436591808.0, 19220000.0, 0.8822912264349532], [1436593536.0, 19240000.0, 0.888136448813544], [1436595264.0, 19260000.0, 0.893841424151263], [1436596992.0, 19280000.0, 0.8994052515663707], [1436598720.0, 19300000.0, 0.9048270524660189], [1436600448.0, 19320000.0, 0.9101059706849954], [1436602176.0, 19340000.0, 0.915241172620917], [1436603904.0, 19360000.0, 0.9202318473658702], [1436605632.0, 19380000.0, 0.9250772068344576], [1436607360.0, 19400000.0, 0.9297764858882513], [1436609088.0, 19420000.0, 0.9343289424566117], [1436610816.0, 19440000.0, 0.9387338576538741], [1436612544.0, 19460000.0, 0.9429905358928642], [1436614272.0, 19480000.0, 0.9470983049947438], [1436616000.0, 19500000.0, 0.9510565162951534], [1436617728.0, 19520000.0, 0.9548645447466426], [1436619456.0, 19540000.0, 0.9585217890173758], [1436621184.0, 19560000.0, 0.9620276715860856], [1436622912.0, 19580000.0, 0.9653816388332739], [1436624640.0, 19600000.0, 0.968583161128631], [1436626368.0, 19620000.0, 0.971631732914674], [1436628096.0, 19640000.0, 0.974526872786577], [1436629824.0, 19660000.0, 0.9772681235681931], [1436631552.0, 19680000.0, 0.9798550523842467], [1436633280.0, 19700000.0, 0.9822872507286885], [1436635008.0, 19720000.0, 0.9845643345292053], [1436636736.0, 19740000.0, 0.9866859442078679], [1436638464.0, 19760000.0, 0.9886517447379141], [1436640192.0, 19780000.0, 0.9904614256966511], [1436641920.0, 19800000.0, 0.9921147013144779], [1436643648.0, 19820000.0, 0.9936113105200084], [1436645376.0, 19840000.0, 0.9949510169813001], [1436647104.0, 19860000.0, 0.9961336091431724], [1436648832.0, 19880000.0, 0.9971589002606138], [1436650560.0, 19900000.0, 0.9980267284282716], [1436652288.0, 19920000.0, 0.9987369566060175], [1436654016.0, 19940000.0, 0.9992894726405892], [1436655744.0, 19960000.0, 0.9996841892832999], [1436657472.0, 19980000.0, 0.9999210442038161], [1436659200.0, 20000000.0, 1.0], [1436660928.0, 20020000.0, 0.9999210442038161], [1436662656.0, 20040000.0, 0.9996841892832999], [1436664384.0, 20060000.0, 0.9992894726405893], [1436666112.0, 20080000.0, 0.9987369566060175], [1436667840.0, 20100000.0, 0.9980267284282718], [1436669568.0, 20120000.0, 0.9971589002606139], [1436671296.0, 20140000.0, 0.9961336091431727], [1436673024.0, 20160000.0, 0.9949510169813002], [1436674752.0, 20180000.0, 0.9936113105200086], [1436676480.0, 20200000.0, 0.992114701314478], [1436678208.0, 20220000.0, 0.9904614256966515], [1436679936.0, 20240000.0, 0.9886517447379142], [1436681664.0, 20260000.0, 0.9866859442078684], [1436683392.0, 20280000.0, 0.9845643345292056], [1436685120.0, 20300000.0, 0.9822872507286889], [1436686848.0, 20320000.0, 0.979855052384247], [1436688576.0, 20340000.0, 0.9772681235681937], [1436690304.0, 20360000.0, 0.9745268727865772], [1436692032.0, 20380000.0, 0.9716317329146742], [1436693760.0, 20400000.0, 0.9685831611286312], [1436695488.0, 20420000.0, 0.9653816388332741], [1436697216.0, 20440000.0, 0.9620276715860858], [1436698944.0, 20460000.0, 0.9585217890173766], [1436700672.0, 20480000.0, 0.9548645447466428], [1436702400.0, 20500000.0, 0.9510565162951543], [1436704128.0, 20520000.0, 0.9470983049947441], [1436705856.0, 20540000.0, 0.9429905358928652], [1436707584.0, 20560000.0, 0.9387338576538744], [1436709312.0, 20580000.0, 0.9343289424566127], [1436711040.0, 20600000.0, 0.9297764858882517], [1436712768.0, 20620000.0, 0.9250772068344587], [1436714496.0, 20640000.0, 0.9202318473658706], [1436716224.0, 20660000.0, 0.9152411726209181], [1436717952.0, 20680000.0, 0.9101059706849959], [1436719680.0, 20700000.0, 0.90482705246602], [1436721408.0, 20720000.0, 0.8994052515663712], [1436723136.0, 20740000.0, 0.8938414241512642], [1436724864.0, 20760000.0, 0.8881364488135445], [1436726592.0, 20780000.0, 0.8822912264349536], [1436728320.0, 20800000.0, 0.8763066800438635], [1436730048.0, 20820000.0, 0.8701837546695259], [1436731776.0, 20840000.0, 0.8639234171928352], [1436733504.0, 20860000.0, 0.8575266561936533], [1436735232.0, 20880000.0, 0.8509944817946915], [1436736960.0, 20900000.0, 0.8443279255020161], [1436738688.0, 20920000.0, 0.8375280400421412], [1436740416.0, 20940000.0, 0.8305958991958136], [1436742144.0, 20960000.0, 0.8235325976284278], [1436743872.0, 20980000.0, 0.8163392507171848], [1436745600.0, 21000000.0, 0.8090169943749477], [1436747328.0, 21020000.0, 0.8015669848708773], [1436749056.0, 21040000.0, 0.7939903986478355], [1436750784.0, 21060000.0, 0.7862884321366196], [1436752512.0, 21080000.0, 0.7784623015670235], [1436754240.0, 21100000.0, 0.7705132427757898], [1436755968.0, 21120000.0, 0.7624425110114478], [1436757696.0, 21140000.0, 0.7542513807361042], [1436759424.0, 21160000.0, 0.7459411454241819], [1436761152.0, 21180000.0, 0.7375131173581742], [1436762880.0, 21200000.0, 0.7289686274214111], [1436764608.0, 21220000.0, 0.7203090248879083], [1436766336.0, 21240000.0, 0.7115356772092848], [1436768064.0, 21260000.0, 0.7026499697988505], [1436769792.0, 21280000.0, 0.6936533058128043], [1436771520.0, 21300000.0, 0.6845471059286898], [1436773248.0, 21320000.0, 0.6753328081210249], [1436774976.0, 21340000.0, 0.6660118674342527], [1436776704.0, 21360000.0, 0.6565857557529567], [1436778432.0, 21380000.0, 0.6470559615694452], [1436780160.0, 21400000.0, 0.6374239897486899], [1436781888.0, 21420000.0, 0.6276913612907012], [1436783616.0, 21440000.0, 0.6178596130903343], [1436785344.0, 21460000.0, 0.6079302976946059], [1436787072.0, 21480000.0, 0.5979049830575187], [1436788800.0, 21500000.0, 0.5877852522924736], [1436790528.0, 21520000.0, 0.5775727034222672], [1436792256.0, 21540000.0, 0.5672689491267567], [1436793984.0, 21560000.0, 0.5568756164881874], [1436795712.0, 21580000.0, 0.5463943467342707], [1436797440.0, 21600000.0, 0.5358267949789959], [1436799168.0, 21620000.0, 0.5251746299612972], [1436800896.0, 21640000.0, 0.5144395337815055], [1436802624.0, 21660000.0, 0.5036232016357621], [1436804352.0, 21680000.0, 0.49272734154829195], [1436806080.0, 21700000.0, 0.4817536741017164], [1436807808.0, 21720000.0, 0.4707039321653328], [1436809536.0, 21740000.0, 0.45957986062148876], [1436811264.0, 21760000.0, 0.4483832160900323], [1436812992.0, 21780000.0, 0.43711576665093366], [1436814720.0, 21800000.0, 0.4257792915650725], [1436816448.0, 21820000.0, 0.4143755809932847], [1436818176.0, 21840000.0, 0.4029064357136623], [1436819904.0, 21860000.0, 0.39137366683720276], [1436821632.0, 21880000.0, 0.37977909552180056], [1436823360.0, 21900000.0, 0.36812455268467814], [1436825088.0, 21920000.0, 0.3564118787132499], [1436826816.0, 21940000.0, 0.344642923174517], [1436828544.0, 21960000.0, 0.3328195445229857], [1436830272.0, 21980000.0, 0.32094360980721093], [1436832000.0, 22000000.0, 0.30901699437494623], [1436833728.0, 22020000.0, 0.2970415815770362], [1436835456.0, 22040000.0, 0.2850192624699747], [1436837184.0, 22060000.0, 0.2729519355173263], [1436838912.0, 22080000.0, 0.26084150628989705], [1436840640.0, 22100000.0, 0.24868988716485566], [1436842368.0, 22120000.0, 0.2364989970237246], [1436844096.0, 22140000.0, 0.22427076094938186], [1436845824.0, 22160000.0, 0.21200710992205435], [1436847552.0, 22180000.0, 0.19970998051440747], [1436849280.0, 22200000.0, 0.18738131458572413], [1436851008.0, 22220000.0, 0.1750230589752763], [1436852736.0, 22240000.0, 0.1626371651948829], [1436854464.0, 22260000.0, 0.1502255891207571], [1436856192.0, 22280000.0, 0.13779029068463713], [1436857920.0, 22300000.0, 0.1253332335643041], [1436859648.0, 22320000.0, 0.11285638487348054], [1436861376.0, 22340000.0, 0.10036171485121628], [1436863104.0, 22360000.0, 0.0878511965507418], [1436864832.0, 22380000.0, 0.0753268055279339], [1436866560.0, 22400000.0, 0.06279051952931179], [1436868288.0, 22420000.0, 0.050244318179770535], [1436870016.0, 22440000.0, 0.03769018266993452], [1436871744.0, 22460000.0, 0.025130095443338243], [1436873472.0, 22480000.0, 0.012566039883352377], [1436875200.0, 22500000.0, 5.51091059616309e-16], [1436876928.0, 22520000.0, -0.012566039883351275], [1436878656.0, 22540000.0, -0.02513009544333714], [1436880384.0, 22560000.0, -0.03769018266993342], [1436882112.0, 22580000.0, -0.05024431817976943], [1436883840.0, 22600000.0, -0.0627905195293107], [1436885568.0, 22620000.0, -0.0753268055279328], [1436887296.0, 22640000.0, -0.08785119655074071], [1436889024.0, 22660000.0, -0.10036171485121519], [1436890752.0, 22680000.0, -0.11285638487347945], [1436892480.0, 22700000.0, -0.12533323356430298], [1436894208.0, 22720000.0, -0.13779029068463602], [1436895936.0, 22740000.0, -0.150225589120756], [1436897664.0, 22760000.0, -0.16263716519488178], [1436899392.0, 22780000.0, -0.17502305897527523], [1436901120.0, 22800000.0, -0.18738131458572305], [1436902848.0, 22820000.0, -0.1997099805144064], [1436904576.0, 22840000.0, -0.21200710992205327], [1436906304.0, 22860000.0, -0.22427076094938078], [1436908032.0, 22880000.0, -0.2364989970237235], [1436909760.0, 22900000.0, -0.2486898871648546], [1436911488.0, 22920000.0, -0.260841506289896], [1436913216.0, 22940000.0, -0.2729519355173252], [1436914944.0, 22960000.0, -0.28501926246997367], [1436916672.0, 22980000.0, -0.29704158157703514], [1436918400.0, 23000000.0, -0.3090169943749452], [1436920128.0, 23020000.0, -0.3209436098072099], [1436921856.0, 23040000.0, -0.3328195445229846], [1436923584.0, 23060000.0, -0.344642923174516], [1436925312.0, 23080000.0, -0.3564118787132489], [1436927040.0, 23100000.0, -0.3681245526846771], [1436928768.0, 23120000.0, -0.3797790955217995], [1436930496.0, 23140000.0, -0.39137366683720176], [1436932224.0, 23160000.0, -0.4029064357136613], [1436933952.0, 23180000.0, -0.4143755809932837], [1436935680.0, 23200000.0, -0.4257792915650715], [1436937408.0, 23220000.0, -0.43711576665093266], [1436939136.0, 23240000.0, -0.4483832160900313], [1436940864.0, 23260000.0, -0.4595798606214878], [1436942592.0, 23280000.0, -0.4707039321653318], [1436944320.0, 23300000.0, -0.4817536741017154], [1436946048.0, 23320000.0, -0.492727341548291], [1436947776.0, 23340000.0, -0.5036232016357611], [1436949504.0, 23360000.0, -0.5144395337815045], [1436951232.0, 23380000.0, -0.5251746299612962], [1436952960.0, 23400000.0, -0.5358267949789949], [1436954688.0, 23420000.0, -0.5463943467342698], [1436956416.0, 23440000.0, -0.5568756164881865], [1436958144.0, 23460000.0, -0.5672689491267559], [1436959872.0, 23480000.0, -0.5775727034222663], [1436961600.0, 23500000.0, -0.5877852522924727], [1436963328.0, 23520000.0, -0.5979049830575178], [1436965056.0, 23540000.0, -0.607930297694605], [1436966784.0, 23560000.0, -0.6178596130903334], [1436968512.0, 23580000.0, -0.6276913612907004], [1436970240.0, 23600000.0, -0.637423989748689], [1436971968.0, 23620000.0, -0.6470559615694443], [1436973696.0, 23640000.0, -0.6565857557529559], [1436975424.0, 23660000.0, -0.6660118674342518], [1436977152.0, 23680000.0, -0.675332808121024], [1436978880.0, 23700000.0, -0.6845471059286891], [1436980608.0, 23720000.0, -0.6936533058128035], [1436982336.0, 23740000.0, -0.7026499697988497], [1436984064.0, 23760000.0, -0.711535677209284], [1436985792.0, 23780000.0, -0.7203090248879075], [1436987520.0, 23800000.0, -0.7289686274214104], [1436989248.0, 23820000.0, -0.7375131173581735], [1436990976.0, 23840000.0, -0.7459411454241812], [1436992704.0, 23860000.0, -0.7542513807361035], [1436994432.0, 23880000.0, -0.7624425110114471], [1436996160.0, 23900000.0, -0.770513242775789], [1436997888.0, 23920000.0, -0.7784623015670228], [1436999616.0, 23940000.0, -0.7862884321366189], [1437001344.0, 23960000.0, -0.7939903986478348], [1437003072.0, 23980000.0, -0.8015669848708766], [1437004800.0, 24000000.0, -0.8090169943749471], [1437006528.0, 24020000.0, -0.8163392507171842], [1437008256.0, 24040000.0, -0.8235325976284272], [1437009984.0, 24060000.0, -0.830595899195813], [1437011712.0, 24080000.0, -0.8375280400421407], [1437013440.0, 24100000.0, -0.8443279255020155], [1437015168.0, 24120000.0, -0.850994481794691], [1437016896.0, 24140000.0, -0.8575266561936528], [1437018624.0, 24160000.0, -0.8639234171928346], [1437020352.0, 24180000.0, -0.8701837546695254], [1437022080.0, 24200000.0, -0.8763066800438629], [1437023808.0, 24220000.0, -0.8822912264349532], [1437025536.0, 24240000.0, -0.888136448813544], [1437027264.0, 24260000.0, -0.8938414241512638], [1437028992.0, 24280000.0, -0.8994052515663706], [1437030720.0, 24300000.0, -0.9048270524660196], [1437032448.0, 24320000.0, -0.9101059706849954], [1437034176.0, 24340000.0, -0.9152411726209176], [1437035904.0, 24360000.0, -0.9202318473658702], [1437037632.0, 24380000.0, -0.9250772068344583], [1437039360.0, 24400000.0, -0.9297764858882513], [1437041088.0, 24420000.0, -0.9343289424566124], [1437042816.0, 24440000.0, -0.9387338576538741], [1437044544.0, 24460000.0, -0.9429905358928647], [1437046272.0, 24480000.0, -0.9470983049947438], [1437048000.0, 24500000.0, -0.951056516295154], [1437049728.0, 24520000.0, -0.9548645447466425], [1437051456.0, 24540000.0, -0.9585217890173763], [1437053184.0, 24560000.0, -0.9620276715860856], [1437054912.0, 24580000.0, -0.9653816388332739], [1437056640.0, 24600000.0, -0.9685831611286309], [1437058368.0, 24620000.0, -0.971631732914674], [1437060096.0, 24640000.0, -0.974526872786577], [1437061824.0, 24660000.0, -0.9772681235681935], [1437063552.0, 24680000.0, -0.9798550523842467], [1437065280.0, 24700000.0, -0.9822872507286887], [1437067008.0, 24720000.0, -0.9845643345292053], [1437068736.0, 24740000.0, -0.9866859442078681], [1437070464.0, 24760000.0, -0.988651744737914], [1437072192.0, 24780000.0, -0.9904614256966513], [1437073920.0, 24800000.0, -0.9921147013144779], [1437075648.0, 24820000.0, -0.9936113105200085], [1437077376.0, 24840000.0, -0.9949510169813001], [1437079104.0, 24860000.0, -0.9961336091431726], [1437080832.0, 24880000.0, -0.9971589002606138], [1437082560.0, 24900000.0, -0.9980267284282717], [1437084288.0, 24920000.0, -0.9987369566060175], [1437086016.0, 24940000.0, -0.9992894726405892], [1437087744.0, 24960000.0, -0.9996841892832999], [1437089472.0, 24980000.0, -0.9999210442038161], [1437091200.0, 25000000.0, -1.0], [1437092928.0, 25020000.0, -0.9999210442038161], [1437094656.0, 25040000.0, -0.9996841892832999], [1437096384.0, 25060000.0, -0.9992894726405893], [1437098112.0, 25080000.0, -0.9987369566060175], [1437099840.0, 25100000.0, -0.9980267284282718], [1437101568.0, 25120000.0, -0.9971589002606139], [1437103296.0, 25140000.0, -0.9961336091431727], [1437105024.0, 25160000.0, -0.9949510169813002], [1437106752.0, 25180000.0, -0.9936113105200086], [1437108480.0, 25200000.0, -0.992114701314478], [1437110208.0, 25220000.0, -0.9904614256966515], [1437111936.0, 25240000.0, -0.9886517447379142], [1437113664.0, 25260000.0, -0.9866859442078684], [1437115392.0, 25280000.0, -0.9845643345292056], [1437117120.0, 25300000.0, -0.9822872507286889], [1437118848.0, 25320000.0, -0.979855052384247], [1437120576.0, 25340000.0, -0.9772681235681938], [1437122304.0, 25360000.0, -0.9745268727865772], [1437124032.0, 25380000.0, -0.9716317329146742], [1437125760.0, 25400000.0, -0.9685831611286312], [1437127488.0, 25420000.0, -0.9653816388332741], [1437129216.0, 25440000.0, -0.9620276715860859], [1437130944.0, 25460000.0, -0.9585217890173766], [1437132672.0, 25480000.0, -0.9548645447466434], [1437134400.0, 25500000.0, -0.9510565162951543], [1437136128.0, 25520000.0, -0.9470983049947441], [1437137856.0, 25540000.0, -0.9429905358928646], [1437139584.0, 25560000.0, -0.9387338576538745], [1437141312.0, 25580000.0, -0.9343289424566128], [1437143040.0, 25600000.0, -0.9297764858882511], [1437144768.0, 25620000.0, -0.925077206834458], [1437146496.0, 25640000.0, -0.9202318473658706], [1437148224.0, 25660000.0, -0.9152411726209182], [1437149952.0, 25680000.0, -0.9101059706849952], [1437151680.0, 25700000.0, -0.9048270524660209], [1437153408.0, 25720000.0, -0.8994052515663712], [1437155136.0, 25740000.0, -0.8938414241512643], [1437156864.0, 25760000.0, -0.8881364488135454], [1437158592.0, 25780000.0, -0.8822912264349545], [1437160320.0, 25800000.0, -0.8763066800438636], [1437162048.0, 25820000.0, -0.870183754669526], [1437163776.0, 25840000.0, -0.863923417192836], [1437165504.0, 25860000.0, -0.8575266561936534], [1437167232.0, 25880000.0, -0.8509944817946916], [1437168960.0, 25900000.0, -0.8443279255020152], [1437170688.0, 25920000.0, -0.8375280400421423], [1437172416.0, 25940000.0, -0.8305958991958137], [1437174144.0, 25960000.0, -0.8235325976284269], [1437175872.0, 25980000.0, -0.8163392507171838], [1437177600.0, 26000000.0, -0.8090169943749478], [1437179328.0, 26020000.0, -0.8015669848708774], [1437181056.0, 26040000.0, -0.7939903986478345], [1437182784.0, 26060000.0, -0.7862884321366207], [1437184512.0, 26080000.0, -0.7784623015670236], [1437186240.0, 26100000.0, -0.7705132427757899], [1437187968.0, 26120000.0, -0.762442511011449], [1437189696.0, 26140000.0, -0.7542513807361055], [1437191424.0, 26160000.0, -0.745941145424182], [1437193152.0, 26180000.0, -0.7375131173581743], [1437194880.0, 26200000.0, -0.7289686274214124], [1437196608.0, 26220000.0, -0.7203090248879084], [1437198336.0, 26240000.0, -0.7115356772092849], [1437200064.0, 26260000.0, -0.7026499697988493], [1437201792.0, 26280000.0, -0.6936533058128056], [1437203520.0, 26300000.0, -0.68454710592869], [1437205248.0, 26320000.0, -0.6753328081210237], [1437206976.0, 26340000.0, -0.6660118674342514], [1437208704.0, 26360000.0, -0.6565857557529569], [1437210432.0, 26380000.0, -0.6470559615694453], [1437212160.0, 26400000.0, -0.6374239897486885], [1437213888.0, 26420000.0, -0.6276913612907027], [1437215616.0, 26440000.0, -0.6178596130903344], [1437217344.0, 26460000.0, -0.607930297694606], [1437219072.0, 26480000.0, -0.5979049830575174], [1437220800.0, 26500000.0, -0.5877852522924751], [1437222528.0, 26520000.0, -0.5775727034222673], [1437224256.0, 26540000.0, -0.5672689491267568], [1437225984.0, 26560000.0, -0.5568756164881891], [1437227712.0, 26580000.0, -0.5463943467342708], [1437229440.0, 26600000.0, -0.535826794978996], [1437231168.0, 26620000.0, -0.5251746299612957], [1437232896.0, 26640000.0, -0.5144395337815071], [1437234624.0, 26660000.0, -0.5036232016357622], [1437236352.0, 26680000.0, -0.4927273415482905], [1437238080.0, 26700000.0, -0.48175367410171493], [1437239808.0, 26720000.0, -0.4707039321653329], [1437241536.0, 26740000.0, -0.45957986062148887], [1437243264.0, 26760000.0, -0.4483832160900308], [1437244992.0, 26780000.0, -0.4371157666509353], [1437246720.0, 26800000.0, -0.4257792915650726], [1437248448.0, 26820000.0, -0.4143755809932848], [1437250176.0, 26840000.0, -0.4029064357136608], [1437251904.0, 26860000.0, -0.39137366683720454], [1437253632.0, 26880000.0, -0.37977909552180067], [1437255360.0, 26900000.0, -0.36812455268467825], [1437257088.0, 26920000.0, -0.3564118787132517], [1437258816.0, 26940000.0, -0.34464292317451883], [1437260544.0, 26960000.0, -0.3328195445229858], [1437262272.0, 26980000.0, -0.3209436098072094], [1437264000.0, 27000000.0, -0.30901699437494806], [1437265728.0, 27020000.0, -0.2970415815770363], [1437267456.0, 27040000.0, -0.28501926246997483], [1437269184.0, 27060000.0, -0.2729519355173247], [1437270912.0, 27080000.0, -0.26084150628989716], [1437272640.0, 27100000.0, -0.24868988716485577], [1437274368.0, 27120000.0, -0.23649899702372298], [1437276096.0, 27140000.0, -0.2242707609493837], [1437277824.0, 27160000.0, -0.21200710992205446], [1437279552.0, 27180000.0, -0.1997099805144076], [1437281280.0, 27200000.0, -0.1873813145857225], [1437283008.0, 27220000.0, -0.17502305897527817], [1437284736.0, 27240000.0, -0.162637165194883], [1437286464.0, 27260000.0, -0.15022558912075723], [1437288192.0, 27280000.0, -0.137790290684639], [1437289920.0, 27300000.0, -0.12533323356430598], [1437291648.0, 27320000.0, -0.11285638487348065], [1437293376.0, 27340000.0, -0.10036171485121463], [1437295104.0, 27360000.0, -0.08785119655074371], [1437296832.0, 27380000.0, -0.07532680552793403], [1437298560.0, 27400000.0, -0.06279051952931192], [1437300288.0, 27420000.0, -0.050244318179768876], [1437302016.0, 27440000.0, -0.037690182669934645], [1437303744.0, 27460000.0, -0.025130095443338364], [1437305472.0, 27480000.0, -0.012566039883350723], [1437307200.0, 27500000.0, -2.4499125789312946e-15], [1437308928.0, 27520000.0, 0.012566039883349376], [1437310656.0, 27540000.0, 0.025130095443337018], [1437312384.0, 27560000.0, 0.0376901826699333], [1437314112.0, 27580000.0, 0.05024431817976754], [1437315840.0, 27600000.0, 0.06279051952931057], [1437317568.0, 27620000.0, 0.07532680552793268], [1437319296.0, 27640000.0, 0.08785119655074236], [1437321024.0, 27660000.0, 0.1003617148512133], [1437322752.0, 27680000.0, 0.11285638487347932], [1437324480.0, 27700000.0, 0.12533323356430462], [1437326208.0, 27720000.0, 0.13779029068463766], [1437327936.0, 27740000.0, 0.1502255891207559], [1437329664.0, 27760000.0, 0.16263716519488167], [1437331392.0, 27780000.0, 0.17502305897527684], [1437333120.0, 27800000.0, 0.18738131458572116], [1437334848.0, 27820000.0, 0.19970998051440628], [1437336576.0, 27840000.0, 0.21200710992205313], [1437338304.0, 27860000.0, 0.2242707609493824], [1437340032.0, 27880000.0, 0.23649899702372168], [1437341760.0, 27900000.0, 0.24868988716485446], [1437343488.0, 27920000.0, 0.2608415062898959], [1437345216.0, 27940000.0, 0.2729519355173234], [1437346944.0, 27960000.0, 0.28501926246997356], [1437348672.0, 27980000.0, 0.29704158157703503], [1437350400.0, 28000000.0, 0.3090169943749468], [1437352128.0, 28020000.0, 0.3209436098072081], [1437353856.0, 28040000.0, 0.3328195445229845], [1437355584.0, 28060000.0, 0.34464292317451756], [1437357312.0, 28080000.0, 0.3564118787132505], [1437359040.0, 28100000.0, 0.368124552684677], [1437360768.0, 28120000.0, 0.3797790955217994], [1437362496.0, 28140000.0, 0.39137366683720326], [1437364224.0, 28160000.0, 0.4029064357136596], [1437365952.0, 28180000.0, 0.4143755809932836], [1437367680.0, 28200000.0, 0.4257792915650714], [1437369408.0, 28220000.0, 0.43711576665093416], [1437371136.0, 28240000.0, 0.4483832160900296], [1437372864.0, 28260000.0, 0.4595798606214877], [1437374592.0, 28280000.0, 0.4707039321653317], [1437376320.0, 28300000.0, 0.4817536741017137], [1437378048.0, 28320000.0, 0.49272734154828934], [1437379776.0, 28340000.0, 0.503623201635761], [1437381504.0, 28360000.0, 0.514439533781506], [1437383232.0, 28380000.0, 0.5251746299612946], [1437384960.0, 28400000.0, 0.5358267949789949], [1437386688.0, 28420000.0, 0.5463943467342697], [1437388416.0, 28440000.0, 0.556875616488188], [1437390144.0, 28460000.0, 0.5672689491267557], [1437391872.0, 28480000.0, 0.5775727034222662], [1437393600.0, 28500000.0, 0.587785252292474], [1437395328.0, 28520000.0, 0.5979049830575163], [1437397056.0, 28540000.0, 0.607930297694605], [1437398784.0, 28560000.0, 0.6178596130903333], [1437400512.0, 28580000.0, 0.6276913612907017], [1437402240.0, 28600000.0, 0.6374239897486875], [1437403968.0, 28620000.0, 0.6470559615694442], [1437405696.0, 28640000.0, 0.6565857557529557], [1437407424.0, 28660000.0, 0.6660118674342504], [1437409152.0, 28680000.0, 0.6753328081210227], [1437410880.0, 28700000.0, 0.684547105928689], [1437412608.0, 28720000.0, 0.6936533058128047], [1437414336.0, 28740000.0, 0.7026499697988483], [1437416064.0, 28760000.0, 0.7115356772092839], [1437417792.0, 28780000.0, 0.7203090248879075], [1437419520.0, 28800000.0, 0.7289686274214116], [1437421248.0, 28820000.0, 0.7375131173581734], [1437422976.0, 28840000.0, 0.7459411454241811], [1437424704.0, 28860000.0, 0.7542513807361046], [1437426432.0, 28880000.0, 0.7624425110114481], [1437428160.0, 28900000.0, 0.770513242775789], [1437429888.0, 28920000.0, 0.7784623015670227], [1437431616.0, 28940000.0, 0.7862884321366199], [1437433344.0, 28960000.0, 0.7939903986478337], [1437435072.0, 28980000.0, 0.8015669848708766], [1437436800.0, 29000000.0, 0.809016994374947], [1437438528.0, 29020000.0, 0.816339250717183], [1437440256.0, 29040000.0, 0.8235325976284261], [1437441984.0, 29060000.0, 0.8305958991958129], [1437443712.0, 29080000.0, 0.8375280400421415], [1437445440.0, 29100000.0, 0.8443279255020145], [1437447168.0, 29120000.0, 0.8509944817946908], [1437448896.0, 29140000.0, 0.8575266561936528], [1437450624.0, 29160000.0, 0.8639234171928354], [1437452352.0, 29180000.0, 0.8701837546695254], [1437454080.0, 29200000.0, 0.8763066800438629], [1437455808.0, 29220000.0, 0.882291226434954], [1437457536.0, 29240000.0, 0.8881364488135448], [1437459264.0, 29260000.0, 0.8938414241512637], [1437460992.0, 29280000.0, 0.8994052515663706], [1437462720.0, 29300000.0, 0.9048270524660202], [1437464448.0, 29320000.0, 0.9101059706849947], [1437466176.0, 29340000.0, 0.9152411726209176], [1437467904.0, 29360000.0, 0.9202318473658702], [1437469632.0, 29380000.0, 0.9250772068344575], [1437471360.0, 29400000.0, 0.9297764858882506], [1437473088.0, 29420000.0, 0.9343289424566122], [1437474816.0, 29440000.0, 0.9387338576538741], [1437476544.0, 29460000.0, 0.9429905358928642], [1437478272.0, 29480000.0, 0.9470983049947437], [1437480000.0, 29500000.0, 0.9510565162951539], [1437481728.0, 29520000.0, 0.9548645447466431], [1437483456.0, 29540000.0, 0.9585217890173757], [1437485184.0, 29560000.0, 0.9620276715860855], [1437486912.0, 29580000.0, 0.9653816388332743], [1437488640.0, 29600000.0, 0.9685831611286313], [1437490368.0, 29620000.0, 0.9716317329146739], [1437492096.0, 29640000.0, 0.9745268727865769], [1437493824.0, 29660000.0, 0.9772681235681938], [1437495552.0, 29680000.0, 0.9798550523842464], [1437497280.0, 29700000.0, 0.9822872507286887], [1437499008.0, 29720000.0, 0.9845643345292053], [1437500736.0, 29740000.0, 0.9866859442078678], [1437502464.0, 29760000.0, 0.9886517447379137], [1437504192.0, 29780000.0, 0.9904614256966513], [1437505920.0, 29800000.0, 0.9921147013144779], [1437507648.0, 29820000.0, 0.9936113105200083], [1437509376.0, 29840000.0, 0.9949510169813], [1437511104.0, 29860000.0, 0.9961336091431726], [1437512832.0, 29880000.0, 0.9971589002606139], [1437514560.0, 29900000.0, 0.9980267284282716], [1437516288.0, 29920000.0, 0.9987369566060175], [1437518016.0, 29940000.0, 0.9992894726405893], [1437519744.0, 29960000.0, 0.9996841892833], [1437521472.0, 29980000.0, 0.9999210442038161], [1437523200.0, 30000000.0, 1.0], [1437524928.0, 30020000.0, 0.9999210442038161], [1437526656.0, 30040000.0, 0.9996841892833], [1437528384.0, 30060000.0, 0.9992894726405893], [1437530112.0, 30080000.0, 0.9987369566060175], [1437531840.0, 30100000.0, 0.9980267284282717], [1437533568.0, 30120000.0, 0.997158900260614], [1437535296.0, 30140000.0, 0.9961336091431727], [1437537024.0, 30160000.0, 0.9949510169813002], [1437538752.0, 30180000.0, 0.9936113105200085], [1437540480.0, 30200000.0, 0.992114701314478], [1437542208.0, 30220000.0, 0.9904614256966515], [1437543936.0, 30240000.0, 0.988651744737914], [1437545664.0, 30260000.0, 0.9866859442078681], [1437547392.0, 30280000.0, 0.9845643345292056], [1437549120.0, 30300000.0, 0.982287250728689], [1437550848.0, 30320000.0, 0.9798550523842466], [1437552576.0, 30340000.0, 0.9772681235681941], [1437554304.0, 30360000.0, 0.9745268727865772], [1437556032.0, 30380000.0, 0.9716317329146743], [1437557760.0, 30400000.0, 0.9685831611286316], [1437559488.0, 30420000.0, 0.9653816388332747], [1437561216.0, 30440000.0, 0.9620276715860859], [1437562944.0, 30460000.0, 0.9585217890173762], [1437564672.0, 30480000.0, 0.9548645447466435], [1437566400.0, 30500000.0, 0.9510565162951543], [1437568128.0, 30520000.0, 0.9470983049947442], [1437569856.0, 30540000.0, 0.9429905358928646], [1437571584.0, 30560000.0, 0.9387338576538745], [1437573312.0, 30580000.0, 0.9343289424566128], [1437575040.0, 30600000.0, 0.9297764858882511], [1437576768.0, 30620000.0, 0.925077206834458], [1437578496.0, 30640000.0, 0.9202318473658707], [1437580224.0, 30660000.0, 0.9152411726209182], [1437581952.0, 30680000.0, 0.9101059706849952], [1437583680.0, 30700000.0, 0.9048270524660209], [1437585408.0, 30720000.0, 0.8994052515663712], [1437587136.0, 30740000.0, 0.8938414241512643], [1437588864.0, 30760000.0, 0.8881364488135455], [1437590592.0, 30780000.0, 0.8822912264349546], [1437592320.0, 30800000.0, 0.8763066800438636], [1437594048.0, 30820000.0, 0.870183754669526], [1437595776.0, 30840000.0, 0.8639234171928362], [1437597504.0, 30860000.0, 0.8575266561936535], [1437599232.0, 30880000.0, 0.8509944817946916], [1437600960.0, 30900000.0, 0.8443279255020153], [1437602688.0, 30920000.0, 0.8375280400421423], [1437604416.0, 30940000.0, 0.8305958991958138], [1437606144.0, 30960000.0, 0.823532597628427], [1437607872.0, 30980000.0, 0.8163392507171839], [1437609600.0, 31000000.0, 0.8090169943749479], [1437611328.0, 31020000.0, 0.8015669848708775], [1437613056.0, 31040000.0, 0.7939903986478346], [1437614784.0, 31060000.0, 0.7862884321366208], [1437616512.0, 31080000.0, 0.7784623015670237], [1437618240.0, 31100000.0, 0.7705132427757899], [1437619968.0, 31120000.0, 0.7624425110114491], [1437621696.0, 31140000.0, 0.7542513807361055], [1437623424.0, 31160000.0, 0.7459411454241821], [1437625152.0, 31180000.0, 0.7375131173581744], [1437626880.0, 31200000.0, 0.7289686274214126], [1437628608.0, 31220000.0, 0.7203090248879085], [1437630336.0, 31240000.0, 0.711535677209285], [1437632064.0, 31260000.0, 0.7026499697988494], [1437633792.0, 31280000.0, 0.6936533058128057], [1437635520.0, 31300000.0, 0.6845471059286901], [1437637248.0, 31320000.0, 0.6753328081210237], [1437638976.0, 31340000.0, 0.6660118674342516], [1437640704.0, 31360000.0, 0.6565857557529569], [1437642432.0, 31380000.0, 0.6470559615694453], [1437644160.0, 31400000.0, 0.6374239897486886], [1437645888.0, 31420000.0, 0.6276913612907028], [1437647616.0, 31440000.0, 0.6178596130903345], [1437649344.0, 31460000.0, 0.6079302976946062], [1437651072.0, 31480000.0, 0.5979049830575175], [1437652800.0, 31500000.0, 0.5877852522924751], [1437654528.0, 31520000.0, 0.5775727034222674], [1437656256.0, 31540000.0, 0.567268949126757], [1437657984.0, 31560000.0, 0.5568756164881892], [1437659712.0, 31580000.0, 0.5463943467342709], [1437661440.0, 31600000.0, 0.5358267949789961], [1437663168.0, 31620000.0, 0.5251746299612958], [1437664896.0, 31640000.0, 0.5144395337815072], [1437666624.0, 31660000.0, 0.5036232016357624], [1437668352.0, 31680000.0, 0.4927273415482906], [1437670080.0, 31700000.0, 0.48175367410171505], [1437671808.0, 31720000.0, 0.470703932165333], [1437673536.0, 31740000.0, 0.459579860621489], [1437675264.0, 31760000.0, 0.4483832160900309], [1437676992.0, 31780000.0, 0.43711576665093543], [1437678720.0, 31800000.0, 0.4257792915650727], [1437680448.0, 31820000.0, 0.4143755809932849], [1437682176.0, 31840000.0, 0.4029064357136609], [1437683904.0, 31860000.0, 0.39137366683720465], [1437685632.0, 31880000.0, 0.3797790955218008], [1437687360.0, 31900000.0, 0.36812455268467836], [1437689088.0, 31920000.0, 0.35641187871325186], [1437690816.0, 31940000.0, 0.34464292317451894], [1437692544.0, 31960000.0, 0.3328195445229859], [1437694272.0, 31980000.0, 0.3209436098072095], [1437696000.0, 32000000.0, 0.3090169943749482], [1437697728.0, 32020000.0, 0.2970415815770364], [1437699456.0, 32040000.0, 0.285019262469975], [1437701184.0, 32060000.0, 0.27295193551732483], [1437702912.0, 32080000.0, 0.2608415062898973], [1437704640.0, 32100000.0, 0.2486898871648559], [1437706368.0, 32120000.0, 0.2364989970237231], [1437708096.0, 32140000.0, 0.22427076094938383], [1437709824.0, 32160000.0, 0.21200710992205457], [1437711552.0, 32180000.0, 0.19970998051440772], [1437713280.0, 32200000.0, 0.1873813145857226], [1437715008.0, 32220000.0, 0.17502305897527828], [1437716736.0, 32240000.0, 0.1626371651948831], [1437718464.0, 32260000.0, 0.15022558912075734], [1437720192.0, 32280000.0, 0.13779029068463913], [1437721920.0, 32300000.0, 0.1253332335643061], [1437723648.0, 32320000.0, 0.11285638487348078], [1437725376.0, 32340000.0, 0.10036171485121476], [1437727104.0, 32360000.0, 0.08785119655074382], [1437728832.0, 32380000.0, 0.07532680552793415], [1437730560.0, 32400000.0, 0.06279051952931204], [1437732288.0, 32420000.0, 0.050244318179769], [1437734016.0, 32440000.0, 0.03769018266993476], [1437735744.0, 32460000.0, 0.025130095443338486], [1437737472.0, 32480000.0, 0.012566039883350845], [1437739200.0, 32500000.0, -9.803364199544708e-16], [1437740928.0, 32520000.0, -0.012566039883349254], [1437742656.0, 32540000.0, -0.025130095443336897], [1437744384.0, 32560000.0, -0.037690182669933174], [1437746112.0, 32580000.0, -0.05024431817976741], [1437747840.0, 32600000.0, -0.06279051952931045], [1437749568.0, 32620000.0, -0.07532680552793257], [1437751296.0, 32640000.0, -0.08785119655074224], [1437753024.0, 32660000.0, -0.10036171485121317], [1437754752.0, 32680000.0, -0.1128563848734792], [1437756480.0, 32700000.0, -0.1253332335643045], [1437758208.0, 32720000.0, -0.13779029068463755], [1437759936.0, 32740000.0, -0.15022558912075576], [1437761664.0, 32760000.0, -0.16263716519488156], [1437763392.0, 32780000.0, -0.17502305897527673], [1437765120.0, 32800000.0, -0.18738131458572105], [1437766848.0, 32820000.0, -0.19970998051440617], [1437768576.0, 32840000.0, -0.21200710992205302], [1437770304.0, 32860000.0, -0.22427076094938228], [1437772032.0, 32880000.0, -0.23649899702372154], [1437773760.0, 32900000.0, -0.24868988716485435], [1437775488.0, 32920000.0, -0.2608415062898957], [1437777216.0, 32940000.0, -0.2729519355173233], [1437778944.0, 32960000.0, -0.28501926246997344], [1437780672.0, 32980000.0, -0.29704158157703486], [1437782400.0, 33000000.0, -0.3090169943749467], [1437784128.0, 33020000.0, -0.320943609807208], [1437785856.0, 33040000.0, -0.3328195445229844], [1437787584.0, 33060000.0, -0.34464292317451745], [1437789312.0, 33080000.0, -0.35641187871325036], [1437791040.0, 33100000.0, -0.36812455268467686], [1437792768.0, 33120000.0, -0.3797790955217993], [1437794496.0, 33140000.0, -0.39137366683720315], [1437796224.0, 33160000.0, -0.4029064357136594], [1437797952.0, 33180000.0, -0.4143755809932835], [1437799680.0, 33200000.0, -0.42577929156507127], [1437801408.0, 33220000.0, -0.43711576665093405], [1437803136.0, 33240000.0, -0.4483832160900295], [1437804864.0, 33260000.0, -0.4595798606214876], [1437806592.0, 33280000.0, -0.4707039321653316], [1437808320.0, 33300000.0, -0.4817536741017136], [1437810048.0, 33320000.0, -0.49272734154828923], [1437811776.0, 33340000.0, -0.5036232016357609], [1437813504.0, 33360000.0, -0.5144395337815059], [1437815232.0, 33380000.0, -0.5251746299612945], [1437816960.0, 33400000.0, -0.5358267949789948], [1437818688.0, 33420000.0, -0.5463943467342696], [1437820416.0, 33440000.0, -0.5568756164881878], [1437822144.0, 33460000.0, -0.5672689491267556], [1437823872.0, 33480000.0, -0.5775727034222661], [1437825600.0, 33500000.0, -0.5877852522924739], [1437827328.0, 33520000.0, -0.5979049830575162], [1437829056.0, 33540000.0, -0.6079302976946049], [1437830784.0, 33560000.0, -0.6178596130903332], [1437832512.0, 33580000.0, -0.6276913612907016], [1437834240.0, 33600000.0, -0.6374239897486874], [1437835968.0, 33620000.0, -0.6470559615694442], [1437837696.0, 33640000.0, -0.6565857557529557], [1437839424.0, 33660000.0, -0.6660118674342503], [1437841152.0, 33680000.0, -0.6753328081210226], [1437842880.0, 33700000.0, -0.6845471059286888], [1437844608.0, 33720000.0, -0.6936533058128046], [1437846336.0, 33740000.0, -0.7026499697988483], [1437848064.0, 33760000.0, -0.7115356772092839], [1437849792.0, 33780000.0, -0.7203090248879074], [1437851520.0, 33800000.0, -0.7289686274214114], [1437853248.0, 33820000.0, -0.7375131173581733], [1437854976.0, 33840000.0, -0.745941145424181], [1437856704.0, 33860000.0, -0.7542513807361045], [1437858432.0, 33880000.0, -0.7624425110114481], [1437860160.0, 33900000.0, -0.7705132427757889], [1437861888.0, 33920000.0, -0.7784623015670227], [1437863616.0, 33940000.0, -0.7862884321366198], [1437865344.0, 33960000.0, -0.7939903986478336], [1437867072.0, 33980000.0, -0.8015669848708765], [1437868800.0, 34000000.0, -0.8090169943749469], [1437870528.0, 34020000.0, -0.816339250717183], [1437872256.0, 34040000.0, -0.8235325976284261], [1437873984.0, 34060000.0, -0.8305958991958129], [1437875712.0, 34080000.0, -0.8375280400421415], [1437877440.0, 34100000.0, -0.8443279255020144], [1437879168.0, 34120000.0, -0.8509944817946908], [1437880896.0, 34140000.0, -0.8575266561936526], [1437882624.0, 34160000.0, -0.8639234171928353], [1437884352.0, 34180000.0, -0.8701837546695252], [1437886080.0, 34200000.0, -0.8763066800438628], [1437887808.0, 34220000.0, -0.8822912264349538], [1437889536.0, 34240000.0, -0.8881364488135447], [1437891264.0, 34260000.0, -0.8938414241512637], [1437892992.0, 34280000.0, -0.8994052515663705], [1437894720.0, 34300000.0, -0.9048270524660202], [1437896448.0, 34320000.0, -0.9101059706849945], [1437898176.0, 34340000.0, -0.9152411726209176], [1437899904.0, 34360000.0, -0.92023184736587], [1437901632.0, 34380000.0, -0.9250772068344575], [1437903360.0, 34400000.0, -0.9297764858882506], [1437905088.0, 34420000.0, -0.9343289424566122], [1437906816.0, 34440000.0, -0.938733857653874], [1437908544.0, 34460000.0, -0.9429905358928641], [1437910272.0, 34480000.0, -0.9470983049947437], [1437912000.0, 34500000.0, -0.9510565162951539], [1437913728.0, 34520000.0, -0.954864544746643], [1437915456.0, 34540000.0, -0.9585217890173757], [1437917184.0, 34560000.0, -0.9620276715860855], [1437918912.0, 34580000.0, -0.9653816388332742], [1437920640.0, 34600000.0, -0.9685831611286313], [1437922368.0, 34620000.0, -0.9716317329146739], [1437924096.0, 34640000.0, -0.9745268727865769], [1437925824.0, 34660000.0, -0.9772681235681938], [1437927552.0, 34680000.0, -0.9798550523842463], [1437929280.0, 34700000.0, -0.9822872507286887], [1437931008.0, 34720000.0, -0.9845643345292053], [1437932736.0, 34740000.0, -0.9866859442078678], [1437934464.0, 34760000.0, -0.9886517447379137], [1437936192.0, 34780000.0, -0.9904614256966513], [1437937920.0, 34800000.0, -0.9921147013144778], [1437939648.0, 34820000.0, -0.9936113105200083], [1437941376.0, 34840000.0, -0.9949510169813], [1437943104.0, 34860000.0, -0.9961336091431725], [1437944832.0, 34880000.0, -0.9971589002606139], [1437946560.0, 34900000.0, -0.9980267284282716], [1437948288.0, 34920000.0, -0.9987369566060175], [1437950016.0, 34940000.0, -0.9992894726405893], [1437951744.0, 34960000.0, -0.9996841892833], [1437953472.0, 34980000.0, -0.9999210442038161], [1437955200.0, 35000000.0, -1.0], [1437956928.0, 35020000.0, -0.9999210442038161], [1437958656.0, 35040000.0, -0.9996841892833], [1437960384.0, 35060000.0, -0.9992894726405893], [1437962112.0, 35080000.0, -0.9987369566060175], [1437963840.0, 35100000.0, -0.9980267284282717], [1437965568.0, 35120000.0, -0.997158900260614], [1437967296.0, 35140000.0, -0.9961336091431727], [1437969024.0, 35160000.0, -0.9949510169813002], [1437970752.0, 35180000.0, -0.9936113105200085], [1437972480.0, 35200000.0, -0.992114701314478], [1437974208.0, 35220000.0, -0.9904614256966515], [1437975936.0, 35240000.0, -0.988651744737914], [1437977664.0, 35260000.0, -0.9866859442078681], [1437979392.0, 35280000.0, -0.9845643345292056], [1437981120.0, 35300000.0, -0.982287250728689], [1437982848.0, 35320000.0, -0.9798550523842467], [1437984576.0, 35340000.0, -0.9772681235681941], [1437986304.0, 35360000.0, -0.9745268727865773], [1437988032.0, 35380000.0, -0.9716317329146743], [1437989760.0, 35400000.0, -0.9685831611286317], [1437991488.0, 35420000.0, -0.9653816388332747], [1437993216.0, 35440000.0, -0.9620276715860859], [1437994944.0, 35460000.0, -0.9585217890173762], [1437996672.0, 35480000.0, -0.9548645447466435], [1437998400.0, 35500000.0, -0.9510565162951544], [1438000128.0, 35520000.0, -0.9470983049947442], [1438001856.0, 35540000.0, -0.9429905358928646], [1438003584.0, 35560000.0, -0.9387338576538746], [1438005312.0, 35580000.0, -0.9343289424566128], [1438007040.0, 35600000.0, -0.9297764858882512], [1438008768.0, 35620000.0, -0.9250772068344582], [1438010496.0, 35640000.0, -0.9202318473658707], [1438012224.0, 35660000.0, -0.9152411726209183], [1438013952.0, 35680000.0, -0.9101059706849953], [1438015680.0, 35700000.0, -0.9048270524660209], [1438017408.0, 35720000.0, -0.8994052515663713], [1438019136.0, 35740000.0, -0.8938414241512644], [1438020864.0, 35760000.0, -0.8881364488135455], [1438022592.0, 35780000.0, -0.8822912264349546], [1438024320.0, 35800000.0, -0.8763066800438637], [1438026048.0, 35820000.0, -0.8701837546695261], [1438027776.0, 35840000.0, -0.8639234171928362], [1438029504.0, 35860000.0, -0.8575266561936535], [1438031232.0, 35880000.0, -0.8509944817946917], [1438032960.0, 35900000.0, -0.8443279255020154], [1438034688.0, 35920000.0, -0.8375280400421424], [1438036416.0, 35940000.0, -0.8305958991958138], [1438038144.0, 35960000.0, -0.823532597628427], [1438039872.0, 35980000.0, -0.816339250717184], [1438041600.0, 36000000.0, -0.8090169943749479], [1438043328.0, 36020000.0, -0.8015669848708775], [1438045056.0, 36040000.0, -0.7939903986478346], [1438046784.0, 36060000.0, -0.7862884321366209], [1438048512.0, 36080000.0, -0.7784623015670237], [1438050240.0, 36100000.0, -0.77051324277579], [1438051968.0, 36120000.0, -0.7624425110114492], [1438053696.0, 36140000.0, -0.7542513807361056], [1438055424.0, 36160000.0, -0.7459411454241821], [1438057152.0, 36180000.0, -0.7375131173581745], [1438058880.0, 36200000.0, -0.7289686274214127], [1438060608.0, 36220000.0, -0.7203090248879085], [1438062336.0, 36240000.0, -0.7115356772092851], [1438064064.0, 36260000.0, -0.7026499697988495], [1438065792.0, 36280000.0, -0.6936533058128058], [1438067520.0, 36300000.0, -0.6845471059286901], [1438069248.0, 36320000.0, -0.6753328081210238], [1438070976.0, 36340000.0, -0.6660118674342516], [1438072704.0, 36360000.0, -0.656585755752957], [1438074432.0, 36380000.0, -0.6470559615694454], [1438076160.0, 36400000.0, -0.6374239897486887], [1438077888.0, 36420000.0, -0.6276913612907029], [1438079616.0, 36440000.0, -0.6178596130903345], [1438081344.0, 36460000.0, -0.6079302976946063], [1438083072.0, 36480000.0, -0.5979049830575175], [1438084800.0, 36500000.0, -0.5877852522924752], [1438086528.0, 36520000.0, -0.5775727034222675], [1438088256.0, 36540000.0, -0.5672689491267571], [1438089984.0, 36560000.0, -0.5568756164881892], [1438091712.0, 36580000.0, -0.546394346734271], [1438093440.0, 36600000.0, -0.5358267949789962], [1438095168.0, 36620000.0, -0.5251746299612959], [1438096896.0, 36640000.0, -0.5144395337815073], [1438098624.0, 36660000.0, -0.5036232016357625], [1438100352.0, 36680000.0, -0.49272734154829073], [1438102080.0, 36700000.0, -0.4817536741017151], [1438103808.0, 36720000.0, -0.4707039321653331], [1438105536.0, 36740000.0, -0.4595798606214891], [1438107264.0, 36760000.0, -0.448383216090031], [1438108992.0, 36780000.0, -0.43711576665093554], [1438110720.0, 36800000.0, -0.4257792915650728], [1438112448.0, 36820000.0, -0.41437558099328503], [1438114176.0, 36840000.0, -0.402906435713661], [1438115904.0, 36860000.0, -0.39137366683720476], [1438117632.0, 36880000.0, -0.3797790955218009], [1438119360.0, 36900000.0, -0.3681245526846785], [1438121088.0, 36920000.0, -0.356411878713252], [1438122816.0, 36940000.0, -0.34464292317451906], [1438124544.0, 36960000.0, -0.332819544522986], [1438126272.0, 36980000.0, -0.3209436098072096], [1438128000.0, 37000000.0, -0.3090169943749483], [1438129728.0, 37020000.0, -0.29704158157703653], [1438131456.0, 37040000.0, -0.2850192624699751], [1438133184.0, 37060000.0, -0.27295193551732494], [1438134912.0, 37080000.0, -0.2608415062898974], [1438136640.0, 37100000.0, -0.24868988716485602], [1438138368.0, 37120000.0, -0.2364989970237232], [1438140096.0, 37140000.0, -0.22427076094938395], [1438141824.0, 37160000.0, -0.2120071099220547], [1438143552.0, 37180000.0, -0.19970998051440783], [1438145280.0, 37200000.0, -0.18738131458572274], [1438147008.0, 37220000.0, -0.17502305897527842], [1438148736.0, 37240000.0, -0.16263716519488325], [1438150464.0, 37260000.0, -0.15022558912075745], [1438152192.0, 37280000.0, -0.13779029068463924], [1438153920.0, 37300000.0, -0.1253332335643062], [1438155648.0, 37320000.0, -0.1128563848734809], [1438157376.0, 37340000.0, -0.10036171485121488], [1438159104.0, 37360000.0, -0.08785119655074394], [1438160832.0, 37380000.0, -0.07532680552793428], [1438162560.0, 37400000.0, -0.06279051952931217], [1438164288.0, 37420000.0, -0.050244318179769126], [1438166016.0, 37440000.0, -0.03769018266993489], [1438167744.0, 37460000.0, -0.02513009544333861], [1438169472.0, 37480000.0, -0.012566039883350968], [1438171200.0, 37500000.0, -2.6948419387607653e-15], [1438172928.0, 37520000.0, 0.012566039883349131], [1438174656.0, 37540000.0, 0.02513009544333677], [1438176384.0, 37560000.0, 0.03769018266993305], [1438178112.0, 37580000.0, 0.05024431817976729], [1438179840.0, 37600000.0, 0.06279051952931033], [1438181568.0, 37620000.0, 0.07532680552793244], [1438183296.0, 37640000.0, 0.08785119655074211], [1438185024.0, 37660000.0, 0.10036171485121305], [1438186752.0, 37680000.0, 0.11285638487347907], [1438188480.0, 37700000.0, 0.1253332335643044], [1438190208.0, 37720000.0, 0.13779029068463744], [1438191936.0, 37740000.0, 0.15022558912075565], [1438193664.0, 37760000.0, 0.16263716519488142], [1438195392.0, 37780000.0, 0.17502305897527662], [1438197120.0, 37800000.0, 0.18738131458572094], [1438198848.0, 37820000.0, 0.19970998051440603], [1438200576.0, 37840000.0, 0.2120071099220529], [1438202304.0, 37860000.0, 0.22427076094938214], [1438204032.0, 37880000.0, 0.23649899702372143], [1438205760.0, 37900000.0, 0.24868988716485424], [1438207488.0, 37920000.0, 0.2608415062898956], [1438209216.0, 37940000.0, 0.27295193551732316], [1438210944.0, 37960000.0, 0.28501926246997333], [1438212672.0, 37980000.0, 0.29704158157703475], [1438214400.0, 38000000.0, 0.30901699437494656], [1438216128.0, 38020000.0, 0.3209436098072079], [1438217856.0, 38040000.0, 0.3328195445229843], [1438219584.0, 38060000.0, 0.34464292317451733], [1438221312.0, 38080000.0, 0.35641187871325025], [1438223040.0, 38100000.0, 0.36812455268467675], [1438224768.0, 38120000.0, 0.37977909552179917], [1438226496.0, 38140000.0, 0.39137366683720304], [1438228224.0, 38160000.0, 0.4029064357136593], [1438229952.0, 38180000.0, 0.41437558099328337], [1438231680.0, 38200000.0, 0.42577929156507116], [1438233408.0, 38220000.0, 0.43711576665093393], [1438235136.0, 38240000.0, 0.4483832160900294], [1438236864.0, 38260000.0, 0.4595798606214875], [1438238592.0, 38280000.0, 0.47070393216533146], [1438240320.0, 38300000.0, 0.4817536741017135], [1438242048.0, 38320000.0, 0.4927273415482891], [1438243776.0, 38340000.0, 0.5036232016357608], [1438245504.0, 38360000.0, 0.5144395337815058], [1438247232.0, 38380000.0, 0.5251746299612944], [1438248960.0, 38400000.0, 0.5358267949789947], [1438250688.0, 38420000.0, 0.5463943467342695], [1438252416.0, 38440000.0, 0.5568756164881877], [1438254144.0, 38460000.0, 0.5672689491267555], [1438255872.0, 38480000.0, 0.577572703422266], [1438257600.0, 38500000.0, 0.5877852522924738], [1438259328.0, 38520000.0, 0.597904983057516], [1438261056.0, 38540000.0, 0.6079302976946048], [1438262784.0, 38560000.0, 0.6178596130903331], [1438264512.0, 38580000.0, 0.6276913612907015], [1438266240.0, 38600000.0, 0.6374239897486873], [1438267968.0, 38620000.0, 0.6470559615694441], [1438269696.0, 38640000.0, 0.6565857557529556], [1438271424.0, 38660000.0, 0.6660118674342502], [1438273152.0, 38680000.0, 0.6753328081210225], [1438274880.0, 38700000.0, 0.6845471059286887], [1438276608.0, 38720000.0, 0.6936533058128045], [1438278336.0, 38740000.0, 0.7026499697988482], [1438280064.0, 38760000.0, 0.7115356772092838], [1438281792.0, 38780000.0, 0.7203090248879073], [1438283520.0, 38800000.0, 0.7289686274214113], [1438285248.0, 38820000.0, 0.7375131173581733], [1438286976.0, 38840000.0, 0.7459411454241809], [1438288704.0, 38860000.0, 0.7542513807361044], [1438290432.0, 38880000.0, 0.762442511011448], [1438292160.0, 38900000.0, 0.7705132427757888], [1438293888.0, 38920000.0, 0.7784623015670226], [1438295616.0, 38940000.0, 0.7862884321366198], [1438297344.0, 38960000.0, 0.7939903986478335], [1438299072.0, 38980000.0, 0.8015669848708765], [1438300800.0, 39000000.0, 0.8090169943749469], [1438302528.0, 39020000.0, 0.8163392507171829], [1438304256.0, 39040000.0, 0.823532597628426], [1438305984.0, 39060000.0, 0.8305958991958128], [1438307712.0, 39080000.0, 0.8375280400421414], [1438309440.0, 39100000.0, 0.8443279255020144], [1438311168.0, 39120000.0, 0.8509944817946907], [1438312896.0, 39140000.0, 0.8575266561936526], [1438314624.0, 39160000.0, 0.8639234171928353], [1438316352.0, 39180000.0, 0.8701837546695252], [1438318080.0, 39200000.0, 0.8763066800438628], [1438319808.0, 39220000.0, 0.8822912264349538], [1438321536.0, 39240000.0, 0.8881364488135447], [1438323264.0, 39260000.0, 0.8938414241512636], [1438324992.0, 39280000.0, 0.8994052515663705], [1438326720.0, 39300000.0, 0.9048270524660201], [1438328448.0, 39320000.0, 0.9101059706849945], [1438330176.0, 39340000.0, 0.9152411726209175], [1438331904.0, 39360000.0, 0.92023184736587], [1438333632.0, 39380000.0, 0.9250772068344575], [1438335360.0, 39400000.0, 0.9297764858882506], [1438337088.0, 39420000.0, 0.9343289424566121], [1438338816.0, 39440000.0, 0.938733857653874], [1438340544.0, 39460000.0, 0.9429905358928641], [1438342272.0, 39480000.0, 0.9470983049947437], [1438344000.0, 39500000.0, 0.9510565162951539], [1438345728.0, 39520000.0, 0.954864544746643], [1438347456.0, 39540000.0, 0.9585217890173757], [1438349184.0, 39560000.0, 0.9620276715860855], [1438350912.0, 39580000.0, 0.9653816388332742], [1438352640.0, 39600000.0, 0.9685831611286312], [1438354368.0, 39620000.0, 0.9716317329146739], [1438356096.0, 39640000.0, 0.9745268727865769], [1438357824.0, 39660000.0, 0.9772681235681938], [1438359552.0, 39680000.0, 0.9798550523842463], [1438361280.0, 39700000.0, 0.9822872507286887], [1438363008.0, 39720000.0, 0.9845643345292052], [1438364736.0, 39740000.0, 0.9866859442078678], [1438366464.0, 39760000.0, 0.9886517447379136], [1438368192.0, 39780000.0, 0.9904614256966513], [1438369920.0, 39800000.0, 0.9921147013144778], [1438371648.0, 39820000.0, 0.9936113105200083], [1438373376.0, 39840000.0, 0.9949510169813], [1438375104.0, 39860000.0, 0.9961336091431725], [1438376832.0, 39880000.0, 0.9971589002606139], [1438378560.0, 39900000.0, 0.9980267284282716], [1438380288.0, 39920000.0, 0.9987369566060175], [1438382016.0, 39940000.0, 0.9992894726405893], [1438383744.0, 39960000.0, 0.9996841892833], [1438385472.0, 39980000.0, 0.9999210442038161], [1438387200.0, 40000000.0, 1.0], [1438388928.0, 40020000.0, 0.9999210442038161], [1438390656.0, 40040000.0, 0.9996841892833], [1438392384.0, 40060000.0, 0.9992894726405892], [1438394112.0, 40080000.0, 0.9987369566060176], [1438395840.0, 40100000.0, 0.9980267284282717], [1438397568.0, 40120000.0, 0.997158900260614], [1438399296.0, 40140000.0, 0.9961336091431724], [1438401024.0, 40160000.0, 0.9949510169813002], [1438402752.0, 40180000.0, 0.9936113105200085], [1438404480.0, 40200000.0, 0.9921147013144785], [1438406208.0, 40220000.0, 0.9904614256966511], [1438407936.0, 40240000.0, 0.988651744737914], [1438409664.0, 40260000.0, 0.9866859442078681], [1438411392.0, 40280000.0, 0.9845643345292062], [1438413120.0, 40300000.0, 0.9822872507286884], [1438414848.0, 40320000.0, 0.9798550523842467], [1438416576.0, 40340000.0, 0.9772681235681943], [1438418304.0, 40360000.0, 0.9745268727865781], [1438420032.0, 40380000.0, 0.9716317329146735], [1438421760.0, 40400000.0, 0.9685831611286317], [1438423488.0, 40420000.0, 0.9653816388332748], [1438425216.0, 40440000.0, 0.9620276715860869], [1438426944.0, 40460000.0, 0.9585217890173752], [1438428672.0, 40480000.0, 0.9548645447466435], [1438430400.0, 40500000.0, 0.9510565162951544], [1438432128.0, 40520000.0, 0.9470983049947455], [1438433856.0, 40540000.0, 0.9429905358928647], [1438435584.0, 40560000.0, 0.9387338576538746], [1438437312.0, 40580000.0, 0.9343289424566129], [1438439040.0, 40600000.0, 0.9297764858882526], [1438440768.0, 40620000.0, 0.9250772068344582], [1438442496.0, 40640000.0, 0.9202318473658708], [1438444224.0, 40660000.0, 0.9152411726209183], [1438445952.0, 40680000.0, 0.9101059706849968], [1438447680.0, 40700000.0, 0.9048270524660195], [1438449408.0, 40720000.0, 0.8994052515663713], [1438451136.0, 40740000.0, 0.8938414241512644], [1438452864.0, 40760000.0, 0.8881364488135456], [1438454592.0, 40780000.0, 0.8822912264349531], [1438456320.0, 40800000.0, 0.8763066800438637], [1438458048.0, 40820000.0, 0.8701837546695262], [1438459776.0, 40840000.0, 0.8639234171928363], [1438461504.0, 40860000.0, 0.8575266561936518], [1438463232.0, 40880000.0, 0.8509944817946918], [1438464960.0, 40900000.0, 0.8443279255020154], [1438466688.0, 40920000.0, 0.8375280400421444], [1438468416.0, 40940000.0, 0.8305958991958119], [1438470144.0, 40960000.0, 0.8235325976284271], [1438471872.0, 40980000.0, 0.816339250717184], [1438473600.0, 41000000.0, 0.8090169943749501], [1438475328.0, 41020000.0, 0.8015669848708755], [1438477056.0, 41040000.0, 0.7939903986478347], [1438478784.0, 41060000.0, 0.7862884321366209], [1438480512.0, 41080000.0, 0.778462301567026], [1438482240.0, 41100000.0, 0.7705132427757878], [1438483968.0, 41120000.0, 0.7624425110114492], [1438485696.0, 41140000.0, 0.7542513807361058], [1438487424.0, 41160000.0, 0.7459411454241847], [1438489152.0, 41180000.0, 0.7375131173581722], [1438490880.0, 41200000.0, 0.7289686274214127], [1438492608.0, 41220000.0, 0.7203090248879086], [1438494336.0, 41240000.0, 0.7115356772092877], [1438496064.0, 41260000.0, 0.7026499697988495], [1438497792.0, 41280000.0, 0.6936533058128059], [1438499520.0, 41300000.0, 0.6845471059286902], [1438501248.0, 41320000.0, 0.6753328081210266], [1438502976.0, 41340000.0, 0.6660118674342517], [1438504704.0, 41360000.0, 0.6565857557529571], [1438506432.0, 41380000.0, 0.6470559615694456], [1438508160.0, 41400000.0, 0.6374239897486916], [1438509888.0, 41420000.0, 0.6276913612907002], [1438511616.0, 41440000.0, 0.6178596130903347], [1438513344.0, 41460000.0, 0.6079302976946064], [1438515072.0, 41480000.0, 0.5979049830575205], [1438516800.0, 41500000.0, 0.5877852522924725], [1438518528.0, 41520000.0, 0.5775727034222676], [1438520256.0, 41540000.0, 0.5672689491267572], [1438521984.0, 41560000.0, 0.5568756164881893], [1438523712.0, 41580000.0, 0.5463943467342681], [1438525440.0, 41600000.0, 0.5358267949789963], [1438527168.0, 41620000.0, 0.525174629961296], [1438528896.0, 41640000.0, 0.5144395337815074], [1438530624.0, 41660000.0, 0.5036232016357595], [1438532352.0, 41680000.0, 0.49272734154829084], [1438534080.0, 41700000.0, 0.4817536741017152], [1438535808.0, 41720000.0, 0.47070393216533635], [1438537536.0, 41740000.0, 0.45957986062148604], [1438539264.0, 41760000.0, 0.4483832160900311], [1438540992.0, 41780000.0, 0.43711576665093566], [1438542720.0, 41800000.0, 0.42577929156507616], [1438544448.0, 41820000.0, 0.4143755809932819], [1438546176.0, 41840000.0, 0.40290643571366114], [1438547904.0, 41860000.0, 0.39137366683720487], [1438549632.0, 41880000.0, 0.3797790955218043], [1438551360.0, 41900000.0, 0.36812455268467525], [1438553088.0, 41920000.0, 0.3564118787132521], [1438554816.0, 41940000.0, 0.34464292317451917], [1438556544.0, 41960000.0, 0.3328195445229895], [1438558272.0, 41980000.0, 0.3209436098072097], [1438560000.0, 42000000.0, 0.3090169943749484], [1438561728.0, 42020000.0, 0.29704158157703664], [1438563456.0, 42040000.0, 0.2850192624699786], [1438565184.0, 42060000.0, 0.27295193551732505], [1438566912.0, 42080000.0, 0.2608415062898975], [1438568640.0, 42100000.0, 0.24868988716485613], [1438570368.0, 42120000.0, 0.2364989970237268], [1438572096.0, 42140000.0, 0.2242707609493806], [1438573824.0, 42160000.0, 0.21200710992205482], [1438575552.0, 42180000.0, 0.19970998051440797], [1438577280.0, 42200000.0, 0.18738131458572635], [1438579008.0, 42220000.0, 0.17502305897527504], [1438580736.0, 42240000.0, 0.16263716519488336], [1438582464.0, 42260000.0, 0.1502255891207576], [1438584192.0, 42280000.0, 0.13779029068463938], [1438585920.0, 42300000.0, 0.12533323356430282], [1438587648.0, 42320000.0, 0.11285638487348103], [1438589376.0, 42340000.0, 0.100361714851215], [1438591104.0, 42360000.0, 0.08785119655074407], [1438592832.0, 42380000.0, 0.07532680552793085], [1438594560.0, 42400000.0, 0.06279051952931229], [1438596288.0, 42420000.0, 0.050244318179769244], [1438598016.0, 42440000.0, 0.03769018266993856], [1438599744.0, 42460000.0, 0.02513009544333518], [1438601472.0, 42480000.0, 0.012566039883351091], [1438603200.0, 42500000.0, -7.354070601250002e-16], [1438604928.0, 42520000.0, -0.01256603988334901], [1438606656.0, 42540000.0, -0.025130095443333098], [1438608384.0, 42560000.0, -0.03769018266993648], [1438610112.0, 42580000.0, -0.05024431817976717], [1438611840.0, 42600000.0, -0.06279051952931021], [1438613568.0, 42620000.0, -0.07532680552792878], [1438615296.0, 42640000.0, -0.087851196550742], [1438617024.0, 42660000.0, -0.10036171485121292], [1438618752.0, 42680000.0, -0.11285638487347896], [1438620480.0, 42700000.0, -0.12533323356430073], [1438622208.0, 42720000.0, -0.1377902906846373], [1438623936.0, 42740000.0, -0.15022558912075554], [1438625664.0, 42760000.0, -0.1626371651948813], [1438627392.0, 42780000.0, -0.17502305897527298], [1438629120.0, 42800000.0, -0.1873813145857243], [1438630848.0, 42820000.0, -0.19970998051440592], [1438632576.0, 42840000.0, -0.2120071099220528], [1438634304.0, 42860000.0, -0.22427076094937856], [1438636032.0, 42880000.0, -0.23649899702372476], [1438637760.0, 42900000.0, -0.2486898871648541], [1438639488.0, 42920000.0, -0.2608415062898955], [1438641216.0, 42940000.0, -0.27295193551732305], [1438642944.0, 42960000.0, -0.2850192624699766], [1438644672.0, 42980000.0, -0.29704158157703464], [1438646400.0, 43000000.0, -0.3090169943749464], [1438648128.0, 43020000.0, -0.32094360980720776], [1438649856.0, 43040000.0, -0.3328195445229875], [1438651584.0, 43060000.0, -0.3446429231745172], [1438653312.0, 43080000.0, -0.35641187871325014], [1438655040.0, 43100000.0, -0.36812455268467337], [1438656768.0, 43120000.0, -0.3797790955218024], [1438658496.0, 43140000.0, -0.3913736668372029], [1438660224.0, 43160000.0, -0.4029064357136592], [1438661952.0, 43180000.0, -0.41437558099328], [1438663680.0, 43200000.0, -0.42577929156507427], [1438665408.0, 43220000.0, -0.4371157666509338], [1438667136.0, 43240000.0, -0.4483832160900293], [1438668864.0, 43260000.0, -0.4595798606214842], [1438670592.0, 43280000.0, -0.4707039321653345], [1438672320.0, 43300000.0, -0.48175367410171344], [1438674048.0, 43320000.0, -0.492727341548289], [1438675776.0, 43340000.0, -0.5036232016357577], [1438677504.0, 43360000.0, -0.5144395337815056], [1438679232.0, 43380000.0, -0.5251746299612943], [1438680960.0, 43400000.0, -0.5358267949789945], [1438682688.0, 43420000.0, -0.5463943467342663], [1438684416.0, 43440000.0, -0.5568756164881876], [1438686144.0, 43460000.0, -0.5672689491267554], [1438687872.0, 43480000.0, -0.577572703422266], [1438689600.0, 43500000.0, -0.5877852522924708], [1438691328.0, 43520000.0, -0.5979049830575188], [1438693056.0, 43540000.0, -0.6079302976946047], [1438694784.0, 43560000.0, -0.6178596130903331], [1438696512.0, 43580000.0, -0.6276913612906986], [1438698240.0, 43600000.0, -0.63742398974869], [1438699968.0, 43620000.0, -0.647055961569444], [1438701696.0, 43640000.0, -0.6565857557529555], [1438703424.0, 43660000.0, -0.6660118674342501], [1438705152.0, 43680000.0, -0.675332808121025], [1438706880.0, 43700000.0, -0.6845471059286886], [1438708608.0, 43720000.0, -0.6936533058128044], [1438710336.0, 43740000.0, -0.7026499697988481], [1438712064.0, 43760000.0, -0.7115356772092862], [1438713792.0, 43780000.0, -0.7203090248879072], [1438715520.0, 43800000.0, -0.7289686274214113], [1438717248.0, 43820000.0, -0.7375131173581707], [1438718976.0, 43840000.0, -0.7459411454241832], [1438720704.0, 43860000.0, -0.7542513807361043], [1438722432.0, 43880000.0, -0.7624425110114479], [1438724160.0, 43900000.0, -0.7705132427757865], [1438725888.0, 43920000.0, -0.7784623015670247], [1438727616.0, 43940000.0, -0.7862884321366197], [1438729344.0, 43960000.0, -0.7939903986478335], [1438731072.0, 43980000.0, -0.8015669848708743], [1438732800.0, 44000000.0, -0.8090169943749489], [1438734528.0, 44020000.0, -0.8163392507171828], [1438736256.0, 44040000.0, -0.8235325976284259], [1438737984.0, 44060000.0, -0.8305958991958108], [1438739712.0, 44080000.0, -0.8375280400421433], [1438741440.0, 44100000.0, -0.8443279255020143], [1438743168.0, 44120000.0, -0.8509944817946907], [1438744896.0, 44140000.0, -0.8575266561936508], [1438746624.0, 44160000.0, -0.8639234171928352], [1438748352.0, 44180000.0, -0.8701837546695251], [1438750080.0, 44200000.0, -0.8763066800438627], [1438751808.0, 44220000.0, -0.8822912264349521], [1438753536.0, 44240000.0, -0.8881364488135446], [1438755264.0, 44260000.0, -0.8938414241512636], [1438756992.0, 44280000.0, -0.8994052515663704], [1438758720.0, 44300000.0, -0.9048270524660186], [1438760448.0, 44320000.0, -0.910105970684996], [1438762176.0, 44340000.0, -0.9152411726209175], [1438763904.0, 44360000.0, -0.9202318473658699], [1438765632.0, 44380000.0, -0.9250772068344574], [1438767360.0, 44400000.0, -0.9297764858882518], [1438769088.0, 44420000.0, -0.9343289424566121], [1438770816.0, 44440000.0, -0.938733857653874], [1438772544.0, 44460000.0, -0.9429905358928641], [1438774272.0, 44480000.0, -0.9470983049947448], [1438776000.0, 44500000.0, -0.9510565162951538], [1438777728.0, 44520000.0, -0.954864544746643], [1438779456.0, 44540000.0, -0.9585217890173746], [1438781184.0, 44560000.0, -0.9620276715860864], [1438782912.0, 44580000.0, -0.9653816388332742], [1438784640.0, 44600000.0, -0.9685831611286312], [1438786368.0, 44620000.0, -0.971631732914673], [1438788096.0, 44640000.0, -0.9745268727865777], [1438789824.0, 44660000.0, -0.9772681235681938], [1438791552.0, 44680000.0, -0.9798550523842463], [1438793280.0, 44700000.0, -0.982287250728688], [1438795008.0, 44720000.0, -0.9845643345292059], [1438796736.0, 44740000.0, -0.9866859442078678], [1438798464.0, 44760000.0, -0.9886517447379136], [1438800192.0, 44780000.0, -0.9904614256966507], [1438801920.0, 44800000.0, -0.9921147013144782], [1438803648.0, 44820000.0, -0.9936113105200083], [1438805376.0, 44840000.0, -0.9949510169813], [1438807104.0, 44860000.0, -0.9961336091431722], [1438808832.0, 44880000.0, -0.9971589002606139], [1438810560.0, 44900000.0, -0.9980267284282716], [1438812288.0, 44920000.0, -0.9987369566060175], [1438814016.0, 44940000.0, -0.9992894726405892], [1438815744.0, 44960000.0, -0.9996841892832999], [1438817472.0, 44980000.0, -0.9999210442038161], [1438819200.0, 45000000.0, -1.0], [1438820928.0, 45020000.0, -0.9999210442038161], [1438822656.0, 45040000.0, -0.9996841892833], [1438824384.0, 45060000.0, -0.9992894726405892], [1438826112.0, 45080000.0, -0.9987369566060176], [1438827840.0, 45100000.0, -0.9980267284282717], [1438829568.0, 45120000.0, -0.9971589002606142], [1438831296.0, 45140000.0, -0.9961336091431724], [1438833024.0, 45160000.0, -0.9949510169813002], [1438834752.0, 45180000.0, -0.9936113105200085], [1438836480.0, 45200000.0, -0.9921147013144785], [1438838208.0, 45220000.0, -0.9904614256966511], [1438839936.0, 45240000.0, -0.988651744737914], [1438841664.0, 45260000.0, -0.9866859442078681], [1438843392.0, 45280000.0, -0.9845643345292062], [1438845120.0, 45300000.0, -0.9822872507286884], [1438846848.0, 45320000.0, -0.9798550523842467], [1438848576.0, 45340000.0, -0.9772681235681943], [1438850304.0, 45360000.0, -0.9745268727865781], [1438852032.0, 45380000.0, -0.9716317329146735], [1438853760.0, 45400000.0, -0.9685831611286317], [1438855488.0, 45420000.0, -0.9653816388332748], [1438857216.0, 45440000.0, -0.962027671586087], [1438858944.0, 45460000.0, -0.9585217890173753], [1438860672.0, 45480000.0, -0.9548645447466436], [1438862400.0, 45500000.0, -0.9510565162951544], [1438864128.0, 45520000.0, -0.9470983049947455], [1438865856.0, 45540000.0, -0.9429905358928647], [1438867584.0, 45560000.0, -0.9387338576538746], [1438869312.0, 45580000.0, -0.9343289424566129], [1438871040.0, 45600000.0, -0.9297764858882526], [1438872768.0, 45620000.0, -0.9250772068344583], [1438874496.0, 45640000.0, -0.9202318473658708], [1438876224.0, 45660000.0, -0.9152411726209184], [1438877952.0, 45680000.0, -0.9101059706849969], [1438879680.0, 45700000.0, -0.9048270524660196], [1438881408.0, 45720000.0, -0.8994052515663714], [1438883136.0, 45740000.0, -0.8938414241512646], [1438884864.0, 45760000.0, -0.8881364488135456], [1438886592.0, 45780000.0, -0.8822912264349531], [1438888320.0, 45800000.0, -0.8763066800438638], [1438890048.0, 45820000.0, -0.8701837546695262], [1438891776.0, 45840000.0, -0.8639234171928363], [1438893504.0, 45860000.0, -0.8575266561936519], [1438895232.0, 45880000.0, -0.8509944817946918], [1438896960.0, 45900000.0, -0.8443279255020155], [1438898688.0, 45920000.0, -0.8375280400421445], [1438900416.0, 45940000.0, -0.830595899195812], [1438902144.0, 45960000.0, -0.8235325976284272], [1438903872.0, 45980000.0, -0.8163392507171842], [1438905600.0, 46000000.0, -0.8090169943749502], [1438907328.0, 46020000.0, -0.8015669848708756], [1438909056.0, 46040000.0, -0.7939903986478348], [1438910784.0, 46060000.0, -0.786288432136621], [1438912512.0, 46080000.0, -0.7784623015670261], [1438914240.0, 46100000.0, -0.7705132427757879], [1438915968.0, 46120000.0, -0.7624425110114493], [1438917696.0, 46140000.0, -0.7542513807361058], [1438919424.0, 46160000.0, -0.7459411454241847], [1438921152.0, 46180000.0, -0.7375131173581723], [1438922880.0, 46200000.0, -0.7289686274214128], [1438924608.0, 46220000.0, -0.7203090248879087], [1438926336.0, 46240000.0, -0.7115356772092878], [1438928064.0, 46260000.0, -0.7026499697988496], [1438929792.0, 46280000.0, -0.693653305812806], [1438931520.0, 46300000.0, -0.6845471059286903], [1438933248.0, 46320000.0, -0.6753328081210266], [1438934976.0, 46340000.0, -0.6660118674342518], [1438936704.0, 46360000.0, -0.6565857557529572], [1438938432.0, 46380000.0, -0.6470559615694457], [1438940160.0, 46400000.0, -0.6374239897486916], [1438941888.0, 46420000.0, -0.6276913612907004], [1438943616.0, 46440000.0, -0.6178596130903348], [1438945344.0, 46460000.0, -0.6079302976946065], [1438947072.0, 46480000.0, -0.5979049830575206], [1438948800.0, 46500000.0, -0.5877852522924726], [1438950528.0, 46520000.0, -0.5775727034222677], [1438952256.0, 46540000.0, -0.5672689491267573], [1438953984.0, 46560000.0, -0.5568756164881894], [1438955712.0, 46580000.0, -0.5463943467342682], [1438957440.0, 46600000.0, -0.5358267949789964], [1438959168.0, 46620000.0, -0.5251746299612962], [1438960896.0, 46640000.0, -0.5144395337815075], [1438962624.0, 46660000.0, -0.5036232016357596], [1438964352.0, 46680000.0, -0.49272734154829095], [1438966080.0, 46700000.0, -0.4817536741017153], [1438967808.0, 46720000.0, -0.47070393216533646], [1438969536.0, 46740000.0, -0.45957986062148615], [1438971264.0, 46760000.0, -0.44838321609003123], [1438972992.0, 46780000.0, -0.43711576665093577], [1438974720.0, 46800000.0, -0.42577929156507627], [1438976448.0, 46820000.0, -0.41437558099328203], [1438978176.0, 46840000.0, -0.40290643571366125], [1438979904.0, 46860000.0, -0.391373666837205], [1438981632.0, 46880000.0, -0.3797790955218044], [1438983360.0, 46900000.0, -0.3681245526846754], [1438985088.0, 46920000.0, -0.3564118787132522], [1438986816.0, 46940000.0, -0.3446429231745193], [1438988544.0, 46960000.0, -0.3328195445229896], [1438990272.0, 46980000.0, -0.3209436098072098], [1438992000.0, 47000000.0, -0.3090169943749485], [1438993728.0, 47020000.0, -0.29704158157703675], [1438995456.0, 47040000.0, -0.2850192624699787], [1438997184.0, 47060000.0, -0.27295193551732516], [1438998912.0, 47080000.0, -0.2608415062898976], [1439000640.0, 47100000.0, -0.24868988716485624], [1439002368.0, 47120000.0, -0.2364989970237269], [1439004096.0, 47140000.0, -0.22427076094938073], [1439005824.0, 47160000.0, -0.21200710992205493], [1439007552.0, 47180000.0, -0.19970998051440808], [1439009280.0, 47200000.0, -0.18738131458572646], [1439011008.0, 47220000.0, -0.17502305897527515], [1439012736.0, 47240000.0, -0.16263716519488347], [1439014464.0, 47260000.0, -0.1502255891207577], [1439016192.0, 47280000.0, -0.1377902906846395], [1439017920.0, 47300000.0, -0.12533323356430293], [1439019648.0, 47320000.0, -0.11285638487348114], [1439021376.0, 47340000.0, -0.10036171485121512], [1439023104.0, 47360000.0, -0.08785119655074419], [1439024832.0, 47380000.0, -0.07532680552793097], [1439026560.0, 47400000.0, -0.0627905195293124], [1439028288.0, 47420000.0, -0.05024431817976937], [1439030016.0, 47440000.0, -0.037690182669938684], [1439031744.0, 47460000.0, -0.025130095443335304], [1439033472.0, 47480000.0, -0.012566039883351213], [1439035200.0, 47500000.0, -2.939771298590236e-15], [1439036928.0, 47520000.0, 0.012566039883348886], [1439038656.0, 47540000.0, 0.025130095443332976], [1439040384.0, 47560000.0, 0.03769018266993636], [1439042112.0, 47580000.0, 0.050244318179767045], [1439043840.0, 47600000.0, 0.06279051952931008], [1439045568.0, 47620000.0, 0.07532680552792866], [1439047296.0, 47640000.0, 0.08785119655074188], [1439049024.0, 47660000.0, 0.10036171485121281], [1439050752.0, 47680000.0, 0.11285638487347883], [1439052480.0, 47700000.0, 0.12533323356430062], [1439054208.0, 47720000.0, 0.1377902906846372], [1439055936.0, 47740000.0, 0.1502255891207554], [1439057664.0, 47760000.0, 0.1626371651948812], [1439059392.0, 47780000.0, 0.17502305897527287], [1439061120.0, 47800000.0, 0.18738131458572418], [1439062848.0, 47820000.0, 0.1997099805144058], [1439064576.0, 47840000.0, 0.21200710992205266], [1439066304.0, 47860000.0, 0.22427076094937845], [1439068032.0, 47880000.0, 0.23649899702372465], [1439069760.0, 47900000.0, 0.248689887164854], [1439071488.0, 47920000.0, 0.2608415062898954], [1439073216.0, 47940000.0, 0.27295193551732294], [1439074944.0, 47960000.0, 0.2850192624699765], [1439076672.0, 47980000.0, 0.29704158157703453], [1439078400.0, 48000000.0, 0.3090169943749463], [1439080128.0, 48020000.0, 0.32094360980720765], [1439081856.0, 48040000.0, 0.3328195445229874], [1439083584.0, 48060000.0, 0.3446429231745171], [1439085312.0, 48080000.0, 0.35641187871325003], [1439087040.0, 48100000.0, 0.36812455268467326], [1439088768.0, 48120000.0, 0.3797790955218022], [1439090496.0, 48140000.0, 0.3913736668372028], [1439092224.0, 48160000.0, 0.4029064357136591], [1439093952.0, 48180000.0, 0.41437558099327987], [1439095680.0, 48200000.0, 0.42577929156507416], [1439097408.0, 48220000.0, 0.4371157666509337], [1439099136.0, 48240000.0, 0.4483832160900292], [1439100864.0, 48260000.0, 0.4595798606214841], [1439102592.0, 48280000.0, 0.4707039321653344], [1439104320.0, 48300000.0, 0.4817536741017133], [1439106048.0, 48320000.0, 0.49272734154828896], [1439107776.0, 48340000.0, 0.5036232016357576], [1439109504.0, 48360000.0, 0.5144395337815055], [1439111232.0, 48380000.0, 0.5251746299612942], [1439112960.0, 48400000.0, 0.5358267949789944], [1439114688.0, 48420000.0, 0.5463943467342662], [1439116416.0, 48440000.0, 0.5568756164881875], [1439118144.0, 48460000.0, 0.5672689491267553], [1439119872.0, 48480000.0, 0.5775727034222659], [1439121600.0, 48500000.0, 0.5877852522924707], [1439123328.0, 48520000.0, 0.5979049830575187], [1439125056.0, 48540000.0, 0.6079302976946046], [1439126784.0, 48560000.0, 0.617859613090333], [1439128512.0, 48580000.0, 0.6276913612906985], [1439130240.0, 48600000.0, 0.6374239897486899], [1439131968.0, 48620000.0, 0.6470559615694439], [1439133696.0, 48640000.0, 0.6565857557529554], [1439135424.0, 48660000.0, 0.66601186743425], [1439137152.0, 48680000.0, 0.6753328081210249], [1439138880.0, 48700000.0, 0.6845471059286886], [1439140608.0, 48720000.0, 0.6936533058128043], [1439142336.0, 48740000.0, 0.702649969798848], [1439144064.0, 48760000.0, 0.7115356772092861], [1439145792.0, 48780000.0, 0.720309024887907], [1439147520.0, 48800000.0, 0.7289686274214112], [1439149248.0, 48820000.0, 0.7375131173581706], [1439150976.0, 48840000.0, 0.7459411454241831], [1439152704.0, 48860000.0, 0.7542513807361043], [1439154432.0, 48880000.0, 0.7624425110114478], [1439156160.0, 48900000.0, 0.7705132427757865], [1439157888.0, 48920000.0, 0.7784623015670247], [1439159616.0, 48940000.0, 0.7862884321366196], [1439161344.0, 48960000.0, 0.7939903986478334], [1439163072.0, 48980000.0, 0.8015669848708742], [1439164800.0, 49000000.0, 0.8090169943749488], [1439166528.0, 49020000.0, 0.8163392507171828], [1439168256.0, 49040000.0, 0.8235325976284259], [1439169984.0, 49060000.0, 0.8305958991958107], [1439171712.0, 49080000.0, 0.8375280400421432], [1439173440.0, 49100000.0, 0.8443279255020143], [1439175168.0, 49120000.0, 0.8509944817946906], [1439176896.0, 49140000.0, 0.8575266561936506], [1439178624.0, 49160000.0, 0.8639234171928352], [1439180352.0, 49180000.0, 0.8701837546695251], [1439182080.0, 49200000.0, 0.8763066800438627], [1439183808.0, 49220000.0, 0.8822912264349521], [1439185536.0, 49240000.0, 0.8881364488135446], [1439187264.0, 49260000.0, 0.8938414241512634], [1439188992.0, 49280000.0, 0.8994052515663704], [1439190720.0, 49300000.0, 0.9048270524660186], [1439192448.0, 49320000.0, 0.9101059706849959], [1439194176.0, 49340000.0, 0.9152411726209174], [1439195904.0, 49360000.0, 0.9202318473658699], [1439197632.0, 49380000.0, 0.9250772068344574], [1439199360.0, 49400000.0, 0.9297764858882518], [1439201088.0, 49420000.0, 0.9343289424566121], [1439202816.0, 49440000.0, 0.9387338576538738], [1439204544.0, 49460000.0, 0.942990535892864], [1439206272.0, 49480000.0, 0.9470983049947447], [1439208000.0, 49500000.0, 0.9510565162951538], [1439209728.0, 49520000.0, 0.9548645447466428], [1439211456.0, 49540000.0, 0.9585217890173746], [1439213184.0, 49560000.0, 0.9620276715860864], [1439214912.0, 49580000.0, 0.9653816388332741], [1439216640.0, 49600000.0, 0.9685831611286312], [1439218368.0, 49620000.0, 0.971631732914673], [1439220096.0, 49640000.0, 0.9745268727865777], [1439221824.0, 49660000.0, 0.9772681235681938], [1439223552.0, 49680000.0, 0.9798550523842463], [1439225280.0, 49700000.0, 0.9822872507286879], [1439227008.0, 49720000.0, 0.9845643345292059], [1439228736.0, 49740000.0, 0.9866859442078678], [1439230464.0, 49760000.0, 0.9886517447379136], [1439232192.0, 49780000.0, 0.9904614256966507], [1439233920.0, 49800000.0, 0.9921147013144782], [1439235648.0, 49820000.0, 0.9936113105200083], [1439237376.0, 49840000.0, 0.9949510169813], [1439239104.0, 49860000.0, 0.9961336091431722], [1439240832.0, 49880000.0, 0.9971589002606139], [1439242560.0, 49900000.0, 0.9980267284282716], [1439244288.0, 49920000.0, 0.9987369566060175], [1439246016.0, 49940000.0, 0.9992894726405892], [1439247744.0, 49960000.0, 0.9996841892832999], [1439249472.0, 49980000.0, 0.9999210442038161], [1439251200.0, 50000000.0, 1.0], [1439252928.0, 50020000.0, 0.9999210442038161], [1439254656.0, 50040000.0, 0.9996841892833], [1439256384.0, 50060000.0, 0.9992894726405892], [1439258112.0, 50080000.0, 0.9987369566060176], [1439259840.0, 50100000.0, 0.9980267284282717], [1439261568.0, 50120000.0, 0.9971589002606142], [1439263296.0, 50140000.0, 0.9961336091431724], [1439265024.0, 50160000.0, 0.9949510169813002], [1439266752.0, 50180000.0, 0.9936113105200085], [1439268480.0, 50200000.0, 0.9921147013144785], [1439270208.0, 50220000.0, 0.9904614256966511], [1439271936.0, 50240000.0, 0.988651744737914], [1439273664.0, 50260000.0, 0.9866859442078681], [1439275392.0, 50280000.0, 0.9845643345292062], [1439277120.0, 50300000.0, 0.9822872507286885], [1439278848.0, 50320000.0, 0.9798550523842467], [1439280576.0, 50340000.0, 0.9772681235681943], [1439282304.0, 50360000.0, 0.9745268727865782], [1439284032.0, 50380000.0, 0.9716317329146735], [1439285760.0, 50400000.0, 0.9685831611286317], [1439287488.0, 50420000.0, 0.9653816388332748], [1439289216.0, 50440000.0, 0.962027671586087], [1439290944.0, 50460000.0, 0.9585217890173753], [1439292672.0, 50480000.0, 0.9548645447466436], [1439294400.0, 50500000.0, 0.9510565162951545], [1439296128.0, 50520000.0, 0.9470983049947455], [1439297856.0, 50540000.0, 0.9429905358928649], [1439299584.0, 50560000.0, 0.9387338576538747], [1439301312.0, 50580000.0, 0.934328942456613], [1439303040.0, 50600000.0, 0.9297764858882527], [1439304768.0, 50620000.0, 0.9250772068344583], [1439306496.0, 50640000.0, 0.9202318473658708], [1439308224.0, 50660000.0, 0.9152411726209184], [1439309952.0, 50680000.0, 0.9101059706849969], [1439311680.0, 50700000.0, 0.9048270524660196], [1439313408.0, 50720000.0, 0.8994052515663714], [1439315136.0, 50740000.0, 0.8938414241512646], [1439316864.0, 50760000.0, 0.8881364488135457], [1439318592.0, 50780000.0, 0.8822912264349532], [1439320320.0, 50800000.0, 0.8763066800438638], [1439322048.0, 50820000.0, 0.8701837546695264], [1439323776.0, 50840000.0, 0.8639234171928364], [1439325504.0, 50860000.0, 0.8575266561936519], [1439327232.0, 50880000.0, 0.850994481794692], [1439328960.0, 50900000.0, 0.8443279255020155], [1439330688.0, 50920000.0, 0.8375280400421445], [1439332416.0, 50940000.0, 0.830595899195814], [1439334144.0, 50960000.0, 0.8235325976284292], [1439335872.0, 50980000.0, 0.8163392507171863], [1439337600.0, 51000000.0, 0.8090169943749502], [1439339328.0, 51020000.0, 0.8015669848708756], [1439341056.0, 51040000.0, 0.7939903986478348], [1439342784.0, 51060000.0, 0.7862884321366189], [1439344512.0, 51080000.0, 0.7784623015670239], [1439346240.0, 51100000.0, 0.7705132427757903], [1439347968.0, 51120000.0, 0.7624425110114494], [1439349696.0, 51140000.0, 0.7542513807361059], [1439351424.0, 51160000.0, 0.7459411454241848], [1439353152.0, 51180000.0, 0.7375131173581723], [1439354880.0, 51200000.0, 0.7289686274214104], [1439356608.0, 51220000.0, 0.7203090248879064], [1439358336.0, 51240000.0, 0.7115356772092853], [1439360064.0, 51260000.0, 0.7026499697988497], [1439361792.0, 51280000.0, 0.693653305812806], [1439363520.0, 51300000.0, 0.6845471059286904], [1439365248.0, 51320000.0, 0.6753328081210267], [1439366976.0, 51340000.0, 0.6660118674342492], [1439368704.0, 51360000.0, 0.6565857557529546], [1439370432.0, 51380000.0, 0.647055961569443], [1439372160.0, 51400000.0, 0.6374239897486945], [1439373888.0, 51420000.0, 0.6276913612907004], [1439375616.0, 51440000.0, 0.6178596130903349], [1439377344.0, 51460000.0, 0.6079302976946066], [1439379072.0, 51480000.0, 0.5979049830575207], [1439380800.0, 51500000.0, 0.5877852522924698], [1439382528.0, 51520000.0, 0.5775727034222707], [1439384256.0, 51540000.0, 0.5672689491267603], [1439385984.0, 51560000.0, 0.5568756164881925], [1439387712.0, 51580000.0, 0.5463943467342683], [1439389440.0, 51600000.0, 0.5358267949789964], [1439391168.0, 51620000.0, 0.5251746299612963], [1439392896.0, 51640000.0, 0.5144395337815076], [1439394624.0, 51660000.0, 0.5036232016357627], [1439396352.0, 51680000.0, 0.4927273415482942], [1439398080.0, 51700000.0, 0.48175367410171854], [1439399808.0, 51720000.0, 0.47070393216533657], [1439401536.0, 51740000.0, 0.45957986062148626], [1439403264.0, 51760000.0, 0.44838321609003134], [1439404992.0, 51780000.0, 0.4371157666509327], [1439406720.0, 51800000.0, 0.42577929156507316], [1439408448.0, 51820000.0, 0.41437558099328536], [1439410176.0, 51840000.0, 0.4029064357136646], [1439411904.0, 51860000.0, 0.3913736668372051], [1439413632.0, 51880000.0, 0.3797790955218045], [1439415360.0, 51900000.0, 0.36812455268467553], [1439417088.0, 51920000.0, 0.356411878713249], [1439418816.0, 51940000.0, 0.34464292317451606], [1439420544.0, 51960000.0, 0.33281954452298634], [1439422272.0, 51980000.0, 0.32094360980720993], [1439424000.0, 52000000.0, 0.3090169943749486], [1439425728.0, 52020000.0, 0.29704158157703686], [1439427456.0, 52040000.0, 0.28501926246997883], [1439429184.0, 52060000.0, 0.2729519355173219], [1439430912.0, 52080000.0, 0.26084150628989433], [1439432640.0, 52100000.0, 0.24868988716485294], [1439434368.0, 52120000.0, 0.23649899702373048], [1439436096.0, 52140000.0, 0.22427076094938084], [1439437824.0, 52160000.0, 0.21200710992205504], [1439439552.0, 52180000.0, 0.1997099805144082], [1439441280.0, 52200000.0, 0.18738131458572657], [1439443008.0, 52220000.0, 0.1750230589752718], [1439444736.0, 52240000.0, 0.1626371651948871], [1439446464.0, 52260000.0, 0.15022558912076134], [1439448192.0, 52280000.0, 0.13779029068464313], [1439449920.0, 52300000.0, 0.12533323356430304], [1439451648.0, 52320000.0, 0.11285638487348126], [1439453376.0, 52340000.0, 0.10036171485121524], [1439455104.0, 52360000.0, 0.08785119655074432], [1439456832.0, 52380000.0, 0.07532680552793464], [1439458560.0, 52400000.0, 0.06279051952931608], [1439460288.0, 52420000.0, 0.05024431817977304], [1439462016.0, 52440000.0, 0.0376901826699388], [1439463744.0, 52460000.0, 0.025130095443335426], [1439465472.0, 52480000.0, 0.012566039883351336], [1439467200.0, 52500000.0, -4.904777002955296e-16], [1439468928.0, 52520000.0, -0.012566039883352316], [1439470656.0, 52540000.0, -0.025130095443336404], [1439472384.0, 52560000.0, -0.03769018266993268], [1439474112.0, 52580000.0, -0.05024431817976692], [1439475840.0, 52600000.0, -0.06279051952930996], [1439477568.0, 52620000.0, -0.07532680552792853], [1439479296.0, 52640000.0, -0.08785119655074529], [1439481024.0, 52660000.0, -0.10036171485121623], [1439482752.0, 52680000.0, -0.11285638487348224], [1439484480.0, 52700000.0, -0.125333233564297], [1439486208.0, 52720000.0, -0.13779029068463708], [1439487936.0, 52740000.0, -0.1502255891207553], [1439489664.0, 52760000.0, -0.16263716519488106], [1439491392.0, 52780000.0, -0.17502305897527273], [1439493120.0, 52800000.0, -0.18738131458572754], [1439494848.0, 52820000.0, -0.19970998051440916], [1439496576.0, 52840000.0, -0.21200710992204908], [1439498304.0, 52860000.0, -0.22427076094937487], [1439500032.0, 52880000.0, -0.23649899702372454], [1439501760.0, 52900000.0, -0.24868988716485388], [1439503488.0, 52920000.0, -0.2608415062898953], [1439505216.0, 52940000.0, -0.27295193551732283], [1439506944.0, 52960000.0, -0.2850192624699798], [1439508672.0, 52980000.0, -0.29704158157703103], [1439510400.0, 53000000.0, -0.3090169943749428], [1439512128.0, 53020000.0, -0.32094360980720416], [1439513856.0, 53040000.0, -0.3328195445229873], [1439515584.0, 53060000.0, -0.34464292317451695], [1439517312.0, 53080000.0, -0.35641187871324986], [1439519040.0, 53100000.0, -0.3681245526846764], [1439520768.0, 53120000.0, -0.37977909552179884], [1439522496.0, 53140000.0, -0.39137366683719943], [1439524224.0, 53160000.0, -0.402906435713659], [1439525952.0, 53180000.0, -0.41437558099327976], [1439527680.0, 53200000.0, -0.42577929156507405], [1439529408.0, 53220000.0, -0.4371157666509336], [1439531136.0, 53240000.0, -0.44838321609003223], [1439532864.0, 53260000.0, -0.45957986062148715], [1439534592.0, 53280000.0, -0.4707039321653312], [1439536320.0, 53300000.0, -0.4817536741017132], [1439538048.0, 53320000.0, -0.49272734154828884], [1439539776.0, 53340000.0, -0.5036232016357575], [1439541504.0, 53360000.0, -0.5144395337815085], [1439543232.0, 53380000.0, -0.525174629961297], [1439544960.0, 53400000.0, -0.5358267949789973], [1439546688.0, 53420000.0, -0.5463943467342631], [1439548416.0, 53440000.0, -0.5568756164881874], [1439550144.0, 53460000.0, -0.5672689491267553], [1439551872.0, 53480000.0, -0.5775727034222657], [1439553600.0, 53500000.0, -0.5877852522924706], [1439555328.0, 53520000.0, -0.5979049830575215], [1439557056.0, 53540000.0, -0.6079302976946074], [1439558784.0, 53560000.0, -0.6178596130903301], [1439560512.0, 53580000.0, -0.6276913612906957], [1439562240.0, 53600000.0, -0.6374239897486897], [1439563968.0, 53620000.0, -0.6470559615694438], [1439565696.0, 53640000.0, -0.6565857557529553], [1439567424.0, 53660000.0, -0.66601186743425], [1439569152.0, 53680000.0, -0.6753328081210275], [1439570880.0, 53700000.0, -0.684547105928686], [1439572608.0, 53720000.0, -0.6936533058128017], [1439574336.0, 53740000.0, -0.7026499697988454], [1439576064.0, 53760000.0, -0.711535677209286], [1439577792.0, 53780000.0, -0.720309024887907], [1439579520.0, 53800000.0, -0.7289686274214111], [1439581248.0, 53820000.0, -0.7375131173581729], [1439582976.0, 53840000.0, -0.7459411454241807], [1439584704.0, 53860000.0, -0.7542513807361019], [1439586432.0, 53880000.0, -0.7624425110114454], [1439588160.0, 53900000.0, -0.7705132427757864], [1439589888.0, 53920000.0, -0.7784623015670246], [1439591616.0, 53940000.0, -0.7862884321366195], [1439593344.0, 53960000.0, -0.7939903986478355], [1439595072.0, 53980000.0, -0.8015669848708763], [1439596800.0, 54000000.0, -0.8090169943749467], [1439598528.0, 54020000.0, -0.8163392507171827], [1439600256.0, 54040000.0, -0.8235325976284258], [1439601984.0, 54060000.0, -0.8305958991958106], [1439603712.0, 54080000.0, -0.8375280400421432], [1439605440.0, 54100000.0, -0.8443279255020161], [1439607168.0, 54120000.0, -0.8509944817946924], [1439608896.0, 54140000.0, -0.8575266561936524], [1439610624.0, 54160000.0, -0.863923417192835], [1439612352.0, 54180000.0, -0.870183754669525], [1439614080.0, 54200000.0, -0.8763066800438626], [1439615808.0, 54220000.0, -0.882291226434952], [1439617536.0, 54240000.0, -0.8881364488135461], [1439619264.0, 54260000.0, -0.893841424151265], [1439620992.0, 54280000.0, -0.8994052515663687], [1439622720.0, 54300000.0, -0.904827052466017], [1439624448.0, 54320000.0, -0.9101059706849959], [1439626176.0, 54340000.0, -0.9152411726209174], [1439627904.0, 54360000.0, -0.9202318473658698], [1439629632.0, 54380000.0, -0.9250772068344573], [1439631360.0, 54400000.0, -0.929776485888253], [1439633088.0, 54420000.0, -0.9343289424566108], [1439634816.0, 54440000.0, -0.9387338576538726], [1439636544.0, 54460000.0, -0.9429905358928627], [1439638272.0, 54480000.0, -0.9470983049947447], [1439640000.0, 54500000.0, -0.9510565162951538], [1439641728.0, 54520000.0, -0.9548645447466428], [1439643456.0, 54540000.0, -0.9585217890173756], [1439645184.0, 54560000.0, -0.9620276715860854], [1439646912.0, 54580000.0, -0.9653816388332732], [1439648640.0, 54600000.0, -0.9685831611286303], [1439650368.0, 54620000.0, -0.971631732914673], [1439652096.0, 54640000.0, -0.9745268727865776], [1439653824.0, 54660000.0, -0.9772681235681937], [1439655552.0, 54680000.0, -0.979855052384247], [1439657280.0, 54700000.0, -0.9822872507286886], [1439659008.0, 54720000.0, -0.9845643345292052], [1439660736.0, 54740000.0, -0.9866859442078678], [1439662464.0, 54760000.0, -0.9886517447379136], [1439664192.0, 54780000.0, -0.9904614256966507], [1439665920.0, 54800000.0, -0.9921147013144782], [1439667648.0, 54820000.0, -0.9936113105200086], [1439669376.0, 54840000.0, -0.9949510169813003], [1439671104.0, 54860000.0, -0.9961336091431725], [1439672832.0, 54880000.0, -0.9971589002606139], [1439674560.0, 54900000.0, -0.9980267284282714], [1439676288.0, 54920000.0, -0.9987369566060174], [1439678016.0, 54940000.0, -0.9992894726405892], [1439679744.0, 54960000.0, -0.9996841892833], [1439681472.0, 54980000.0, -0.9999210442038161], [1439683200.0, 55000000.0, -1.0], [1439684928.0, 55020000.0, -0.9999210442038162], [1439686656.0, 55040000.0, -0.9996841892833002], [1439688384.0, 55060000.0, -0.9992894726405892], [1439690112.0, 55080000.0, -0.9987369566060176], [1439691840.0, 55100000.0, -0.9980267284282717], [1439693568.0, 55120000.0, -0.9971589002606142], [1439695296.0, 55140000.0, -0.9961336091431727], [1439697024.0, 55160000.0, -0.9949510169813006], [1439698752.0, 55180000.0, -0.993611310520009], [1439700480.0, 55200000.0, -0.9921147013144785], [1439702208.0, 55220000.0, -0.9904614256966511], [1439703936.0, 55240000.0, -0.9886517447379141], [1439705664.0, 55260000.0, -0.9866859442078683], [1439707392.0, 55280000.0, -0.9845643345292057], [1439709120.0, 55300000.0, -0.9822872507286892], [1439710848.0, 55320000.0, -0.9798550523842475], [1439712576.0, 55340000.0, -0.9772681235681943], [1439714304.0, 55360000.0, -0.9745268727865782], [1439716032.0, 55380000.0, -0.9716317329146735], [1439717760.0, 55400000.0, -0.968583161128631], [1439719488.0, 55420000.0, -0.9653816388332739], [1439721216.0, 55440000.0, -0.9620276715860862], [1439722944.0, 55460000.0, -0.9585217890173764], [1439724672.0, 55480000.0, -0.9548645447466436], [1439726400.0, 55500000.0, -0.9510565162951545], [1439728128.0, 55520000.0, -0.9470983049947456], [1439729856.0, 55540000.0, -0.9429905358928636], [1439731584.0, 55560000.0, -0.9387338576538735], [1439733312.0, 55580000.0, -0.9343289424566118], [1439735040.0, 55600000.0, -0.929776485888254], [1439736768.0, 55620000.0, -0.9250772068344583], [1439738496.0, 55640000.0, -0.9202318473658709], [1439740224.0, 55660000.0, -0.9152411726209185], [1439741952.0, 55680000.0, -0.910105970684997], [1439743680.0, 55700000.0, -0.9048270524660181], [1439745408.0, 55720000.0, -0.89940525156637], [1439747136.0, 55740000.0, -0.8938414241512662], [1439748864.0, 55760000.0, -0.8881364488135474], [1439750592.0, 55780000.0, -0.8822912264349532], [1439752320.0, 55800000.0, -0.8763066800438639], [1439754048.0, 55820000.0, -0.8701837546695264], [1439755776.0, 55840000.0, -0.8639234171928364], [1439757504.0, 55860000.0, -0.8575266561936538], [1439759232.0, 55880000.0, -0.8509944817946938], [1439760960.0, 55900000.0, -0.8443279255020175], [1439762688.0, 55920000.0, -0.8375280400421447], [1439764416.0, 55940000.0, -0.8305958991958121], [1439766144.0, 55960000.0, -0.8235325976284273], [1439767872.0, 55980000.0, -0.8163392507171843], [1439769600.0, 56000000.0, -0.8090169943749482], [1439771328.0, 56020000.0, -0.8015669848708779], [1439773056.0, 56040000.0, -0.7939903986478372], [1439774784.0, 56060000.0, -0.7862884321366211], [1439776512.0, 56080000.0, -0.7784623015670262], [1439778240.0, 56100000.0, -0.770513242775788], [1439779968.0, 56120000.0, -0.7624425110114472], [1439781696.0, 56140000.0, -0.7542513807361036], [1439783424.0, 56160000.0, -0.7459411454241824], [1439785152.0, 56180000.0, -0.7375131173581748], [1439786880.0, 56200000.0, -0.728968627421413], [1439788608.0, 56220000.0, -0.7203090248879089], [1439790336.0, 56240000.0, -0.7115356772092879], [1439792064.0, 56260000.0, -0.7026499697988473], [1439793792.0, 56280000.0, -0.6936533058128036], [1439795520.0, 56300000.0, -0.6845471059286878], [1439797248.0, 56320000.0, -0.6753328081210295], [1439798976.0, 56340000.0, -0.666011867434252], [1439800704.0, 56360000.0, -0.6565857557529574], [1439802432.0, 56380000.0, -0.6470559615694459], [1439804160.0, 56400000.0, -0.6374239897486919], [1439805888.0, 56420000.0, -0.6276913612906977], [1439807616.0, 56440000.0, -0.6178596130903322], [1439809344.0, 56460000.0, -0.6079302976946095], [1439811072.0, 56480000.0, -0.5979049830575236], [1439812800.0, 56500000.0, -0.5877852522924728], [1439814528.0, 56520000.0, -0.577572703422268], [1439816256.0, 56540000.0, -0.5672689491267574], [1439817984.0, 56560000.0, -0.5568756164881896], [1439819712.0, 56580000.0, -0.5463943467342655], [1439821440.0, 56600000.0, -0.5358267949789995], [1439823168.0, 56620000.0, -0.5251746299612994], [1439824896.0, 56640000.0, -0.5144395337815109], [1439826624.0, 56660000.0, -0.5036232016357598], [1439828352.0, 56680000.0, -0.4927273415482912], [1439830080.0, 56700000.0, -0.48175367410171555], [1439831808.0, 56720000.0, -0.4707039321653335], [1439833536.0, 56740000.0, -0.45957986062148953], [1439835264.0, 56760000.0, -0.4483832160900346], [1439836992.0, 56780000.0, -0.437115766650936], [1439838720.0, 56800000.0, -0.4257792915650765], [1439840448.0, 56820000.0, -0.41437558099328226], [1439842176.0, 56840000.0, -0.40290643571366147], [1439843904.0, 56860000.0, -0.39137366683720193], [1439845632.0, 56880000.0, -0.37977909552180134], [1439847360.0, 56900000.0, -0.3681245526846789], [1439849088.0, 56920000.0, -0.3564118787132524], [1439850816.0, 56940000.0, -0.3446429231745195], [1439852544.0, 56960000.0, -0.33281954452298984], [1439854272.0, 56980000.0, -0.3209436098072067], [1439856000.0, 57000000.0, -0.3090169943749454], [1439857728.0, 57020000.0, -0.2970415815770336], [1439859456.0, 57040000.0, -0.2850192624699824], [1439861184.0, 57060000.0, -0.27295193551732544], [1439862912.0, 57080000.0, -0.2608415062898979], [1439864640.0, 57100000.0, -0.2486898871648565], [1439866368.0, 57120000.0, -0.23649899702372715], [1439868096.0, 57140000.0, -0.2242707609493775], [1439869824.0, 57160000.0, -0.2120071099220517], [1439871552.0, 57180000.0, -0.1997099805144118], [1439873280.0, 57200000.0, -0.1873813145857302], [1439875008.0, 57220000.0, -0.1750230589752754], [1439876736.0, 57240000.0, -0.16263716519488372], [1439878464.0, 57260000.0, -0.15022558912075795], [1439880192.0, 57280000.0, -0.13779029068463974], [1439881920.0, 57300000.0, -0.12533323356429965], [1439883648.0, 57320000.0, -0.11285638487348491], [1439885376.0, 57340000.0, -0.1003617148512189], [1439887104.0, 57360000.0, -0.08785119655074797], [1439888832.0, 57380000.0, -0.07532680552793122], [1439890560.0, 57400000.0, -0.06279051952931265], [1439892288.0, 57420000.0, -0.05024431817976961], [1439894016.0, 57440000.0, -0.037690182669935374], [1439895744.0, 57460000.0, -0.0251300954433391], [1439897472.0, 57480000.0, -0.01256603988335501], [1439899200.0, 57500000.0, -3.1847006584197066e-15], [1439900928.0, 57520000.0, 0.012566039883348642], [1439902656.0, 57540000.0, 0.02513009544333273], [1439904384.0, 57560000.0, 0.03769018266993611], [1439906112.0, 57580000.0, 0.05024431817977035], [1439907840.0, 57600000.0, 0.06279051952931339], [1439909568.0, 57620000.0, 0.07532680552793196], [1439911296.0, 57640000.0, 0.08785119655074163], [1439913024.0, 57660000.0, 0.10036171485121256], [1439914752.0, 57680000.0, 0.11285638487347859], [1439916480.0, 57700000.0, 0.12533323356430037], [1439918208.0, 57720000.0, 0.13779029068464047], [1439919936.0, 57740000.0, 0.15022558912075867], [1439921664.0, 57760000.0, 0.16263716519488444], [1439923392.0, 57780000.0, 0.17502305897526912], [1439925120.0, 57800000.0, 0.18738131458572393], [1439926848.0, 57820000.0, 0.19970998051440556], [1439928576.0, 57840000.0, 0.21200710992205243], [1439930304.0, 57860000.0, 0.2242707609493782], [1439932032.0, 57880000.0, 0.23649899702372787], [1439933760.0, 57900000.0, 0.24868988716485033], [1439935488.0, 57920000.0, 0.2608415062898917], [1439937216.0, 57940000.0, 0.2729519355173193], [1439938944.0, 57960000.0, 0.2850192624699763], [1439940672.0, 57980000.0, 0.2970415815770343], [1439942400.0, 58000000.0, 0.30901699437494606], [1439944128.0, 58020000.0, 0.32094360980720743], [1439945856.0, 58040000.0, 0.33281954452298385], [1439947584.0, 58060000.0, 0.3446429231745135], [1439949312.0, 58080000.0, 0.3564118787132465], [1439951040.0, 58100000.0, 0.368124552684673], [1439952768.0, 58120000.0, 0.379779095521802], [1439954496.0, 58140000.0, 0.3913736668372026], [1439956224.0, 58160000.0, 0.40290643571366214], [1439957952.0, 58180000.0, 0.4143755809932829], [1439959680.0, 58200000.0, 0.4257792915650707], [1439961408.0, 58220000.0, 0.43711576665093027], [1439963136.0, 58240000.0, 0.44838321609002896], [1439964864.0, 58260000.0, 0.45957986062148387], [1439966592.0, 58280000.0, 0.4707039321653342], [1439968320.0, 58300000.0, 0.4817536741017162], [1439970048.0, 58320000.0, 0.4927273415482918], [1439971776.0, 58340000.0, 0.5036232016357604], [1439973504.0, 58360000.0, 0.5144395337815053], [1439975232.0, 58380000.0, 0.5251746299612939], [1439976960.0, 58400000.0, 0.5358267949789942], [1439978688.0, 58420000.0, 0.546394346734266], [1439980416.0, 58440000.0, 0.5568756164881903], [1439982144.0, 58460000.0, 0.5672689491267581], [1439983872.0, 58480000.0, 0.5775727034222685], [1439985600.0, 58500000.0, 0.5877852522924677], [1439987328.0, 58520000.0, 0.5979049830575185], [1439989056.0, 58540000.0, 0.6079302976946044], [1439990784.0, 58560000.0, 0.6178596130903328], [1439992512.0, 58580000.0, 0.6276913612906984], [1439994240.0, 58600000.0, 0.6374239897486924], [1439995968.0, 58620000.0, 0.647055961569441], [1439997696.0, 58640000.0, 0.6565857557529525], [1439999424.0, 58660000.0, 0.6660118674342472], [1440001152.0, 58680000.0, 0.6753328081210247], [1440002880.0, 58700000.0, 0.6845471059286884], [1440004608.0, 58720000.0, 0.6936533058128042], [1440006336.0, 58740000.0, 0.7026499697988479], [1440008064.0, 58760000.0, 0.7115356772092835], [1440009792.0, 58780000.0, 0.7203090248879045], [1440011520.0, 58800000.0, 0.7289686274214086], [1440013248.0, 58820000.0, 0.7375131173581705], [1440014976.0, 58840000.0, 0.745941145424183], [1440016704.0, 58860000.0, 0.7542513807361041], [1440018432.0, 58880000.0, 0.7624425110114477], [1440020160.0, 58900000.0, 0.7705132427757886], [1440021888.0, 58920000.0, 0.7784623015670222], [1440023616.0, 58940000.0, 0.7862884321366173], [1440025344.0, 58960000.0, 0.7939903986478333], [1440027072.0, 58980000.0, 0.8015669848708741], [1440028800.0, 59000000.0, 0.8090169943749487], [1440030528.0, 59020000.0, 0.8163392507171847], [1440032256.0, 59040000.0, 0.8235325976284278], [1440033984.0, 59060000.0, 0.8305958991958126], [1440035712.0, 59080000.0, 0.8375280400421412], [1440037440.0, 59100000.0, 0.8443279255020141], [1440039168.0, 59120000.0, 0.8509944817946905], [1440040896.0, 59140000.0, 0.8575266561936505], [1440042624.0, 59160000.0, 0.8639234171928368], [1440044352.0, 59180000.0, 0.8701837546695267], [1440046080.0, 59200000.0, 0.8763066800438643], [1440047808.0, 59220000.0, 0.8822912264349502], [1440049536.0, 59240000.0, 0.8881364488135445], [1440051264.0, 59260000.0, 0.8938414241512633], [1440052992.0, 59280000.0, 0.8994052515663703], [1440054720.0, 59300000.0, 0.9048270524660185], [1440056448.0, 59320000.0, 0.9101059706849972], [1440058176.0, 59340000.0, 0.9152411726209188], [1440059904.0, 59360000.0, 0.9202318473658684], [1440061632.0, 59380000.0, 0.9250772068344559], [1440063360.0, 59400000.0, 0.9297764858882517], [1440065088.0, 59420000.0, 0.934328942456612], [1440066816.0, 59440000.0, 0.9387338576538737], [1440068544.0, 59460000.0, 0.942990535892864], [1440070272.0, 59480000.0, 0.9470983049947435], [1440072000.0, 59500000.0, 0.9510565162951525], [1440073728.0, 59520000.0, 0.9548645447466417], [1440075456.0, 59540000.0, 0.9585217890173745], [1440077184.0, 59560000.0, 0.9620276715860863], [1440078912.0, 59580000.0, 0.9653816388332741], [1440080640.0, 59600000.0, 0.9685831611286311], [1440082368.0, 59620000.0, 0.9716317329146738], [1440084096.0, 59640000.0, 0.9745268727865768], [1440085824.0, 59660000.0, 0.9772681235681929], [1440087552.0, 59680000.0, 0.9798550523842462], [1440089280.0, 59700000.0, 0.9822872507286879], [1440091008.0, 59720000.0, 0.9845643345292058], [1440092736.0, 59740000.0, 0.9866859442078684], [1440094464.0, 59760000.0, 0.9886517447379142], [1440096192.0, 59780000.0, 0.9904614256966512], [1440097920.0, 59800000.0, 0.9921147013144778], [1440099648.0, 59820000.0, 0.9936113105200083], [1440101376.0, 59840000.0, 0.9949510169813], [1440103104.0, 59860000.0, 0.9961336091431722], [1440104832.0, 59880000.0, 0.9971589002606142], [1440106560.0, 59900000.0, 0.9980267284282717], [1440108288.0, 59920000.0, 0.9987369566060176], [1440110016.0, 59940000.0, 0.999289472640589], [1440111744.0, 59960000.0, 0.9996841892832999], [1440113472.0, 59980000.0, 0.9999210442038161], [1440115200.0, 60000000.0, 1.0], [1440116928.0, 60020000.0, 0.9999210442038161], [1440118656.0, 60040000.0, 0.9996841892833], [1440120384.0, 60060000.0, 0.9992894726405891], [1440122112.0, 60080000.0, 0.9987369566060177], [1440123840.0, 60100000.0, 0.9980267284282719], [1440125568.0, 60120000.0, 0.9971589002606144], [1440127296.0, 60140000.0, 0.9961336091431725], [1440129024.0, 60160000.0, 0.9949510169813002], [1440130752.0, 60180000.0, 0.9936113105200086], [1440132480.0, 60200000.0, 0.9921147013144781], [1440134208.0, 60220000.0, 0.9904614256966516], [1440135936.0, 60240000.0, 0.9886517447379146], [1440137664.0, 60260000.0, 0.9866859442078688], [1440139392.0, 60280000.0, 0.9845643345292063], [1440141120.0, 60300000.0, 0.9822872507286885], [1440142848.0, 60320000.0, 0.9798550523842469], [1440144576.0, 60340000.0, 0.9772681235681936], [1440146304.0, 60360000.0, 0.9745268727865775], [1440148032.0, 60380000.0, 0.9716317329146744], [1440149760.0, 60400000.0, 0.9685831611286319], [1440151488.0, 60420000.0, 0.9653816388332749], [1440153216.0, 60440000.0, 0.9620276715860872], [1440154944.0, 60460000.0, 0.9585217890173754], [1440156672.0, 60480000.0, 0.9548645447466426], [1440158400.0, 60500000.0, 0.9510565162951535], [1440160128.0, 60520000.0, 0.9470983049947445], [1440161856.0, 60540000.0, 0.9429905358928649], [1440163584.0, 60560000.0, 0.9387338576538747], [1440165312.0, 60580000.0, 0.934328942456613], [1440167040.0, 60600000.0, 0.9297764858882527], [1440168768.0, 60620000.0, 0.925077206834457], [1440170496.0, 60640000.0, 0.9202318473658696], [1440172224.0, 60660000.0, 0.91524117262092], [1440173952.0, 60680000.0, 0.9101059706849984], [1440175680.0, 60700000.0, 0.9048270524660197], [1440177408.0, 60720000.0, 0.8994052515663715], [1440179136.0, 60740000.0, 0.8938414241512647], [1440180864.0, 60760000.0, 0.8881364488135458], [1440182592.0, 60780000.0, 0.8822912264349516], [1440184320.0, 60800000.0, 0.8763066800438657], [1440186048.0, 60820000.0, 0.8701837546695281], [1440187776.0, 60840000.0, 0.8639234171928383], [1440189504.0, 60860000.0, 0.857526656193652], [1440191232.0, 60880000.0, 0.8509944817946921], [1440192960.0, 60900000.0, 0.8443279255020157], [1440194688.0, 60920000.0, 0.8375280400421428], [1440196416.0, 60940000.0, 0.8305958991958141], [1440198144.0, 60960000.0, 0.8235325976284295], [1440199872.0, 60980000.0, 0.8163392507171864], [1440201600.0, 61000000.0, 0.8090169943749503], [1440203328.0, 61020000.0, 0.8015669848708759], [1440205056.0, 61040000.0, 0.793990398647835], [1440206784.0, 61060000.0, 0.786288432136619], [1440208512.0, 61080000.0, 0.7784623015670241], [1440210240.0, 61100000.0, 0.7705132427757904], [1440211968.0, 61120000.0, 0.7624425110114496], [1440213696.0, 61140000.0, 0.7542513807361061], [1440215424.0, 61160000.0, 0.7459411454241849], [1440217152.0, 61180000.0, 0.7375131173581725], [1440218880.0, 61200000.0, 0.7289686274214106], [1440220608.0, 61220000.0, 0.7203090248879065], [1440222336.0, 61240000.0, 0.7115356772092855], [1440224064.0, 61260000.0, 0.7026499697988499], [1440225792.0, 61280000.0, 0.6936533058128063], [1440227520.0, 61300000.0, 0.6845471059286905], [1440229248.0, 61320000.0, 0.6753328081210269], [1440230976.0, 61340000.0, 0.6660118674342494], [1440232704.0, 61360000.0, 0.6565857557529547], [1440234432.0, 61380000.0, 0.6470559615694432], [1440236160.0, 61400000.0, 0.6374239897486947], [1440237888.0, 61420000.0, 0.6276913612907006], [1440239616.0, 61440000.0, 0.6178596130903351], [1440241344.0, 61460000.0, 0.6079302976946067], [1440243072.0, 61480000.0, 0.5979049830575209], [1440244800.0, 61500000.0, 0.58778525229247], [1440246528.0, 61520000.0, 0.577572703422271], [1440248256.0, 61540000.0, 0.5672689491267605], [1440249984.0, 61560000.0, 0.5568756164881927], [1440251712.0, 61580000.0, 0.5463943467342685], [1440253440.0, 61600000.0, 0.5358267949789967], [1440255168.0, 61620000.0, 0.5251746299612965], [1440256896.0, 61640000.0, 0.5144395337815079], [1440258624.0, 61660000.0, 0.5036232016357629], [1440260352.0, 61680000.0, 0.49272734154829434], [1440262080.0, 61700000.0, 0.48175367410171877], [1440263808.0, 61720000.0, 0.4707039321653368], [1440265536.0, 61740000.0, 0.4595798606214865], [1440267264.0, 61760000.0, 0.44838321609003157], [1440268992.0, 61780000.0, 0.43711576665093294], [1440270720.0, 61800000.0, 0.4257792915650734], [1440272448.0, 61820000.0, 0.4143755809932856], [1440274176.0, 61840000.0, 0.4029064357136648], [1440275904.0, 61860000.0, 0.3913736668372053], [1440277632.0, 61880000.0, 0.3797790955218047], [1440279360.0, 61900000.0, 0.36812455268467575], [1440281088.0, 61920000.0, 0.3564118787132492], [1440282816.0, 61940000.0, 0.3446429231745163], [1440284544.0, 61960000.0, 0.3328195445229866], [1440286272.0, 61980000.0, 0.3209436098072102], [1440288000.0, 62000000.0, 0.3090169943749489], [1440289728.0, 62020000.0, 0.2970415815770371], [1440291456.0, 62040000.0, 0.2850192624699791], [1440293184.0, 62060000.0, 0.2729519355173221], [1440294912.0, 62080000.0, 0.26084150628989455], [1440296640.0, 62100000.0, 0.24868988716485316], [1440298368.0, 62120000.0, 0.23649899702373073], [1440300096.0, 62140000.0, 0.2242707609493811], [1440301824.0, 62160000.0, 0.2120071099220553], [1440303552.0, 62180000.0, 0.19970998051440844], [1440305280.0, 62200000.0, 0.18738131458572682], [1440307008.0, 62220000.0, 0.175023058975272], [1440308736.0, 62240000.0, 0.16263716519488736], [1440310464.0, 62260000.0, 0.1502255891207616], [1440312192.0, 62280000.0, 0.13779029068464338], [1440313920.0, 62300000.0, 0.1253332335643033], [1440315648.0, 62320000.0, 0.11285638487348151], [1440317376.0, 62340000.0, 0.10036171485121549], [1440319104.0, 62360000.0, 0.08785119655074455], [1440320832.0, 62380000.0, 0.07532680552793489], [1440322560.0, 62400000.0, 0.06279051952931632], [1440324288.0, 62420000.0, 0.05024431817977328], [1440326016.0, 62440000.0, 0.03769018266993905], [1440327744.0, 62460000.0, 0.02513009544333567], [1440329472.0, 62480000.0, 0.01256603988335158], [1440331200.0, 62500000.0, -2.45548340466059e-16], [1440332928.0, 62520000.0, -0.012566039883352071], [1440334656.0, 62540000.0, -0.02513009544333616], [1440336384.0, 62560000.0, -0.03769018266993244], [1440338112.0, 62580000.0, -0.05024431817976668], [1440339840.0, 62600000.0, -0.06279051952930972], [1440341568.0, 62620000.0, -0.07532680552792828], [1440343296.0, 62640000.0, -0.08785119655074504], [1440345024.0, 62660000.0, -0.10036171485121598], [1440346752.0, 62680000.0, -0.112856384873482], [1440348480.0, 62700000.0, -0.12533323356429674], [1440350208.0, 62720000.0, -0.13779029068463683], [1440351936.0, 62740000.0, -0.15022558912075504], [1440353664.0, 62760000.0, -0.16263716519488083], [1440355392.0, 62780000.0, -0.1750230589752725], [1440357120.0, 62800000.0, -0.18738131458572732], [1440358848.0, 62820000.0, -0.1997099805144089], [1440360576.0, 62840000.0, -0.21200710992204883], [1440362304.0, 62860000.0, -0.22427076094937462], [1440364032.0, 62880000.0, -0.2364989970237243], [1440365760.0, 62900000.0, -0.24868988716485363], [1440367488.0, 62920000.0, -0.26084150628989505], [1440369216.0, 62940000.0, -0.2729519355173226], [1440370944.0, 62960000.0, -0.28501926246997955], [1440372672.0, 62980000.0, -0.2970415815770308], [1440374400.0, 63000000.0, -0.30901699437494257], [1440376128.0, 63020000.0, -0.32094360980720393], [1440377856.0, 63040000.0, -0.33281954452298707], [1440379584.0, 63060000.0, -0.3446429231745167], [1440381312.0, 63080000.0, -0.35641187871324964], [1440383040.0, 63100000.0, -0.3681245526846762], [1440384768.0, 63120000.0, -0.3797790955217986], [1440386496.0, 63140000.0, -0.3913736668371992], [1440388224.0, 63160000.0, -0.40290643571365875], [1440389952.0, 63180000.0, -0.41437558099327954], [1440391680.0, 63200000.0, -0.4257792915650738], [1440393408.0, 63220000.0, -0.4371157666509334], [1440395136.0, 63240000.0, -0.448383216090032], [1440396864.0, 63260000.0, -0.4595798606214869], [1440398592.0, 63280000.0, -0.47070393216533096], [1440400320.0, 63300000.0, -0.481753674101713], [1440402048.0, 63320000.0, -0.4927273415482886], [1440403776.0, 63340000.0, -0.5036232016357572], [1440405504.0, 63360000.0, -0.5144395337815083], [1440407232.0, 63380000.0, -0.5251746299612968], [1440408960.0, 63400000.0, -0.5358267949789971], [1440410688.0, 63420000.0, -0.546394346734263], [1440412416.0, 63440000.0, -0.5568756164881872], [1440414144.0, 63460000.0, -0.5672689491267551], [1440415872.0, 63480000.0, -0.5775727034222655], [1440417600.0, 63500000.0, -0.5877852522924705], [1440419328.0, 63520000.0, -0.5979049830575213], [1440421056.0, 63540000.0, -0.6079302976946072], [1440422784.0, 63560000.0, -0.6178596130903299], [1440424512.0, 63580000.0, -0.6276913612906955], [1440426240.0, 63600000.0, -0.6374239897486896], [1440427968.0, 63620000.0, -0.6470559615694436], [1440429696.0, 63640000.0, -0.6565857557529552], [1440431424.0, 63660000.0, -0.6660118674342498], [1440433152.0, 63680000.0, -0.6753328081210273], [1440434880.0, 63700000.0, -0.6845471059286857], [1440436608.0, 63720000.0, -0.6936533058128015], [1440438336.0, 63740000.0, -0.7026499697988452], [1440440064.0, 63760000.0, -0.7115356772092858], [1440441792.0, 63780000.0, -0.7203090248879068], [1440443520.0, 63800000.0, -0.7289686274214109], [1440445248.0, 63820000.0, -0.7375131173581728], [1440446976.0, 63840000.0, -0.7459411454241806], [1440448704.0, 63860000.0, -0.7542513807361018], [1440450432.0, 63880000.0, -0.7624425110114453], [1440452160.0, 63900000.0, -0.7705132427757861], [1440453888.0, 63920000.0, -0.7784623015670245], [1440455616.0, 63940000.0, -0.7862884321366194], [1440457344.0, 63960000.0, -0.7939903986478353], [1440459072.0, 63980000.0, -0.8015669848708761], [1440460800.0, 64000000.0, -0.8090169943749465], [1440462528.0, 64020000.0, -0.8163392507171826], [1440464256.0, 64040000.0, -0.8235325976284257], [1440465984.0, 64060000.0, -0.8305958991958104], [1440467712.0, 64080000.0, -0.837528040042143], [1440469440.0, 64100000.0, -0.844327925502016], [1440471168.0, 64120000.0, -0.8509944817946923], [1440472896.0, 64140000.0, -0.8575266561936523], [1440474624.0, 64160000.0, -0.8639234171928349], [1440476352.0, 64180000.0, -0.8701837546695249], [1440478080.0, 64200000.0, -0.8763066800438625], [1440479808.0, 64220000.0, -0.8822912264349518], [1440481536.0, 64240000.0, -0.888136448813546], [1440483264.0, 64260000.0, -0.8938414241512649], [1440484992.0, 64280000.0, -0.8994052515663686], [1440486720.0, 64300000.0, -0.9048270524660169], [1440488448.0, 64320000.0, -0.9101059706849958], [1440490176.0, 64340000.0, -0.9152411726209173], [1440491904.0, 64360000.0, -0.9202318473658698], [1440493632.0, 64380000.0, -0.9250772068344572], [1440495360.0, 64400000.0, -0.9297764858882529], [1440497088.0, 64420000.0, -0.9343289424566107], [1440498816.0, 64440000.0, -0.9387338576538725], [1440500544.0, 64460000.0, -0.9429905358928626], [1440502272.0, 64480000.0, -0.9470983049947446], [1440504000.0, 64500000.0, -0.9510565162951536], [1440505728.0, 64520000.0, -0.9548645447466428], [1440507456.0, 64540000.0, -0.9585217890173755], [1440509184.0, 64560000.0, -0.9620276715860853], [1440510912.0, 64580000.0, -0.9653816388332731], [1440512640.0, 64600000.0, -0.9685831611286302], [1440514368.0, 64620000.0, -0.9716317329146729], [1440516096.0, 64640000.0, -0.9745268727865776], [1440517824.0, 64660000.0, -0.9772681235681937], [1440519552.0, 64680000.0, -0.979855052384247], [1440521280.0, 64700000.0, -0.9822872507286886], [1440523008.0, 64720000.0, -0.9845643345292051], [1440524736.0, 64740000.0, -0.9866859442078677], [1440526464.0, 64760000.0, -0.9886517447379136], [1440528192.0, 64780000.0, -0.9904614256966507], [1440529920.0, 64800000.0, -0.9921147013144782], [1440531648.0, 64820000.0, -0.9936113105200086], [1440533376.0, 64840000.0, -0.9949510169813003], [1440535104.0, 64860000.0, -0.9961336091431725], [1440536832.0, 64880000.0, -0.9971589002606139], [1440538560.0, 64900000.0, -0.9980267284282714], [1440540288.0, 64920000.0, -0.9987369566060174], [1440542016.0, 64940000.0, -0.9992894726405891], [1440543744.0, 64960000.0, -0.9996841892833], [1440545472.0, 64980000.0, -0.9999210442038161], [1440547200.0, 65000000.0, -1.0], [1440548928.0, 65020000.0, -0.9999210442038162], [1440550656.0, 65040000.0, -0.9996841892833002], [1440552384.0, 65060000.0, -0.9992894726405893], [1440554112.0, 65080000.0, -0.9987369566060176], [1440555840.0, 65100000.0, -0.9980267284282717], [1440557568.0, 65120000.0, -0.9971589002606142], [1440559296.0, 65140000.0, -0.9961336091431727], [1440561024.0, 65160000.0, -0.9949510169813006], [1440562752.0, 65180000.0, -0.993611310520009], [1440564480.0, 65200000.0, -0.9921147013144785], [1440566208.0, 65220000.0, -0.9904614256966512], [1440567936.0, 65240000.0, -0.9886517447379141], [1440569664.0, 65260000.0, -0.9866859442078683], [1440571392.0, 65280000.0, -0.9845643345292057], [1440573120.0, 65300000.0, -0.9822872507286892], [1440574848.0, 65320000.0, -0.9798550523842475], [1440576576.0, 65340000.0, -0.9772681235681944], [1440578304.0, 65360000.0, -0.9745268727865782], [1440580032.0, 65380000.0, -0.9716317329146736], [1440581760.0, 65400000.0, -0.968583161128631], [1440583488.0, 65420000.0, -0.965381638833274], [1440585216.0, 65440000.0, -0.9620276715860862], [1440586944.0, 65460000.0, -0.9585217890173764], [1440588672.0, 65480000.0, -0.9548645447466437], [1440590400.0, 65500000.0, -0.9510565162951546], [1440592128.0, 65520000.0, -0.9470983049947456], [1440593856.0, 65540000.0, -0.9429905358928637], [1440595584.0, 65560000.0, -0.9387338576538736], [1440597312.0, 65580000.0, -0.9343289424566118], [1440599040.0, 65600000.0, -0.9297764858882541], [1440600768.0, 65620000.0, -0.9250772068344584], [1440602496.0, 65640000.0, -0.920231847365871], [1440604224.0, 65660000.0, -0.9152411726209185], [1440605952.0, 65680000.0, -0.9101059706849971], [1440607680.0, 65700000.0, -0.9048270524660182], [1440609408.0, 65720000.0, -0.8994052515663701], [1440611136.0, 65740000.0, -0.8938414241512663], [1440612864.0, 65760000.0, -0.8881364488135475], [1440614592.0, 65780000.0, -0.8822912264349534], [1440616320.0, 65800000.0, -0.876306680043864], [1440618048.0, 65820000.0, -0.8701837546695265], [1440619776.0, 65840000.0, -0.8639234171928366], [1440621504.0, 65860000.0, -0.857526656193654], [1440623232.0, 65880000.0, -0.850994481794694], [1440624960.0, 65900000.0, -0.8443279255020176], [1440626688.0, 65920000.0, -0.8375280400421448], [1440628416.0, 65940000.0, -0.8305958991958122], [1440630144.0, 65960000.0, -0.8235325976284275], [1440631872.0, 65980000.0, -0.8163392507171844], [1440633600.0, 66000000.0, -0.8090169943749483], [1440635328.0, 66020000.0, -0.801566984870878], [1440637056.0, 66040000.0, -0.7939903986478373], [1440638784.0, 66060000.0, -0.7862884321366214], [1440640512.0, 66080000.0, -0.7784623015670264], [1440642240.0, 66100000.0, -0.7705132427757883], [1440643968.0, 66120000.0, -0.7624425110114473], [1440645696.0, 66140000.0, -0.7542513807361038], [1440647424.0, 66160000.0, -0.7459411454241827], [1440649152.0, 66180000.0, -0.7375131173581749], [1440650880.0, 66200000.0, -0.7289686274214131], [1440652608.0, 66220000.0, -0.720309024887909], [1440654336.0, 66240000.0, -0.7115356772092881], [1440656064.0, 66260000.0, -0.7026499697988475], [1440657792.0, 66280000.0, -0.6936533058128038], [1440659520.0, 66300000.0, -0.6845471059286881], [1440661248.0, 66320000.0, -0.6753328081210296], [1440662976.0, 66340000.0, -0.6660118674342521], [1440664704.0, 66360000.0, -0.6565857557529575], [1440666432.0, 66380000.0, -0.647055961569446], [1440668160.0, 66400000.0, -0.6374239897486921], [1440669888.0, 66420000.0, -0.6276913612906979], [1440671616.0, 66440000.0, -0.6178596130903324], [1440673344.0, 66460000.0, -0.6079302976946097], [1440675072.0, 66480000.0, -0.5979049830575238], [1440676800.0, 66500000.0, -0.587785252292473], [1440678528.0, 66520000.0, -0.5775727034222681], [1440680256.0, 66540000.0, -0.5672689491267576], [1440681984.0, 66560000.0, -0.5568756164881898], [1440683712.0, 66580000.0, -0.5463943467342657], [1440685440.0, 66600000.0, -0.5358267949789998], [1440687168.0, 66620000.0, -0.5251746299612996], [1440688896.0, 66640000.0, -0.514439533781511], [1440690624.0, 66660000.0, -0.50362320163576], [1440692352.0, 66680000.0, -0.4927273415482914], [1440694080.0, 66700000.0, -0.48175367410171577], [1440695808.0, 66720000.0, -0.47070393216533374], [1440697536.0, 66740000.0, -0.45957986062148976], [1440699264.0, 66760000.0, -0.44838321609003484], [1440700992.0, 66780000.0, -0.4371157666509362], [1440702720.0, 66800000.0, -0.4257792915650767], [1440704448.0, 66820000.0, -0.4143755809932825], [1440706176.0, 66840000.0, -0.4029064357136617], [1440707904.0, 66860000.0, -0.39137366683720215], [1440709632.0, 66880000.0, -0.37977909552180156], [1440711360.0, 66900000.0, -0.36812455268467914], [1440713088.0, 66920000.0, -0.35641187871325264], [1440714816.0, 66940000.0, -0.3446429231745197], [1440716544.0, 66960000.0, -0.33281954452299006], [1440718272.0, 66980000.0, -0.32094360980720693], [1440720000.0, 67000000.0, -0.3090169943749456], [1440721728.0, 67020000.0, -0.2970415815770338], [1440723456.0, 67040000.0, -0.2850192624699826], [1440725184.0, 67060000.0, -0.27295193551732566], [1440726912.0, 67080000.0, -0.2608415062898981], [1440728640.0, 67100000.0, -0.24868988716485674], [1440730368.0, 67120000.0, -0.2364989970237274], [1440732096.0, 67140000.0, -0.22427076094937773], [1440733824.0, 67160000.0, -0.21200710992205193], [1440735552.0, 67180000.0, -0.19970998051441205], [1440737280.0, 67200000.0, -0.18738131458573043], [1440739008.0, 67220000.0, -0.17502305897527565], [1440740736.0, 67240000.0, -0.16263716519488397], [1440742464.0, 67260000.0, -0.1502255891207582], [1440744192.0, 67280000.0, -0.13779029068463997], [1440745920.0, 67300000.0, -0.1253332335642999], [1440747648.0, 67320000.0, -0.11285638487348516], [1440749376.0, 67340000.0, -0.10036171485121914], [1440751104.0, 67360000.0, -0.08785119655074822], [1440752832.0, 67380000.0, -0.07532680552793146], [1440754560.0, 67400000.0, -0.0627905195293129], [1440756288.0, 67420000.0, -0.050244318179769855], [1440758016.0, 67440000.0, -0.037690182669935623], [1440759744.0, 67460000.0, -0.025130095443339343], [1440761472.0, 67480000.0, -0.012566039883355255], [1440763200.0, 67500000.0, -3.4296300182491773e-15], [1440764928.0, 67520000.0, 0.012566039883348397], [1440766656.0, 67540000.0, 0.025130095443332487], [1440768384.0, 67560000.0, 0.037690182669935866], [1440770112.0, 67580000.0, 0.050244318179770105], [1440771840.0, 67600000.0, 0.06279051952931314], [1440773568.0, 67620000.0, 0.07532680552793171], [1440775296.0, 67640000.0, 0.08785119655074139], [1440777024.0, 67660000.0, 0.10036171485121233], [1440778752.0, 67680000.0, 0.11285638487347835], [1440780480.0, 67700000.0, 0.12533323356430012], [1440782208.0, 67720000.0, 0.13779029068464022], [1440783936.0, 67740000.0, 0.15022558912075842], [1440785664.0, 67760000.0, 0.16263716519488422], [1440787392.0, 67780000.0, 0.17502305897526887], [1440789120.0, 67800000.0, 0.18738131458572369], [1440790848.0, 67820000.0, 0.19970998051440533], [1440792576.0, 67840000.0, 0.21200710992205218], [1440794304.0, 67860000.0, 0.22427076094937798], [1440796032.0, 67880000.0, 0.23649899702372762], [1440797760.0, 67900000.0, 0.24868988716485008], [1440799488.0, 67920000.0, 0.2608415062898915], [1440801216.0, 67940000.0, 0.27295193551731906], [1440802944.0, 67960000.0, 0.28501926246997605], [1440804672.0, 67980000.0, 0.2970415815770341], [1440806400.0, 68000000.0, 0.30901699437494584], [1440808128.0, 68020000.0, 0.32094360980720715], [1440809856.0, 68040000.0, 0.3328195445229836], [1440811584.0, 68060000.0, 0.3446429231745133], [1440813312.0, 68080000.0, 0.3564118787132462], [1440815040.0, 68100000.0, 0.36812455268467276], [1440816768.0, 68120000.0, 0.3797790955218018], [1440818496.0, 68140000.0, 0.39137366683720237], [1440820224.0, 68160000.0, 0.4029064357136619], [1440821952.0, 68180000.0, 0.4143755809932827], [1440823680.0, 68200000.0, 0.4257792915650705], [1440825408.0, 68220000.0, 0.43711576665093005], [1440827136.0, 68240000.0, 0.44838321609002874], [1440828864.0, 68260000.0, 0.45957986062148365], [1440830592.0, 68280000.0, 0.47070393216533396], [1440832320.0, 68300000.0, 0.481753674101716], [1440834048.0, 68320000.0, 0.4927273415482916], [1440835776.0, 68340000.0, 0.5036232016357602], [1440837504.0, 68360000.0, 0.5144395337815051], [1440839232.0, 68380000.0, 0.5251746299612937], [1440840960.0, 68400000.0, 0.535826794978994], [1440842688.0, 68420000.0, 0.5463943467342658], [1440844416.0, 68440000.0, 0.5568756164881901], [1440846144.0, 68460000.0, 0.5672689491267578], [1440847872.0, 68480000.0, 0.5775727034222683], [1440849600.0, 68500000.0, 0.5877852522924675], [1440851328.0, 68520000.0, 0.5979049830575184], [1440853056.0, 68540000.0, 0.6079302976946043], [1440854784.0, 68560000.0, 0.6178596130903325], [1440856512.0, 68580000.0, 0.6276913612906981], [1440858240.0, 68600000.0, 0.6374239897486923], [1440859968.0, 68620000.0, 0.6470559615694408], [1440861696.0, 68640000.0, 0.6565857557529524], [1440863424.0, 68660000.0, 0.666011867434247], [1440865152.0, 68680000.0, 0.6753328081210246], [1440866880.0, 68700000.0, 0.6845471059286882], [1440868608.0, 68720000.0, 0.6936533058128039], [1440870336.0, 68740000.0, 0.7026499697988476], [1440872064.0, 68760000.0, 0.7115356772092832], [1440873792.0, 68780000.0, 0.7203090248879043], [1440875520.0, 68800000.0, 0.7289686274214084], [1440877248.0, 68820000.0, 0.7375131173581703], [1440878976.0, 68840000.0, 0.7459411454241828], [1440880704.0, 68860000.0, 0.754251380736104], [1440882432.0, 68880000.0, 0.7624425110114476], [1440884160.0, 68900000.0, 0.7705132427757884], [1440885888.0, 68920000.0, 0.7784623015670221], [1440887616.0, 68940000.0, 0.7862884321366171], [1440889344.0, 68960000.0, 0.793990398647833], [1440891072.0, 68980000.0, 0.8015669848708739], [1440892800.0, 69000000.0, 0.8090169943749486], [1440894528.0, 69020000.0, 0.8163392507171846], [1440896256.0, 69040000.0, 0.8235325976284276], [1440897984.0, 69060000.0, 0.8305958991958123], [1440899712.0, 69080000.0, 0.837528040042141], [1440901440.0, 69100000.0, 0.844327925502014], [1440903168.0, 69120000.0, 0.8509944817946904], [1440904896.0, 69140000.0, 0.8575266561936504], [1440906624.0, 69160000.0, 0.8639234171928367], [1440908352.0, 69180000.0, 0.8701837546695266], [1440910080.0, 69200000.0, 0.8763066800438641], [1440911808.0, 69220000.0, 0.8822912264349501], [1440913536.0, 69240000.0, 0.8881364488135444], [1440915264.0, 69260000.0, 0.8938414241512632], [1440916992.0, 69280000.0, 0.8994052515663702], [1440918720.0, 69300000.0, 0.9048270524660184], [1440920448.0, 69320000.0, 0.9101059706849972], [1440922176.0, 69340000.0, 0.9152411726209186], [1440923904.0, 69360000.0, 0.9202318473658684], [1440925632.0, 69380000.0, 0.9250772068344558], [1440927360.0, 69400000.0, 0.9297764858882516], [1440929088.0, 69420000.0, 0.9343289424566119], [1440930816.0, 69440000.0, 0.9387338576538737], [1440932544.0, 69460000.0, 0.9429905358928639], [1440934272.0, 69480000.0, 0.9470983049947435], [1440936000.0, 69500000.0, 0.9510565162951525], [1440937728.0, 69520000.0, 0.9548645447466417], [1440939456.0, 69540000.0, 0.9585217890173745], [1440941184.0, 69560000.0, 0.9620276715860863], [1440942912.0, 69580000.0, 0.965381638833274], [1440944640.0, 69600000.0, 0.9685831611286311], [1440946368.0, 69620000.0, 0.9716317329146736], [1440948096.0, 69640000.0, 0.9745268727865767], [1440949824.0, 69660000.0, 0.9772681235681929], [1440951552.0, 69680000.0, 0.9798550523842462], [1440953280.0, 69700000.0, 0.9822872507286879], [1440955008.0, 69720000.0, 0.9845643345292058], [1440956736.0, 69740000.0, 0.9866859442078683], [1440958464.0, 69760000.0, 0.9886517447379141], [1440960192.0, 69780000.0, 0.9904614256966512], [1440961920.0, 69800000.0, 0.9921147013144777], [1440963648.0, 69820000.0, 0.9936113105200082], [1440965376.0, 69840000.0, 0.9949510169813], [1440967104.0, 69860000.0, 0.9961336091431722], [1440968832.0, 69880000.0, 0.9971589002606142], [1440970560.0, 69900000.0, 0.9980267284282717], [1440972288.0, 69920000.0, 0.9987369566060176], [1440974016.0, 69940000.0, 0.999289472640589], [1440975744.0, 69960000.0, 0.9996841892832999], [1440977472.0, 69980000.0, 0.9999210442038161], [1440979200.0, 70000000.0, 1.0], [1440980928.0, 70020000.0, 0.9999210442038161], [1440982656.0, 70040000.0, 0.9996841892833], [1440984384.0, 70060000.0, 0.9992894726405891], [1440986112.0, 70080000.0, 0.9987369566060177], [1440987840.0, 70100000.0, 0.9980267284282719], [1440989568.0, 70120000.0, 0.9971589002606144], [1440991296.0, 70140000.0, 0.9961336091431725], [1440993024.0, 70160000.0, 0.9949510169813003], [1440994752.0, 70180000.0, 0.9936113105200086], [1440996480.0, 70200000.0, 0.9921147013144781], [1440998208.0, 70220000.0, 0.9904614256966516], [1440999936.0, 70240000.0, 0.9886517447379146], [1441001664.0, 70260000.0, 0.9866859442078688], [1441003392.0, 70280000.0, 0.9845643345292063], [1441005120.0, 70300000.0, 0.9822872507286885], [1441006848.0, 70320000.0, 0.9798550523842469], [1441008576.0, 70340000.0, 0.9772681235681936], [1441010304.0, 70360000.0, 0.9745268727865775], [1441012032.0, 70380000.0, 0.9716317329146745], [1441013760.0, 70400000.0, 0.9685831611286319], [1441015488.0, 70420000.0, 0.9653816388332749], [1441017216.0, 70440000.0, 0.9620276715860872], [1441018944.0, 70460000.0, 0.9585217890173754], [1441020672.0, 70480000.0, 0.9548645447466427], [1441022400.0, 70500000.0, 0.9510565162951535], [1441024128.0, 70520000.0, 0.9470983049947446], [1441025856.0, 70540000.0, 0.942990535892865], [1441027584.0, 70560000.0, 0.9387338576538748], [1441029312.0, 70580000.0, 0.9343289424566131], [1441031040.0, 70600000.0, 0.9297764858882528], [1441032768.0, 70620000.0, 0.9250772068344572], [1441034496.0, 70640000.0, 0.9202318473658697], [1441036224.0, 70660000.0, 0.9152411726209201], [1441037952.0, 70680000.0, 0.9101059706849985], [1441039680.0, 70700000.0, 0.9048270524660198], [1441041408.0, 70720000.0, 0.8994052515663716], [1441043136.0, 70740000.0, 0.8938414241512648], [1441044864.0, 70760000.0, 0.8881364488135459], [1441046592.0, 70780000.0, 0.8822912264349517], [1441048320.0, 70800000.0, 0.8763066800438658], [1441050048.0, 70820000.0, 0.8701837546695284], [1441051776.0, 70840000.0, 0.8639234171928384], [1441053504.0, 70860000.0, 0.8575266561936522], [1441055232.0, 70880000.0, 0.8509944817946922], [1441056960.0, 70900000.0, 0.8443279255020159], [1441058688.0, 70920000.0, 0.8375280400421429], [1441060416.0, 70940000.0, 0.8305958991958143], [1441062144.0, 70960000.0, 0.8235325976284296], [1441063872.0, 70980000.0, 0.8163392507171866], [1441065600.0, 71000000.0, 0.8090169943749506], [1441067328.0, 71020000.0, 0.801566984870876], [1441069056.0, 71040000.0, 0.7939903986478352], [1441070784.0, 71060000.0, 0.7862884321366193], [1441072512.0, 71080000.0, 0.7784623015670242], [1441074240.0, 71100000.0, 0.7705132427757906], [1441075968.0, 71120000.0, 0.7624425110114498], [1441077696.0, 71140000.0, 0.7542513807361062], [1441079424.0, 71160000.0, 0.7459411454241851], [1441081152.0, 71180000.0, 0.7375131173581726], [1441082880.0, 71200000.0, 0.7289686274214108], [1441084608.0, 71220000.0, 0.7203090248879067], [1441086336.0, 71240000.0, 0.7115356772092857], [1441088064.0, 71260000.0, 0.7026499697988501], [1441089792.0, 71280000.0, 0.6936533058128064], [1441091520.0, 71300000.0, 0.6845471059286907], [1441093248.0, 71320000.0, 0.6753328081210271], [1441094976.0, 71340000.0, 0.6660118674342496], [1441096704.0, 71360000.0, 0.656585755752955], [1441098432.0, 71380000.0, 0.6470559615694434], [1441100160.0, 71400000.0, 0.6374239897486949], [1441101888.0, 71420000.0, 0.6276913612907008], [1441103616.0, 71440000.0, 0.6178596130903353], [1441105344.0, 71460000.0, 0.6079302976946069], [1441107072.0, 71480000.0, 0.597904983057521], [1441108800.0, 71500000.0, 0.5877852522924703], [1441110528.0, 71520000.0, 0.5775727034222711], [1441112256.0, 71540000.0, 0.5672689491267607], [1441113984.0, 71560000.0, 0.5568756164881928], [1441115712.0, 71580000.0, 0.5463943467342687], [1441117440.0, 71600000.0, 0.5358267949789969], [1441119168.0, 71620000.0, 0.5251746299612966], [1441120896.0, 71640000.0, 0.5144395337815081], [1441122624.0, 71660000.0, 0.5036232016357631], [1441124352.0, 71680000.0, 0.49272734154829456], [1441126080.0, 71700000.0, 0.481753674101719], [1441127808.0, 71720000.0, 0.470703932165337], [1441129536.0, 71740000.0, 0.4595798606214867], [1441131264.0, 71760000.0, 0.4483832160900318], [1441132992.0, 71780000.0, 0.43711576665093316], [1441134720.0, 71800000.0, 0.4257792915650736], [1441136448.0, 71820000.0, 0.4143755809932858], [1441138176.0, 71840000.0, 0.402906435713665], [1441139904.0, 71860000.0, 0.39137366683720554], [1441141632.0, 71880000.0, 0.37977909552180494], [1441143360.0, 71900000.0, 0.368124552684676], [1441145088.0, 71920000.0, 0.3564118787132494], [1441146816.0, 71940000.0, 0.3446429231745165], [1441148544.0, 71960000.0, 0.33281954452298684], [1441150272.0, 71980000.0, 0.32094360980721043], [1441152000.0, 72000000.0, 0.3090169943749491], [1441153728.0, 72020000.0, 0.29704158157703736], [1441155456.0, 72040000.0, 0.28501926246997933], [1441157184.0, 72060000.0, 0.27295193551732233], [1441158912.0, 72080000.0, 0.2608415062898948], [1441160640.0, 72100000.0, 0.2486898871648534], [1441162368.0, 72120000.0, 0.23649899702373095], [1441164096.0, 72140000.0, 0.2242707609493813], [1441165824.0, 72160000.0, 0.21200710992205554], [1441167552.0, 72180000.0, 0.1997099805144087], [1441169280.0, 72200000.0, 0.18738131458572707], [1441171008.0, 72220000.0, 0.17502305897527226], [1441172736.0, 72240000.0, 0.16263716519488758], [1441174464.0, 72260000.0, 0.15022558912076184], [1441176192.0, 72280000.0, 0.13779029068464363], [1441177920.0, 72300000.0, 0.12533323356430354], [1441179648.0, 72320000.0, 0.11285638487348175], [1441181376.0, 72340000.0, 0.10036171485121573], [1441183104.0, 72360000.0, 0.0878511965507448], [1441184832.0, 72380000.0, 0.07532680552793512], [1441186560.0, 72400000.0, 0.06279051952931657], [1441188288.0, 72420000.0, 0.050244318179773526], [1441190016.0, 72440000.0, 0.037690182669939294], [1441191744.0, 72460000.0, 0.025130095443335915], [1441193472.0, 72480000.0, 0.012566039883351825], [1441195200.0, 72500000.0, -6.189806365883577e-19], [1441196928.0, 72520000.0, -0.012566039883351827], [1441198656.0, 72540000.0, -0.025130095443335915], [1441200384.0, 72560000.0, -0.037690182669932196], [1441202112.0, 72580000.0, -0.050244318179766434], [1441203840.0, 72600000.0, -0.06279051952930947], [1441205568.0, 72620000.0, -0.07532680552792805], [1441207296.0, 72640000.0, -0.0878511965507448], [1441209024.0, 72660000.0, -0.10036171485121573], [1441210752.0, 72680000.0, -0.11285638487348175], [1441212480.0, 72700000.0, -0.1253332335642965], [1441214208.0, 72720000.0, -0.13779029068463658], [1441215936.0, 72740000.0, -0.15022558912075482], [1441217664.0, 72760000.0, -0.16263716519488058], [1441219392.0, 72780000.0, -0.17502305897527226], [1441221120.0, 72800000.0, -0.18738131458572707], [1441222848.0, 72820000.0, -0.1997099805144087], [1441224576.0, 72840000.0, -0.2120071099220486], [1441226304.0, 72860000.0, -0.2242707609493744], [1441228032.0, 72880000.0, -0.23649899702372407], [1441229760.0, 72900000.0, -0.2486898871648534], [1441231488.0, 72920000.0, -0.2608415062898948], [1441233216.0, 72940000.0, -0.27295193551732233], [1441234944.0, 72960000.0, -0.28501926246997933], [1441236672.0, 72980000.0, -0.29704158157703053], [1441238400.0, 73000000.0, -0.30901699437494234], [1441240128.0, 73020000.0, -0.3209436098072037], [1441241856.0, 73040000.0, -0.33281954452298684], [1441243584.0, 73060000.0, -0.3446429231745165], [1441245312.0, 73080000.0, -0.3564118787132494], [1441247040.0, 73100000.0, -0.368124552684676], [1441248768.0, 73120000.0, -0.3797790955217984], [1441250496.0, 73140000.0, -0.391373666837199], [1441252224.0, 73160000.0, -0.40290643571365853], [1441253952.0, 73180000.0, -0.4143755809932793], [1441255680.0, 73200000.0, -0.4257792915650736], [1441257408.0, 73220000.0, -0.43711576665093316], [1441259136.0, 73240000.0, -0.4483832160900318], [1441260864.0, 73260000.0, -0.4595798606214867], [1441262592.0, 73280000.0, -0.47070393216533074], [1441264320.0, 73300000.0, -0.48175367410171277], [1441266048.0, 73320000.0, -0.4927273415482884], [1441267776.0, 73340000.0, -0.503623201635757], [1441269504.0, 73360000.0, -0.5144395337815081], [1441271232.0, 73380000.0, -0.5251746299612966], [1441272960.0, 73400000.0, -0.5358267949789969], [1441274688.0, 73420000.0, -0.5463943467342628], [1441276416.0, 73440000.0, -0.556875616488187], [1441278144.0, 73460000.0, -0.5672689491267549], [1441279872.0, 73480000.0, -0.5775727034222653], [1441281600.0, 73500000.0, -0.5877852522924703], [1441283328.0, 73520000.0, -0.597904983057521], [1441285056.0, 73540000.0, -0.6079302976946069], [1441286784.0, 73560000.0, -0.6178596130903297], [1441288512.0, 73580000.0, -0.6276913612906952], [1441290240.0, 73600000.0, -0.6374239897486894], [1441291968.0, 73620000.0, -0.6470559615694434], [1441293696.0, 73640000.0, -0.656585755752955], [1441295424.0, 73660000.0, -0.6660118674342496], [1441297152.0, 73680000.0, -0.6753328081210271], [1441298880.0, 73700000.0, -0.6845471059286855], [1441300608.0, 73720000.0, -0.6936533058128013], [1441302336.0, 73740000.0, -0.7026499697988451], [1441304064.0, 73760000.0, -0.7115356772092857], [1441305792.0, 73780000.0, -0.7203090248879067], [1441307520.0, 73800000.0, -0.7289686274214108], [1441309248.0, 73820000.0, -0.7375131173581726], [1441310976.0, 73840000.0, -0.7459411454241803], [1441312704.0, 73860000.0, -0.7542513807361015], [1441314432.0, 73880000.0, -0.7624425110114451], [1441316160.0, 73900000.0, -0.770513242775786], [1441317888.0, 73920000.0, -0.7784623015670242], [1441319616.0, 73940000.0, -0.7862884321366193], [1441321344.0, 73960000.0, -0.7939903986478352], [1441323072.0, 73980000.0, -0.801566984870876], [1441324800.0, 74000000.0, -0.8090169943749463], [1441326528.0, 74020000.0, -0.8163392507171825], [1441328256.0, 74040000.0, -0.8235325976284256], [1441329984.0, 74060000.0, -0.8305958991958103], [1441331712.0, 74080000.0, -0.8375280400421429], [1441333440.0, 74100000.0, -0.8443279255020159], [1441335168.0, 74120000.0, -0.8509944817946922], [1441336896.0, 74140000.0, -0.8575266561936522], [1441338624.0, 74160000.0, -0.8639234171928348], [1441340352.0, 74180000.0, -0.8701837546695248], [1441342080.0, 74200000.0, -0.8763066800438624], [1441343808.0, 74220000.0, -0.8822912264349517], [1441345536.0, 74240000.0, -0.8881364488135459], [1441347264.0, 74260000.0, -0.8938414241512648], [1441348992.0, 74280000.0, -0.8994052515663685], [1441350720.0, 74300000.0, -0.9048270524660168], [1441352448.0, 74320000.0, -0.9101059706849957], [1441354176.0, 74340000.0, -0.9152411726209172], [1441355904.0, 74360000.0, -0.9202318473658697], [1441357632.0, 74380000.0, -0.9250772068344572], [1441359360.0, 74400000.0, -0.9297764858882528], [1441361088.0, 74420000.0, -0.9343289424566106], [1441362816.0, 74440000.0, -0.9387338576538724], [1441364544.0, 74460000.0, -0.9429905358928626], [1441366272.0, 74480000.0, -0.9470983049947446], [1441368000.0, 74500000.0, -0.9510565162951535], [1441369728.0, 74520000.0, -0.9548645447466427], [1441371456.0, 74540000.0, -0.9585217890173754], [1441373184.0, 74560000.0, -0.9620276715860853], [1441374912.0, 74580000.0, -0.9653816388332731], [1441376640.0, 74600000.0, -0.9685831611286302], [1441378368.0, 74620000.0, -0.9716317329146729], [1441380096.0, 74640000.0, -0.9745268727865775], [1441381824.0, 74660000.0, -0.9772681235681936], [1441383552.0, 74680000.0, -0.9798550523842469], [1441385280.0, 74700000.0, -0.9822872507286885], [1441387008.0, 74720000.0, -0.9845643345292051], [1441388736.0, 74740000.0, -0.9866859442078677], [1441390464.0, 74760000.0, -0.9886517447379135], [1441392192.0, 74780000.0, -0.9904614256966506], [1441393920.0, 74800000.0, -0.9921147013144781], [1441395648.0, 74820000.0, -0.9936113105200086], [1441397376.0, 74840000.0, -0.9949510169813003], [1441399104.0, 74860000.0, -0.9961336091431725], [1441400832.0, 74880000.0, -0.9971589002606139], [1441402560.0, 74900000.0, -0.9980267284282714], [1441404288.0, 74920000.0, -0.9987369566060174], [1441406016.0, 74940000.0, -0.9992894726405891], [1441407744.0, 74960000.0, -0.9996841892833], [1441409472.0, 74980000.0, -0.9999210442038161], [1441411200.0, 75000000.0, -1.0], [1441412928.0, 75020000.0, -0.9999210442038162], [1441414656.0, 75040000.0, -0.9996841892833002], [1441416384.0, 75060000.0, -0.9992894726405893], [1441418112.0, 75080000.0, -0.9987369566060176], [1441419840.0, 75100000.0, -0.9980267284282717], [1441421568.0, 75120000.0, -0.9971589002606142], [1441423296.0, 75140000.0, -0.9961336091431728], [1441425024.0, 75160000.0, -0.9949510169813006], [1441426752.0, 75180000.0, -0.9936113105200091], [1441428480.0, 75200000.0, -0.9921147013144785], [1441430208.0, 75220000.0, -0.9904614256966512], [1441431936.0, 75240000.0, -0.9886517447379141], [1441433664.0, 75260000.0, -0.9866859442078683], [1441435392.0, 75280000.0, -0.9845643345292058], [1441437120.0, 75300000.0, -0.9822872507286893], [1441438848.0, 75320000.0, -0.9798550523842476], [1441440576.0, 75340000.0, -0.9772681235681944], [1441442304.0, 75360000.0, -0.9745268727865783], [1441444032.0, 75380000.0, -0.9716317329146736], [1441445760.0, 75400000.0, -0.9685831611286311], [1441447488.0, 75420000.0, -0.965381638833274], [1441449216.0, 75440000.0, -0.9620276715860863], [1441450944.0, 75460000.0, -0.9585217890173765], [1441452672.0, 75480000.0, -0.9548645447466438], [1441454400.0, 75500000.0, -0.9510565162951546], [1441456128.0, 75520000.0, -0.9470983049947457], [1441457856.0, 75540000.0, -0.9429905358928639], [1441459584.0, 75560000.0, -0.9387338576538737], [1441461312.0, 75580000.0, -0.9343289424566119], [1441463040.0, 75600000.0, -0.9297764858882541], [1441464768.0, 75620000.0, -0.9250772068344585], [1441466496.0, 75640000.0, -0.9202318473658712], [1441468224.0, 75660000.0, -0.9152411726209186], [1441469952.0, 75680000.0, -0.9101059706849971], [1441471680.0, 75700000.0, -0.9048270524660184], [1441473408.0, 75720000.0, -0.8994052515663702], [1441475136.0, 75740000.0, -0.8938414241512664], [1441476864.0, 75760000.0, -0.8881364488135476], [1441478592.0, 75780000.0, -0.8822912264349535], [1441480320.0, 75800000.0, -0.8763066800438641], [1441482048.0, 75820000.0, -0.8701837546695266], [1441483776.0, 75840000.0, -0.8639234171928367], [1441485504.0, 75860000.0, -0.8575266561936541], [1441487232.0, 75880000.0, -0.8509944817946941], [1441488960.0, 75900000.0, -0.8443279255020177], [1441490688.0, 75920000.0, -0.8375280400421449], [1441492416.0, 75940000.0, -0.8305958991958123], [1441494144.0, 75960000.0, -0.8235325976284276], [1441495872.0, 75980000.0, -0.8163392507171846], [1441497600.0, 76000000.0, -0.8090169943749486], [1441499328.0, 76020000.0, -0.8015669848708782], [1441501056.0, 76040000.0, -0.7939903986478374], [1441502784.0, 76060000.0, -0.7862884321366215], [1441504512.0, 76080000.0, -0.7784623015670266], [1441506240.0, 76100000.0, -0.7705132427757884], [1441507968.0, 76120000.0, -0.7624425110114476], [1441509696.0, 76140000.0, -0.754251380736104], [1441511424.0, 76160000.0, -0.7459411454241828], [1441513152.0, 76180000.0, -0.7375131173581752], [1441514880.0, 76200000.0, -0.7289686274214133], [1441516608.0, 76220000.0, -0.7203090248879093], [1441518336.0, 76240000.0, -0.7115356772092882], [1441520064.0, 76260000.0, -0.7026499697988476], [1441521792.0, 76280000.0, -0.6936533058128039], [1441523520.0, 76300000.0, -0.6845471059286882], [1441525248.0, 76320000.0, -0.6753328081210298], [1441526976.0, 76340000.0, -0.6660118674342523], [1441528704.0, 76360000.0, -0.6565857557529577], [1441530432.0, 76380000.0, -0.6470559615694462], [1441532160.0, 76400000.0, -0.6374239897486923], [1441533888.0, 76420000.0, -0.6276913612906981], [1441535616.0, 76440000.0, -0.6178596130903325], [1441537344.0, 76460000.0, -0.6079302976946098], [1441539072.0, 76480000.0, -0.597904983057524], [1441540800.0, 76500000.0, -0.5877852522924732], [1441542528.0, 76520000.0, -0.5775727034222683], [1441544256.0, 76540000.0, -0.5672689491267578], [1441545984.0, 76560000.0, -0.5568756164881901], [1441547712.0, 76580000.0, -0.5463943467342658], [1441549440.0, 76600000.0, -0.535826794979], [1441551168.0, 76620000.0, -0.5251746299612998], [1441552896.0, 76640000.0, -0.5144395337815112], [1441554624.0, 76660000.0, -0.5036232016357602], [1441556352.0, 76680000.0, -0.4927273415482916], [1441558080.0, 76700000.0, -0.481753674101716], [1441559808.0, 76720000.0, -0.47070393216533396], [1441561536.0, 76740000.0, -0.45957986062149], [1441563264.0, 76760000.0, -0.44838321609003506], [1441564992.0, 76780000.0, -0.43711576665093643], [1441566720.0, 76800000.0, -0.42577929156507693], [1441568448.0, 76820000.0, -0.4143755809932827], [1441570176.0, 76840000.0, -0.4029064357136619], [1441571904.0, 76860000.0, -0.39137366683720237], [1441573632.0, 76880000.0, -0.3797790955218018], [1441575360.0, 76900000.0, -0.36812455268467936], [1441577088.0, 76920000.0, -0.35641187871325286], [1441578816.0, 76940000.0, -0.34464292317451994], [1441580544.0, 76960000.0, -0.3328195445229903], [1441582272.0, 76980000.0, -0.32094360980720715], [1441584000.0, 77000000.0, -0.30901699437494584], [1441585728.0, 77020000.0, -0.2970415815770341], [1441587456.0, 77040000.0, -0.2850192624699828], [1441589184.0, 77060000.0, -0.2729519355173259], [1441590912.0, 77080000.0, -0.26084150628989833], [1441592640.0, 77100000.0, -0.24868988716485696], [1441594368.0, 77120000.0, -0.23649899702372762], [1441596096.0, 77140000.0, -0.22427076094937798], [1441597824.0, 77160000.0, -0.21200710992205218], [1441599552.0, 77180000.0, -0.19970998051441227], [1441601280.0, 77200000.0, -0.18738131458573068], [1441603008.0, 77220000.0, -0.17502305897527587], [1441604736.0, 77240000.0, -0.16263716519488422], [1441606464.0, 77260000.0, -0.15022558912075842], [1441608192.0, 77280000.0, -0.13779029068464022], [1441609920.0, 77300000.0, -0.12533323356430012], [1441611648.0, 77320000.0, -0.1128563848734854], [1441613376.0, 77340000.0, -0.10036171485121939], [1441615104.0, 77360000.0, -0.08785119655074847], [1441616832.0, 77380000.0, -0.07532680552793171], [1441618560.0, 77400000.0, -0.06279051952931314], [1441620288.0, 77420000.0, -0.050244318179770105], [1441622016.0, 77440000.0, -0.037690182669935866], [1441623744.0, 77460000.0, -0.02513009544333959], [1441625472.0, 77480000.0, -0.012566039883355501], [1441627200.0, 77500000.0, -3.674559378078648e-15], [1441628928.0, 77520000.0, 0.012566039883348151], [1441630656.0, 77540000.0, 0.02513009544333224], [1441632384.0, 77560000.0, 0.037690182669935623], [1441634112.0, 77580000.0, 0.05024431817976986], [1441635840.0, 77600000.0, 0.0627905195293129], [1441637568.0, 77620000.0, 0.07532680552793146], [1441639296.0, 77640000.0, 0.08785119655074114], [1441641024.0, 77660000.0, 0.10036171485121208], [1441642752.0, 77680000.0, 0.1128563848734781], [1441644480.0, 77700000.0, 0.1253332335642999], [1441646208.0, 77720000.0, 0.13779029068463997], [1441647936.0, 77740000.0, 0.1502255891207582], [1441649664.0, 77760000.0, 0.16263716519488397], [1441651392.0, 77780000.0, 0.17502305897526865], [1441653120.0, 77800000.0, 0.18738131458572346], [1441654848.0, 77820000.0, 0.19970998051440508], [1441656576.0, 77840000.0, 0.21200710992205193], [1441658304.0, 77860000.0, 0.22427076094937773], [1441660032.0, 77880000.0, 0.2364989970237274], [1441661760.0, 77900000.0, 0.24868988716484985], [1441663488.0, 77920000.0, 0.2608415062898912], [1441665216.0, 77940000.0, 0.27295193551731883], [1441666944.0, 77960000.0, 0.2850192624699758], [1441668672.0, 77980000.0, 0.2970415815770338], [1441670400.0, 78000000.0, 0.3090169943749456], [1441672128.0, 78020000.0, 0.32094360980720693], [1441673856.0, 78040000.0, 0.33281954452298335], [1441675584.0, 78060000.0, 0.34464292317451306], [1441677312.0, 78080000.0, 0.356411878713246], [1441679040.0, 78100000.0, 0.36812455268467253], [1441680768.0, 78120000.0, 0.37977909552180156], [1441682496.0, 78140000.0, 0.39137366683720215], [1441684224.0, 78160000.0, 0.4029064357136617], [1441685952.0, 78180000.0, 0.4143755809932825], [1441687680.0, 78200000.0, 0.4257792915650703], [1441689408.0, 78220000.0, 0.4371157666509298], [1441691136.0, 78240000.0, 0.4483832160900285], [1441692864.0, 78260000.0, 0.4595798606214834], [1441694592.0, 78280000.0, 0.47070393216533374], [1441696320.0, 78300000.0, 0.48175367410171577], [1441698048.0, 78320000.0, 0.4927273415482914], [1441699776.0, 78340000.0, 0.50362320163576], [1441701504.0, 78360000.0, 0.514439533781505], [1441703232.0, 78380000.0, 0.5251746299612935], [1441704960.0, 78400000.0, 0.5358267949789938], [1441706688.0, 78420000.0, 0.5463943467342657], [1441708416.0, 78440000.0, 0.5568756164881898], [1441710144.0, 78460000.0, 0.5672689491267576], [1441711872.0, 78480000.0, 0.5775727034222681], [1441713600.0, 78500000.0, 0.5877852522924673], [1441715328.0, 78520000.0, 0.5979049830575182], [1441717056.0, 78540000.0, 0.607930297694604], [1441718784.0, 78560000.0, 0.6178596130903324], [1441720512.0, 78580000.0, 0.6276913612906979], [1441722240.0, 78600000.0, 0.6374239897486921], [1441723968.0, 78620000.0, 0.6470559615694407], [1441725696.0, 78640000.0, 0.6565857557529522], [1441727424.0, 78660000.0, 0.6660118674342469], [1441729152.0, 78680000.0, 0.6753328081210244], [1441730880.0, 78700000.0, 0.6845471059286881], [1441732608.0, 78720000.0, 0.6936533058128038], [1441734336.0, 78740000.0, 0.7026499697988475], [1441736064.0, 78760000.0, 0.7115356772092831], [1441737792.0, 78780000.0, 0.7203090248879042], [1441739520.0, 78800000.0, 0.7289686274214082], [1441741248.0, 78820000.0, 0.7375131173581702], [1441742976.0, 78840000.0, 0.7459411454241827], [1441744704.0, 78860000.0, 0.7542513807361038], [1441746432.0, 78880000.0, 0.7624425110114473], [1441748160.0, 78900000.0, 0.7705132427757883], [1441749888.0, 78920000.0, 0.7784623015670219], [1441751616.0, 78940000.0, 0.7862884321366169], [1441753344.0, 78960000.0, 0.7939903986478329], [1441755072.0, 78980000.0, 0.8015669848708737], [1441756800.0, 79000000.0, 0.8090169943749483], [1441758528.0, 79020000.0, 0.8163392507171844], [1441760256.0, 79040000.0, 0.8235325976284275], [1441761984.0, 79060000.0, 0.8305958991958122], [1441763712.0, 79080000.0, 0.8375280400421409], [1441765440.0, 79100000.0, 0.8443279255020139], [1441767168.0, 79120000.0, 0.8509944817946903], [1441768896.0, 79140000.0, 0.8575266561936503], [1441770624.0, 79160000.0, 0.8639234171928366], [1441772352.0, 79180000.0, 0.8701837546695265], [1441774080.0, 79200000.0, 0.876306680043864], [1441775808.0, 79220000.0, 0.88229122643495], [1441777536.0, 79240000.0, 0.8881364488135443], [1441779264.0, 79260000.0, 0.8938414241512631], [1441780992.0, 79280000.0, 0.8994052515663701], [1441782720.0, 79300000.0, 0.9048270524660182], [1441784448.0, 79320000.0, 0.9101059706849971], [1441786176.0, 79340000.0, 0.9152411726209185], [1441787904.0, 79360000.0, 0.9202318473658683], [1441789632.0, 79380000.0, 0.9250772068344557], [1441791360.0, 79400000.0, 0.9297764858882515], [1441793088.0, 79420000.0, 0.9343289424566118], [1441794816.0, 79440000.0, 0.9387338576538736], [1441796544.0, 79460000.0, 0.9429905358928637], [1441798272.0, 79480000.0, 0.9470983049947433], [1441800000.0, 79500000.0, 0.9510565162951524], [1441801728.0, 79520000.0, 0.9548645447466416], [1441803456.0, 79540000.0, 0.9585217890173744], [1441805184.0, 79560000.0, 0.9620276715860862], [1441806912.0, 79580000.0, 0.965381638833274], [1441808640.0, 79600000.0, 0.968583161128631], [1441810368.0, 79620000.0, 0.9716317329146736], [1441812096.0, 79640000.0, 0.9745268727865767], [1441813824.0, 79660000.0, 0.9772681235681928], [1441815552.0, 79680000.0, 0.9798550523842461], [1441817280.0, 79700000.0, 0.9822872507286878], [1441819008.0, 79720000.0, 0.9845643345292057], [1441820736.0, 79740000.0, 0.9866859442078683], [1441822464.0, 79760000.0, 0.9886517447379141], [1441824192.0, 79780000.0, 0.9904614256966512], [1441825920.0, 79800000.0, 0.9921147013144777], [1441827648.0, 79820000.0, 0.9936113105200082], [1441829376.0, 79840000.0, 0.9949510169812998], [1441831104.0, 79860000.0, 0.9961336091431722], [1441832832.0, 79880000.0, 0.9971589002606142], [1441834560.0, 79900000.0, 0.9980267284282717], [1441836288.0, 79920000.0, 0.9987369566060176], [1441838016.0, 79940000.0, 0.999289472640589], [1441839744.0, 79960000.0, 0.9996841892832999], [1441841472.0, 79980000.0, 0.9999210442038161], [1441843200.0, 80000000.0, 1.0], [1441844928.0, 80020000.0, 0.9999210442038161], [1441846656.0, 80040000.0, 0.9996841892833], [1441848384.0, 80060000.0, 0.9992894726405891], [1441850112.0, 80080000.0, 0.9987369566060178], [1441851840.0, 80100000.0, 0.9980267284282719], [1441853568.0, 80120000.0, 0.9971589002606139], [1441855296.0, 80140000.0, 0.9961336091431732], [1441857024.0, 80160000.0, 0.9949510169813003], [1441858752.0, 80180000.0, 0.9936113105200078], [1441860480.0, 80200000.0, 0.9921147013144782], [1441862208.0, 80220000.0, 0.9904614256966517], [1441863936.0, 80240000.0, 0.9886517447379146], [1441865664.0, 80260000.0, 0.9866859442078689], [1441867392.0, 80280000.0, 0.9845643345292051], [1441869120.0, 80300000.0, 0.9822872507286899], [1441870848.0, 80320000.0, 0.979855052384247], [1441872576.0, 80340000.0, 0.9772681235681937], [1441874304.0, 80360000.0, 0.9745268727865776], [1441876032.0, 80380000.0, 0.9716317329146745], [1441877760.0, 80400000.0, 0.9685831611286337], [1441879488.0, 80420000.0, 0.965381638833275], [1441881216.0, 80440000.0, 0.9620276715860853], [1441882944.0, 80460000.0, 0.9585217890173775], [1441884672.0, 80480000.0, 0.9548645447466427], [1441886400.0, 80500000.0, 0.9510565162951536], [1441888128.0, 80520000.0, 0.9470983049947446], [1441889856.0, 80540000.0, 0.9429905358928651], [1441891584.0, 80560000.0, 0.9387338576538774], [1441893312.0, 80580000.0, 0.9343289424566132], [1441895040.0, 80600000.0, 0.9297764858882503], [1441896768.0, 80620000.0, 0.9250772068344599], [1441898496.0, 80640000.0, 0.9202318473658698], [1441900224.0, 80660000.0, 0.9152411726209173], [1441901952.0, 80680000.0, 0.9101059706849987], [1441903680.0, 80700000.0, 0.9048270524660199], [1441905408.0, 80720000.0, 0.8994052515663749], [1441907136.0, 80740000.0, 0.8938414241512649], [1441908864.0, 80760000.0, 0.8881364488135428], [1441910592.0, 80780000.0, 0.8822912264349552], [1441912320.0, 80800000.0, 0.8763066800438659], [1441914048.0, 80820000.0, 0.8701837546695249], [1441915776.0, 80840000.0, 0.8639234171928385], [1441917504.0, 80860000.0, 0.8575266561936523], [1441919232.0, 80880000.0, 0.8509944817946961], [1441920960.0, 80900000.0, 0.844327925502016], [1441922688.0, 80920000.0, 0.8375280400421391], [1441924416.0, 80940000.0, 0.8305958991958144], [1441926144.0, 80960000.0, 0.8235325976284297], [1441927872.0, 80980000.0, 0.8163392507171826], [1441929600.0, 81000000.0, 0.8090169943749507], [1441931328.0, 81020000.0, 0.8015669848708761], [1441933056.0, 81040000.0, 0.7939903986478396], [1441934784.0, 81060000.0, 0.7862884321366194], [1441936512.0, 81080000.0, 0.7784623015670245], [1441938240.0, 81100000.0, 0.7705132427757907], [1441939968.0, 81120000.0, 0.7624425110114499], [1441941696.0, 81140000.0, 0.7542513807361018], [1441943424.0, 81160000.0, 0.7459411454241852], [1441945152.0, 81180000.0, 0.7375131173581728], [1441946880.0, 81200000.0, 0.7289686274214158], [1441948608.0, 81220000.0, 0.7203090248879068], [1441950336.0, 81240000.0, 0.7115356772092858], [1441952064.0, 81260000.0, 0.7026499697988553], [1441953792.0, 81280000.0, 0.6936533058128066], [1441955520.0, 81300000.0, 0.6845471059286857], [1441957248.0, 81320000.0, 0.6753328081210273], [1441958976.0, 81340000.0, 0.6660118674342498], [1441960704.0, 81360000.0, 0.6565857557529605], [1441962432.0, 81380000.0, 0.6470559615694436], [1441964160.0, 81400000.0, 0.6374239897486896], [1441965888.0, 81420000.0, 0.6276913612907065], [1441967616.0, 81440000.0, 0.6178596130903354], [1441969344.0, 81460000.0, 0.6079302976946015], [1441971072.0, 81480000.0, 0.5979049830575213], [1441972800.0, 81500000.0, 0.5877852522924705], [1441974528.0, 81520000.0, 0.5775727034222713], [1441976256.0, 81540000.0, 0.5672689491267608], [1441977984.0, 81560000.0, 0.5568756164881872], [1441979712.0, 81580000.0, 0.5463943467342749], [1441981440.0, 81600000.0, 0.5358267949789971], [1441983168.0, 81620000.0, 0.5251746299612908], [1441984896.0, 81640000.0, 0.5144395337815083], [1441986624.0, 81660000.0, 0.5036232016357634], [1441988352.0, 81680000.0, 0.4927273415482948], [1441990080.0, 81700000.0, 0.4817536741017192], [1441991808.0, 81720000.0, 0.47070393216533096], [1441993536.0, 81740000.0, 0.45957986062149325], [1441995264.0, 81760000.0, 0.448383216090032], [1441996992.0, 81780000.0, 0.437115766650927], [1441998720.0, 81800000.0, 0.4257792915650738], [1442000448.0, 81820000.0, 0.41437558099328603], [1442002176.0, 81840000.0, 0.4029064357136718], [1442003904.0, 81860000.0, 0.39137366683720576], [1442005632.0, 81880000.0, 0.3797790955217986], [1442007360.0, 81900000.0, 0.3681245526846828], [1442009088.0, 81920000.0, 0.35641187871324964], [1442010816.0, 81940000.0, 0.3446429231745167], [1442012544.0, 81960000.0, 0.33281954452298707], [1442014272.0, 81980000.0, 0.32094360980721065], [1442016000.0, 82000000.0, 0.3090169943749561], [1442017728.0, 82020000.0, 0.2970415815770376], [1442019456.0, 82040000.0, 0.2850192624699727], [1442021184.0, 82060000.0, 0.27295193551732944], [1442022912.0, 82080000.0, 0.26084150628989505], [1442024640.0, 82100000.0, 0.24868988716485363], [1442026368.0, 82120000.0, 0.2364989970237312], [1442028096.0, 82140000.0, 0.22427076094938156], [1442029824.0, 82160000.0, 0.21200710992206273], [1442031552.0, 82180000.0, 0.1997099805144089], [1442033280.0, 82200000.0, 0.18738131458572033], [1442035008.0, 82220000.0, 0.1750230589752795], [1442036736.0, 82240000.0, 0.16263716519488783], [1442038464.0, 82260000.0, 0.15022558912075504], [1442040192.0, 82280000.0, 0.13779029068464385], [1442041920.0, 82300000.0, 0.1253332335643038], [1442043648.0, 82320000.0, 0.11285638487348906], [1442045376.0, 82340000.0, 0.10036171485121598], [1442047104.0, 82360000.0, 0.08785119655073796], [1442048832.0, 82380000.0, 0.07532680552793537], [1442050560.0, 82400000.0, 0.0627905195293168], [1442052288.0, 82420000.0, 0.05024431817976668], [1442054016.0, 82440000.0, 0.03769018266993954], [1442055744.0, 82460000.0, 0.02513009544333616], [1442057472.0, 82480000.0, 0.012566039883359175], [1442059200.0, 82500000.0, 2.443103791928823e-16], [1442060928.0, 82520000.0, -0.012566039883351582], [1442062656.0, 82540000.0, -0.025130095443335672], [1442064384.0, 82560000.0, -0.03769018266993195], [1442066112.0, 82580000.0, -0.05024431817975909], [1442067840.0, 82600000.0, -0.06279051952930922], [1442069568.0, 82620000.0, -0.07532680552793489], [1442071296.0, 82640000.0, -0.08785119655073748], [1442073024.0, 82660000.0, -0.10036171485121549], [1442074752.0, 82680000.0, -0.11285638487348151], [1442076480.0, 82700000.0, -0.12533323356429624], [1442078208.0, 82720000.0, -0.13779029068463633], [1442079936.0, 82740000.0, -0.15022558912074754], [1442081664.0, 82760000.0, -0.16263716519488033], [1442083392.0, 82780000.0, -0.175023058975279], [1442085120.0, 82800000.0, -0.18738131458571985], [1442086848.0, 82820000.0, -0.19970998051440844], [1442088576.0, 82840000.0, -0.2120071099220553], [1442090304.0, 82860000.0, -0.22427076094937415], [1442092032.0, 82880000.0, -0.23649899702372382], [1442093760.0, 82900000.0, -0.24868988716484627], [1442095488.0, 82920000.0, -0.26084150628989455], [1442097216.0, 82940000.0, -0.27295193551732894], [1442098944.0, 82960000.0, -0.2850192624699723], [1442100672.0, 82980000.0, -0.2970415815770303], [1442102400.0, 83000000.0, -0.3090169943749489], [1442104128.0, 83020000.0, -0.32094360980720343], [1442105856.0, 83040000.0, -0.3328195445229866], [1442107584.0, 83060000.0, -0.3446429231745096], [1442109312.0, 83080000.0, -0.3564118787132492], [1442111040.0, 83100000.0, -0.36812455268467575], [1442112768.0, 83120000.0, -0.37977909552179817], [1442114496.0, 83140000.0, -0.39137366683719876], [1442116224.0, 83160000.0, -0.4029064357136648], [1442117952.0, 83180000.0, -0.4143755809932791], [1442119680.0, 83200000.0, -0.4257792915650734], [1442121408.0, 83220000.0, -0.43711576665092655], [1442123136.0, 83240000.0, -0.44838321609003157], [1442124864.0, 83260000.0, -0.4595798606214865], [1442126592.0, 83280000.0, -0.4707039321653305], [1442128320.0, 83300000.0, -0.48175367410171255], [1442130048.0, 83320000.0, -0.49272734154829434], [1442131776.0, 83340000.0, -0.5036232016357568], [1442133504.0, 83360000.0, -0.5144395337815079], [1442135232.0, 83380000.0, -0.5251746299612904], [1442136960.0, 83400000.0, -0.5358267949789967], [1442138688.0, 83420000.0, -0.5463943467342685], [1442140416.0, 83440000.0, -0.5568756164881808], [1442142144.0, 83460000.0, -0.5672689491267546], [1442143872.0, 83480000.0, -0.577572703422271], [1442145600.0, 83500000.0, -0.58778525229247], [1442147328.0, 83520000.0, -0.5979049830575209], [1442149056.0, 83540000.0, -0.6079302976946012], [1442150784.0, 83560000.0, -0.6178596130903296], [1442152512.0, 83580000.0, -0.6276913612907006], [1442154240.0, 83600000.0, -0.6374239897486838], [1442155968.0, 83620000.0, -0.6470559615694432], [1442157696.0, 83640000.0, -0.6565857557529602], [1442159424.0, 83660000.0, -0.6660118674342494], [1442161152.0, 83680000.0, -0.6753328081210269], [1442162880.0, 83700000.0, -0.6845471059286854], [1442164608.0, 83720000.0, -0.6936533058128012], [1442166336.0, 83740000.0, -0.70264996979885], [1442168064.0, 83760000.0, -0.7115356772092805], [1442169792.0, 83780000.0, -0.7203090248879065], [1442171520.0, 83800000.0, -0.7289686274214154], [1442173248.0, 83820000.0, -0.7375131173581725], [1442174976.0, 83840000.0, -0.7459411454241802], [1442176704.0, 83860000.0, -0.7542513807361014], [1442178432.0, 83880000.0, -0.762442511011445], [1442180160.0, 83900000.0, -0.7705132427757904], [1442181888.0, 83920000.0, -0.7784623015670197], [1442183616.0, 83940000.0, -0.786288432136619], [1442185344.0, 83960000.0, -0.793990398647835], [1442187072.0, 83980000.0, -0.8015669848708759], [1442188800.0, 84000000.0, -0.8090169943749462], [1442190528.0, 84020000.0, -0.8163392507171782], [1442192256.0, 84040000.0, -0.8235325976284253], [1442193984.0, 84060000.0, -0.8305958991958141], [1442195712.0, 84080000.0, -0.8375280400421389], [1442197440.0, 84100000.0, -0.8443279255020157], [1442199168.0, 84120000.0, -0.8509944817946921], [1442200896.0, 84140000.0, -0.8575266561936521], [1442202624.0, 84160000.0, -0.8639234171928347], [1442204352.0, 84180000.0, -0.8701837546695211], [1442206080.0, 84200000.0, -0.8763066800438623], [1442207808.0, 84220000.0, -0.882291226434955], [1442209536.0, 84240000.0, -0.8881364488135425], [1442211264.0, 84260000.0, -0.8938414241512647], [1442212992.0, 84280000.0, -0.8994052515663715], [1442214720.0, 84300000.0, -0.9048270524660167], [1442216448.0, 84320000.0, -0.9101059706849955], [1442218176.0, 84340000.0, -0.9152411726209142], [1442219904.0, 84360000.0, -0.9202318473658696], [1442221632.0, 84380000.0, -0.9250772068344597], [1442223360.0, 84400000.0, -0.9297764858882501], [1442225088.0, 84420000.0, -0.9343289424566106], [1442226816.0, 84440000.0, -0.9387338576538748], [1442228544.0, 84460000.0, -0.9429905358928625], [1442230272.0, 84480000.0, -0.9470983049947445], [1442232000.0, 84500000.0, -0.9510565162951513], [1442233728.0, 84520000.0, -0.9548645447466426], [1442235456.0, 84540000.0, -0.9585217890173774], [1442237184.0, 84560000.0, -0.9620276715860852], [1442238912.0, 84580000.0, -0.965381638833273], [1442240640.0, 84600000.0, -0.9685831611286319], [1442242368.0, 84620000.0, -0.9716317329146728], [1442244096.0, 84640000.0, -0.9745268727865775], [1442245824.0, 84660000.0, -0.977268123568192], [1442247552.0, 84680000.0, -0.9798550523842469], [1442249280.0, 84700000.0, -0.9822872507286885], [1442251008.0, 84720000.0, -0.9845643345292051], [1442252736.0, 84740000.0, -0.9866859442078677], [1442254464.0, 84760000.0, -0.9886517447379146], [1442256192.0, 84780000.0, -0.9904614256966506], [1442257920.0, 84800000.0, -0.9921147013144781], [1442259648.0, 84820000.0, -0.9936113105200077], [1442261376.0, 84840000.0, -0.9949510169813002], [1442263104.0, 84860000.0, -0.9961336091431725], [1442264832.0, 84880000.0, -0.9971589002606134], [1442266560.0, 84900000.0, -0.9980267284282714], [1442268288.0, 84920000.0, -0.9987369566060177], [1442270016.0, 84940000.0, -0.9992894726405891], [1442271744.0, 84960000.0, -0.9996841892833], [1442273472.0, 84980000.0, -0.9999210442038161], [1442275200.0, 85000000.0, -1.0], [1442276928.0, 85020000.0, -0.9999210442038161], [1442278656.0, 85040000.0, -0.9996841892833002], [1442280384.0, 85060000.0, -0.9992894726405893], [1442282112.0, 85080000.0, -0.9987369566060179], [1442283840.0, 85100000.0, -0.9980267284282717], [1442285568.0, 85120000.0, -0.9971589002606136], [1442287296.0, 85140000.0, -0.9961336091431728], [1442289024.0, 85160000.0, -0.9949510169813006], [1442290752.0, 85180000.0, -0.9936113105200083], [1442292480.0, 85200000.0, -0.9921147013144787], [1442294208.0, 85220000.0, -0.9904614256966512], [1442295936.0, 85240000.0, -0.9886517447379152], [1442297664.0, 85260000.0, -0.9866859442078684], [1442299392.0, 85280000.0, -0.9845643345292058], [1442301120.0, 85300000.0, -0.9822872507286893], [1442302848.0, 85320000.0, -0.9798550523842476], [1442304576.0, 85340000.0, -0.9772681235681929], [1442306304.0, 85360000.0, -0.9745268727865783], [1442308032.0, 85380000.0, -0.9716317329146738], [1442309760.0, 85400000.0, -0.9685831611286329], [1442311488.0, 85420000.0, -0.9653816388332741], [1442313216.0, 85440000.0, -0.9620276715860863], [1442314944.0, 85460000.0, -0.9585217890173786], [1442316672.0, 85480000.0, -0.9548645447466438], [1442318400.0, 85500000.0, -0.9510565162951525], [1442320128.0, 85520000.0, -0.9470983049947458], [1442321856.0, 85540000.0, -0.942990535892864], [1442323584.0, 85560000.0, -0.9387338576538762], [1442325312.0, 85580000.0, -0.934328942456612], [1442327040.0, 85600000.0, -0.9297764858882517], [1442328768.0, 85620000.0, -0.9250772068344613], [1442330496.0, 85640000.0, -0.9202318473658713], [1442332224.0, 85660000.0, -0.9152411726209159], [1442333952.0, 85680000.0, -0.9101059706849972], [1442335680.0, 85700000.0, -0.9048270524660185], [1442337408.0, 85720000.0, -0.8994052515663734], [1442339136.0, 85740000.0, -0.8938414241512666], [1442340864.0, 85760000.0, -0.8881364488135445], [1442342592.0, 85780000.0, -0.8822912264349569], [1442344320.0, 85800000.0, -0.8763066800438643], [1442346048.0, 85820000.0, -0.8701837546695232], [1442347776.0, 85840000.0, -0.8639234171928368], [1442349504.0, 85860000.0, -0.8575266561936542], [1442351232.0, 85880000.0, -0.8509944817946943], [1442352960.0, 85900000.0, -0.844327925502018], [1442354688.0, 85920000.0, -0.8375280400421411], [1442356416.0, 85940000.0, -0.8305958991958164], [1442358144.0, 85960000.0, -0.8235325976284278], [1442359872.0, 85980000.0, -0.8163392507171806], [1442361600.0, 86000000.0, -0.8090169943749487], [1442363328.0, 86020000.0, -0.8015669848708783], [1442365056.0, 86040000.0, -0.7939903986478376], [1442366784.0, 86060000.0, -0.7862884321366217], [1442368512.0, 86080000.0, -0.7784623015670222], [1442370240.0, 86100000.0, -0.770513242775793], [1442371968.0, 86120000.0, -0.7624425110114477], [1442373696.0, 86140000.0, -0.7542513807361041], [1442375424.0, 86160000.0, -0.745941145424183], [1442377152.0, 86180000.0, -0.7375131173581753], [1442378880.0, 86200000.0, -0.7289686274214183], [1442380608.0, 86220000.0, -0.7203090248879094], [1442382336.0, 86240000.0, -0.7115356772092835], [1442384064.0, 86260000.0, -0.7026499697988529], [1442385792.0, 86280000.0, -0.6936533058128042], [1442387520.0, 86300000.0, -0.6845471059286884], [1442389248.0, 86320000.0, -0.67533280812103], [1442390976.0, 86340000.0, -0.6660118674342526], [1442392704.0, 86360000.0, -0.6565857557529633], [1442394432.0, 86380000.0, -0.6470559615694464], [1442396160.0, 86400000.0, -0.637423989748687], [1442397888.0, 86420000.0, -0.6276913612907038], [1442399616.0, 86440000.0, -0.6178596130903328], [1442401344.0, 86460000.0, -0.6079302976946044], [1442403072.0, 86480000.0, -0.5979049830575243], [1442404800.0, 86500000.0, -0.5877852522924734], [1442406528.0, 86520000.0, -0.5775727034222743], [1442408256.0, 86540000.0, -0.5672689491267581], [1442409984.0, 86560000.0, -0.5568756164881843], [1442411712.0, 86580000.0, -0.546394346734272], [1442413440.0, 86600000.0, -0.5358267949790002], [1442415168.0, 86620000.0, -0.5251746299612939], [1442416896.0, 86640000.0, -0.5144395337815114], [1442418624.0, 86660000.0, -0.5036232016357604], [1442420352.0, 86680000.0, -0.492727341548298], [1442422080.0, 86700000.0, -0.4817536741017162], [1442423808.0, 86720000.0, -0.4707039321653342], [1442425536.0, 86740000.0, -0.4595798606214902], [1442427264.0, 86760000.0, -0.4483832160900353], [1442428992.0, 86780000.0, -0.43711576665093027], [1442430720.0, 86800000.0, -0.42577929156507716], [1442432448.0, 86820000.0, -0.4143755809932829], [1442434176.0, 86840000.0, -0.40290643571366863], [1442435904.0, 86860000.0, -0.3913736668372026], [1442437632.0, 86880000.0, -0.379779095521802], [1442439360.0, 86900000.0, -0.3681245526846796], [1442441088.0, 86920000.0, -0.3564118787132531], [1442442816.0, 86940000.0, -0.3446429231745135], [1442444544.0, 86960000.0, -0.3328195445229905], [1442446272.0, 86980000.0, -0.3209436098072074], [1442448000.0, 87000000.0, -0.30901699437495284], [1442449728.0, 87020000.0, -0.2970415815770343], [1442451456.0, 87040000.0, -0.2850192624699763], [1442453184.0, 87060000.0, -0.27295193551733293], [1442454912.0, 87080000.0, -0.2608415062898986], [1442456640.0, 87100000.0, -0.24868988716485033], [1442458368.0, 87120000.0, -0.23649899702372787], [1442460096.0, 87140000.0, -0.2242707609493782], [1442461824.0, 87160000.0, -0.21200710992205937], [1442463552.0, 87180000.0, -0.19970998051441252], [1442465280.0, 87200000.0, -0.18738131458572393], [1442467008.0, 87220000.0, -0.1750230589752831], [1442468736.0, 87240000.0, -0.16263716519488444], [1442470464.0, 87260000.0, -0.15022558912075165], [1442472192.0, 87280000.0, -0.13779029068464047], [1442473920.0, 87300000.0, -0.12533323356430037], [1442475648.0, 87320000.0, -0.11285638487348565], [1442477376.0, 87340000.0, -0.10036171485121963], [1442479104.0, 87360000.0, -0.08785119655074163], [1442480832.0, 87380000.0, -0.07532680552793904], [1442482560.0, 87400000.0, -0.06279051952931339], [1442484288.0, 87420000.0, -0.05024431817976325], [1442486016.0, 87440000.0, -0.03769018266993611], [1442487744.0, 87460000.0, -0.02513009544333983], [1442489472.0, 87480000.0, -0.012566039883355746], [1442491200.0, 87500000.0, -3.919488737908119e-15], [1442492928.0, 87520000.0, 0.012566039883355012], [1442494656.0, 87540000.0, 0.025130095443331998], [1442496384.0, 87560000.0, 0.03769018266993538], [1442498112.0, 87580000.0, 0.05024431817976252], [1442499840.0, 87600000.0, 0.06279051952931265], [1442501568.0, 87620000.0, 0.07532680552793122], [1442503296.0, 87640000.0, 0.08785119655073381], [1442505024.0, 87660000.0, 0.10036171485121183], [1442506752.0, 87680000.0, 0.11285638487348491], [1442508480.0, 87700000.0, 0.12533323356429965], [1442510208.0, 87720000.0, 0.13779029068463974], [1442511936.0, 87740000.0, 0.15022558912075093], [1442513664.0, 87760000.0, 0.16263716519488372], [1442515392.0, 87780000.0, 0.1750230589752754], [1442517120.0, 87800000.0, 0.18738131458571625], [1442518848.0, 87820000.0, 0.19970998051440483], [1442520576.0, 87840000.0, 0.21200710992205865], [1442522304.0, 87860000.0, 0.2242707609493775], [1442524032.0, 87880000.0, 0.23649899702372715], [1442525760.0, 87900000.0, 0.2486898871648496], [1442527488.0, 87920000.0, 0.260841506289891], [1442529216.0, 87940000.0, 0.27295193551732544], [1442530944.0, 87960000.0, 0.2850192624699688], [1442532672.0, 87980000.0, 0.2970415815770336], [1442534400.0, 88000000.0, 0.3090169943749521], [1442536128.0, 88020000.0, 0.3209436098072067], [1442537856.0, 88040000.0, 0.3328195445229831], [1442539584.0, 88060000.0, 0.34464292317451284], [1442541312.0, 88080000.0, 0.35641187871324576], [1442543040.0, 88100000.0, 0.3681245526846789], [1442544768.0, 88120000.0, 0.3797790955217948], [1442546496.0, 88140000.0, 0.39137366683720193], [1442548224.0, 88160000.0, 0.40290643571366797], [1442549952.0, 88180000.0, 0.41437558099328226], [1442551680.0, 88200000.0, 0.42577929156507005], [1442553408.0, 88220000.0, 0.4371157666509232], [1442555136.0, 88240000.0, 0.4483832160900283], [1442556864.0, 88260000.0, 0.45957986062148953], [1442558592.0, 88280000.0, 0.47070393216532724], [1442560320.0, 88300000.0, 0.48175367410171555], [1442562048.0, 88320000.0, 0.4927273415482912], [1442563776.0, 88340000.0, 0.5036232016357598], [1442565504.0, 88360000.0, 0.5144395337815048], [1442567232.0, 88380000.0, 0.5251746299612873], [1442568960.0, 88400000.0, 0.5358267949789935], [1442570688.0, 88420000.0, 0.5463943467342713], [1442572416.0, 88440000.0, 0.5568756164881837], [1442574144.0, 88460000.0, 0.5672689491267574], [1442575872.0, 88480000.0, 0.577572703422268], [1442577600.0, 88500000.0, 0.587785252292467], [1442579328.0, 88520000.0, 0.5979049830575179], [1442581056.0, 88540000.0, 0.6079302976945982], [1442582784.0, 88560000.0, 0.6178596130903322], [1442584512.0, 88580000.0, 0.6276913612907032], [1442586240.0, 88600000.0, 0.6374239897486864], [1442587968.0, 88620000.0, 0.6470559615694405], [1442589696.0, 88640000.0, 0.6565857557529574], [1442591424.0, 88660000.0, 0.6660118674342467], [1442593152.0, 88680000.0, 0.6753328081210243], [1442594880.0, 88700000.0, 0.6845471059286827], [1442596608.0, 88720000.0, 0.6936533058128036], [1442598336.0, 88740000.0, 0.7026499697988523], [1442600064.0, 88760000.0, 0.7115356772092829], [1442601792.0, 88780000.0, 0.7203090248879039], [1442603520.0, 88800000.0, 0.728968627421413], [1442605248.0, 88820000.0, 0.7375131173581699], [1442606976.0, 88840000.0, 0.7459411454241824], [1442608704.0, 88860000.0, 0.754251380736099], [1442610432.0, 88880000.0, 0.7624425110114472], [1442612160.0, 88900000.0, 0.770513242775788], [1442613888.0, 88920000.0, 0.7784623015670218], [1442615616.0, 88940000.0, 0.7862884321366168], [1442617344.0, 88960000.0, 0.7939903986478372], [1442619072.0, 88980000.0, 0.8015669848708736], [1442620800.0, 89000000.0, 0.8090169943749482], [1442622528.0, 89020000.0, 0.8163392507171802], [1442624256.0, 89040000.0, 0.8235325976284273], [1442625984.0, 89060000.0, 0.8305958991958121], [1442627712.0, 89080000.0, 0.8375280400421369], [1442629440.0, 89100000.0, 0.8443279255020137], [1442631168.0, 89120000.0, 0.8509944817946938], [1442632896.0, 89140000.0, 0.8575266561936501], [1442634624.0, 89160000.0, 0.8639234171928364], [1442636352.0, 89180000.0, 0.8701837546695229], [1442638080.0, 89200000.0, 0.8763066800438639], [1442639808.0, 89220000.0, 0.8822912264349532], [1442641536.0, 89240000.0, 0.8881364488135408], [1442643264.0, 89260000.0, 0.893841424151263], [1442644992.0, 89280000.0, 0.8994052515663731], [1442646720.0, 89300000.0, 0.9048270524660181], [1442648448.0, 89320000.0, 0.910105970684997], [1442650176.0, 89340000.0, 0.9152411726209156], [1442651904.0, 89360000.0, 0.9202318473658682], [1442653632.0, 89380000.0, 0.9250772068344583], [1442655360.0, 89400000.0, 0.9297764858882488], [1442657088.0, 89420000.0, 0.9343289424566118], [1442658816.0, 89440000.0, 0.938733857653876], [1442660544.0, 89460000.0, 0.9429905358928636], [1442662272.0, 89480000.0, 0.9470983049947432], [1442664000.0, 89500000.0, 0.9510565162951523], [1442665728.0, 89520000.0, 0.9548645447466415], [1442667456.0, 89540000.0, 0.9585217890173764], [1442669184.0, 89560000.0, 0.9620276715860842], [1442670912.0, 89580000.0, 0.9653816388332739], [1442672640.0, 89600000.0, 0.9685831611286327], [1442674368.0, 89620000.0, 0.9716317329146735], [1442676096.0, 89640000.0, 0.9745268727865766], [1442677824.0, 89660000.0, 0.9772681235681928], [1442679552.0, 89680000.0, 0.9798550523842461], [1442681280.0, 89700000.0, 0.9822872507286892], [1442683008.0, 89720000.0, 0.9845643345292044], [1442684736.0, 89740000.0, 0.9866859442078683], [1442686464.0, 89760000.0, 0.9886517447379141], [1442688192.0, 89780000.0, 0.9904614256966511], [1442689920.0, 89800000.0, 0.9921147013144777], [1442691648.0, 89820000.0, 0.9936113105200074], [1442693376.0, 89840000.0, 0.9949510169812998], [1442695104.0, 89860000.0, 0.9961336091431727], [1442696832.0, 89880000.0, 0.9971589002606136], [1442698560.0, 89900000.0, 0.9980267284282717], [1442700288.0, 89920000.0, 0.9987369566060176], [1442702016.0, 89940000.0, 0.999289472640589], [1442703744.0, 89960000.0, 0.9996841892832999], [1442705472.0, 89980000.0, 0.999921044203816], [1442707200.0, 90000000.0, 1.0], [1442708928.0, 90020000.0, 0.9999210442038161], [1442710656.0, 90040000.0, 0.9996841892833], [1442712384.0, 90060000.0, 0.9992894726405892], [1442714112.0, 90080000.0, 0.9987369566060178], [1442715840.0, 90100000.0, 0.9980267284282719], [1442717568.0, 90120000.0, 0.9971589002606139], [1442719296.0, 90140000.0, 0.9961336091431732], [1442721024.0, 90160000.0, 0.9949510169813003], [1442722752.0, 90180000.0, 0.9936113105200078], [1442724480.0, 90200000.0, 0.9921147013144782], [1442726208.0, 90220000.0, 0.9904614256966517], [1442727936.0, 90240000.0, 0.9886517447379147], [1442729664.0, 90260000.0, 0.9866859442078689], [1442731392.0, 90280000.0, 0.9845643345292052], [1442733120.0, 90300000.0, 0.9822872507286899], [1442734848.0, 90320000.0, 0.979855052384247], [1442736576.0, 90340000.0, 0.9772681235681937], [1442738304.0, 90360000.0, 0.9745268727865776], [1442740032.0, 90380000.0, 0.9716317329146746], [1442741760.0, 90400000.0, 0.9685831611286337], [1442743488.0, 90420000.0, 0.965381638833275], [1442745216.0, 90440000.0, 0.9620276715860854], [1442746944.0, 90460000.0, 0.9585217890173776], [1442748672.0, 90480000.0, 0.9548645447466428], [1442750400.0, 90500000.0, 0.9510565162951538], [1442752128.0, 90520000.0, 0.9470983049947447], [1442753856.0, 90540000.0, 0.9429905358928652], [1442755584.0, 90560000.0, 0.9387338576538775], [1442757312.0, 90580000.0, 0.9343289424566134], [1442759040.0, 90600000.0, 0.9297764858882503], [1442760768.0, 90620000.0, 0.92507720683446], [1442762496.0, 90640000.0, 0.9202318473658698], [1442764224.0, 90660000.0, 0.9152411726209174], [1442765952.0, 90680000.0, 0.9101059706849988], [1442767680.0, 90700000.0, 0.90482705246602], [1442769408.0, 90720000.0, 0.899405251566375], [1442771136.0, 90740000.0, 0.893841424151265], [1442772864.0, 90760000.0, 0.8881364488135429], [1442774592.0, 90780000.0, 0.8822912264349553], [1442776320.0, 90800000.0, 0.876306680043866], [1442778048.0, 90820000.0, 0.870183754669525], [1442779776.0, 90840000.0, 0.8639234171928386], [1442781504.0, 90860000.0, 0.8575266561936524], [1442783232.0, 90880000.0, 0.8509944817946962], [1442784960.0, 90900000.0, 0.8443279255020161], [1442786688.0, 90920000.0, 0.8375280400421393], [1442788416.0, 90940000.0, 0.8305958991958146], [1442790144.0, 90960000.0, 0.8235325976284298], [1442791872.0, 90980000.0, 0.8163392507171827], [1442793600.0, 91000000.0, 0.8090169943749508], [1442795328.0, 91020000.0, 0.8015669848708763], [1442797056.0, 91040000.0, 0.7939903986478398], [1442798784.0, 91060000.0, 0.7862884321366195], [1442800512.0, 91080000.0, 0.7784623015670246], [1442802240.0, 91100000.0, 0.7705132427757909], [1442803968.0, 91120000.0, 0.76244251101145], [1442805696.0, 91140000.0, 0.7542513807361019], [1442807424.0, 91160000.0, 0.7459411454241854], [1442809152.0, 91180000.0, 0.7375131173581729], [1442810880.0, 91200000.0, 0.728968627421416], [1442812608.0, 91220000.0, 0.720309024887907], [1442814336.0, 91240000.0, 0.711535677209286], [1442816064.0, 91260000.0, 0.7026499697988555], [1442817792.0, 91280000.0, 0.6936533058128068], [1442819520.0, 91300000.0, 0.684547105928686], [1442821248.0, 91320000.0, 0.6753328081210275], [1442822976.0, 91340000.0, 0.66601186743425], [1442824704.0, 91360000.0, 0.6565857557529607], [1442826432.0, 91380000.0, 0.6470559615694438], [1442828160.0, 91400000.0, 0.6374239897486897], [1442829888.0, 91420000.0, 0.6276913612907067], [1442831616.0, 91440000.0, 0.6178596130903357], [1442833344.0, 91460000.0, 0.6079302976946017], [1442835072.0, 91480000.0, 0.5979049830575215], [1442836800.0, 91500000.0, 0.5877852522924706], [1442838528.0, 91520000.0, 0.5775727034222715], [1442840256.0, 91540000.0, 0.5672689491267611], [1442841984.0, 91560000.0, 0.5568756164881874], [1442843712.0, 91580000.0, 0.5463943467342751], [1442845440.0, 91600000.0, 0.5358267949789973], [1442847168.0, 91620000.0, 0.525174629961291], [1442848896.0, 91640000.0, 0.5144395337815085], [1442850624.0, 91660000.0, 0.5036232016357636], [1442852352.0, 91680000.0, 0.492727341548295], [1442854080.0, 91700000.0, 0.48175367410171943], [1442855808.0, 91720000.0, 0.4707039321653312], [1442857536.0, 91740000.0, 0.4595798606214935], [1442859264.0, 91760000.0, 0.44838321609003223], [1442860992.0, 91780000.0, 0.4371157666509272], [1442862720.0, 91800000.0, 0.42577929156507405], [1442864448.0, 91820000.0, 0.41437558099328625], [1442866176.0, 91840000.0, 0.402906435713672], [1442867904.0, 91860000.0, 0.391373666837206], [1442869632.0, 91880000.0, 0.37977909552179884], [1442871360.0, 91900000.0, 0.368124552684683], [1442873088.0, 91920000.0, 0.35641187871324986], [1442874816.0, 91940000.0, 0.34464292317451695], [1442876544.0, 91960000.0, 0.3328195445229873], [1442878272.0, 91980000.0, 0.3209436098072109], [1442880000.0, 92000000.0, 0.30901699437495633], [1442881728.0, 92020000.0, 0.2970415815770378], [1442883456.0, 92040000.0, 0.285019262469973], [1442885184.0, 92060000.0, 0.27295193551732966], [1442886912.0, 92080000.0, 0.2608415062898953], [1442888640.0, 92100000.0, 0.24868988716485388], [1442890368.0, 92120000.0, 0.23649899702373142], [1442892096.0, 92140000.0, 0.22427076094938178], [1442893824.0, 92160000.0, 0.21200710992206295], [1442895552.0, 92180000.0, 0.19970998051440916], [1442897280.0, 92200000.0, 0.18738131458572058], [1442899008.0, 92220000.0, 0.17502305897527973], [1442900736.0, 92240000.0, 0.16263716519488808], [1442902464.0, 92260000.0, 0.1502255891207553], [1442904192.0, 92280000.0, 0.1377902906846441], [1442905920.0, 92300000.0, 0.125333233564304], [1442907648.0, 92320000.0, 0.1128563848734893], [1442909376.0, 92340000.0, 0.10036171485121621], [1442911104.0, 92360000.0, 0.08785119655073821], [1442912832.0, 92380000.0, 0.07532680552793562], [1442914560.0, 92400000.0, 0.06279051952931705], [1442916288.0, 92420000.0, 0.05024431817976692], [1442918016.0, 92440000.0, 0.03769018266993978], [1442919744.0, 92460000.0, 0.025130095443336404], [1442921472.0, 92480000.0, 0.01256603988335942], [1442923200.0, 92500000.0, 4.892397390223529e-16], [1442924928.0, 92520000.0, -0.012566039883351336], [1442926656.0, 92540000.0, -0.025130095443335426], [1442928384.0, 92560000.0, -0.0376901826699317], [1442930112.0, 92580000.0, -0.05024431817975885], [1442931840.0, 92600000.0, -0.06279051952930899], [1442933568.0, 92620000.0, -0.07532680552793464], [1442935296.0, 92640000.0, -0.08785119655073724], [1442937024.0, 92660000.0, -0.10036171485121524], [1442938752.0, 92680000.0, -0.11285638487348126], [1442940480.0, 92700000.0, -0.125333233564296], [1442942208.0, 92720000.0, -0.1377902906846361], [1442943936.0, 92740000.0, -0.1502255891207473], [1442945664.0, 92760000.0, -0.1626371651948801], [1442947392.0, 92780000.0, -0.17502305897527878], [1442949120.0, 92800000.0, -0.1873813145857196], [1442950848.0, 92820000.0, -0.1997099805144082], [1442952576.0, 92840000.0, -0.21200710992205507], [1442954304.0, 92860000.0, -0.22427076094937393], [1442956032.0, 92880000.0, -0.23649899702372357], [1442957760.0, 92900000.0, -0.24868988716484605], [1442959488.0, 92920000.0, -0.26084150628989433], [1442961216.0, 92940000.0, -0.2729519355173287], [1442962944.0, 92960000.0, -0.28501926246997206], [1442964672.0, 92980000.0, -0.2970415815770301], [1442966400.0, 93000000.0, -0.3090169943749486], [1442968128.0, 93020000.0, -0.3209436098072032], [1442969856.0, 93040000.0, -0.33281954452298634], [1442971584.0, 93060000.0, -0.3446429231745094], [1442973312.0, 93080000.0, -0.356411878713249], [1442975040.0, 93100000.0, -0.36812455268467553], [1442976768.0, 93120000.0, -0.37977909552179795], [1442978496.0, 93140000.0, -0.39137366683719854], [1442980224.0, 93160000.0, -0.4029064357136646], [1442981952.0, 93180000.0, -0.41437558099327887], [1442983680.0, 93200000.0, -0.42577929156507316], [1442985408.0, 93220000.0, -0.43711576665092633], [1442987136.0, 93240000.0, -0.44838321609003134], [1442988864.0, 93260000.0, -0.45957986062148626], [1442990592.0, 93280000.0, -0.4707039321653303], [1442992320.0, 93300000.0, -0.4817536741017123], [1442994048.0, 93320000.0, -0.4927273415482942], [1442995776.0, 93340000.0, -0.5036232016357566], [1442997504.0, 93360000.0, -0.5144395337815076], [1442999232.0, 93380000.0, -0.5251746299612902], [1443000960.0, 93400000.0, -0.5358267949789964], [1443002688.0, 93420000.0, -0.5463943467342683], [1443004416.0, 93440000.0, -0.5568756164881806], [1443006144.0, 93460000.0, -0.5672689491267544], [1443007872.0, 93480000.0, -0.5775727034222707], [1443009600.0, 93500000.0, -0.5877852522924698], [1443011328.0, 93520000.0, -0.5979049830575207], [1443013056.0, 93540000.0, -0.6079302976946009], [1443014784.0, 93560000.0, -0.6178596130903293], [1443016512.0, 93580000.0, -0.6276913612907004], [1443018240.0, 93600000.0, -0.6374239897486835], [1443019968.0, 93620000.0, -0.647055961569443], [1443021696.0, 93640000.0, -0.65658575575296], [1443023424.0, 93660000.0, -0.6660118674342492], [1443025152.0, 93680000.0, -0.6753328081210267], [1443026880.0, 93700000.0, -0.6845471059286852], [1443028608.0, 93720000.0, -0.6936533058128009], [1443030336.0, 93740000.0, -0.7026499697988497], [1443032064.0, 93760000.0, -0.7115356772092803], [1443033792.0, 93780000.0, -0.7203090248879064], [1443035520.0, 93800000.0, -0.7289686274214153], [1443037248.0, 93820000.0, -0.7375131173581723], [1443038976.0, 93840000.0, -0.74594114542418], [1443040704.0, 93860000.0, -0.7542513807361012], [1443042432.0, 93880000.0, -0.7624425110114448], [1443044160.0, 93900000.0, -0.7705132427757903], [1443045888.0, 93920000.0, -0.7784623015670195], [1443047616.0, 93940000.0, -0.7862884321366189], [1443049344.0, 93960000.0, -0.7939903986478348], [1443051072.0, 93980000.0, -0.8015669848708756], [1443052800.0, 94000000.0, -0.8090169943749461], [1443054528.0, 94020000.0, -0.816339250717178], [1443056256.0, 94040000.0, -0.8235325976284252], [1443057984.0, 94060000.0, -0.830595899195814], [1443059712.0, 94080000.0, -0.8375280400421388], [1443061440.0, 94100000.0, -0.8443279255020155], [1443063168.0, 94120000.0, -0.850994481794692], [1443064896.0, 94140000.0, -0.8575266561936519], [1443066624.0, 94160000.0, -0.8639234171928346], [1443068352.0, 94180000.0, -0.870183754669521], [1443070080.0, 94200000.0, -0.8763066800438621], [1443071808.0, 94220000.0, -0.8822912264349548], [1443073536.0, 94240000.0, -0.8881364488135424], [1443075264.0, 94260000.0, -0.8938414241512646], [1443076992.0, 94280000.0, -0.8994052515663714], [1443078720.0, 94300000.0, -0.9048270524660166], [1443080448.0, 94320000.0, -0.9101059706849954], [1443082176.0, 94340000.0, -0.9152411726209141], [1443083904.0, 94360000.0, -0.9202318473658695], [1443085632.0, 94380000.0, -0.9250772068344596], [1443087360.0, 94400000.0, -0.92977648588825], [1443089088.0, 94420000.0, -0.9343289424566105], [1443090816.0, 94440000.0, -0.9387338576538747], [1443092544.0, 94460000.0, -0.9429905358928624], [1443094272.0, 94480000.0, -0.9470983049947443], [1443096000.0, 94500000.0, -0.9510565162951512], [1443097728.0, 94520000.0, -0.9548645447466426], [1443099456.0, 94540000.0, -0.9585217890173773], [1443101184.0, 94560000.0, -0.9620276715860852], [1443102912.0, 94580000.0, -0.9653816388332729], [1443104640.0, 94600000.0, -0.9685831611286317], [1443106368.0, 94620000.0, -0.9716317329146728], [1443108096.0, 94640000.0, -0.9745268727865773], [1443109824.0, 94660000.0, -0.977268123568192], [1443111552.0, 94680000.0, -0.9798550523842467], [1443113280.0, 94700000.0, -0.9822872507286885], [1443115008.0, 94720000.0, -0.984564334529205], [1443116736.0, 94740000.0, -0.9866859442078676], [1443118464.0, 94760000.0, -0.9886517447379145], [1443120192.0, 94780000.0, -0.9904614256966506], [1443121920.0, 94800000.0, -0.9921147013144781], [1443123648.0, 94820000.0, -0.9936113105200077], [1443125376.0, 94840000.0, -0.9949510169813002], [1443127104.0, 94860000.0, -0.9961336091431724], [1443128832.0, 94880000.0, -0.9971589002606133], [1443130560.0, 94900000.0, -0.9980267284282714], [1443132288.0, 94920000.0, -0.9987369566060177], [1443134016.0, 94940000.0, -0.9992894726405891], [1443135744.0, 94960000.0, -0.9996841892833], [1443137472.0, 94980000.0, -0.999921044203816], [1443139200.0, 95000000.0, -1.0], [1443140928.0, 95020000.0, -0.9999210442038161], [1443142656.0, 95040000.0, -0.9996841892833002], [1443144384.0, 95060000.0, -0.9992894726405893], [1443146112.0, 95080000.0, -0.9987369566060179], [1443147840.0, 95100000.0, -0.9980267284282718], [1443149568.0, 95120000.0, -0.9971589002606137], [1443151296.0, 95140000.0, -0.9961336091431728], [1443153024.0, 95160000.0, -0.9949510169813006], [1443154752.0, 95180000.0, -0.9936113105200083], [1443156480.0, 95200000.0, -0.9921147013144787], [1443158208.0, 95220000.0, -0.9904614256966513], [1443159936.0, 95240000.0, -0.9886517447379153], [1443161664.0, 95260000.0, -0.9866859442078684], [1443163392.0, 95280000.0, -0.9845643345292059], [1443165120.0, 95300000.0, -0.9822872507286893], [1443166848.0, 95320000.0, -0.9798550523842477], [1443168576.0, 95340000.0, -0.977268123568193], [1443170304.0, 95360000.0, -0.9745268727865785], [1443172032.0, 95380000.0, -0.9716317329146738], [1443173760.0, 95400000.0, -0.968583161128633], [1443175488.0, 95420000.0, -0.9653816388332741], [1443177216.0, 95440000.0, -0.9620276715860864], [1443178944.0, 95460000.0, -0.9585217890173786], [1443180672.0, 95480000.0, -0.954864544746644], [1443182400.0, 95500000.0, -0.9510565162951526], [1443184128.0, 95520000.0, -0.9470983049947459], [1443185856.0, 95540000.0, -0.942990535892864], [1443187584.0, 95560000.0, -0.9387338576538763], [1443189312.0, 95580000.0, -0.9343289424566121], [1443191040.0, 95600000.0, -0.9297764858882518], [1443192768.0, 95620000.0, -0.9250772068344614], [1443194496.0, 95640000.0, -0.9202318473658713], [1443196224.0, 95660000.0, -0.915241172620916], [1443197952.0, 95680000.0, -0.9101059706849973], [1443199680.0, 95700000.0, -0.9048270524660186], [1443201408.0, 95720000.0, -0.8994052515663735], [1443203136.0, 95740000.0, -0.8938414241512667], [1443204864.0, 95760000.0, -0.8881364488135446], [1443206592.0, 95780000.0, -0.882291226434957], [1443208320.0, 95800000.0, -0.8763066800438644], [1443210048.0, 95820000.0, -0.8701837546695234], [1443211776.0, 95840000.0, -0.8639234171928369], [1443213504.0, 95860000.0, -0.8575266561936543], [1443215232.0, 95880000.0, -0.8509944817946944], [1443216960.0, 95900000.0, -0.8443279255020181], [1443218688.0, 95920000.0, -0.8375280400421413], [1443220416.0, 95940000.0, -0.8305958991958166], [1443222144.0, 95960000.0, -0.8235325976284279], [1443223872.0, 95980000.0, -0.8163392507171807], [1443225600.0, 96000000.0, -0.8090169943749488], [1443227328.0, 96020000.0, -0.8015669848708784], [1443229056.0, 96040000.0, -0.7939903986478377], [1443230784.0, 96060000.0, -0.7862884321366218], [1443232512.0, 96080000.0, -0.7784623015670225], [1443234240.0, 96100000.0, -0.7705132427757933], [1443235968.0, 96120000.0, -0.7624425110114478], [1443237696.0, 96140000.0, -0.7542513807361043], [1443239424.0, 96160000.0, -0.7459411454241831], [1443241152.0, 96180000.0, -0.7375131173581755], [1443242880.0, 96200000.0, -0.7289686274214184], [1443244608.0, 96220000.0, -0.7203090248879096], [1443246336.0, 96240000.0, -0.7115356772092836], [1443248064.0, 96260000.0, -0.7026499697988531], [1443249792.0, 96280000.0, -0.6936533058128043], [1443251520.0, 96300000.0, -0.6845471059286886], [1443253248.0, 96320000.0, -0.6753328081210301], [1443254976.0, 96340000.0, -0.6660118674342527], [1443256704.0, 96360000.0, -0.6565857557529635], [1443258432.0, 96380000.0, -0.6470559615694466], [1443260160.0, 96400000.0, -0.6374239897486872], [1443261888.0, 96420000.0, -0.627691361290704], [1443263616.0, 96440000.0, -0.617859613090333], [1443265344.0, 96460000.0, -0.6079302976946046], [1443267072.0, 96480000.0, -0.5979049830575244], [1443268800.0, 96500000.0, -0.5877852522924736], [1443270528.0, 96520000.0, -0.5775727034222745], [1443272256.0, 96540000.0, -0.5672689491267583], [1443273984.0, 96560000.0, -0.5568756164881845], [1443275712.0, 96580000.0, -0.5463943467342722], [1443277440.0, 96600000.0, -0.5358267949790004], [1443279168.0, 96620000.0, -0.5251746299612942], [1443280896.0, 96640000.0, -0.5144395337815116], [1443282624.0, 96660000.0, -0.5036232016357606], [1443284352.0, 96680000.0, -0.4927273415482982], [1443286080.0, 96700000.0, -0.48175367410171643], [1443287808.0, 96720000.0, -0.4707039321653344], [1443289536.0, 96740000.0, -0.4595798606214904], [1443291264.0, 96760000.0, -0.4483832160900355], [1443292992.0, 96780000.0, -0.4371157666509305], [1443294720.0, 96800000.0, -0.4257792915650774], [1443296448.0, 96820000.0, -0.41437558099328314], [1443298176.0, 96840000.0, -0.40290643571366885], [1443299904.0, 96860000.0, -0.3913736668372028], [1443301632.0, 96880000.0, -0.3797790955218022], [1443303360.0, 96900000.0, -0.36812455268467986], [1443305088.0, 96920000.0, -0.3564118787132533], [1443306816.0, 96940000.0, -0.3446429231745137], [1443308544.0, 96960000.0, -0.3328195445229908], [1443310272.0, 96980000.0, -0.32094360980720765], [1443312000.0, 97000000.0, -0.30901699437495306], [1443313728.0, 97020000.0, -0.29704158157703453], [1443315456.0, 97040000.0, -0.2850192624699765], [1443317184.0, 97060000.0, -0.2729519355173332], [1443318912.0, 97080000.0, -0.26084150628989883], [1443320640.0, 97100000.0, -0.24868988716485055], [1443322368.0, 97120000.0, -0.2364989970237281], [1443324096.0, 97140000.0, -0.22427076094937845], [1443325824.0, 97160000.0, -0.2120071099220596], [1443327552.0, 97180000.0, -0.19970998051441277], [1443329280.0, 97200000.0, -0.18738131458572418], [1443331008.0, 97220000.0, -0.17502305897528336], [1443332736.0, 97240000.0, -0.1626371651948847], [1443334464.0, 97260000.0, -0.1502255891207519], [1443336192.0, 97280000.0, -0.13779029068464071], [1443337920.0, 97300000.0, -0.12533323356430062], [1443339648.0, 97320000.0, -0.11285638487348588], [1443341376.0, 97340000.0, -0.10036171485121988], [1443343104.0, 97360000.0, -0.08785119655074188], [1443344832.0, 97380000.0, -0.07532680552793929], [1443346560.0, 97400000.0, -0.06279051952931362], [1443348288.0, 97420000.0, -0.0502443181797635], [1443350016.0, 97440000.0, -0.03769018266993635], [1443351744.0, 97460000.0, -0.025130095443340078], [1443353472.0, 97480000.0, -0.01256603988335599], [1443355200.0, 97500000.0, -4.164418097737589e-15], [1443356928.0, 97520000.0, 0.012566039883354767], [1443358656.0, 97540000.0, 0.02513009544333175], [1443360384.0, 97560000.0, 0.03769018266993513], [1443362112.0, 97580000.0, 0.05024431817976227], [1443363840.0, 97600000.0, 0.0627905195293124], [1443365568.0, 97620000.0, 0.07532680552793097], [1443367296.0, 97640000.0, 0.08785119655073358], [1443369024.0, 97660000.0, 0.10036171485121159], [1443370752.0, 97680000.0, 0.11285638487348468], [1443372480.0, 97700000.0, 0.1253332335642994], [1443374208.0, 97720000.0, 0.1377902906846395], [1443375936.0, 97740000.0, 0.15022558912075068], [1443377664.0, 97760000.0, 0.16263716519488347], [1443379392.0, 97780000.0, 0.17502305897527515], [1443381120.0, 97800000.0, 0.187381314585716], [1443382848.0, 97820000.0, 0.1997099805144046], [1443384576.0, 97840000.0, 0.2120071099220584], [1443386304.0, 97860000.0, 0.22427076094937726], [1443388032.0, 97880000.0, 0.2364989970237269], [1443389760.0, 97900000.0, 0.24868988716484938], [1443391488.0, 97920000.0, 0.2608415062898908], [1443393216.0, 97940000.0, 0.27295193551732516], [1443394944.0, 97960000.0, 0.2850192624699685], [1443396672.0, 97980000.0, 0.29704158157703336], [1443398400.0, 98000000.0, 0.3090169943749519], [1443400128.0, 98020000.0, 0.3209436098072065], [1443401856.0, 98040000.0, 0.3328195445229829], [1443403584.0, 98060000.0, 0.3446429231745126], [1443405312.0, 98080000.0, 0.35641187871324553], [1443407040.0, 98100000.0, 0.3681245526846787], [1443408768.0, 98120000.0, 0.37977909552179456], [1443410496.0, 98140000.0, 0.3913736668372017], [1443412224.0, 98160000.0, 0.40290643571366774], [1443413952.0, 98180000.0, 0.41437558099328203], [1443415680.0, 98200000.0, 0.42577929156506983], [1443417408.0, 98220000.0, 0.437115766650923], [1443419136.0, 98240000.0, 0.44838321609002807], [1443420864.0, 98260000.0, 0.4595798606214893], [1443422592.0, 98280000.0, 0.4707039321653271], [1443424320.0, 98300000.0, 0.4817536741017153], [1443426048.0, 98320000.0, 0.49272734154829095], [1443427776.0, 98340000.0, 0.5036232016357596], [1443429504.0, 98360000.0, 0.5144395337815045], [1443431232.0, 98380000.0, 0.525174629961287], [1443432960.0, 98400000.0, 0.5358267949789934], [1443434688.0, 98420000.0, 0.5463943467342711], [1443436416.0, 98440000.0, 0.5568756164881835], [1443438144.0, 98460000.0, 0.5672689491267573], [1443439872.0, 98480000.0, 0.5775727034222677], [1443441600.0, 98500000.0, 0.5877852522924669], [1443443328.0, 98520000.0, 0.5979049830575177], [1443445056.0, 98540000.0, 0.607930297694598], [1443446784.0, 98560000.0, 0.617859613090332], [1443448512.0, 98580000.0, 0.6276913612907031], [1443450240.0, 98600000.0, 0.6374239897486862], [1443451968.0, 98620000.0, 0.6470559615694402], [1443453696.0, 98640000.0, 0.6565857557529572], [1443455424.0, 98660000.0, 0.6660118674342465], [1443457152.0, 98680000.0, 0.675332808121024], [1443458880.0, 98700000.0, 0.6845471059286825], [1443460608.0, 98720000.0, 0.6936533058128034], [1443462336.0, 98740000.0, 0.7026499697988522], [1443464064.0, 98760000.0, 0.7115356772092828], [1443465792.0, 98780000.0, 0.7203090248879038], [1443467520.0, 98800000.0, 0.7289686274214128], [1443469248.0, 98820000.0, 0.7375131173581698], [1443470976.0, 98840000.0, 0.7459411454241823], [1443472704.0, 98860000.0, 0.7542513807360988], [1443474432.0, 98880000.0, 0.762442511011447], [1443476160.0, 98900000.0, 0.7705132427757879], [1443477888.0, 98920000.0, 0.7784623015670217], [1443479616.0, 98940000.0, 0.7862884321366167], [1443481344.0, 98960000.0, 0.7939903986478369], [1443483072.0, 98980000.0, 0.8015669848708734], [1443484800.0, 99000000.0, 0.8090169943749481], [1443486528.0, 99020000.0, 0.81633925071718], [1443488256.0, 99040000.0, 0.8235325976284272], [1443489984.0, 99060000.0, 0.830595899195812], [1443491712.0, 99080000.0, 0.8375280400421368], [1443493440.0, 99100000.0, 0.8443279255020136], [1443495168.0, 99120000.0, 0.8509944817946937], [1443496896.0, 99140000.0, 0.85752665619365], [1443498624.0, 99160000.0, 0.8639234171928363], [1443500352.0, 99180000.0, 0.8701837546695228], [1443502080.0, 99200000.0, 0.8763066800438638], [1443503808.0, 99220000.0, 0.8822912264349531], [1443505536.0, 99240000.0, 0.8881364488135407], [1443507264.0, 99260000.0, 0.8938414241512629], [1443508992.0, 99280000.0, 0.899405251566373], [1443510720.0, 99300000.0, 0.904827052466018], [1443512448.0, 99320000.0, 0.9101059706849969], [1443514176.0, 99340000.0, 0.9152411726209155], [1443515904.0, 99360000.0, 0.920231847365868], [1443517632.0, 99380000.0, 0.9250772068344583], [1443519360.0, 99400000.0, 0.9297764858882487], [1443521088.0, 99420000.0, 0.9343289424566117], [1443522816.0, 99440000.0, 0.9387338576538758], [1443524544.0, 99460000.0, 0.9429905358928636], [1443526272.0, 99480000.0, 0.9470983049947432], [1443528000.0, 99500000.0, 0.9510565162951523], [1443529728.0, 99520000.0, 0.9548645447466415], [1443531456.0, 99540000.0, 0.9585217890173763], [1443533184.0, 99560000.0, 0.9620276715860842], [1443534912.0, 99580000.0, 0.9653816388332738], [1443536640.0, 99600000.0, 0.9685831611286326], [1443538368.0, 99620000.0, 0.9716317329146735], [1443540096.0, 99640000.0, 0.9745268727865766], [1443541824.0, 99660000.0, 0.9772681235681927], [1443543552.0, 99680000.0, 0.9798550523842461], [1443545280.0, 99700000.0, 0.982287250728689], [1443547008.0, 99720000.0, 0.9845643345292043], [1443548736.0, 99740000.0, 0.9866859442078681], [1443550464.0, 99760000.0, 0.988651744737914], [1443552192.0, 99780000.0, 0.9904614256966511], [1443553920.0, 99800000.0, 0.9921147013144777], [1443555648.0, 99820000.0, 0.9936113105200073], [1443557376.0, 99840000.0, 0.9949510169812998], [1443559104.0, 99860000.0, 0.9961336091431727], [1443560832.0, 99880000.0, 0.9971589002606136], [1443562560.0, 99900000.0, 0.9980267284282717], [1443564288.0, 99920000.0, 0.9987369566060176], [1443566016.0, 99940000.0, 0.999289472640589], [1443567744.0, 99960000.0, 0.9996841892832999], [1443569472.0, 99980000.0, 0.999921044203816]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/app/demo/data/cubic.json b/tensorflow/tensorboard/app/demo/data/cubic.json new file mode 100644 index 0000000000..67dc173187 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/cubic.json @@ -0,0 +1 @@ +[[1434931200.0, 0.0, 0.0], [1434932928.0, 20000.0, -0.039999992], [1434934656.0, 40000.0, -0.07999993600000001], [1434936384.0, 60000.0, -0.119999784], [1434938112.0, 80000.0, -0.159999488], [1434939840.0, 100000.0, -0.199999], [1434941568.0, 120000.0, -0.23999827199999998], [1434943296.0, 140000.0, -0.279997256], [1434945024.0, 160000.0, -0.319995904], [1434946752.0, 180000.0, -0.359994168], [1434948480.0, 200000.0, -0.399992], [1434950208.0, 220000.0, -0.43998935199999994], [1434951936.0, 240000.0, -0.479986176], [1434953664.0, 260000.0, -0.519982424], [1434955392.0, 280000.0, -0.5599780480000001], [1434957120.0, 300000.0, -0.599973], [1434958848.0, 320000.0, -0.639967232], [1434960576.0, 340000.0, -0.6799606960000001], [1434962304.0, 360000.0, -0.719953344], [1434964032.0, 380000.0, -0.759945128], [1434965760.0, 400000.0, -0.7999360000000001], [1434967488.0, 420000.0, -0.8399259120000001], [1434969216.0, 440000.0, -0.8799148159999999], [1434970944.0, 460000.0, -0.919902664], [1434972672.0, 480000.0, -0.959889408], [1434974400.0, 500000.0, -0.999875], [1434976128.0, 520000.0, -1.039859392], [1434977856.0, 540000.0, -1.0798425360000001], [1434979584.0, 560000.0, -1.1198243840000002], [1434981312.0, 580000.0, -1.159804888], [1434983040.0, 600000.0, -1.199784], [1434984768.0, 620000.0, -1.239761672], [1434986496.0, 640000.0, -1.2797378560000001], [1434988224.0, 660000.0, -1.319712504], [1434989952.0, 680000.0, -1.3596855680000002], [1434991680.0, 700000.0, -1.3996570000000002], [1434993408.0, 720000.0, -1.439626752], [1434995136.0, 740000.0, -1.479594776], [1434996864.0, 760000.0, -1.519561024], [1434998592.0, 780000.0, -1.559525448], [1435000320.0, 800000.0, -1.599488], [1435002048.0, 820000.0, -1.6394486320000001], [1435003776.0, 840000.0, -1.6794072960000002], [1435005504.0, 860000.0, -1.7193639439999997], [1435007232.0, 880000.0, -1.7593185279999999], [1435008960.0, 900000.0, -1.7992709999999998], [1435010688.0, 920000.0, -1.8392213119999998], [1435012416.0, 940000.0, -1.8791694159999999], [1435014144.0, 960000.0, -1.919115264], [1435015872.0, 980000.0, -1.959058808], [1435017600.0, 1000000.0, -1.999], [1435019328.0, 1020000.0, -2.038938792], [1435021056.0, 1040000.0, -2.078875136], [1435022784.0, 1060000.0, -2.118808984], [1435024512.0, 1080000.0, -2.158740288], [1435026240.0, 1100000.0, -2.198669], [1435027968.0, 1120000.0, -2.2385950720000003], [1435029696.0, 1140000.0, -2.2785184560000005], [1435031424.0, 1160000.0, -2.3184391040000003], [1435033152.0, 1180000.0, -2.358356968], [1435034880.0, 1200000.0, -2.398272], [1435036608.0, 1220000.0, -2.438184152], [1435038336.0, 1240000.0, -2.478093376], [1435040064.0, 1260000.0, -2.517999624], [1435041792.0, 1280000.0, -2.557902848], [1435043520.0, 1300000.0, -2.5978030000000003], [1435045248.0, 1320000.0, -2.637700032], [1435046976.0, 1340000.0, -2.6775938960000003], [1435048704.0, 1360000.0, -2.7174845440000004], [1435050432.0, 1380000.0, -2.7573719280000004], [1435052160.0, 1400000.0, -2.7972560000000004], [1435053888.0, 1420000.0, -2.837136712], [1435055616.0, 1440000.0, -2.877014016], [1435057344.0, 1460000.0, -2.916887864], [1435059072.0, 1480000.0, -2.956758208], [1435060800.0, 1500000.0, -2.996625], [1435062528.0, 1520000.0, -3.036488192], [1435064256.0, 1540000.0, -3.076347736], [1435065984.0, 1560000.0, -3.116203584], [1435067712.0, 1580000.0, -3.1560556880000004], [1435069440.0, 1600000.0, -3.195904], [1435071168.0, 1620000.0, -3.235748472], [1435072896.0, 1640000.0, -3.2755890560000003], [1435074624.0, 1660000.0, -3.3154257040000004], [1435076352.0, 1680000.0, -3.3552583680000003], [1435078080.0, 1700000.0, -3.395087], [1435079808.0, 1720000.0, -3.4349115519999995], [1435081536.0, 1740000.0, -3.4747319759999997], [1435083264.0, 1760000.0, -3.5145482239999994], [1435084992.0, 1780000.0, -3.5543602479999996], [1435086720.0, 1800000.0, -3.594168], [1435088448.0, 1820000.0, -3.6339714319999996], [1435090176.0, 1840000.0, -3.6737704959999995], [1435091904.0, 1860000.0, -3.713565144], [1435093632.0, 1880000.0, -3.7533553279999996], [1435095360.0, 1900000.0, -3.793141], [1435097088.0, 1920000.0, -3.832922112], [1435098816.0, 1940000.0, -3.872698616], [1435100544.0, 1960000.0, -3.912470464], [1435102272.0, 1980000.0, -3.952237608], [1435104000.0, 2000000.0, -3.992], [1435105728.0, 2020000.0, -4.031757592], [1435107456.0, 2040000.0, -4.071510336], [1435109184.0, 2060000.0, -4.111258184], [1435110912.0, 2080000.0, -4.151001088], [1435112640.0, 2100000.0, -4.190739], [1435114368.0, 2120000.0, -4.230471872], [1435116096.0, 2140000.0, -4.270199656], [1435117824.0, 2160000.0, -4.3099223040000005], [1435119552.0, 2180000.0, -4.349639768], [1435121280.0, 2200000.0, -4.389352000000001], [1435123008.0, 2220000.0, -4.429058952], [1435124736.0, 2240000.0, -4.468760576], [1435126464.0, 2260000.0, -4.5084568240000005], [1435128192.0, 2280000.0, -4.5481476480000005], [1435129920.0, 2300000.0, -4.587833000000001], [1435131648.0, 2320000.0, -4.627512832000001], [1435133376.0, 2340000.0, -4.667187096000001], [1435135104.0, 2360000.0, -4.706855743999999], [1435136832.0, 2380000.0, -4.746518728], [1435138560.0, 2400000.0, -4.786176], [1435140288.0, 2420000.0, -4.825827512], [1435142016.0, 2440000.0, -4.865473216], [1435143744.0, 2460000.0, -4.905113064], [1435145472.0, 2480000.0, -4.944747008], [1435147200.0, 2500000.0, -4.984375], [1435148928.0, 2520000.0, -5.023996992], [1435150656.0, 2540000.0, -5.063612936], [1435152384.0, 2560000.0, -5.103222784], [1435154112.0, 2580000.0, -5.142826488], [1435155840.0, 2600000.0, -5.182424], [1435157568.0, 2620000.0, -5.222015272], [1435159296.0, 2640000.0, -5.261600256], [1435161024.0, 2660000.0, -5.301178904], [1435162752.0, 2680000.0, -5.340751168000001], [1435164480.0, 2700000.0, -5.380317000000001], [1435166208.0, 2720000.0, -5.419876352], [1435167936.0, 2740000.0, -5.459429176], [1435169664.0, 2760000.0, -5.498975424], [1435171392.0, 2780000.0, -5.538515048000001], [1435173120.0, 2800000.0, -5.578048000000001], [1435174848.0, 2820000.0, -5.617574232], [1435176576.0, 2840000.0, -5.657093696], [1435178304.0, 2860000.0, -5.696606344], [1435180032.0, 2880000.0, -5.736112127999999], [1435181760.0, 2900000.0, -5.775611], [1435183488.0, 2920000.0, -5.8151029119999995], [1435185216.0, 2940000.0, -5.854587816], [1435186944.0, 2960000.0, -5.894065664], [1435188672.0, 2980000.0, -5.933536408], [1435190400.0, 3000000.0, -5.973], [1435192128.0, 3020000.0, -6.012456392], [1435193856.0, 3040000.0, -6.0519055360000005], [1435195584.0, 3060000.0, -6.0913473840000005], [1435197312.0, 3080000.0, -6.1307818880000005], [1435199040.0, 3100000.0, -6.170209], [1435200768.0, 3120000.0, -6.209628672], [1435202496.0, 3140000.0, -6.249040856000001], [1435204224.0, 3160000.0, -6.288445504], [1435205952.0, 3180000.0, -6.327842568], [1435207680.0, 3200000.0, -6.3672320000000004], [1435209408.0, 3220000.0, -6.406613752], [1435211136.0, 3240000.0, -6.445987776000001], [1435212864.0, 3260000.0, -6.485354024], [1435214592.0, 3280000.0, -6.524712448000001], [1435216320.0, 3300000.0, -6.564063000000001], [1435218048.0, 3320000.0, -6.603405632], [1435219776.0, 3340000.0, -6.642740296], [1435221504.0, 3360000.0, -6.682066944000001], [1435223232.0, 3380000.0, -6.721385528000001], [1435224960.0, 3400000.0, -6.760696], [1435226688.0, 3420000.0, -6.7999983120000005], [1435228416.0, 3440000.0, -6.839292415999999], [1435230144.0, 3460000.0, -6.878578264], [1435231872.0, 3480000.0, -6.917855807999999], [1435233600.0, 3500000.0, -6.9571250000000004], [1435235328.0, 3520000.0, -6.996385791999999], [1435237056.0, 3540000.0, -7.035638136], [1435238784.0, 3560000.0, -7.074881983999999], [1435240512.0, 3580000.0, -7.114117288], [1435242240.0, 3600000.0, -7.153344], [1435243968.0, 3620000.0, -7.192562072], [1435245696.0, 3640000.0, -7.231771456], [1435247424.0, 3660000.0, -7.270972104], [1435249152.0, 3680000.0, -7.3101639679999995], [1435250880.0, 3700000.0, -7.349347000000001], [1435252608.0, 3720000.0, -7.388521151999999], [1435254336.0, 3740000.0, -7.4276863760000005], [1435256064.0, 3760000.0, -7.466842624], [1435257792.0, 3780000.0, -7.5059898480000005], [1435259520.0, 3800000.0, -7.545128], [1435261248.0, 3820000.0, -7.584257032000001], [1435262976.0, 3840000.0, -7.623376896], [1435264704.0, 3860000.0, -7.662487544], [1435266432.0, 3880000.0, -7.701588928], [1435268160.0, 3900000.0, -7.740681], [1435269888.0, 3920000.0, -7.779763712], [1435271616.0, 3940000.0, -7.818837016000001], [1435273344.0, 3960000.0, -7.857900864], [1435275072.0, 3980000.0, -7.8969552080000005], [1435276800.0, 4000000.0, -7.936], [1435278528.0, 4020000.0, -7.975035192000001], [1435280256.0, 4040000.0, -8.014060736], [1435281984.0, 4060000.0, -8.053076584000001], [1435283712.0, 4080000.0, -8.092082688], [1435285440.0, 4100000.0, -8.131079], [1435287168.0, 4120000.0, -8.170065472000001], [1435288896.0, 4140000.0, -8.209042056], [1435290624.0, 4160000.0, -8.248008704], [1435292352.0, 4180000.0, -8.286965367999999], [1435294080.0, 4200000.0, -8.325912], [1435295808.0, 4220000.0, -8.364848552], [1435297536.0, 4240000.0, -8.403774976000001], [1435299264.0, 4260000.0, -8.442691223999999], [1435300992.0, 4280000.0, -8.481597248], [1435302720.0, 4300000.0, -8.520493], [1435304448.0, 4320000.0, -8.559378432], [1435306176.0, 4340000.0, -8.598253496], [1435307904.0, 4360000.0, -8.637118144], [1435309632.0, 4380000.0, -8.675972328], [1435311360.0, 4400000.0, -8.714816], [1435313088.0, 4420000.0, -8.753649112], [1435314816.0, 4440000.0, -8.792471616], [1435316544.0, 4460000.0, -8.831283464], [1435318272.0, 4480000.0, -8.870084608], [1435320000.0, 4500000.0, -8.908875], [1435321728.0, 4520000.0, -8.947654592000001], [1435323456.0, 4540000.0, -8.986423336], [1435325184.0, 4560000.0, -9.025181184000001], [1435326912.0, 4580000.0, -9.063928088], [1435328640.0, 4600000.0, -9.102664], [1435330368.0, 4620000.0, -9.141388872], [1435332096.0, 4640000.0, -9.180102656], [1435333824.0, 4660000.0, -9.218805304], [1435335552.0, 4680000.0, -9.257496768000001], [1435337280.0, 4700000.0, -9.296176999999998], [1435339008.0, 4720000.0, -9.334845952], [1435340736.0, 4740000.0, -9.373503576000001], [1435342464.0, 4760000.0, -9.412149824], [1435344192.0, 4780000.0, -9.450784647999999], [1435345920.0, 4800000.0, -9.489408], [1435347648.0, 4820000.0, -9.528019832], [1435349376.0, 4840000.0, -9.566620096], [1435351104.0, 4860000.0, -9.605208743999999], [1435352832.0, 4880000.0, -9.643785728], [1435354560.0, 4900000.0, -9.682351], [1435356288.0, 4920000.0, -9.720904512], [1435358016.0, 4940000.0, -9.759446215999999], [1435359744.0, 4960000.0, -9.797976064], [1435361472.0, 4980000.0, -9.836494008], [1435363200.0, 5000000.0, -9.875], [1435364928.0, 5020000.0, -9.913493992], [1435366656.0, 5040000.0, -9.951975936], [1435368384.0, 5060000.0, -9.990445784], [1435370112.0, 5080000.0, -10.028903488000001], [1435371840.0, 5100000.0, -10.067349], [1435373568.0, 5120000.0, -10.105782272], [1435375296.0, 5140000.0, -10.144203256], [1435377024.0, 5160000.0, -10.182611904], [1435378752.0, 5180000.0, -10.221008168], [1435380480.0, 5200000.0, -10.259392], [1435382208.0, 5220000.0, -10.297763352], [1435383936.0, 5240000.0, -10.336122176], [1435385664.0, 5260000.0, -10.374468424], [1435387392.0, 5280000.0, -10.412802048], [1435389120.0, 5300000.0, -10.451123], [1435390848.0, 5320000.0, -10.489431232000001], [1435392576.0, 5340000.0, -10.527726696], [1435394304.0, 5360000.0, -10.566009344000001], [1435396032.0, 5380000.0, -10.604279128000002], [1435397760.0, 5400000.0, -10.642536000000002], [1435399488.0, 5420000.0, -10.680779912], [1435401216.0, 5440000.0, -10.719010816], [1435402944.0, 5460000.0, -10.757228664000001], [1435404672.0, 5480000.0, -10.795433408000001], [1435406400.0, 5500000.0, -10.833625], [1435408128.0, 5520000.0, -10.871803392], [1435409856.0, 5540000.0, -10.909968536000001], [1435411584.0, 5560000.0, -10.948120384000001], [1435413312.0, 5580000.0, -10.986258888], [1435415040.0, 5600000.0, -11.024384000000001], [1435416768.0, 5620000.0, -11.062495672000003], [1435418496.0, 5640000.0, -11.100593856], [1435420224.0, 5660000.0, -11.138678503999998], [1435421952.0, 5680000.0, -11.176749568], [1435423680.0, 5700000.0, -11.214806999999999], [1435425408.0, 5720000.0, -11.252850751999999], [1435427136.0, 5740000.0, -11.290880775999998], [1435428864.0, 5760000.0, -11.328897024], [1435430592.0, 5780000.0, -11.366899447999998], [1435432320.0, 5800000.0, -11.404888], [1435434048.0, 5820000.0, -11.442862631999999], [1435435776.0, 5840000.0, -11.480823296], [1435437504.0, 5860000.0, -11.518769943999999], [1435439232.0, 5880000.0, -11.556702528], [1435440960.0, 5900000.0, -11.594620999999998], [1435442688.0, 5920000.0, -11.632525312], [1435444416.0, 5940000.0, -11.670415415999999], [1435446144.0, 5960000.0, -11.708291264], [1435447872.0, 5980000.0, -11.746152808], [1435449600.0, 6000000.0, -11.784], [1435451328.0, 6020000.0, -11.821832791999999], [1435453056.0, 6040000.0, -11.859651136], [1435454784.0, 6060000.0, -11.897454984], [1435456512.0, 6080000.0, -11.935244288], [1435458240.0, 6100000.0, -11.973018999999999], [1435459968.0, 6120000.0, -12.010779072], [1435461696.0, 6140000.0, -12.048524455999999], [1435463424.0, 6160000.0, -12.086255104000001], [1435465152.0, 6180000.0, -12.123970968], [1435466880.0, 6200000.0, -12.161672000000001], [1435468608.0, 6220000.0, -12.199358152], [1435470336.0, 6240000.0, -12.237029376], [1435472064.0, 6260000.0, -12.274685624], [1435473792.0, 6280000.0, -12.312326848], [1435475520.0, 6300000.0, -12.349953], [1435477248.0, 6320000.0, -12.387564032], [1435478976.0, 6340000.0, -12.425159896], [1435480704.0, 6360000.0, -12.462740544], [1435482432.0, 6380000.0, -12.500305928], [1435484160.0, 6400000.0, -12.537856000000001], [1435485888.0, 6420000.0, -12.575390711999999], [1435487616.0, 6440000.0, -12.612910016], [1435489344.0, 6460000.0, -12.650413864], [1435491072.0, 6480000.0, -12.687902208], [1435492800.0, 6500000.0, -12.725375], [1435494528.0, 6520000.0, -12.762832192000001], [1435496256.0, 6540000.0, -12.800273736], [1435497984.0, 6560000.0, -12.837699584000001], [1435499712.0, 6580000.0, -12.875109688], [1435501440.0, 6600000.0, -12.912504], [1435503168.0, 6620000.0, -12.949882472], [1435504896.0, 6640000.0, -12.987245056], [1435506624.0, 6660000.0, -13.024591704], [1435508352.0, 6680000.0, -13.061922368000001], [1435510080.0, 6700000.0, -13.099237], [1435511808.0, 6720000.0, -13.136535552000002], [1435513536.0, 6740000.0, -13.173817976], [1435515264.0, 6760000.0, -13.211084224000002], [1435516992.0, 6780000.0, -13.248334248], [1435518720.0, 6800000.0, -13.285568000000001], [1435520448.0, 6820000.0, -13.322785432], [1435522176.0, 6840000.0, -13.359986496000001], [1435523904.0, 6860000.0, -13.397171144000001], [1435525632.0, 6880000.0, -13.434339327999998], [1435527360.0, 6900000.0, -13.471490999999999], [1435529088.0, 6920000.0, -13.508626112], [1435530816.0, 6940000.0, -13.545744615999999], [1435532544.0, 6960000.0, -13.582846463999998], [1435534272.0, 6980000.0, -13.619931608], [1435536000.0, 7000000.0, -13.657], [1435537728.0, 7020000.0, -13.694051592], [1435539456.0, 7040000.0, -13.731086335999999], [1435541184.0, 7060000.0, -13.768104183999998], [1435542912.0, 7080000.0, -13.805105088], [1435544640.0, 7100000.0, -13.842089], [1435546368.0, 7120000.0, -13.879055871999999], [1435548096.0, 7140000.0, -13.916005656], [1435549824.0, 7160000.0, -13.952938304], [1435551552.0, 7180000.0, -13.989853768], [1435553280.0, 7200000.0, -14.026751999999998], [1435555008.0, 7220000.0, -14.063632951999999], [1435556736.0, 7240000.0, -14.100496576000001], [1435558464.0, 7260000.0, -14.137342824], [1435560192.0, 7280000.0, -14.174171647999998], [1435561920.0, 7300000.0, -14.210982999999999], [1435563648.0, 7320000.0, -14.247776832000001], [1435565376.0, 7340000.0, -14.284553096], [1435567104.0, 7360000.0, -14.321311743999999], [1435568832.0, 7380000.0, -14.358052728], [1435570560.0, 7400000.0, -14.394776], [1435572288.0, 7420000.0, -14.431481512], [1435574016.0, 7440000.0, -14.468169216], [1435575744.0, 7460000.0, -14.504839064], [1435577472.0, 7480000.0, -14.541491008000001], [1435579200.0, 7500000.0, -14.578125], [1435580928.0, 7520000.0, -14.614740992], [1435582656.0, 7540000.0, -14.651338936], [1435584384.0, 7560000.0, -14.687918784], [1435586112.0, 7580000.0, -14.724480488], [1435587840.0, 7600000.0, -14.761023999999999], [1435589568.0, 7620000.0, -14.797549272], [1435591296.0, 7640000.0, -14.834056256000002], [1435593024.0, 7660000.0, -14.870544904], [1435594752.0, 7680000.0, -14.907015168], [1435596480.0, 7700000.0, -14.943467], [1435598208.0, 7720000.0, -14.979900352000001], [1435599936.0, 7740000.0, -15.016315176], [1435601664.0, 7760000.0, -15.052711424], [1435603392.0, 7780000.0, -15.089089048], [1435605120.0, 7800000.0, -15.125448000000002], [1435606848.0, 7820000.0, -15.161788232000001], [1435608576.0, 7840000.0, -15.198109696], [1435610304.0, 7860000.0, -15.234412344], [1435612032.0, 7880000.0, -15.270696128], [1435613760.0, 7900000.0, -15.306961000000001], [1435615488.0, 7920000.0, -15.343206912], [1435617216.0, 7940000.0, -15.379433816], [1435618944.0, 7960000.0, -15.415641664000002], [1435620672.0, 7980000.0, -15.451830408000001], [1435622400.0, 8000000.0, -15.488], [1435624128.0, 8020000.0, -15.524150392], [1435625856.0, 8040000.0, -15.560281536000002], [1435627584.0, 8060000.0, -15.596393384], [1435629312.0, 8080000.0, -15.632485888], [1435631040.0, 8100000.0, -15.668559000000002], [1435632768.0, 8120000.0, -15.704612672000001], [1435634496.0, 8140000.0, -15.740646855999998], [1435636224.0, 8160000.0, -15.776661504], [1435637952.0, 8180000.0, -15.812656568], [1435639680.0, 8200000.0, -15.848631999999998], [1435641408.0, 8220000.0, -15.884587751999998], [1435643136.0, 8240000.0, -15.920523776000001], [1435644864.0, 8260000.0, -15.956440023999999], [1435646592.0, 8280000.0, -15.992336448], [1435648320.0, 8300000.0, -16.028212999999997], [1435650048.0, 8320000.0, -16.064069632], [1435651776.0, 8340000.0, -16.099906296], [1435653504.0, 8360000.0, -16.135722943999998], [1435655232.0, 8380000.0, -16.171519527999997], [1435656960.0, 8400000.0, -16.207296], [1435658688.0, 8420000.0, -16.243052312], [1435660416.0, 8440000.0, -16.278788415999998], [1435662144.0, 8460000.0, -16.314504264], [1435663872.0, 8480000.0, -16.350199808], [1435665600.0, 8500000.0, -16.385875], [1435667328.0, 8520000.0, -16.421529791999998], [1435669056.0, 8540000.0, -16.457164136], [1435670784.0, 8560000.0, -16.492777984], [1435672512.0, 8580000.0, -16.528371288], [1435674240.0, 8600000.0, -16.563944], [1435675968.0, 8620000.0, -16.599496071999997], [1435677696.0, 8640000.0, -16.635027456], [1435679424.0, 8660000.0, -16.670538104000002], [1435681152.0, 8680000.0, -16.706027968], [1435682880.0, 8700000.0, -16.741497], [1435684608.0, 8720000.0, -16.776945152], [1435686336.0, 8740000.0, -16.812372376], [1435688064.0, 8760000.0, -16.847778624], [1435689792.0, 8780000.0, -16.883163848], [1435691520.0, 8800000.0, -16.918528000000002], [1435693248.0, 8820000.0, -16.953871032000002], [1435694976.0, 8840000.0, -16.989192896], [1435696704.0, 8860000.0, -17.024493544], [1435698432.0, 8880000.0, -17.059772928], [1435700160.0, 8900000.0, -17.095031000000002], [1435701888.0, 8920000.0, -17.130267712], [1435703616.0, 8940000.0, -17.165483016], [1435705344.0, 8960000.0, -17.200676864000002], [1435707072.0, 8980000.0, -17.235849208], [1435708800.0, 9000000.0, -17.271], [1435710528.0, 9020000.0, -17.306129192], [1435712256.0, 9040000.0, -17.341236736000003], [1435713984.0, 9060000.0, -17.376322584], [1435715712.0, 9080000.0, -17.411386688], [1435717440.0, 9100000.0, -17.446429], [1435719168.0, 9120000.0, -17.481449472], [1435720896.0, 9140000.0, -17.516448056], [1435722624.0, 9160000.0, -17.551424704], [1435724352.0, 9180000.0, -17.586379368], [1435726080.0, 9200000.0, -17.621312000000003], [1435727808.0, 9220000.0, -17.656222552000003], [1435729536.0, 9240000.0, -17.691110976], [1435731264.0, 9260000.0, -17.725977224], [1435732992.0, 9280000.0, -17.760821248000003], [1435734720.0, 9300000.0, -17.795643000000002], [1435736448.0, 9320000.0, -17.830442432], [1435738176.0, 9340000.0, -17.865219495999998], [1435739904.0, 9360000.0, -17.899974144], [1435741632.0, 9380000.0, -17.934706327999997], [1435743360.0, 9400000.0, -17.969416], [1435745088.0, 9420000.0, -18.004103112], [1435746816.0, 9440000.0, -18.038767615999998], [1435748544.0, 9460000.0, -18.073409463999997], [1435750272.0, 9480000.0, -18.108028608], [1435752000.0, 9500000.0, -18.142625], [1435753728.0, 9520000.0, -18.177198592], [1435755456.0, 9540000.0, -18.211749335999997], [1435757184.0, 9560000.0, -18.246277183999997], [1435758912.0, 9580000.0, -18.280782088], [1435760640.0, 9600000.0, -18.315264], [1435762368.0, 9620000.0, -18.349722871999997], [1435764096.0, 9640000.0, -18.384158656], [1435765824.0, 9660000.0, -18.418571304], [1435767552.0, 9680000.0, -18.452960768], [1435769280.0, 9700000.0, -18.487326999999997], [1435771008.0, 9720000.0, -18.521669951999996], [1435772736.0, 9740000.0, -18.555989576], [1435774464.0, 9760000.0, -18.590285824], [1435776192.0, 9780000.0, -18.624558647999997], [1435777920.0, 9800000.0, -18.658808], [1435779648.0, 9820000.0, -18.693033832], [1435781376.0, 9840000.0, -18.727236096], [1435783104.0, 9860000.0, -18.761414744], [1435784832.0, 9880000.0, -18.795569727999997], [1435786560.0, 9900000.0, -18.829701], [1435788288.0, 9920000.0, -18.863808512], [1435790016.0, 9940000.0, -18.897892216], [1435791744.0, 9960000.0, -18.931952064], [1435793472.0, 9980000.0, -18.965988008], [1435795200.0, 10000000.0, -19.0], [1435796928.0, 10020000.0, -19.033987992], [1435798656.0, 10040000.0, -19.067951936], [1435800384.0, 10060000.0, -19.101891784000003], [1435802112.0, 10080000.0, -19.135807488], [1435803840.0, 10100000.0, -19.169698999999998], [1435805568.0, 10120000.0, -19.203566272000003], [1435807296.0, 10140000.0, -19.237409256], [1435809024.0, 10160000.0, -19.271227904], [1435810752.0, 10180000.0, -19.305022168], [1435812480.0, 10200000.0, -19.338791999999998], [1435814208.0, 10220000.0, -19.372537352000002], [1435815936.0, 10240000.0, -19.406258176], [1435817664.0, 10260000.0, -19.439954424], [1435819392.0, 10280000.0, -19.473626048000003], [1435821120.0, 10300000.0, -19.507273], [1435822848.0, 10320000.0, -19.540895232], [1435824576.0, 10340000.0, -19.574492696], [1435826304.0, 10360000.0, -19.608065344], [1435828032.0, 10380000.0, -19.641613128000003], [1435829760.0, 10400000.0, -19.675136000000002], [1435831488.0, 10420000.0, -19.708633912], [1435833216.0, 10440000.0, -19.742106816000003], [1435834944.0, 10460000.0, -19.775554664], [1435836672.0, 10480000.0, -19.808977408], [1435838400.0, 10500000.0, -19.842375], [1435840128.0, 10520000.0, -19.875747391999997], [1435841856.0, 10540000.0, -19.909094536], [1435843584.0, 10560000.0, -19.942416384], [1435845312.0, 10580000.0, -19.975712888], [1435847040.0, 10600000.0, -20.008984], [1435848768.0, 10620000.0, -20.042229672], [1435850496.0, 10640000.0, -20.075449856000002], [1435852224.0, 10660000.0, -20.108644504], [1435853952.0, 10680000.0, -20.141813568], [1435855680.0, 10700000.0, -20.174957000000003], [1435857408.0, 10720000.0, -20.208074752], [1435859136.0, 10740000.0, -20.241166776], [1435860864.0, 10760000.0, -20.274233024000004], [1435862592.0, 10780000.0, -20.307273448000004], [1435864320.0, 10800000.0, -20.340288], [1435866048.0, 10820000.0, -20.373276632], [1435867776.0, 10840000.0, -20.406239296], [1435869504.0, 10860000.0, -20.439175944000002], [1435871232.0, 10880000.0, -20.472086528000002], [1435872960.0, 10900000.0, -20.504971], [1435874688.0, 10920000.0, -20.537829312000003], [1435876416.0, 10940000.0, -20.570661416000004], [1435878144.0, 10960000.0, -20.603467264000003], [1435879872.0, 10980000.0, -20.636246808], [1435881600.0, 11000000.0, -20.669], [1435883328.0, 11020000.0, -20.701726792000002], [1435885056.0, 11040000.0, -20.734427136], [1435886784.0, 11060000.0, -20.767100984000002], [1435888512.0, 11080000.0, -20.799748288000004], [1435890240.0, 11100000.0, -20.832369000000003], [1435891968.0, 11120000.0, -20.864963072000002], [1435893696.0, 11140000.0, -20.897530456000002], [1435895424.0, 11160000.0, -20.930071104], [1435897152.0, 11180000.0, -20.962584968], [1435898880.0, 11200000.0, -20.995072], [1435900608.0, 11220000.0, -21.027532152], [1435902336.0, 11240000.0, -21.059965376000005], [1435904064.0, 11260000.0, -21.092371623999995], [1435905792.0, 11280000.0, -21.124750847999998], [1435907520.0, 11300000.0, -21.157103], [1435909248.0, 11320000.0, -21.189428032], [1435910976.0, 11340000.0, -21.221725896], [1435912704.0, 11360000.0, -21.253996544], [1435914432.0, 11380000.0, -21.286239927999997], [1435916160.0, 11400000.0, -21.318455999999998], [1435917888.0, 11420000.0, -21.350644711999998], [1435919616.0, 11440000.0, -21.382806016], [1435921344.0, 11460000.0, -21.414939863999997], [1435923072.0, 11480000.0, -21.447046207999996], [1435924800.0, 11500000.0, -21.479125], [1435926528.0, 11520000.0, -21.511176192], [1435928256.0, 11540000.0, -21.543199736], [1435929984.0, 11560000.0, -21.575195584], [1435931712.0, 11580000.0, -21.607163687999996], [1435933440.0, 11600000.0, -21.639104], [1435935168.0, 11620000.0, -21.671016471999998], [1435936896.0, 11640000.0, -21.702901055999998], [1435938624.0, 11660000.0, -21.734757704], [1435940352.0, 11680000.0, -21.766586368], [1435942080.0, 11700000.0, -21.798386999999998], [1435943808.0, 11720000.0, -21.830159551999998], [1435945536.0, 11740000.0, -21.861903975999997], [1435947264.0, 11760000.0, -21.893620224], [1435948992.0, 11780000.0, -21.925308248], [1435950720.0, 11800000.0, -21.956967999999996], [1435952448.0, 11820000.0, -21.988599432], [1435954176.0, 11840000.0, -22.020202496], [1435955904.0, 11860000.0, -22.051777144], [1435957632.0, 11880000.0, -22.083323328], [1435959360.0, 11900000.0, -22.114841], [1435961088.0, 11920000.0, -22.146330112], [1435962816.0, 11940000.0, -22.177790616], [1435964544.0, 11960000.0, -22.209222464], [1435966272.0, 11980000.0, -22.240625608000002], [1435968000.0, 12000000.0, -22.272], [1435969728.0, 12020000.0, -22.303345592], [1435971456.0, 12040000.0, -22.334662335999997], [1435973184.0, 12060000.0, -22.365950184], [1435974912.0, 12080000.0, -22.397209088], [1435976640.0, 12100000.0, -22.428439], [1435978368.0, 12120000.0, -22.459639871999997], [1435980096.0, 12140000.0, -22.490811656], [1435981824.0, 12160000.0, -22.521954304], [1435983552.0, 12180000.0, -22.553067768], [1435985280.0, 12200000.0, -22.584152], [1435987008.0, 12220000.0, -22.615206951999998], [1435988736.0, 12240000.0, -22.646232576], [1435990464.0, 12260000.0, -22.677228824], [1435992192.0, 12280000.0, -22.708195648], [1435993920.0, 12300000.0, -22.739133000000002], [1435995648.0, 12320000.0, -22.770040832], [1435997376.0, 12340000.0, -22.800919096], [1435999104.0, 12360000.0, -22.831767744], [1436000832.0, 12380000.0, -22.862586727999997], [1436002560.0, 12400000.0, -22.893376], [1436004288.0, 12420000.0, -22.924135512], [1436006016.0, 12440000.0, -22.954865215999998], [1436007744.0, 12460000.0, -22.985565064000003], [1436009472.0, 12480000.0, -23.016235008000002], [1436011200.0, 12500000.0, -23.046875], [1436012928.0, 12520000.0, -23.077484992], [1436014656.0, 12540000.0, -23.108064935999998], [1436016384.0, 12560000.0, -23.138614784], [1436018112.0, 12580000.0, -23.169134488], [1436019840.0, 12600000.0, -23.199624], [1436021568.0, 12620000.0, -23.230083272], [1436023296.0, 12640000.0, -23.260512256000002], [1436025024.0, 12660000.0, -23.290910904], [1436026752.0, 12680000.0, -23.321279168], [1436028480.0, 12700000.0, -23.351616999999997], [1436030208.0, 12720000.0, -23.381924352000002], [1436031936.0, 12740000.0, -23.412201176], [1436033664.0, 12760000.0, -23.442447424], [1436035392.0, 12780000.0, -23.472663048], [1436037120.0, 12800000.0, -23.502848], [1436038848.0, 12820000.0, -23.533002232], [1436040576.0, 12840000.0, -23.563125696], [1436042304.0, 12860000.0, -23.593218344], [1436044032.0, 12880000.0, -23.623280128], [1436045760.0, 12900000.0, -23.653311000000002], [1436047488.0, 12920000.0, -23.683310912], [1436049216.0, 12940000.0, -23.713279816000004], [1436050944.0, 12960000.0, -23.743217664000003], [1436052672.0, 12980000.0, -23.773124408], [1436054400.0, 13000000.0, -23.803], [1436056128.0, 13020000.0, -23.832844392], [1436057856.0, 13040000.0, -23.862657536], [1436059584.0, 13060000.0, -23.892439384], [1436061312.0, 13080000.0, -23.922189888], [1436063040.0, 13100000.0, -23.951909], [1436064768.0, 13120000.0, -23.981596672000002], [1436066496.0, 13140000.0, -24.011252856000002], [1436068224.0, 13160000.0, -24.040877504], [1436069952.0, 13180000.0, -24.070470567999998], [1436071680.0, 13200000.0, -24.100032000000002], [1436073408.0, 13220000.0, -24.129561752], [1436075136.0, 13240000.0, -24.159059776], [1436076864.0, 13260000.0, -24.188526024], [1436078592.0, 13280000.0, -24.217960448000003], [1436080320.0, 13300000.0, -24.247363], [1436082048.0, 13320000.0, -24.276733632], [1436083776.0, 13340000.0, -24.306072296], [1436085504.0, 13360000.0, -24.335378944000002], [1436087232.0, 13380000.0, -24.364653528], [1436088960.0, 13400000.0, -24.393896], [1436090688.0, 13420000.0, -24.423106312], [1436092416.0, 13440000.0, -24.452284416], [1436094144.0, 13460000.0, -24.481430264], [1436095872.0, 13480000.0, -24.510543808], [1436097600.0, 13500000.0, -24.539625], [1436099328.0, 13520000.0, -24.568673792000002], [1436101056.0, 13540000.0, -24.597690136], [1436102784.0, 13560000.0, -24.626673984], [1436104512.0, 13580000.0, -24.655625288000003], [1436106240.0, 13600000.0, -24.684544000000002], [1436107968.0, 13620000.0, -24.713430072], [1436109696.0, 13640000.0, -24.742283456], [1436111424.0, 13660000.0, -24.771104104], [1436113152.0, 13680000.0, -24.799891968000004], [1436114880.0, 13700000.0, -24.828647], [1436116608.0, 13720000.0, -24.857369152], [1436118336.0, 13740000.0, -24.886058376000005], [1436120064.0, 13760000.0, -24.914714624], [1436121792.0, 13780000.0, -24.943337848], [1436123520.0, 13800000.0, -24.971928], [1436125248.0, 13820000.0, -25.000485031999997], [1436126976.0, 13840000.0, -25.029008896], [1436128704.0, 13860000.0, -25.057499544], [1436130432.0, 13880000.0, -25.085956927999998], [1436132160.0, 13900000.0, -25.114380999999998], [1436133888.0, 13920000.0, -25.142771712], [1436135616.0, 13940000.0, -25.171129016], [1436137344.0, 13960000.0, -25.199452863999998], [1436139072.0, 13980000.0, -25.227743208], [1436140800.0, 14000000.0, -25.256], [1436142528.0, 14020000.0, -25.284223192], [1436144256.0, 14040000.0, -25.312412736], [1436145984.0, 14060000.0, -25.340568583999996], [1436147712.0, 14080000.0, -25.368690687999997], [1436149440.0, 14100000.0, -25.396779], [1436151168.0, 14120000.0, -25.424833472], [1436152896.0, 14140000.0, -25.452854056], [1436154624.0, 14160000.0, -25.480840704000002], [1436156352.0, 14180000.0, -25.508793368], [1436158080.0, 14200000.0, -25.536711999999998], [1436159808.0, 14220000.0, -25.564596551999998], [1436161536.0, 14240000.0, -25.592446975999998], [1436163264.0, 14260000.0, -25.620263224], [1436164992.0, 14280000.0, -25.648045248], [1436166720.0, 14300000.0, -25.675793], [1436168448.0, 14320000.0, -25.703506432], [1436170176.0, 14340000.0, -25.731185496000002], [1436171904.0, 14360000.0, -25.758830144], [1436173632.0, 14380000.0, -25.786440327999998], [1436175360.0, 14400000.0, -25.814016], [1436177088.0, 14420000.0, -25.841557112], [1436178816.0, 14440000.0, -25.869063616], [1436180544.0, 14460000.0, -25.896535464], [1436182272.0, 14480000.0, -25.923972608], [1436184000.0, 14500000.0, -25.951375], [1436185728.0, 14520000.0, -25.978742592], [1436187456.0, 14540000.0, -26.006075336], [1436189184.0, 14560000.0, -26.033373184], [1436190912.0, 14580000.0, -26.060636088000003], [1436192640.0, 14600000.0, -26.087864], [1436194368.0, 14620000.0, -26.115056871999997], [1436196096.0, 14640000.0, -26.142214656], [1436197824.0, 14660000.0, -26.169337304], [1436199552.0, 14680000.0, -26.196424768], [1436201280.0, 14700000.0, -26.223477], [1436203008.0, 14720000.0, -26.250493952], [1436204736.0, 14740000.0, -26.277475576], [1436206464.0, 14760000.0, -26.304421824], [1436208192.0, 14780000.0, -26.331332648], [1436209920.0, 14800000.0, -26.358208], [1436211648.0, 14820000.0, -26.385047832], [1436213376.0, 14840000.0, -26.411852096], [1436215104.0, 14860000.0, -26.438620743999998], [1436216832.0, 14880000.0, -26.465353727999997], [1436218560.0, 14900000.0, -26.492051], [1436220288.0, 14920000.0, -26.518712512], [1436222016.0, 14940000.0, -26.545338215999998], [1436223744.0, 14960000.0, -26.571928064], [1436225472.0, 14980000.0, -26.598482008], [1436227200.0, 15000000.0, -26.625], [1436228928.0, 15020000.0, -26.651481992], [1436230656.0, 15040000.0, -26.677927936], [1436232384.0, 15060000.0, -26.704337784], [1436234112.0, 15080000.0, -26.730711488], [1436235840.0, 15100000.0, -26.757049], [1436237568.0, 15120000.0, -26.783350272], [1436239296.0, 15140000.0, -26.809615256], [1436241024.0, 15160000.0, -26.835843904], [1436242752.0, 15180000.0, -26.862036168], [1436244480.0, 15200000.0, -26.888191999999997], [1436246208.0, 15220000.0, -26.914311352000002], [1436247936.0, 15240000.0, -26.940394175999998], [1436249664.0, 15260000.0, -26.966440423999998], [1436251392.0, 15280000.0, -26.992450048000002], [1436253120.0, 15300000.0, -27.018423000000002], [1436254848.0, 15320000.0, -27.044359232], [1436256576.0, 15340000.0, -27.070258696], [1436258304.0, 15360000.0, -27.096121344], [1436260032.0, 15380000.0, -27.121947128000002], [1436261760.0, 15400000.0, -27.147736000000002], [1436263488.0, 15420000.0, -27.173487912], [1436265216.0, 15440000.0, -27.199202816000003], [1436266944.0, 15460000.0, -27.224880664], [1436268672.0, 15480000.0, -27.250521408], [1436270400.0, 15500000.0, -27.276125], [1436272128.0, 15520000.0, -27.301691392], [1436273856.0, 15540000.0, -27.327220536000002], [1436275584.0, 15560000.0, -27.352712384], [1436277312.0, 15580000.0, -27.378166888], [1436279040.0, 15600000.0, -27.403584000000002], [1436280768.0, 15620000.0, -27.428963672000002], [1436282496.0, 15640000.0, -27.454305856], [1436284224.0, 15660000.0, -27.479610504], [1436285952.0, 15680000.0, -27.504877567999998], [1436287680.0, 15700000.0, -27.530107], [1436289408.0, 15720000.0, -27.555298752000002], [1436291136.0, 15740000.0, -27.580452776], [1436292864.0, 15760000.0, -27.605569024], [1436294592.0, 15780000.0, -27.630647448], [1436296320.0, 15800000.0, -27.655688], [1436298048.0, 15820000.0, -27.680690632], [1436299776.0, 15840000.0, -27.705655296], [1436301504.0, 15860000.0, -27.730581944], [1436303232.0, 15880000.0, -27.755470528], [1436304960.0, 15900000.0, -27.780321], [1436306688.0, 15920000.0, -27.805133312000002], [1436308416.0, 15940000.0, -27.829907416], [1436310144.0, 15960000.0, -27.854643264000003], [1436311872.0, 15980000.0, -27.879340808000002], [1436313600.0, 16000000.0, -27.904], [1436315328.0, 16020000.0, -27.928620791999997], [1436317056.0, 16040000.0, -27.953203136], [1436318784.0, 16060000.0, -27.977746984000003], [1436320512.0, 16080000.0, -28.002252288], [1436322240.0, 16100000.0, -28.026719], [1436323968.0, 16120000.0, -28.051147072], [1436325696.0, 16140000.0, -28.075536456000002], [1436327424.0, 16160000.0, -28.099887104], [1436329152.0, 16180000.0, -28.124198967999998], [1436330880.0, 16200000.0, -28.148472000000005], [1436332608.0, 16220000.0, -28.172706152000003], [1436334336.0, 16240000.0, -28.196901376000003], [1436336064.0, 16260000.0, -28.221057623999997], [1436337792.0, 16280000.0, -28.245174847999998], [1436339520.0, 16300000.0, -28.269252999999996], [1436341248.0, 16320000.0, -28.293292032000004], [1436342976.0, 16340000.0, -28.317291896], [1436344704.0, 16360000.0, -28.341252544], [1436346432.0, 16380000.0, -28.365173927999997], [1436348160.0, 16400000.0, -28.389055999999997], [1436349888.0, 16420000.0, -28.412898711999997], [1436351616.0, 16440000.0, -28.436702015999998], [1436353344.0, 16460000.0, -28.460465864000003], [1436355072.0, 16480000.0, -28.484190208], [1436356800.0, 16500000.0, -28.507875], [1436358528.0, 16520000.0, -28.531520192000002], [1436360256.0, 16540000.0, -28.555125736], [1436361984.0, 16560000.0, -28.578691583999998], [1436363712.0, 16580000.0, -28.602217687999996], [1436365440.0, 16600000.0, -28.625703999999995], [1436367168.0, 16620000.0, -28.649150471999995], [1436368896.0, 16640000.0, -28.672557056000002], [1436370624.0, 16660000.0, -28.695923704000002], [1436372352.0, 16680000.0, -28.719250368], [1436374080.0, 16700000.0, -28.742537], [1436375808.0, 16720000.0, -28.765783552], [1436377536.0, 16740000.0, -28.788989975999996], [1436379264.0, 16760000.0, -28.812156223999995], [1436380992.0, 16780000.0, -28.835282248000002], [1436382720.0, 16800000.0, -28.858368000000002], [1436384448.0, 16820000.0, -28.881413432000002], [1436386176.0, 16840000.0, -28.904418496], [1436387904.0, 16860000.0, -28.927383144], [1436389632.0, 16880000.0, -28.950307327999997], [1436391360.0, 16900000.0, -28.973191], [1436393088.0, 16920000.0, -28.996034111999997], [1436394816.0, 16940000.0, -29.018836615999994], [1436396544.0, 16960000.0, -29.041598464000003], [1436398272.0, 16980000.0, -29.064319608], [1436400000.0, 17000000.0, -29.087], [1436401728.0, 17020000.0, -29.109639592], [1436403456.0, 17040000.0, -29.132238336], [1436405184.0, 17060000.0, -29.154796184], [1436406912.0, 17080000.0, -29.177313088], [1436408640.0, 17100000.0, -29.199789000000003], [1436410368.0, 17120000.0, -29.222223872], [1436412096.0, 17140000.0, -29.244617656000003], [1436413824.0, 17160000.0, -29.266970304], [1436415552.0, 17180000.0, -29.289281768], [1436417280.0, 17200000.0, -29.311552], [1436419008.0, 17220000.0, -29.333780951999998], [1436420736.0, 17240000.0, -29.355968576], [1436422464.0, 17260000.0, -29.378114823999997], [1436424192.0, 17280000.0, -29.400219648000004], [1436425920.0, 17300000.0, -29.422283], [1436427648.0, 17320000.0, -29.444304832], [1436429376.0, 17340000.0, -29.466285096], [1436431104.0, 17360000.0, -29.488223744], [1436432832.0, 17380000.0, -29.510120727999997], [1436434560.0, 17400000.0, -29.531975999999997], [1436436288.0, 17420000.0, -29.553789512], [1436438016.0, 17440000.0, -29.575561216000004], [1436439744.0, 17460000.0, -29.597291064000004], [1436441472.0, 17480000.0, -29.618979008], [1436443200.0, 17500000.0, -29.640625], [1436444928.0, 17520000.0, -29.662228992], [1436446656.0, 17540000.0, -29.683790935999998], [1436448384.0, 17560000.0, -29.705310783999998], [1436450112.0, 17580000.0, -29.726788487999997], [1436451840.0, 17600000.0, -29.748224000000004], [1436453568.0, 17620000.0, -29.769617272], [1436455296.0, 17640000.0, -29.790968256], [1436457024.0, 17660000.0, -29.812276904], [1436458752.0, 17680000.0, -29.833543168], [1436460480.0, 17700000.0, -29.854767], [1436462208.0, 17720000.0, -29.875948351999998], [1436463936.0, 17740000.0, -29.897087176000003], [1436465664.0, 17760000.0, -29.918183424000002], [1436467392.0, 17780000.0, -29.939237048000003], [1436469120.0, 17800000.0, -29.960248], [1436470848.0, 17820000.0, -29.981216232], [1436472576.0, 17840000.0, -30.002141696], [1436474304.0, 17860000.0, -30.023024344], [1436476032.0, 17880000.0, -30.043864127999996], [1436477760.0, 17900000.0, -30.064660999999997], [1436479488.0, 17920000.0, -30.085414912000005], [1436481216.0, 17940000.0, -30.106125816000002], [1436482944.0, 17960000.0, -30.126793664], [1436484672.0, 17980000.0, -30.147418408], [1436486400.0, 18000000.0, -30.168], [1436488128.0, 18020000.0, -30.188538391999998], [1436489856.0, 18040000.0, -30.209033536], [1436491584.0, 18060000.0, -30.229485384000004], [1436493312.0, 18080000.0, -30.249893888000003], [1436495040.0, 18100000.0, -30.270259000000003], [1436496768.0, 18120000.0, -30.290580672], [1436498496.0, 18140000.0, -30.310858856], [1436500224.0, 18160000.0, -30.331093504], [1436501952.0, 18180000.0, -30.351284567999997], [1436503680.0, 18200000.0, -30.371432], [1436505408.0, 18220000.0, -30.391535751999996], [1436507136.0, 18240000.0, -30.411595776000002], [1436508864.0, 18260000.0, -30.431612024000003], [1436510592.0, 18280000.0, -30.451584448000002], [1436512320.0, 18300000.0, -30.471513], [1436514048.0, 18320000.0, -30.491397632], [1436515776.0, 18340000.0, -30.511238296], [1436517504.0, 18360000.0, -30.531034943999998], [1436519232.0, 18380000.0, -30.550787528000004], [1436520960.0, 18400000.0, -30.570496000000006], [1436522688.0, 18420000.0, -30.590160312000002], [1436524416.0, 18440000.0, -30.609780416000003], [1436526144.0, 18460000.0, -30.629356264000002], [1436527872.0, 18480000.0, -30.648887807999998], [1436529600.0, 18500000.0, -30.668374999999997], [1436531328.0, 18520000.0, -30.687817791999997], [1436533056.0, 18540000.0, -30.707216135999996], [1436534784.0, 18560000.0, -30.726569984000005], [1436536512.0, 18580000.0, -30.745879288000005], [1436538240.0, 18600000.0, -30.765144000000003], [1436539968.0, 18620000.0, -30.784364072000002], [1436541696.0, 18640000.0, -30.803539456], [1436543424.0, 18660000.0, -30.822670104], [1436545152.0, 18680000.0, -30.841755967999998], [1436546880.0, 18700000.0, -30.860797000000005], [1436548608.0, 18720000.0, -30.879793152000005], [1436550336.0, 18740000.0, -30.898744376000003], [1436552064.0, 18760000.0, -30.917650623999997], [1436553792.0, 18780000.0, -30.936511847999995], [1436555520.0, 18800000.0, -30.955327999999994], [1436557248.0, 18820000.0, -30.974099032], [1436558976.0, 18840000.0, -30.992824896000002], [1436560704.0, 18860000.0, -31.011505544], [1436562432.0, 18880000.0, -31.030140927999998], [1436564160.0, 18900000.0, -31.048730999999997], [1436565888.0, 18920000.0, -31.067275711999997], [1436567616.0, 18940000.0, -31.085775015999996], [1436569344.0, 18960000.0, -31.104228864000003], [1436571072.0, 18980000.0, -31.122637208], [1436572800.0, 19000000.0, -31.141000000000002], [1436574528.0, 19020000.0, -31.159317192], [1436576256.0, 19040000.0, -31.177588736], [1436577984.0, 19060000.0, -31.195814583999997], [1436579712.0, 19080000.0, -31.213994688], [1436581440.0, 19100000.0, -31.232128999999997], [1436583168.0, 19120000.0, -31.250217471999996], [1436584896.0, 19140000.0, -31.268260056000003], [1436586624.0, 19160000.0, -31.286256704000003], [1436588352.0, 19180000.0, -31.304207368], [1436590080.0, 19200000.0, -31.322111999999997], [1436591808.0, 19220000.0, -31.339970551999997], [1436593536.0, 19240000.0, -31.357782975999996], [1436595264.0, 19260000.0, -31.375549223999997], [1436596992.0, 19280000.0, -31.393269248000003], [1436598720.0, 19300000.0, -31.410943000000003], [1436600448.0, 19320000.0, -31.428570432], [1436602176.0, 19340000.0, -31.446151496], [1436603904.0, 19360000.0, -31.463686144], [1436605632.0, 19380000.0, -31.481174327999998], [1436607360.0, 19400000.0, -31.498616], [1436609088.0, 19420000.0, -31.516011111999997], [1436610816.0, 19440000.0, -31.533359615999995], [1436612544.0, 19460000.0, -31.550661464], [1436614272.0, 19480000.0, -31.567916608], [1436616000.0, 19500000.0, -31.585125], [1436617728.0, 19520000.0, -31.602286592], [1436619456.0, 19540000.0, -31.619401336], [1436621184.0, 19560000.0, -31.636469184], [1436622912.0, 19580000.0, -31.653490087999998], [1436624640.0, 19600000.0, -31.670464000000003], [1436626368.0, 19620000.0, -31.687390872], [1436628096.0, 19640000.0, -31.704270656000002], [1436629824.0, 19660000.0, -31.721103304], [1436631552.0, 19680000.0, -31.737888767999998], [1436633280.0, 19700000.0, -31.754627], [1436635008.0, 19720000.0, -31.771317951999997], [1436636736.0, 19740000.0, -31.787961575999997], [1436638464.0, 19760000.0, -31.804557823999996], [1436640192.0, 19780000.0, -31.821106648000004], [1436641920.0, 19800000.0, -31.837608000000003], [1436643648.0, 19820000.0, -31.854061832], [1436645376.0, 19840000.0, -31.870468096], [1436647104.0, 19860000.0, -31.886826744], [1436648832.0, 19880000.0, -31.903137727999997], [1436650560.0, 19900000.0, -31.919400999999997], [1436652288.0, 19920000.0, -31.935616512000003], [1436654016.0, 19940000.0, -31.951784216000004], [1436655744.0, 19960000.0, -31.967904064000003], [1436657472.0, 19980000.0, -31.983976008], [1436659200.0, 20000000.0, -32.0], [1436660928.0, 20020000.0, -32.015975991999994], [1436662656.0, 20040000.0, -32.031903936], [1436664384.0, 20060000.0, -32.047783784], [1436666112.0, 20080000.0, -32.063615487999996], [1436667840.0, 20100000.0, -32.079398999999995], [1436669568.0, 20120000.0, -32.095134272], [1436671296.0, 20140000.0, -32.110821255999994], [1436673024.0, 20160000.0, -32.126459904], [1436674752.0, 20180000.0, -32.142050168000004], [1436676480.0, 20200000.0, -32.157592], [1436678208.0, 20220000.0, -32.173085352], [1436679936.0, 20240000.0, -32.188530176], [1436681664.0, 20260000.0, -32.203926423999995], [1436683392.0, 20280000.0, -32.219274048], [1436685120.0, 20300000.0, -32.234573], [1436686848.0, 20320000.0, -32.249823232], [1436688576.0, 20340000.0, -32.265024696], [1436690304.0, 20360000.0, -32.280177343999995], [1436692032.0, 20380000.0, -32.295281128], [1436693760.0, 20400000.0, -32.310336], [1436695488.0, 20420000.0, -32.325341912], [1436697216.0, 20440000.0, -32.340298816], [1436698944.0, 20460000.0, -32.355206663999994], [1436700672.0, 20480000.0, -32.370065408], [1436702400.0, 20500000.0, -32.384875], [1436704128.0, 20520000.0, -32.399635392], [1436705856.0, 20540000.0, -32.414346536], [1436707584.0, 20560000.0, -32.42900838400001], [1436709312.0, 20580000.0, -32.443620888], [1436711040.0, 20600000.0, -32.458184], [1436712768.0, 20620000.0, -32.472697671999995], [1436714496.0, 20640000.0, -32.487161856], [1436716224.0, 20660000.0, -32.501576504], [1436717952.0, 20680000.0, -32.515941568], [1436719680.0, 20700000.0, -32.530257], [1436721408.0, 20720000.0, -32.544522752], [1436723136.0, 20740000.0, -32.558738776], [1436724864.0, 20760000.0, -32.572905024], [1436726592.0, 20780000.0, -32.587021448], [1436728320.0, 20800000.0, -32.601088000000004], [1436730048.0, 20820000.0, -32.615104632], [1436731776.0, 20840000.0, -32.629071296], [1436733504.0, 20860000.0, -32.642987944], [1436735232.0, 20880000.0, -32.656854528000004], [1436736960.0, 20900000.0, -32.670671], [1436738688.0, 20920000.0, -32.684437312], [1436740416.0, 20940000.0, -32.698153416], [1436742144.0, 20960000.0, -32.711819264], [1436743872.0, 20980000.0, -32.725434807999996], [1436745600.0, 21000000.0, -32.739], [1436747328.0, 21020000.0, -32.752514792], [1436749056.0, 21040000.0, -32.765979136], [1436750784.0, 21060000.0, -32.779392984], [1436752512.0, 21080000.0, -32.79275628800001], [1436754240.0, 21100000.0, -32.806068999999994], [1436755968.0, 21120000.0, -32.819331072], [1436757696.0, 21140000.0, -32.832542456], [1436759424.0, 21160000.0, -32.845703104], [1436761152.0, 21180000.0, -32.858812968], [1436762880.0, 21200000.0, -32.871872], [1436764608.0, 21220000.0, -32.884880152], [1436766336.0, 21240000.0, -32.897837376000005], [1436768064.0, 21260000.0, -32.910743624], [1436769792.0, 21280000.0, -32.923598848], [1436771520.0, 21300000.0, -32.936403], [1436773248.0, 21320000.0, -32.949156032], [1436774976.0, 21340000.0, -32.961857896], [1436776704.0, 21360000.0, -32.974508543999995], [1436778432.0, 21380000.0, -32.987107928], [1436780160.0, 21400000.0, -32.999656], [1436781888.0, 21420000.0, -33.012152711999995], [1436783616.0, 21440000.0, -33.024598016], [1436785344.0, 21460000.0, -33.036991864], [1436787072.0, 21480000.0, -33.049334208], [1436788800.0, 21500000.0, -33.061625], [1436790528.0, 21520000.0, -33.073864192], [1436792256.0, 21540000.0, -33.086051736], [1436793984.0, 21560000.0, -33.098187584], [1436795712.0, 21580000.0, -33.110271688], [1436797440.0, 21600000.0, -33.122304], [1436799168.0, 21620000.0, -33.134284472], [1436800896.0, 21640000.0, -33.146213056], [1436802624.0, 21660000.0, -33.158089704000005], [1436804352.0, 21680000.0, -33.16991436799999], [1436806080.0, 21700000.0, -33.181687], [1436807808.0, 21720000.0, -33.193407552000004], [1436809536.0, 21740000.0, -33.205075975999996], [1436811264.0, 21760000.0, -33.216692224], [1436812992.0, 21780000.0, -33.228256248], [1436814720.0, 21800000.0, -33.239768], [1436816448.0, 21820000.0, -33.251227432], [1436818176.0, 21840000.0, -33.262634496000004], [1436819904.0, 21860000.0, -33.273989144], [1436821632.0, 21880000.0, -33.285291328], [1436823360.0, 21900000.0, -33.296541], [1436825088.0, 21920000.0, -33.307738112], [1436826816.0, 21940000.0, -33.318882615999996], [1436828544.0, 21960000.0, -33.329974464], [1436830272.0, 21980000.0, -33.341013608000004], [1436832000.0, 22000000.0, -33.352], [1436833728.0, 22020000.0, -33.362933592000005], [1436835456.0, 22040000.0, -33.373814336], [1436837184.0, 22060000.0, -33.384642184], [1436838912.0, 22080000.0, -33.395417088], [1436840640.0, 22100000.0, -33.406139], [1436842368.0, 22120000.0, -33.416807872], [1436844096.0, 22140000.0, -33.427423656], [1436845824.0, 22160000.0, -33.437986304000006], [1436847552.0, 22180000.0, -33.448495768], [1436849280.0, 22200000.0, -33.458952000000004], [1436851008.0, 22220000.0, -33.469354951999996], [1436852736.0, 22240000.0, -33.479704576], [1436854464.0, 22260000.0, -33.49000082399999], [1436856192.0, 22280000.0, -33.500243648], [1436857920.0, 22300000.0, -33.510433], [1436859648.0, 22320000.0, -33.520568831999995], [1436861376.0, 22340000.0, -33.530651096], [1436863104.0, 22360000.0, -33.540679744], [1436864832.0, 22380000.0, -33.550654728], [1436866560.0, 22400000.0, -33.560576], [1436868288.0, 22420000.0, -33.570443512000004], [1436870016.0, 22440000.0, -33.580257216], [1436871744.0, 22460000.0, -33.590017064], [1436873472.0, 22480000.0, -33.599723008000005], [1436875200.0, 22500000.0, -33.609375], [1436876928.0, 22520000.0, -33.618972991999996], [1436878656.0, 22540000.0, -33.628516936], [1436880384.0, 22560000.0, -33.638006784], [1436882112.0, 22580000.0, -33.647442487999996], [1436883840.0, 22600000.0, -33.656824], [1436885568.0, 22620000.0, -33.666151272], [1436887296.0, 22640000.0, -33.675424256], [1436889024.0, 22660000.0, -33.684642904], [1436890752.0, 22680000.0, -33.693807168], [1436892480.0, 22700000.0, -33.702917], [1436894208.0, 22720000.0, -33.711972352000004], [1436895936.0, 22740000.0, -33.720973176], [1436897664.0, 22760000.0, -33.729919424], [1436899392.0, 22780000.0, -33.738811048], [1436901120.0, 22800000.0, -33.747648], [1436902848.0, 22820000.0, -33.756430232], [1436904576.0, 22840000.0, -33.765157695999996], [1436906304.0, 22860000.0, -33.773830344], [1436908032.0, 22880000.0, -33.782448128], [1436909760.0, 22900000.0, -33.791011], [1436911488.0, 22920000.0, -33.799518911999996], [1436913216.0, 22940000.0, -33.807971816000006], [1436914944.0, 22960000.0, -33.816369664], [1436916672.0, 22980000.0, -33.824712408], [1436918400.0, 23000000.0, -33.833000000000006], [1436920128.0, 23020000.0, -33.841232391999995], [1436921856.0, 23040000.0, -33.849409536], [1436923584.0, 23060000.0, -33.857531384000005], [1436925312.0, 23080000.0, -33.865597887999996], [1436927040.0, 23100000.0, -33.873609], [1436928768.0, 23120000.0, -33.881564671999996], [1436930496.0, 23140000.0, -33.889464856000004], [1436932224.0, 23160000.0, -33.89730950399999], [1436933952.0, 23180000.0, -33.905098568], [1436935680.0, 23200000.0, -33.912832], [1436937408.0, 23220000.0, -33.920509751999994], [1436939136.0, 23240000.0, -33.928131776], [1436940864.0, 23260000.0, -33.935698024000004], [1436942592.0, 23280000.0, -33.94320844799999], [1436944320.0, 23300000.0, -33.950663], [1436946048.0, 23320000.0, -33.958061632], [1436947776.0, 23340000.0, -33.965404295999996], [1436949504.0, 23360000.0, -33.972690944], [1436951232.0, 23380000.0, -33.979921528000006], [1436952960.0, 23400000.0, -33.987096], [1436954688.0, 23420000.0, -33.994214312000004], [1436956416.0, 23440000.0, -34.001276415999996], [1436958144.0, 23460000.0, -34.008282264], [1436959872.0, 23480000.0, -34.015231807999996], [1436961600.0, 23500000.0, -34.022124999999996], [1436963328.0, 23520000.0, -34.028961792000004], [1436965056.0, 23540000.0, -34.035742135999996], [1436966784.0, 23560000.0, -34.042465984], [1436968512.0, 23580000.0, -34.049133288], [1436970240.0, 23600000.0, -34.055744], [1436971968.0, 23620000.0, -34.062298072000004], [1436973696.0, 23640000.0, -34.068795456000004], [1436975424.0, 23660000.0, -34.075236104], [1436977152.0, 23680000.0, -34.081619968], [1436978880.0, 23700000.0, -34.08794700000001], [1436980608.0, 23720000.0, -34.094217152], [1436982336.0, 23740000.0, -34.100430376000006], [1436984064.0, 23760000.0, -34.106586623999995], [1436985792.0, 23780000.0, -34.112685848], [1436987520.0, 23800000.0, -34.118728], [1436989248.0, 23820000.0, -34.124713032], [1436990976.0, 23840000.0, -34.130640896], [1436992704.0, 23860000.0, -34.136511543999994], [1436994432.0, 23880000.0, -34.142324928], [1436996160.0, 23900000.0, -34.148081000000005], [1436997888.0, 23920000.0, -34.153779711999995], [1436999616.0, 23940000.0, -34.159421015999996], [1437001344.0, 23960000.0, -34.165004864000004], [1437003072.0, 23980000.0, -34.170531208], [1437004800.0, 24000000.0, -34.176], [1437006528.0, 24020000.0, -34.181411192], [1437008256.0, 24040000.0, -34.186764736], [1437009984.0, 24060000.0, -34.192060584000004], [1437011712.0, 24080000.0, -34.197298688], [1437013440.0, 24100000.0, -34.202479], [1437015168.0, 24120000.0, -34.20760147199999], [1437016896.0, 24140000.0, -34.212666055999996], [1437018624.0, 24160000.0, -34.217672704], [1437020352.0, 24180000.0, -34.222621368], [1437022080.0, 24200000.0, -34.227512], [1437023808.0, 24220000.0, -34.232344552], [1437025536.0, 24240000.0, -34.237118976], [1437027264.0, 24260000.0, -34.241835224], [1437028992.0, 24280000.0, -34.24649324800001], [1437030720.0, 24300000.0, -34.251093], [1437032448.0, 24320000.0, -34.255634432], [1437034176.0, 24340000.0, -34.26011749600001], [1437035904.0, 24360000.0, -34.264542144], [1437037632.0, 24380000.0, -34.268908328], [1437039360.0, 24400000.0, -34.273216], [1437041088.0, 24420000.0, -34.277465112], [1437042816.0, 24440000.0, -34.281655615999995], [1437044544.0, 24460000.0, -34.285787463999995], [1437046272.0, 24480000.0, -34.289860608], [1437048000.0, 24500000.0, -34.293875], [1437049728.0, 24520000.0, -34.297830592], [1437051456.0, 24540000.0, -34.301727336], [1437053184.0, 24560000.0, -34.305565183999995], [1437054912.0, 24580000.0, -34.309344088], [1437056640.0, 24600000.0, -34.313064000000004], [1437058368.0, 24620000.0, -34.316724871999995], [1437060096.0, 24640000.0, -34.320326656], [1437061824.0, 24660000.0, -34.323869304000006], [1437063552.0, 24680000.0, -34.327352768], [1437065280.0, 24700000.0, -34.330777], [1437067008.0, 24720000.0, -34.334141951999996], [1437068736.0, 24740000.0, -34.337447576], [1437070464.0, 24760000.0, -34.340693824], [1437072192.0, 24780000.0, -34.343880647999995], [1437073920.0, 24800000.0, -34.347008], [1437075648.0, 24820000.0, -34.350075831999995], [1437077376.0, 24840000.0, -34.353084096], [1437079104.0, 24860000.0, -34.356032744000004], [1437080832.0, 24880000.0, -34.358921728], [1437082560.0, 24900000.0, -34.361751], [1437084288.0, 24920000.0, -34.364520512000006], [1437086016.0, 24940000.0, -34.367230215999996], [1437087744.0, 24960000.0, -34.369880064], [1437089472.0, 24980000.0, -34.37247000800001], [1437091200.0, 25000000.0, -34.375], [1437092928.0, 25020000.0, -34.377469991999995], [1437094656.0, 25040000.0, -34.379879935999995], [1437096384.0, 25060000.0, -34.382229784], [1437098112.0, 25080000.0, -34.384519487999995], [1437099840.0, 25100000.0, -34.386749], [1437101568.0, 25120000.0, -34.388918272], [1437103296.0, 25140000.0, -34.391027256], [1437105024.0, 25160000.0, -34.393075904], [1437106752.0, 25180000.0, -34.395064168000005], [1437108480.0, 25200000.0, -34.396992], [1437110208.0, 25220000.0, -34.398859352], [1437111936.0, 25240000.0, -34.400666176], [1437113664.0, 25260000.0, -34.402412424], [1437115392.0, 25280000.0, -34.404098048], [1437117120.0, 25300000.0, -34.405722999999995], [1437118848.0, 25320000.0, -34.407287232], [1437120576.0, 25340000.0, -34.408790696], [1437122304.0, 25360000.0, -34.410233344], [1437124032.0, 25380000.0, -34.411615128], [1437125760.0, 25400000.0, -34.412936], [1437127488.0, 25420000.0, -34.414195912], [1437129216.0, 25440000.0, -34.415394816], [1437130944.0, 25460000.0, -34.416532664], [1437132672.0, 25480000.0, -34.417609408000004], [1437134400.0, 25500000.0, -34.418625000000006], [1437136128.0, 25520000.0, -34.419579392], [1437137856.0, 25540000.0, -34.420472536000005], [1437139584.0, 25560000.0, -34.42130438400001], [1437141312.0, 25580000.0, -34.422074888], [1437143040.0, 25600000.0, -34.422784], [1437144768.0, 25620000.0, -34.42343167199999], [1437146496.0, 25640000.0, -34.424017856000006], [1437148224.0, 25660000.0, -34.424542504], [1437149952.0, 25680000.0, -34.425005568], [1437151680.0, 25700000.0, -34.42540700000001], [1437153408.0, 25720000.0, -34.425746751999995], [1437155136.0, 25740000.0, -34.426024776000006], [1437156864.0, 25760000.0, -34.426241024], [1437158592.0, 25780000.0, -34.426395447999994], [1437160320.0, 25800000.0, -34.426488], [1437162048.0, 25820000.0, -34.426518632000004], [1437163776.0, 25840000.0, -34.426487296], [1437165504.0, 25860000.0, -34.426393944], [1437167232.0, 25880000.0, -34.426238528], [1437168960.0, 25900000.0, -34.426021000000006], [1437170688.0, 25920000.0, -34.425741312], [1437172416.0, 25940000.0, -34.425399416], [1437174144.0, 25960000.0, -34.424995264], [1437175872.0, 25980000.0, -34.42452880799999], [1437177600.0, 26000000.0, -34.42399999999999], [1437179328.0, 26020000.0, -34.423408792000004], [1437181056.0, 26040000.0, -34.42275513599999], [1437182784.0, 26060000.0, -34.422038984], [1437184512.0, 26080000.0, -34.421260288], [1437186240.0, 26100000.0, -34.420418999999995], [1437187968.0, 26120000.0, -34.419515071999996], [1437189696.0, 26140000.0, -34.418548456], [1437191424.0, 26160000.0, -34.41751910399999], [1437193152.0, 26180000.0, -34.416426968], [1437194880.0, 26200000.0, -34.415272], [1437196608.0, 26220000.0, -34.414054152], [1437198336.0, 26240000.0, -34.412773376000004], [1437200064.0, 26260000.0, -34.41142962399999], [1437201792.0, 26280000.0, -34.410022848], [1437203520.0, 26300000.0, -34.408553], [1437205248.0, 26320000.0, -34.407020032], [1437206976.0, 26340000.0, -34.405423896], [1437208704.0, 26360000.0, -34.403764544], [1437210432.0, 26380000.0, -34.402041928], [1437212160.0, 26400000.0, -34.400256], [1437213888.0, 26420000.0, -34.398406711999996], [1437215616.0, 26440000.0, -34.396494016], [1437217344.0, 26460000.0, -34.39451786400001], [1437219072.0, 26480000.0, -34.392478208], [1437220800.0, 26500000.0, -34.390375000000006], [1437222528.0, 26520000.0, -34.38820819200001], [1437224256.0, 26540000.0, -34.385977736], [1437225984.0, 26560000.0, -34.383683583999996], [1437227712.0, 26580000.0, -34.381325688], [1437229440.0, 26600000.0, -34.378904000000006], [1437231168.0, 26620000.0, -34.376418472], [1437232896.0, 26640000.0, -34.373869056], [1437234624.0, 26660000.0, -34.371255704000006], [1437236352.0, 26680000.0, -34.368578368], [1437238080.0, 26700000.0, -34.365837], [1437239808.0, 26720000.0, -34.363031552], [1437241536.0, 26740000.0, -34.360161976], [1437243264.0, 26760000.0, -34.357228223999996], [1437244992.0, 26780000.0, -34.35423024800001], [1437246720.0, 26800000.0, -34.351168], [1437248448.0, 26820000.0, -34.348041432], [1437250176.0, 26840000.0, -34.34485049600001], [1437251904.0, 26860000.0, -34.341595143999996], [1437253632.0, 26880000.0, -34.338275328], [1437255360.0, 26900000.0, -34.334891], [1437257088.0, 26920000.0, -34.331442112], [1437258816.0, 26940000.0, -34.327928615999994], [1437260544.0, 26960000.0, -34.324350464], [1437262272.0, 26980000.0, -34.320707608000006], [1437264000.0, 27000000.0, -34.31699999999999], [1437265728.0, 27020000.0, -34.313227592000004], [1437267456.0, 27040000.0, -34.30939033600001], [1437269184.0, 27060000.0, -34.305488184], [1437270912.0, 27080000.0, -34.301521088], [1437272640.0, 27100000.0, -34.297489], [1437274368.0, 27120000.0, -34.293391872], [1437276096.0, 27140000.0, -34.289229656], [1437277824.0, 27160000.0, -34.285002304], [1437279552.0, 27180000.0, -34.280709768], [1437281280.0, 27200000.0, -34.276352], [1437283008.0, 27220000.0, -34.271928951999996], [1437284736.0, 27240000.0, -34.267440576], [1437286464.0, 27260000.0, -34.26288682399999], [1437288192.0, 27280000.0, -34.258267648], [1437289920.0, 27300000.0, -34.253583000000006], [1437291648.0, 27320000.0, -34.24883283199999], [1437293376.0, 27340000.0, -34.244017096], [1437295104.0, 27360000.0, -34.239135744], [1437296832.0, 27380000.0, -34.234188728], [1437298560.0, 27400000.0, -34.229175999999995], [1437300288.0, 27420000.0, -34.224097512], [1437302016.0, 27440000.0, -34.218953216], [1437303744.0, 27460000.0, -34.213743064], [1437305472.0, 27480000.0, -34.208467008], [1437307200.0, 27500000.0, -34.203125], [1437308928.0, 27520000.0, -34.197716992], [1437310656.0, 27540000.0, -34.192242936], [1437312384.0, 27560000.0, -34.186702784000005], [1437314112.0, 27580000.0, -34.181096487999994], [1437315840.0, 27600000.0, -34.175424], [1437317568.0, 27620000.0, -34.169685272], [1437319296.0, 27640000.0, -34.163880256], [1437321024.0, 27660000.0, -34.158008904], [1437322752.0, 27680000.0, -34.152071168000006], [1437324480.0, 27700000.0, -34.146067], [1437326208.0, 27720000.0, -34.139996352000004], [1437327936.0, 27740000.0, -34.133859176], [1437329664.0, 27760000.0, -34.127655424], [1437331392.0, 27780000.0, -34.121385048], [1437333120.0, 27800000.0, -34.115048], [1437334848.0, 27820000.0, -34.108644232], [1437336576.0, 27840000.0, -34.102173695999994], [1437338304.0, 27860000.0, -34.095636344], [1437340032.0, 27880000.0, -34.089032128], [1437341760.0, 27900000.0, -34.08236099999999], [1437343488.0, 27920000.0, -34.075622912], [1437345216.0, 27940000.0, -34.068817816], [1437346944.0, 27960000.0, -34.061945664], [1437348672.0, 27980000.0, -34.055006408], [1437350400.0, 28000000.0, -34.048], [1437352128.0, 28020000.0, -34.040926392], [1437353856.0, 28040000.0, -34.033785536], [1437355584.0, 28060000.0, -34.02657738400001], [1437357312.0, 28080000.0, -34.019301888], [1437359040.0, 28100000.0, -34.011959000000004], [1437360768.0, 28120000.0, -34.004548672], [1437362496.0, 28140000.0, -33.997070856], [1437364224.0, 28160000.0, -33.989525504], [1437365952.0, 28180000.0, -33.981912568], [1437367680.0, 28200000.0, -33.974232], [1437369408.0, 28220000.0, -33.966483751999995], [1437371136.0, 28240000.0, -33.958667776], [1437372864.0, 28260000.0, -33.950784024], [1437374592.0, 28280000.0, -33.942832448000004], [1437376320.0, 28300000.0, -33.934813], [1437378048.0, 28320000.0, -33.926725632], [1437379776.0, 28340000.0, -33.918570296], [1437381504.0, 28360000.0, -33.910346944000004], [1437383232.0, 28380000.0, -33.902055528000005], [1437384960.0, 28400000.0, -33.893696], [1437386688.0, 28420000.0, -33.885268312], [1437388416.0, 28440000.0, -33.876772415999994], [1437390144.0, 28460000.0, -33.868208264], [1437391872.0, 28480000.0, -33.859575808], [1437393600.0, 28500000.0, -33.850875], [1437395328.0, 28520000.0, -33.842105792], [1437397056.0, 28540000.0, -33.833268135999994], [1437398784.0, 28560000.0, -33.82436198400001], [1437400512.0, 28580000.0, -33.815387288], [1437402240.0, 28600000.0, -33.806343999999996], [1437403968.0, 28620000.0, -33.797232072], [1437405696.0, 28640000.0, -33.788051456000005], [1437407424.0, 28660000.0, -33.77880210399999], [1437409152.0, 28680000.0, -33.769483968], [1437410880.0, 28700000.0, -33.760097], [1437412608.0, 28720000.0, -33.750641152], [1437414336.0, 28740000.0, -33.741116376], [1437416064.0, 28760000.0, -33.73152262399999], [1437417792.0, 28780000.0, -33.721859847999994], [1437419520.0, 28800000.0, -33.71212799999999], [1437421248.0, 28820000.0, -33.702327032], [1437422976.0, 28840000.0, -33.692456895999996], [1437424704.0, 28860000.0, -33.68251754399999], [1437426432.0, 28880000.0, -33.672508928], [1437428160.0, 28900000.0, -33.662431], [1437429888.0, 28920000.0, -33.652283712], [1437431616.0, 28940000.0, -33.642067016], [1437433344.0, 28960000.0, -33.63178086400001], [1437435072.0, 28980000.0, -33.621425208], [1437436800.0, 29000000.0, -33.611000000000004], [1437438528.0, 29020000.0, -33.600505192], [1437440256.0, 29040000.0, -33.589940736], [1437441984.0, 29060000.0, -33.579306584], [1437443712.0, 29080000.0, -33.568602688], [1437445440.0, 29100000.0, -33.557829], [1437447168.0, 29120000.0, -33.546985471999996], [1437448896.0, 29140000.0, -33.536072055999995], [1437450624.0, 29160000.0, -33.525088704000005], [1437452352.0, 29180000.0, -33.514035367999995], [1437454080.0, 29200000.0, -33.502912], [1437455808.0, 29220000.0, -33.491718551999995], [1437457536.0, 29240000.0, -33.480454976], [1437459264.0, 29260000.0, -33.469121224], [1437460992.0, 29280000.0, -33.45771724800001], [1437462720.0, 29300000.0, -33.446242999999996], [1437464448.0, 29320000.0, -33.434698432000005], [1437466176.0, 29340000.0, -33.423083496000004], [1437467904.0, 29360000.0, -33.411398144], [1437469632.0, 29380000.0, -33.399642328], [1437471360.0, 29400000.0, -33.387816], [1437473088.0, 29420000.0, -33.375919112000005], [1437474816.0, 29440000.0, -33.363951615999994], [1437476544.0, 29460000.0, -33.351913464], [1437478272.0, 29480000.0, -33.339804608], [1437480000.0, 29500000.0, -33.327625], [1437481728.0, 29520000.0, -33.315374592], [1437483456.0, 29540000.0, -33.303053336000005], [1437485184.0, 29560000.0, -33.290661184], [1437486912.0, 29580000.0, -33.278198087999996], [1437488640.0, 29600000.0, -33.265664], [1437490368.0, 29620000.0, -33.253058872], [1437492096.0, 29640000.0, -33.240382655999994], [1437493824.0, 29660000.0, -33.227635304], [1437495552.0, 29680000.0, -33.214816768000006], [1437497280.0, 29700000.0, -33.201927], [1437499008.0, 29720000.0, -33.188965952], [1437500736.0, 29740000.0, -33.175933576], [1437502464.0, 29760000.0, -33.162829824], [1437504192.0, 29780000.0, -33.149654647999995], [1437505920.0, 29800000.0, -33.136408], [1437507648.0, 29820000.0, -33.12308983199999], [1437509376.0, 29840000.0, -33.109700096], [1437511104.0, 29860000.0, -33.096238744000004], [1437512832.0, 29880000.0, -33.082705728], [1437514560.0, 29900000.0, -33.069101], [1437516288.0, 29920000.0, -33.055424512], [1437518016.0, 29940000.0, -33.041676216], [1437519744.0, 29960000.0, -33.027856064000005], [1437521472.0, 29980000.0, -33.013964008], [1437523200.0, 30000000.0, -33.0], [1437524928.0, 30020000.0, -32.985963991999995], [1437526656.0, 30040000.0, -32.971855936], [1437528384.0, 30060000.0, -32.957675784], [1437530112.0, 30080000.0, -32.94342348799999], [1437531840.0, 30100000.0, -32.929099], [1437533568.0, 30120000.0, -32.914702272], [1437535296.0, 30140000.0, -32.900233256], [1437537024.0, 30160000.0, -32.885691904], [1437538752.0, 30180000.0, -32.871078168000004], [1437540480.0, 30200000.0, -32.856392], [1437542208.0, 30220000.0, -32.841633352], [1437543936.0, 30240000.0, -32.826802176], [1437545664.0, 30260000.0, -32.811898424], [1437547392.0, 30280000.0, -32.796922048], [1437549120.0, 30300000.0, -32.781873], [1437550848.0, 30320000.0, -32.766751232000004], [1437552576.0, 30340000.0, -32.751556695999994], [1437554304.0, 30360000.0, -32.736289344], [1437556032.0, 30380000.0, -32.720949128], [1437557760.0, 30400000.0, -32.705535999999995], [1437559488.0, 30420000.0, -32.690049912000006], [1437561216.0, 30440000.0, -32.674490816], [1437562944.0, 30460000.0, -32.658858664], [1437564672.0, 30480000.0, -32.643153407999996], [1437566400.0, 30500000.0, -32.62737500000001], [1437568128.0, 30520000.0, -32.611523391999995], [1437569856.0, 30540000.0, -32.595598536000004], [1437571584.0, 30560000.0, -32.579600384], [1437573312.0, 30580000.0, -32.56352888800001], [1437575040.0, 30600000.0, -32.547384], [1437576768.0, 30620000.0, -32.531165672], [1437578496.0, 30640000.0, -32.514873855999994], [1437580224.0, 30660000.0, -32.498508504], [1437581952.0, 30680000.0, -32.482069568], [1437583680.0, 30700000.0, -32.465557000000004], [1437585408.0, 30720000.0, -32.448970751999994], [1437587136.0, 30740000.0, -32.432310776], [1437588864.0, 30760000.0, -32.415577024], [1437590592.0, 30780000.0, -32.398769447999996], [1437592320.0, 30800000.0, -32.381888000000004], [1437594048.0, 30820000.0, -32.364932632000006], [1437595776.0, 30840000.0, -32.347903296], [1437597504.0, 30860000.0, -32.330799944], [1437599232.0, 30880000.0, -32.313622527999996], [1437600960.0, 30900000.0, -32.296371], [1437602688.0, 30920000.0, -32.27904531200001], [1437604416.0, 30940000.0, -32.261645416], [1437606144.0, 30960000.0, -32.244171264], [1437607872.0, 30980000.0, -32.226622808], [1437609600.0, 31000000.0, -32.208999999999996], [1437611328.0, 31020000.0, -32.191302792], [1437613056.0, 31040000.0, -32.173531135999994], [1437614784.0, 31060000.0, -32.155684984000004], [1437616512.0, 31080000.0, -32.137764288], [1437618240.0, 31100000.0, -32.119769000000005], [1437619968.0, 31120000.0, -32.101699072], [1437621696.0, 31140000.0, -32.083554456], [1437623424.0, 31160000.0, -32.065335104], [1437625152.0, 31180000.0, -32.047040968000005], [1437626880.0, 31200000.0, -32.028672], [1437628608.0, 31220000.0, -32.010228151999996], [1437630336.0, 31240000.0, -31.991709376], [1437632064.0, 31260000.0, -31.973115624000002], [1437633792.0, 31280000.0, -31.954446847999996], [1437635520.0, 31300000.0, -31.935702999999997], [1437637248.0, 31320000.0, -31.916884032], [1437638976.0, 31340000.0, -31.897989896], [1437640704.0, 31360000.0, -31.879020543999992], [1437642432.0, 31380000.0, -31.859975928000004], [1437644160.0, 31400000.0, -31.840856000000002], [1437645888.0, 31420000.0, -31.821660712], [1437647616.0, 31440000.0, -31.802390016], [1437649344.0, 31460000.0, -31.783043864000003], [1437651072.0, 31480000.0, -31.763622207999997], [1437652800.0, 31500000.0, -31.744125000000004], [1437654528.0, 31520000.0, -31.724552192], [1437656256.0, 31540000.0, -31.704903736], [1437657984.0, 31560000.0, -31.685179583999997], [1437659712.0, 31580000.0, -31.665379687999998], [1437661440.0, 31600000.0, -31.645503999999995], [1437663168.0, 31620000.0, -31.625552471999995], [1437664896.0, 31640000.0, -31.605525055999998], [1437666624.0, 31660000.0, -31.585421704000005], [1437668352.0, 31680000.0, -31.565242367999996], [1437670080.0, 31700000.0, -31.544987], [1437671808.0, 31720000.0, -31.524655552], [1437673536.0, 31740000.0, -31.504247976], [1437675264.0, 31760000.0, -31.483764223999998], [1437676992.0, 31780000.0, -31.463204248000004], [1437678720.0, 31800000.0, -31.442567999999994], [1437680448.0, 31820000.0, -31.421855432], [1437682176.0, 31840000.0, -31.401066496], [1437683904.0, 31860000.0, -31.380201143999997], [1437685632.0, 31880000.0, -31.359259328], [1437687360.0, 31900000.0, -31.338240999999996], [1437689088.0, 31920000.0, -31.317146112000003], [1437690816.0, 31940000.0, -31.295974616000002], [1437692544.0, 31960000.0, -31.274726463999997], [1437694272.0, 31980000.0, -31.253401607999997], [1437696000.0, 32000000.0, -31.231999999999992], [1437697728.0, 32020000.0, -31.210521591999992], [1437699456.0, 32040000.0, -31.188966335999993], [1437701184.0, 32060000.0, -31.167334184000005], [1437702912.0, 32080000.0, -31.14562508799999], [1437704640.0, 32100000.0, -31.123839000000004], [1437706368.0, 32120000.0, -31.101975872000004], [1437708096.0, 32140000.0, -31.080035656], [1437709824.0, 32160000.0, -31.058018304], [1437711552.0, 32180000.0, -31.035923768000004], [1437713280.0, 32200000.0, -31.013751999999997], [1437715008.0, 32220000.0, -30.991502951999998], [1437716736.0, 32240000.0, -30.969176575999995], [1437718464.0, 32260000.0, -30.946772823999993], [1437720192.0, 32280000.0, -30.924291647999993], [1437721920.0, 32300000.0, -30.901732999999993], [1437723648.0, 32320000.0, -30.879096831999995], [1437725376.0, 32340000.0, -30.85638309600001], [1437727104.0, 32360000.0, -30.83359174399999], [1437728832.0, 32380000.0, -30.81072272800001], [1437730560.0, 32400000.0, -30.787776], [1437732288.0, 32420000.0, -30.764751512000004], [1437734016.0, 32440000.0, -30.741649216], [1437735744.0, 32460000.0, -30.718469063999997], [1437737472.0, 32480000.0, -30.695211008], [1437739200.0, 32500000.0, -30.671875], [1437740928.0, 32520000.0, -30.648460991999997], [1437742656.0, 32540000.0, -30.624968935999995], [1437744384.0, 32560000.0, -30.601398783999997], [1437746112.0, 32580000.0, -30.577750488], [1437747840.0, 32600000.0, -30.55402399999999], [1437749568.0, 32620000.0, -30.530219271999997], [1437751296.0, 32640000.0, -30.50633625600001], [1437753024.0, 32660000.0, -30.482374903999997], [1437754752.0, 32680000.0, -30.458335168000005], [1437756480.0, 32700000.0, -30.434217000000004], [1437758208.0, 32720000.0, -30.410020352000004], [1437759936.0, 32740000.0, -30.385745176000007], [1437761664.0, 32760000.0, -30.361391424000004], [1437763392.0, 32780000.0, -30.336959048000004], [1437765120.0, 32800000.0, -30.312448000000003], [1437766848.0, 32820000.0, -30.287858232000005], [1437768576.0, 32840000.0, -30.263189695999998], [1437770304.0, 32860000.0, -30.238442344], [1437772032.0, 32880000.0, -30.213616127999998], [1437773760.0, 32900000.0, -30.188710999999998], [1437775488.0, 32920000.0, -30.16372691200001], [1437777216.0, 32940000.0, -30.138663815999998], [1437778944.0, 32960000.0, -30.11352166400001], [1437780672.0, 32980000.0, -30.08830040800001], [1437782400.0, 33000000.0, -30.063000000000002], [1437784128.0, 33020000.0, -30.037620392], [1437785856.0, 33040000.0, -30.012161536000008], [1437787584.0, 33060000.0, -29.986623384000005], [1437789312.0, 33080000.0, -29.961005888000003], [1437791040.0, 33100000.0, -29.935308999999997], [1437792768.0, 33120000.0, -29.909532671999997], [1437794496.0, 33140000.0, -29.883676856], [1437796224.0, 33160000.0, -29.857741504000003], [1437797952.0, 33180000.0, -29.831726568], [1437799680.0, 33200000.0, -29.805631999999996], [1437801408.0, 33220000.0, -29.779457752], [1437803136.0, 33240000.0, -29.753203775999992], [1437804864.0, 33260000.0, -29.726870023999993], [1437806592.0, 33280000.0, -29.700456448000004], [1437808320.0, 33300000.0, -29.673962999999993], [1437810048.0, 33320000.0, -29.647389632000007], [1437811776.0, 33340000.0, -29.620736296000004], [1437813504.0, 33360000.0, -29.594002944000003], [1437815232.0, 33380000.0, -29.567189528000007], [1437816960.0, 33400000.0, -29.540295999999998], [1437818688.0, 33420000.0, -29.513322312], [1437820416.0, 33440000.0, -29.486268416], [1437822144.0, 33460000.0, -29.459134264], [1437823872.0, 33480000.0, -29.431919807999996], [1437825600.0, 33500000.0, -29.404624999999996], [1437827328.0, 33520000.0, -29.377249791999994], [1437829056.0, 33540000.0, -29.349794135999993], [1437830784.0, 33560000.0, -29.32225798400001], [1437832512.0, 33580000.0, -29.294641287999994], [1437834240.0, 33600000.0, -29.26694400000001], [1437835968.0, 33620000.0, -29.23916607200001], [1437837696.0, 33640000.0, -29.211307456000007], [1437839424.0, 33660000.0, -29.183368104000003], [1437841152.0, 33680000.0, -29.155347968000008], [1437842880.0, 33700000.0, -29.127246999999997], [1437844608.0, 33720000.0, -29.099065152], [1437846336.0, 33740000.0, -29.070802376000003], [1437848064.0, 33760000.0, -29.042458624], [1437849792.0, 33780000.0, -29.014033847999997], [1437851520.0, 33800000.0, -28.985528000000002], [1437853248.0, 33820000.0, -28.956941031999996], [1437854976.0, 33840000.0, -28.928272895999996], [1437856704.0, 33860000.0, -28.899523543999997], [1437858432.0, 33880000.0, -28.870692927999997], [1437860160.0, 33900000.0, -28.84178099999999], [1437861888.0, 33920000.0, -28.81278771200001], [1437863616.0, 33940000.0, -28.783713015999993], [1437865344.0, 33960000.0, -28.75455686400001], [1437867072.0, 33980000.0, -28.725319208000002], [1437868800.0, 34000000.0, -28.696000000000005], [1437870528.0, 34020000.0, -28.666599192], [1437872256.0, 34040000.0, -28.637116736000003], [1437873984.0, 34060000.0, -28.607552583999997], [1437875712.0, 34080000.0, -28.577906688], [1437877440.0, 34100000.0, -28.548178999999998], [1437879168.0, 34120000.0, -28.518369471999996], [1437880896.0, 34140000.0, -28.48847805599999], [1437882624.0, 34160000.0, -28.458504704], [1437884352.0, 34180000.0, -28.428449367999995], [1437886080.0, 34200000.0, -28.39831200000001], [1437887808.0, 34220000.0, -28.368092551999993], [1437889536.0, 34240000.0, -28.337790976000008], [1437891264.0, 34260000.0, -28.307407224000002], [1437892992.0, 34280000.0, -28.276941248], [1437894720.0, 34300000.0, -28.246393000000005], [1437896448.0, 34320000.0, -28.215762432000005], [1437898176.0, 34340000.0, -28.185049495999998], [1437899904.0, 34360000.0, -28.154254144], [1437901632.0, 34380000.0, -28.123376328], [1437903360.0, 34400000.0, -28.092416], [1437905088.0, 34420000.0, -28.061373112], [1437906816.0, 34440000.0, -28.030247615999997], [1437908544.0, 34460000.0, -27.999039464], [1437910272.0, 34480000.0, -27.967748608], [1437912000.0, 34500000.0, -27.93637499999999], [1437913728.0, 34520000.0, -27.904918591999994], [1437915456.0, 34540000.0, -27.873379335999992], [1437917184.0, 34560000.0, -27.84175718400001], [1437918912.0, 34580000.0, -27.810052087999992], [1437920640.0, 34600000.0, -27.778264], [1437922368.0, 34620000.0, -27.746392872], [1437924096.0, 34640000.0, -27.714438656000006], [1437925824.0, 34660000.0, -27.682401303999995], [1437927552.0, 34680000.0, -27.650280768000002], [1437929280.0, 34700000.0, -27.618077], [1437931008.0, 34720000.0, -27.585789952], [1437932736.0, 34740000.0, -27.553419575999996], [1437934464.0, 34760000.0, -27.520965824], [1437936192.0, 34780000.0, -27.488428647999996], [1437937920.0, 34800000.0, -27.45580799999999], [1437939648.0, 34820000.0, -27.423103831999995], [1437941376.0, 34840000.0, -27.390316096000006], [1437943104.0, 34860000.0, -27.35744474399999], [1437944832.0, 34880000.0, -27.32448972800001], [1437946560.0, 34900000.0, -27.291451000000002], [1437948288.0, 34920000.0, -27.258328512000006], [1437950016.0, 34940000.0, -27.225122216000003], [1437951744.0, 34960000.0, -27.191832064000003], [1437953472.0, 34980000.0, -27.158458008000004], [1437955200.0, 35000000.0, -27.125], [1437956928.0, 35020000.0, -27.091457992000002], [1437958656.0, 35040000.0, -27.057831936], [1437960384.0, 35060000.0, -27.024121784000002], [1437962112.0, 35080000.0, -26.990327488], [1437963840.0, 35100000.0, -26.956449], [1437965568.0, 35120000.0, -26.922486271999993], [1437967296.0, 35140000.0, -26.888439256000012], [1437969024.0, 35160000.0, -26.854307903999995], [1437970752.0, 35180000.0, -26.82009216800001], [1437972480.0, 35200000.0, -26.785792000000008], [1437974208.0, 35220000.0, -26.751407352000008], [1437975936.0, 35240000.0, -26.716938176000006], [1437977664.0, 35260000.0, -26.682384424000006], [1437979392.0, 35280000.0, -26.647746048000002], [1437981120.0, 35300000.0, -26.613023], [1437982848.0, 35320000.0, -26.578215232000005], [1437984576.0, 35340000.0, -26.543322695999997], [1437986304.0, 35360000.0, -26.508345344], [1437988032.0, 35380000.0, -26.473283128], [1437989760.0, 35400000.0, -26.438135999999993], [1437991488.0, 35420000.0, -26.402903912000014], [1437993216.0, 35440000.0, -26.367586815999992], [1437994944.0, 35460000.0, -26.33218466400001], [1437996672.0, 35480000.0, -26.296697408000007], [1437998400.0, 35500000.0, -26.261125000000007], [1438000128.0, 35520000.0, -26.225467392000006], [1438001856.0, 35540000.0, -26.189724536000007], [1438003584.0, 35560000.0, -26.153896384], [1438005312.0, 35580000.0, -26.117982888000007], [1438007040.0, 35600000.0, -26.081984], [1438008768.0, 35620000.0, -26.045899672000004], [1438010496.0, 35640000.0, -26.009729856], [1438012224.0, 35660000.0, -25.973474503999995], [1438013952.0, 35680000.0, -25.937133567999993], [1438015680.0, 35700000.0, -25.900706999999997], [1438017408.0, 35720000.0, -25.864194751999996], [1438019136.0, 35740000.0, -25.827596775999993], [1438020864.0, 35760000.0, -25.79091302399999], [1438022592.0, 35780000.0, -25.754143448000008], [1438024320.0, 35800000.0, -25.717287999999996], [1438026048.0, 35820000.0, -25.68034663200001], [1438027776.0, 35840000.0, -25.643319296], [1438029504.0, 35860000.0, -25.606205944000003], [1438031232.0, 35880000.0, -25.569006528000003], [1438032960.0, 35900000.0, -25.531720999999997], [1438034688.0, 35920000.0, -25.494349312000004], [1438036416.0, 35940000.0, -25.456891416000005], [1438038144.0, 35960000.0, -25.419347263999995], [1438039872.0, 35980000.0, -25.381716808], [1438041600.0, 36000000.0, -25.343999999999994], [1438043328.0, 36020000.0, -25.306196791999994], [1438045056.0, 36040000.0, -25.268307135999997], [1438046784.0, 36060000.0, -25.230330984000005], [1438048512.0, 36080000.0, -25.192268287999994], [1438050240.0, 36100000.0, -25.15411900000001], [1438051968.0, 36120000.0, -25.115883072000003], [1438053696.0, 36140000.0, -25.077560456000008], [1438055424.0, 36160000.0, -25.039151104000005], [1438057152.0, 36180000.0, -25.000654968], [1438058880.0, 36200000.0, -24.962072000000006], [1438060608.0, 36220000.0, -24.923402152], [1438062336.0, 36240000.0, -24.884645376], [1438064064.0, 36260000.0, -24.845801624000003], [1438065792.0, 36280000.0, -24.806870847999996], [1438067520.0, 36300000.0, -24.767852999999995], [1438069248.0, 36320000.0, -24.72874803199999], [1438070976.0, 36340000.0, -24.689555896], [1438072704.0, 36360000.0, -24.650276543999993], [1438074432.0, 36380000.0, -24.610909927999998], [1438076160.0, 36400000.0, -24.57145599999999], [1438077888.0, 36420000.0, -24.53191471200001], [1438079616.0, 36440000.0, -24.492286015999994], [1438081344.0, 36460000.0, -24.452569864000004], [1438083072.0, 36480000.0, -24.412766208], [1438084800.0, 36500000.0, -24.372875], [1438086528.0, 36520000.0, -24.332896192], [1438088256.0, 36540000.0, -24.292829736], [1438089984.0, 36560000.0, -24.252675584000002], [1438091712.0, 36580000.0, -24.212433688000004], [1438093440.0, 36600000.0, -24.172103999999997], [1438095168.0, 36620000.0, -24.131686472], [1438096896.0, 36640000.0, -24.091181055999996], [1438098624.0, 36660000.0, -24.050587703999994], [1438100352.0, 36680000.0, -24.00990636799999], [1438102080.0, 36700000.0, -23.96913700000001], [1438103808.0, 36720000.0, -23.928279551999992], [1438105536.0, 36740000.0, -23.887333976000008], [1438107264.0, 36760000.0, -23.846300224000004], [1438108992.0, 36780000.0, -23.805178248000004], [1438110720.0, 36800000.0, -23.763968000000006], [1438112448.0, 36820000.0, -23.722669432000004], [1438114176.0, 36840000.0, -23.681282496], [1438115904.0, 36860000.0, -23.639807144000002], [1438117632.0, 36880000.0, -23.598243328000002], [1438119360.0, 36900000.0, -23.556590999999997], [1438121088.0, 36920000.0, -23.514850111999998], [1438122816.0, 36940000.0, -23.473020616], [1438124544.0, 36960000.0, -23.43110246399999], [1438126272.0, 36980000.0, -23.389095607999998], [1438128000.0, 37000000.0, -23.346999999999994], [1438129728.0, 37020000.0, -23.304815591999997], [1438131456.0, 37040000.0, -23.26254233599999], [1438133184.0, 37060000.0, -23.220180184], [1438134912.0, 37080000.0, -23.177729087999985], [1438136640.0, 37100000.0, -23.135189000000004], [1438138368.0, 37120000.0, -23.092559872000002], [1438140096.0, 37140000.0, -23.049841655999998], [1438141824.0, 37160000.0, -23.007034304], [1438143552.0, 37180000.0, -22.964137768], [1438145280.0, 37200000.0, -22.921152], [1438147008.0, 37220000.0, -22.878076951999994], [1438148736.0, 37240000.0, -22.834912575999994], [1438150464.0, 37260000.0, -22.791658824000002], [1438152192.0, 37280000.0, -22.748315647999995], [1438153920.0, 37300000.0, -22.704882999999995], [1438155648.0, 37320000.0, -22.661360831999993], [1438157376.0, 37340000.0, -22.61774909600001], [1438159104.0, 37360000.0, -22.57404774399999], [1438160832.0, 37380000.0, -22.530256728000005], [1438162560.0, 37400000.0, -22.486376], [1438164288.0, 37420000.0, -22.442405512000008], [1438166016.0, 37440000.0, -22.398345216000003], [1438167744.0, 37460000.0, -22.354195064000002], [1438169472.0, 37480000.0, -22.309955007999996], [1438171200.0, 37500000.0, -22.265625], [1438172928.0, 37520000.0, -22.221204992000004], [1438174656.0, 37540000.0, -22.176694935999997], [1438176384.0, 37560000.0, -22.132094784000003], [1438178112.0, 37580000.0, -22.087404487999997], [1438179840.0, 37600000.0, -22.042623999999996], [1438181568.0, 37620000.0, -21.99775327199999], [1438183296.0, 37640000.0, -21.952792256000016], [1438185024.0, 37660000.0, -21.907740903999994], [1438186752.0, 37680000.0, -21.86259916800001], [1438188480.0, 37700000.0, -21.817367000000004], [1438190208.0, 37720000.0, -21.772044352], [1438191936.0, 37740000.0, -21.726631176000005], [1438193664.0, 37760000.0, -21.681127424000003], [1438195392.0, 37780000.0, -21.635533048], [1438197120.0, 37800000.0, -21.589847999999996], [1438198848.0, 37820000.0, -21.544072232000005], [1438200576.0, 37840000.0, -21.498205696], [1438202304.0, 37860000.0, -21.452248343999997], [1438204032.0, 37880000.0, -21.406200128000002], [1438205760.0, 37900000.0, -21.360060999999995], [1438207488.0, 37920000.0, -21.313830912000007], [1438209216.0, 37940000.0, -21.267509815999993], [1438210944.0, 37960000.0, -21.221097664000013], [1438212672.0, 37980000.0, -21.174594408000004], [1438214400.0, 38000000.0, -21.128000000000007], [1438216128.0, 38020000.0, -21.081314392000003], [1438217856.0, 38040000.0, -21.03453753600001], [1438219584.0, 38060000.0, -20.987669384000007], [1438221312.0, 38080000.0, -20.940709888000008], [1438223040.0, 38100000.0, -20.893659], [1438224768.0, 38120000.0, -20.846516672], [1438226496.0, 38140000.0, -20.799282855999998], [1438228224.0, 38160000.0, -20.751957504000003], [1438229952.0, 38180000.0, -20.70454056799999], [1438231680.0, 38200000.0, -20.657031999999994], [1438233408.0, 38220000.0, -20.609431751999992], [1438235136.0, 38240000.0, -20.561739775999996], [1438236864.0, 38260000.0, -20.513956023999988], [1438238592.0, 38280000.0, -20.466080448000007], [1438240320.0, 38300000.0, -20.41811299999999], [1438242048.0, 38320000.0, -20.37005363200001], [1438243776.0, 38340000.0, -20.321902296000005], [1438245504.0, 38360000.0, -20.273658944000005], [1438247232.0, 38380000.0, -20.225323528000004], [1438248960.0, 38400000.0, -20.176896], [1438250688.0, 38420000.0, -20.128376312], [1438252416.0, 38440000.0, -20.079764416000003], [1438254144.0, 38460000.0, -20.031060263999997], [1438255872.0, 38480000.0, -19.982263808], [1438257600.0, 38500000.0, -19.93337499999999], [1438259328.0, 38520000.0, -19.884393792000004], [1438261056.0, 38540000.0, -19.835320135999993], [1438262784.0, 38560000.0, -19.78615398400001], [1438264512.0, 38580000.0, -19.736895287999992], [1438266240.0, 38600000.0, -19.68754400000001], [1438267968.0, 38620000.0, -19.638100072000007], [1438269696.0, 38640000.0, -19.588563456000003], [1438271424.0, 38660000.0, -19.538934104000006], [1438273152.0, 38680000.0, -19.489211968000006], [1438274880.0, 38700000.0, -19.439397], [1438276608.0, 38720000.0, -19.389489152000003], [1438278336.0, 38740000.0, -19.339488376], [1438280064.0, 38760000.0, -19.289394624000003], [1438281792.0, 38780000.0, -19.239207847999992], [1438283520.0, 38800000.0, -19.188927999999997], [1438285248.0, 38820000.0, -19.138555032], [1438286976.0, 38840000.0, -19.088088895999995], [1438288704.0, 38860000.0, -19.037529543999995], [1438290432.0, 38880000.0, -18.986876927999994], [1438292160.0, 38900000.0, -18.93613099999999], [1438293888.0, 38920000.0, -18.88529171200001], [1438295616.0, 38940000.0, -18.834359015999986], [1438297344.0, 38960000.0, -18.783332864000002], [1438299072.0, 38980000.0, -18.732213208000005], [1438300800.0, 39000000.0, -18.681000000000004], [1438302528.0, 39020000.0, -18.629693192000005], [1438304256.0, 39040000.0, -18.578292736], [1438305984.0, 39060000.0, -18.526798583999998], [1438307712.0, 39080000.0, -18.475210687999997], [1438309440.0, 39100000.0, -18.423528999999995], [1438311168.0, 39120000.0, -18.371753471999995], [1438312896.0, 39140000.0, -18.319884055999992], [1438314624.0, 39160000.0, -18.267920703999998], [1438316352.0, 39180000.0, -18.215863367999994], [1438318080.0, 39200000.0, -18.16371200000001], [1438319808.0, 39220000.0, -18.11146655199999], [1438321536.0, 39240000.0, -18.059126976], [1438323264.0, 39260000.0, -18.006693224000003], [1438324992.0, 39280000.0, -17.954165248000002], [1438326720.0, 39300000.0, -17.901543000000004], [1438328448.0, 39320000.0, -17.848826432000003], [1438330176.0, 39340000.0, -17.796015496000003], [1438331904.0, 39360000.0, -17.743110144], [1438333632.0, 39380000.0, -17.690110327999996], [1438335360.0, 39400000.0, -17.637015999999996], [1438337088.0, 39420000.0, -17.583827111999994], [1438338816.0, 39440000.0, -17.530543616000003], [1438340544.0, 39460000.0, -17.477165463999988], [1438342272.0, 39480000.0, -17.423692607999996], [1438344000.0, 39500000.0, -17.370124999999994], [1438345728.0, 39520000.0, -17.316462591999993], [1438347456.0, 39540000.0, -17.262705335999996], [1438349184.0, 39560000.0, -17.208853184000006], [1438350912.0, 39580000.0, -17.15490608799999], [1438352640.0, 39600000.0, -17.10086400000001], [1438354368.0, 39620000.0, -17.046726872], [1438356096.0, 39640000.0, -16.992494656000005], [1438357824.0, 39660000.0, -16.938167303999997], [1438359552.0, 39680000.0, -16.883744768000007], [1438361280.0, 39700000.0, -16.829226999999996], [1438363008.0, 39720000.0, -16.774613952000003], [1438364736.0, 39740000.0, -16.719905575999995], [1438366464.0, 39760000.0, -16.665101823999997], [1438368192.0, 39780000.0, -16.61020264799999], [1438369920.0, 39800000.0, -16.555207999999993], [1438371648.0, 39820000.0, -16.500117831999987], [1438373376.0, 39840000.0, -16.44493209600001], [1438375104.0, 39860000.0, -16.389650743999987], [1438376832.0, 39880000.0, -16.334273728000007], [1438378560.0, 39900000.0, -16.278801], [1438380288.0, 39920000.0, -16.223232512000003], [1438382016.0, 39940000.0, -16.167568216], [1438383744.0, 39960000.0, -16.111808064], [1438385472.0, 39980000.0, -16.055952008], [1438387200.0, 40000000.0, -16.0], [1438388928.0, 40020000.0, -15.943951991999995], [1438390656.0, 40040000.0, -15.887807936000016], [1438392384.0, 40060000.0, -15.831567783999986], [1438394112.0, 40080000.0, -15.775231488000003], [1438395840.0, 40100000.0, -15.718799000000004], [1438397568.0, 40120000.0, -15.662270272000015], [1438399296.0, 40140000.0, -15.605645255999988], [1438401024.0, 40160000.0, -15.548923903999992], [1438402752.0, 40180000.0, -15.492106168000007], [1438404480.0, 40200000.0, -15.435192000000015], [1438406208.0, 40220000.0, -15.378181351999984], [1438407936.0, 40240000.0, -15.32107417600001], [1438409664.0, 40260000.0, -15.263870424000018], [1438411392.0, 40280000.0, -15.206570048000017], [1438413120.0, 40300000.0, -15.14917299999999], [1438414848.0, 40320000.0, -15.09167923199999], [1438416576.0, 40340000.0, -15.034088695999998], [1438418304.0, 40360000.0, -14.976401344000024], [1438420032.0, 40380000.0, -14.918617127999994], [1438421760.0, 40400000.0, -14.860736000000003], [1438423488.0, 40420000.0, -14.802757912000004], [1438425216.0, 40440000.0, -14.744682816000008], [1438426944.0, 40460000.0, -14.686510663999982], [1438428672.0, 40480000.0, -14.628241408000008], [1438430400.0, 40500000.0, -14.56987500000001], [1438432128.0, 40520000.0, -14.511411392], [1438433856.0, 40540000.0, -14.452850536], [1438435584.0, 40560000.0, -14.394192383999993], [1438437312.0, 40580000.0, -14.335436888000004], [1438439040.0, 40600000.0, -14.276584000000014], [1438440768.0, 40620000.0, -14.217633671999991], [1438442496.0, 40640000.0, -14.158585856000002], [1438444224.0, 40660000.0, -14.099440504], [1438445952.0, 40680000.0, -14.04019756800001], [1438447680.0, 40700000.0, -13.980857], [1438449408.0, 40720000.0, -13.921418751999994], [1438451136.0, 40740000.0, -13.861882775999987], [1438452864.0, 40760000.0, -13.802249024000005], [1438454592.0, 40780000.0, -13.742517447999987], [1438456320.0, 40800000.0, -13.682687999999999], [1438458048.0, 40820000.0, -13.62276063200001], [1438459776.0, 40840000.0, -13.562735296000014], [1438461504.0, 40860000.0, -13.50261194399998], [1438463232.0, 40880000.0, -13.442390528000004], [1438464960.0, 40900000.0, -13.38207100000001], [1438466688.0, 40920000.0, -13.32165331200001], [1438468416.0, 40940000.0, -13.261137415999997], [1438470144.0, 40960000.0, -13.200523263999997], [1438471872.0, 40980000.0, -13.139810808000007], [1438473600.0, 41000000.0, -13.079000000000008], [1438475328.0, 41020000.0, -13.018090791999981], [1438477056.0, 41040000.0, -12.957083135999994], [1438478784.0, 41060000.0, -12.895976984000015], [1438480512.0, 41080000.0, -12.83477228800001], [1438482240.0, 41100000.0, -12.773468999999992], [1438483968.0, 41120000.0, -12.71206707200001], [1438485696.0, 41140000.0, -12.650566456000007], [1438487424.0, 41160000.0, -12.588967104000005], [1438489152.0, 41180000.0, -12.527268968000001], [1438490880.0, 41200000.0, -12.465472000000005], [1438492608.0, 41220000.0, -12.403576152000014], [1438494336.0, 41240000.0, -12.341581376000008], [1438496064.0, 41260000.0, -12.279487623999998], [1438497792.0, 41280000.0, -12.217294848000009], [1438499520.0, 41300000.0, -12.155003000000008], [1438501248.0, 41320000.0, -12.092612032000005], [1438502976.0, 41340000.0, -12.030121895999983], [1438504704.0, 41360000.0, -11.967532543999994], [1438506432.0, 41380000.0, -11.904843927999991], [1438508160.0, 41400000.0, -11.842056000000014], [1438509888.0, 41420000.0, -11.779168711999986], [1438511616.0, 41440000.0, -11.71618201599999], [1438513344.0, 41460000.0, -11.653095864000008], [1438515072.0, 41480000.0, -11.589910208000006], [1438516800.0, 41500000.0, -11.526624999999981], [1438518528.0, 41520000.0, -11.463240192], [1438520256.0, 41540000.0, -11.399755736000003], [1438521984.0, 41560000.0, -11.336171584000013], [1438523712.0, 41580000.0, -11.272487687999984], [1438525440.0, 41600000.0, -11.208703999999997], [1438527168.0, 41620000.0, -11.144820472000006], [1438528896.0, 41640000.0, -11.080837056000007], [1438530624.0, 41660000.0, -11.016753703999981], [1438532352.0, 41680000.0, -10.952570367999982], [1438534080.0, 41700000.0, -10.888287000000005], [1438535808.0, 41720000.0, -10.823903552000019], [1438537536.0, 41740000.0, -10.759419975999975], [1438539264.0, 41760000.0, -10.694836224], [1438540992.0, 41780000.0, -10.630152248000016], [1438542720.0, 41800000.0, -10.565368000000007], [1438544448.0, 41820000.0, -10.500483431999996], [1438546176.0, 41840000.0, -10.435498495999994], [1438547904.0, 41860000.0, -10.370413143999997], [1438549632.0, 41880000.0, -10.305227328000015], [1438551360.0, 41900000.0, -10.239940999999988], [1438553088.0, 41920000.0, -10.174554111999996], [1438554816.0, 41940000.0, -10.109066616000007], [1438556544.0, 41960000.0, -10.043478463999989], [1438558272.0, 41980000.0, -9.97778960799998], [1438560000.0, 42000000.0, -9.911999999999992], [1438561728.0, 42020000.0, -9.84610959199999], [1438563456.0, 42040000.0, -9.780118336000001], [1438565184.0, 42060000.0, -9.71402618399999], [1438566912.0, 42080000.0, -9.647833087999985], [1438568640.0, 42100000.0, -9.581539000000006], [1438570368.0, 42120000.0, -9.51514387200001], [1438572096.0, 42140000.0, -9.448647655999977], [1438573824.0, 42160000.0, -9.382050304000003], [1438575552.0, 42180000.0, -9.315351768], [1438577280.0, 42200000.0, -9.248552000000004], [1438579008.0, 42220000.0, -9.181650951999984], [1438580736.0, 42240000.0, -9.114648575999993], [1438582464.0, 42260000.0, -9.047544824], [1438584192.0, 42280000.0, -8.980339648000012], [1438585920.0, 42300000.0, -8.913032999999984], [1438587648.0, 42320000.0, -8.845624831999999], [1438589376.0, 42340000.0, -8.778115096000008], [1438591104.0, 42360000.0, -8.710503744000007], [1438592832.0, 42380000.0, -8.642790727999994], [1438594560.0, 42400000.0, -8.574975999999992], [1438596288.0, 42420000.0, -8.507059511999998], [1438598016.0, 42440000.0, -8.439041216000007], [1438599744.0, 42460000.0, -8.370921064000001], [1438601472.0, 42480000.0, -8.302699008000005], [1438603200.0, 42500000.0, -8.234375], [1438604928.0, 42520000.0, -8.165948992000011], [1438606656.0, 42540000.0, -8.097420936000006], [1438608384.0, 42560000.0, -8.02879078399998], [1438610112.0, 42580000.0, -7.960058488000001], [1438611840.0, 42600000.0, -7.891224000000008], [1438613568.0, 42620000.0, -7.822287272000025], [1438615296.0, 42640000.0, -7.753248255999992], [1438617024.0, 42660000.0, -7.684106903999989], [1438618752.0, 42680000.0, -7.614863168000014], [1438620480.0, 42700000.0, -7.545517000000018], [1438622208.0, 42720000.0, -7.476068351999984], [1438623936.0, 42740000.0, -7.406517176000008], [1438625664.0, 42760000.0, -7.336863424000001], [1438627392.0, 42780000.0, -7.267107048000014], [1438629120.0, 42800000.0, -7.197248000000002], [1438630848.0, 42820000.0, -7.127286232000003], [1438632576.0, 42840000.0, -7.057221695999999], [1438634304.0, 42860000.0, -6.987054344000015], [1438636032.0, 42880000.0, -6.916784127999989], [1438637760.0, 42900000.0, -6.846411000000003], [1438639488.0, 42920000.0, -6.775934912000025], [1438641216.0, 42940000.0, -6.705355816000022], [1438642944.0, 42960000.0, -6.63467366399999], [1438644672.0, 42980000.0, -6.563888408000011], [1438646400.0, 43000000.0, -6.493000000000009], [1438648128.0, 43020000.0, -6.422008392000009], [1438649856.0, 43040000.0, -6.350913535999993], [1438651584.0, 43060000.0, -6.279715383999999], [1438653312.0, 43080000.0, -6.2084138879999955], [1438655040.0, 43100000.0, -6.137009000000006], [1438656768.0, 43120000.0, -6.065500671999999], [1438658496.0, 43140000.0, -5.993888855999998], [1438660224.0, 43160000.0, -5.922173504], [1438661952.0, 43180000.0, -5.850354568000014], [1438663680.0, 43200000.0, -5.778431999999995], [1438665408.0, 43220000.0, -5.706405751999995], [1438667136.0, 43240000.0, -5.6342757759999955], [1438668864.0, 43260000.0, -5.562042024000007], [1438670592.0, 43280000.0, -5.4897044479999835], [1438672320.0, 43300000.0, -5.417262999999991], [1438674048.0, 43320000.0, -5.3447176320000125], [1438675776.0, 43340000.0, -5.272068296000015], [1438677504.0, 43360000.0, -5.19931494399998], [1438679232.0, 43380000.0, -5.126457528000003], [1438680960.0, 43400000.0, -5.0534959999999955], [1438682688.0, 43420000.0, -4.98043031200001], [1438684416.0, 43440000.0, -4.907260416], [1438686144.0, 43460000.0, -4.833986263999989], [1438687872.0, 43480000.0, -4.760607808000003], [1438689600.0, 43500000.0, -4.687125000000023], [1438691328.0, 43520000.0, -4.613537791999988], [1438693056.0, 43540000.0, -4.53984613599998], [1438694784.0, 43560000.0, -4.4660499840000085], [1438696512.0, 43580000.0, -4.392149288000027], [1438698240.0, 43600000.0, -4.3181439999999895], [1438699968.0, 43620000.0, -4.244034072000005], [1438701696.0, 43640000.0, -4.169819456000013], [1438703424.0, 43660000.0, -4.09550010400001], [1438705152.0, 43680000.0, -4.021075967999991], [1438706880.0, 43700000.0, -3.9465469999999954], [1438708608.0, 43720000.0, -3.8719131520000047], [1438710336.0, 43740000.0, -3.797174376000001], [1438712064.0, 43760000.0, -3.7223306239999943], [1438713792.0, 43780000.0, -3.647381847999995], [1438715520.0, 43800000.0, -3.572327999999999], [1438717248.0, 43820000.0, -3.497169032000002], [1438718976.0, 43840000.0, -3.4219048959999867], [1438720704.0, 43860000.0, -3.346535543999991], [1438722432.0, 43880000.0, -3.271060927999997], [1438724160.0, 43900000.0, -3.195481000000015], [1438725888.0, 43920000.0, -3.119795711999984], [1438727616.0, 43940000.0, -3.044005016], [1438729344.0, 43960000.0, -2.9681088640000155], [1438731072.0, 43980000.0, -2.892107208000013], [1438732800.0, 44000000.0, -2.815999999999974], [1438734528.0, 44020000.0, -2.7397871919999943], [1438736256.0, 44040000.0, -2.663468736000013], [1438737984.0, 44060000.0, -2.5870445839999974], [1438739712.0, 44080000.0, -2.5105146879999864], [1438741440.0, 44100000.0, -2.4338790000000046], [1438743168.0, 44120000.0, -2.357137471999991], [1438744896.0, 44140000.0, -2.2802900560000126], [1438746624.0, 44160000.0, -2.2033367039999945], [1438748352.0, 44180000.0, -2.1262773679999896], [1438750080.0, 44200000.0, -2.049112000000008], [1438751808.0, 44220000.0, -1.9718405520000175], [1438753536.0, 44240000.0, -1.8944629759999856], [1438755264.0, 44260000.0, -1.8169792240000078], [1438756992.0, 44280000.0, -1.739389248000009], [1438758720.0, 44300000.0, -1.6616930000000139], [1438760448.0, 44320000.0, -1.5838904319999898], [1438762176.0, 44340000.0, -1.505981496000004], [1438763904.0, 44360000.0, -1.4279661439999956], [1438765632.0, 44380000.0, -1.3498443280000032], [1438767360.0, 44400000.0, -1.2716159999999945], [1438769088.0, 44420000.0, -1.193281111999994], [1438770816.0, 44440000.0, -1.1148396159999976], [1438772544.0, 44460000.0, -1.0362914640000014], [1438774272.0, 44480000.0, -0.957636607999973], [1438776000.0, 44500000.0, -0.8788749999999936], [1438777728.0, 44520000.0, -0.8000065919999884], [1438779456.0, 44540000.0, -0.72103133600001], [1438781184.0, 44560000.0, -0.6419491839999836], [1438782912.0, 44580000.0, -0.5627600879999903], [1438784640.0, 44600000.0, -0.4834639999999979], [1438786368.0, 44620000.0, -0.4040608720000165], [1438788096.0, 44640000.0, -0.3245506559999711], [1438789824.0, 44660000.0, -0.2449333039999999], [1438791552.0, 44680000.0, -0.1652087679999994], [1438793280.0, 44700000.0, -0.08537700000000825], [1438795008.0, 44720000.0, -0.005437951999979873], [1438796736.0, 44740000.0, 0.07460842400000445], [1438798464.0, 44760000.0, 0.15476217600000552], [1438800192.0, 44780000.0, 0.2350233519999705], [1438801920.0, 44800000.0, 0.315392000000017], [1438803648.0, 44820000.0, 0.3958681680000211], [1438805376.0, 44840000.0, 0.4764519039999868], [1438807104.0, 44860000.0, 0.5571432559999892], [1438808832.0, 44880000.0, 0.6379422720000321], [1438810560.0, 44900000.0, 0.7188490000000058], [1438812288.0, 44920000.0, 0.7998634879999855], [1438814016.0, 44940000.0, 0.8809857840000035], [1438815744.0, 44960000.0, 0.9622159360000069], [1438817472.0, 44980000.0, 1.0435539920000139], [1438819200.0, 45000000.0, 1.125], [1438820928.0, 45020000.0, 1.2065540079999977], [1438822656.0, 45040000.0, 1.2882160639999967], [1438824384.0, 45060000.0, 1.3699862160000151], [1438826112.0, 45080000.0, 1.4518645120000144], [1438827840.0, 45100000.0, 1.5338509999999985], [1438829568.0, 45120000.0, 1.6159457279999714], [1438831296.0, 45140000.0, 1.6981487440000222], [1438833024.0, 45160000.0, 1.7804600959999988], [1438834752.0, 45180000.0, 1.8628798319999902], [1438836480.0, 45200000.0, 1.945407999999972], [1438838208.0, 45220000.0, 2.028044648000005], [1438839936.0, 45240000.0, 2.110789823999994], [1438841664.0, 45260000.0, 2.1936435759999853], [1438843392.0, 45280000.0, 2.276605951999983], [1438845120.0, 45300000.0, 2.359677000000005], [1438846848.0, 45320000.0, 2.442856768000013], [1438848576.0, 45340000.0, 2.5261453039999964], [1438850304.0, 45360000.0, 2.609542655999988], [1438852032.0, 45380000.0, 2.6930488720000056], [1438853760.0, 45400000.0, 2.7766639999999967], [1438855488.0, 45420000.0, 2.8603880879999792], [1438857216.0, 45440000.0, 2.9442211839999857], [1438858944.0, 45460000.0, 3.02816333600002], [1438860672.0, 45480000.0, 3.112214592000001], [1438862400.0, 45500000.0, 3.196374999999989], [1438864128.0, 45520000.0, 3.2806446079999887], [1438865856.0, 45540000.0, 3.3650234640000036], [1438867584.0, 45560000.0, 3.4495116159999952], [1438869312.0, 45580000.0, 3.534109111999996], [1438871040.0, 45600000.0, 3.6188159999999954], [1438872768.0, 45620000.0, 3.703632328000012], [1438874496.0, 45640000.0, 3.7885581440000067], [1438876224.0, 45660000.0, 3.873593495999998], [1438877952.0, 45680000.0, 3.958738432000004], [1438879680.0, 45700000.0, 4.043993000000015], [1438881408.0, 45720000.0, 4.129357248000005], [1438883136.0, 45740000.0, 4.214831223999994], [1438884864.0, 45760000.0, 4.300414975999971], [1438886592.0, 45780000.0, 4.3861085520000245], [1438888320.0, 45800000.0, 4.471912000000017], [1438890048.0, 45820000.0, 4.557825367999982], [1438891776.0, 45840000.0, 4.6438487039999785], [1438893504.0, 45860000.0, 4.729982056000026], [1438895232.0, 45880000.0, 4.816225471999999], [1438896960.0, 45900000.0, 4.902578999999989], [1438898688.0, 45920000.0, 4.989042687999984], [1438900416.0, 45940000.0, 5.075616584000002], [1438902144.0, 45960000.0, 5.162300735999992], [1438903872.0, 45980000.0, 5.249095191999984], [1438905600.0, 46000000.0, 5.33599999999997], [1438907328.0, 46020000.0, 5.423015208000024], [1438909056.0, 46040000.0, 5.510140864000007], [1438910784.0, 46060000.0, 5.597377015999982], [1438912512.0, 46080000.0, 5.684723711999979], [1438914240.0, 46100000.0, 5.7721810000000175], [1438915968.0, 46120000.0, 5.859748928000002], [1438917696.0, 46140000.0, 5.947427543999979], [1438919424.0, 46160000.0, 6.035216895999994], [1438921152.0, 46180000.0, 6.12311703200001], [1438922880.0, 46200000.0, 6.211128000000002], [1438924608.0, 46220000.0, 6.299249847999988], [1438926336.0, 46240000.0, 6.387482623999986], [1438928064.0, 46260000.0, 6.475826376000015], [1438929792.0, 46280000.0, 6.564281151999992], [1438931520.0, 46300000.0, 6.652846999999994], [1438933248.0, 46320000.0, 6.741523967999996], [1438934976.0, 46340000.0, 6.830312104000029], [1438936704.0, 46360000.0, 6.9192114560000135], [1438938432.0, 46380000.0, 7.008222071999995], [1438940160.0, 46400000.0, 7.0973439999999925], [1438941888.0, 46420000.0, 7.186577288000024], [1438943616.0, 46440000.0, 7.275921984000021], [1438945344.0, 46460000.0, 7.36537813599999], [1438947072.0, 46480000.0, 7.4549457919999895], [1438948800.0, 46500000.0, 7.544625000000025], [1438950528.0, 46520000.0, 7.634415808], [1438952256.0, 46540000.0, 7.724318264000004], [1438953984.0, 46560000.0, 7.814332415999999], [1438955712.0, 46580000.0, 7.904458312000017], [1438957440.0, 46600000.0, 7.994696000000005], [1438959168.0, 46620000.0, 8.085045528000009], [1438960896.0, 46640000.0, 8.175506943999977], [1438962624.0, 46660000.0, 8.266080296000013], [1438964352.0, 46680000.0, 8.35676563200002], [1438966080.0, 46700000.0, 8.447562999999988], [1438967808.0, 46720000.0, 8.538472447999993], [1438969536.0, 46740000.0, 8.629494024000024], [1438971264.0, 46760000.0, 8.720627776], [1438972992.0, 46780000.0, 8.811873751999997], [1438974720.0, 46800000.0, 8.903231999999988], [1438976448.0, 46820000.0, 8.994702568000008], [1438978176.0, 46840000.0, 9.086285504000003], [1438979904.0, 46860000.0, 9.177980856000005], [1438981632.0, 46880000.0, 9.26978867199999], [1438983360.0, 46900000.0, 9.361709000000005], [1438985088.0, 46920000.0, 9.45374188800001], [1438986816.0, 46940000.0, 9.545887383999997], [1438988544.0, 46960000.0, 9.638145535999996], [1438990272.0, 46980000.0, 9.730516392000027], [1438992000.0, 47000000.0, 9.823000000000022], [1438993728.0, 47020000.0, 9.915596407999999], [1438995456.0, 47040000.0, 10.008305663999977], [1438997184.0, 47060000.0, 10.10112781600003], [1438998912.0, 47080000.0, 10.194062912000007], [1439000640.0, 47100000.0, 10.287110999999996], [1439002368.0, 47120000.0, 10.380272127999987], [1439004096.0, 47140000.0, 10.473546344000027], [1439005824.0, 47160000.0, 10.566933696000007], [1439007552.0, 47180000.0, 10.660434232], [1439009280.0, 47200000.0, 10.754047999999997], [1439011008.0, 47220000.0, 10.847775048000017], [1439012736.0, 47240000.0, 10.941615424000005], [1439014464.0, 47260000.0, 11.03556917600001], [1439016192.0, 47280000.0, 11.129636351999977], [1439017920.0, 47300000.0, 11.223817000000025], [1439019648.0, 47320000.0, 11.318111168000016], [1439021376.0, 47340000.0, 11.412518903999995], [1439023104.0, 47360000.0, 11.507040255999982], [1439024832.0, 47380000.0, 11.601675272000023], [1439026560.0, 47400000.0, 11.696423999999993], [1439028288.0, 47420000.0, 11.791286487999997], [1439030016.0, 47440000.0, 11.886262783999996], [1439031744.0, 47460000.0, 11.981352936000022], [1439033472.0, 47480000.0, 12.076556992000008], [1439035200.0, 47500000.0, 12.171875], [1439036928.0, 47520000.0, 12.267307008000003], [1439038656.0, 47540000.0, 12.362853063999978], [1439040384.0, 47560000.0, 12.458513216000014], [1439042112.0, 47580000.0, 12.554287512000002], [1439043840.0, 47600000.0, 12.650176000000002], [1439045568.0, 47620000.0, 12.746178727999975], [1439047296.0, 47640000.0, 12.842295744000012], [1439049024.0, 47660000.0, 12.938527096000016], [1439050752.0, 47680000.0, 13.03487283199999], [1439052480.0, 47700000.0, 13.131332999999984], [1439054208.0, 47720000.0, 13.227907648000027], [1439055936.0, 47740000.0, 13.324596823999997], [1439057664.0, 47760000.0, 13.421400575999996], [1439059392.0, 47780000.0, 13.518318951999987], [1439061120.0, 47800000.0, 13.615352000000001], [1439062848.0, 47820000.0, 13.712499768], [1439064576.0, 47840000.0, 13.809762304000003], [1439066304.0, 47860000.0, 13.90713965599997], [1439068032.0, 47880000.0, 14.004631872000019], [1439069760.0, 47900000.0, 14.102238999999997], [1439071488.0, 47920000.0, 14.19996108799998], [1439073216.0, 47940000.0, 14.297798183999973], [1439074944.0, 47960000.0, 14.39575033600002], [1439076672.0, 47980000.0, 14.493817592], [1439078400.0, 48000000.0, 14.591999999999999], [1439080128.0, 48020000.0, 14.69029760799998], [1439081856.0, 48040000.0, 14.788710464000019], [1439083584.0, 48060000.0, 14.887238616000005], [1439085312.0, 48080000.0, 14.985882111999999], [1439087040.0, 48100000.0, 15.084640999999976], [1439088768.0, 48120000.0, 15.183515328000013], [1439090496.0, 48140000.0, 15.282505144000012], [1439092224.0, 48160000.0, 15.381610495999993], [1439093952.0, 48180000.0, 15.480831431999988], [1439095680.0, 48200000.0, 15.580168000000015], [1439097408.0, 48220000.0, 15.679620248000006], [1439099136.0, 48240000.0, 15.779188223999995], [1439100864.0, 48260000.0, 15.87887197599997], [1439102592.0, 48280000.0, 15.978671552000023], [1439104320.0, 48300000.0, 16.078587000000013], [1439106048.0, 48320000.0, 16.178618367999988], [1439107776.0, 48340000.0, 16.27876570399998], [1439109504.0, 48360000.0, 16.37902905600002], [1439111232.0, 48380000.0, 16.479408472000003], [1439112960.0, 48400000.0, 16.579904], [1439114688.0, 48420000.0, 16.680515687999986], [1439116416.0, 48440000.0, 16.78124358400001], [1439118144.0, 48460000.0, 16.882087736000003], [1439119872.0, 48480000.0, 16.983048192], [1439121600.0, 48500000.0, 17.084124999999972], [1439123328.0, 48520000.0, 17.185318208000012], [1439125056.0, 48540000.0, 17.28662786400001], [1439126784.0, 48560000.0, 17.388054015999984], [1439128512.0, 48580000.0, 17.48959671199998], [1439130240.0, 48600000.0, 17.591256000000016], [1439131968.0, 48620000.0, 17.693031927999996], [1439133696.0, 48640000.0, 17.794924543999997], [1439135424.0, 48660000.0, 17.896933895999993], [1439137152.0, 48680000.0, 17.999060032000003], [1439138880.0, 48700000.0, 18.101303000000016], [1439140608.0, 48720000.0, 18.203662847999993], [1439142336.0, 48740000.0, 18.306139623999982], [1439144064.0, 48760000.0, 18.408733376000015], [1439145792.0, 48780000.0, 18.511444151999996], [1439147520.0, 48800000.0, 18.614272], [1439149248.0, 48820000.0, 18.71721696799999], [1439150976.0, 48840000.0, 18.820279104000022], [1439152704.0, 48860000.0, 18.923458456000006], [1439154432.0, 48880000.0, 19.026755072], [1439156160.0, 48900000.0, 19.130168999999967], [1439157888.0, 48920000.0, 19.233700288000023], [1439159616.0, 48940000.0, 19.337348984000016], [1439161344.0, 48960000.0, 19.441115135999993], [1439163072.0, 48980000.0, 19.544998791999987], [1439164800.0, 49000000.0, 19.64900000000003], [1439166528.0, 49020000.0, 19.75311880800001], [1439168256.0, 49040000.0, 19.85735526399999], [1439169984.0, 49060000.0, 19.96170941599999], [1439171712.0, 49080000.0, 20.066181312000012], [1439173440.0, 49100000.0, 20.170771000000002], [1439175168.0, 49120000.0, 20.275478528000008], [1439176896.0, 49140000.0, 20.380303943999976], [1439178624.0, 49160000.0, 20.48524729600001], [1439180352.0, 49180000.0, 20.590308632000017], [1439182080.0, 49200000.0, 20.695487999999983], [1439183808.0, 49220000.0, 20.800785447999985], [1439185536.0, 49240000.0, 20.906201024000026], [1439187264.0, 49260000.0, 21.01173477600001], [1439188992.0, 49280000.0, 21.117386752], [1439190720.0, 49300000.0, 21.223156999999986], [1439192448.0, 49320000.0, 21.329045568000012], [1439194176.0, 49340000.0, 21.435052503999998], [1439195904.0, 49360000.0, 21.541177856000004], [1439197632.0, 49380000.0, 21.64742167199998], [1439199360.0, 49400000.0, 21.753784000000024], [1439201088.0, 49420000.0, 21.860264888000017], [1439202816.0, 49440000.0, 21.966864384000004], [1439204544.0, 49460000.0, 22.07358253599999], [1439206272.0, 49480000.0, 22.180419392000033], [1439208000.0, 49500000.0, 22.28737500000001], [1439209728.0, 49520000.0, 22.394449408], [1439211456.0, 49540000.0, 22.501642663999974], [1439213184.0, 49560000.0, 22.608954816000022], [1439214912.0, 49580000.0, 22.71638591200002], [1439216640.0, 49600000.0, 22.823936000000003], [1439218368.0, 49620000.0, 22.931605127999987], [1439220096.0, 49640000.0, 23.039393344000032], [1439221824.0, 49660000.0, 23.147300696000002], [1439223552.0, 49680000.0, 23.255327232], [1439225280.0, 49700000.0, 23.363472999999985], [1439227008.0, 49720000.0, 23.47173804800002], [1439228736.0, 49740000.0, 23.58012242400001], [1439230464.0, 49760000.0, 23.688626176], [1439232192.0, 49780000.0, 23.79724935199998], [1439233920.0, 49800000.0, 23.905992000000012], [1439235648.0, 49820000.0, 24.014854168000014], [1439237376.0, 49840000.0, 24.12383590399999], [1439239104.0, 49860000.0, 24.232937255999985], [1439240832.0, 49880000.0, 24.342158272000034], [1439242560.0, 49900000.0, 24.451499], [1439244288.0, 49920000.0, 24.560959487999995], [1439246016.0, 49940000.0, 24.670539784], [1439247744.0, 49960000.0, 24.780239936000015], [1439249472.0, 49980000.0, 24.890059992000005], [1439251200.0, 50000000.0, 25.0], [1439252928.0, 50020000.0, 25.11006000799999], [1439254656.0, 50040000.0, 25.22024006399998], [1439256384.0, 50060000.0, 25.330540216000017], [1439258112.0, 50080000.0, 25.440960512000004], [1439259840.0, 50100000.0, 25.551500999999988], [1439261568.0, 50120000.0, 25.662161727999973], [1439263296.0, 50140000.0, 25.77294274400002], [1439265024.0, 50160000.0, 25.883844096000004], [1439266752.0, 50180000.0, 25.994865831999988], [1439268480.0, 50200000.0, 26.106007999999974], [1439270208.0, 50220000.0, 26.217270648000024], [1439271936.0, 50240000.0, 26.328653824], [1439273664.0, 50260000.0, 26.440157575999976], [1439275392.0, 50280000.0, 26.551781951999985], [1439277120.0, 50300000.0, 26.663527000000002], [1439278848.0, 50320000.0, 26.775392768000003], [1439280576.0, 50340000.0, 26.887379303999992], [1439282304.0, 50360000.0, 26.999486655999974], [1439284032.0, 50380000.0, 27.111714872000007], [1439285760.0, 50400000.0, 27.224064000000013], [1439287488.0, 50420000.0, 27.33653408799998], [1439289216.0, 50440000.0, 27.449125183999968], [1439290944.0, 50460000.0, 27.56183733600001], [1439292672.0, 50480000.0, 27.674670591999984], [1439294400.0, 50500000.0, 27.78762499999999], [1439296128.0, 50520000.0, 27.900700607999994], [1439297856.0, 50540000.0, 28.013897463999996], [1439299584.0, 50560000.0, 28.127215616], [1439301312.0, 50580000.0, 28.240655111999985], [1439303040.0, 50600000.0, 28.35421599999998], [1439304768.0, 50620000.0, 28.467898328000018], [1439306496.0, 50640000.0, 28.58170214400002], [1439308224.0, 50660000.0, 28.695627495999986], [1439309952.0, 50680000.0, 28.80967443199998], [1439311680.0, 50700000.0, 28.923843000000005], [1439313408.0, 50720000.0, 29.03813324800001], [1439315136.0, 50740000.0, 29.152545223999994], [1439316864.0, 50760000.0, 29.26707897599998], [1439318592.0, 50780000.0, 29.38173455200001], [1439320320.0, 50800000.0, 29.496511999999996], [1439322048.0, 50820000.0, 29.61141136799999], [1439323776.0, 50840000.0, 29.726432703999976], [1439325504.0, 50860000.0, 29.841576056000036], [1439327232.0, 50880000.0, 29.956841471999994], [1439328960.0, 50900000.0, 30.07222899999998], [1439330688.0, 50920000.0, 30.187738687999982], [1439332416.0, 50940000.0, 30.303370584000007], [1439334144.0, 50960000.0, 30.419124736], [1439335872.0, 50980000.0, 30.535001191999996], [1439337600.0, 51000000.0, 30.650999999999982], [1439339328.0, 51020000.0, 30.767121208000034], [1439341056.0, 51040000.0, 30.883364864], [1439342784.0, 51060000.0, 30.999731016], [1439344512.0, 51080000.0, 31.116219711999975], [1439346240.0, 51100000.0, 31.23283100000002], [1439347968.0, 51120000.0, 31.349564927999978], [1439349696.0, 51140000.0, 31.466421543999985], [1439351424.0, 51160000.0, 31.583400896], [1439353152.0, 51180000.0, 31.700503032], [1439354880.0, 51200000.0, 31.817728000000017], [1439356608.0, 51220000.0, 31.935075847999997], [1439358336.0, 51240000.0, 32.052546624], [1439360064.0, 51260000.0, 32.170140376000006], [1439361792.0, 51280000.0, 32.28785715199999], [1439363520.0, 51300000.0, 32.405697], [1439365248.0, 51320000.0, 32.523659967999976], [1439366976.0, 51340000.0, 32.64174610400002], [1439368704.0, 51360000.0, 32.759955456], [1439370432.0, 51380000.0, 32.878288072000004], [1439372160.0, 51400000.0, 32.996743999999964], [1439373888.0, 51420000.0, 33.11532328800001], [1439375616.0, 51440000.0, 33.234025984], [1439377344.0, 51460000.0, 33.35285213599998], [1439379072.0, 51480000.0, 33.471801791999965], [1439380800.0, 51500000.0, 33.59087500000004], [1439382528.0, 51520000.0, 33.71007180800002], [1439384256.0, 51540000.0, 33.82939226399999], [1439385984.0, 51560000.0, 33.94883641599999], [1439387712.0, 51580000.0, 34.068404312], [1439389440.0, 51600000.0, 34.188096000000016], [1439391168.0, 51620000.0, 34.30791152799999], [1439392896.0, 51640000.0, 34.42785094399997], [1439394624.0, 51660000.0, 34.54791429600003], [1439396352.0, 51680000.0, 34.66810163200002], [1439398080.0, 51700000.0, 34.78841299999999], [1439399808.0, 51720000.0, 34.908848447999986], [1439401536.0, 51740000.0, 35.029408024000006], [1439403264.0, 51760000.0, 35.15009177600001], [1439404992.0, 51780000.0, 35.27089975199999], [1439406720.0, 51800000.0, 35.391831999999965], [1439408448.0, 51820000.0, 35.51288856800002], [1439410176.0, 51840000.0, 35.634069503999996], [1439411904.0, 51860000.0, 35.755374856], [1439413632.0, 51880000.0, 35.87680467199999], [1439415360.0, 51900000.0, 35.99835900000002], [1439417088.0, 51920000.0, 36.12003788800001], [1439418816.0, 51940000.0, 36.241841384], [1439420544.0, 51960000.0, 36.36376953600001], [1439422272.0, 51980000.0, 36.485822392000046], [1439424000.0, 52000000.0, 36.60800000000003], [1439425728.0, 52020000.0, 36.730302408], [1439427456.0, 52040000.0, 36.852729663999966], [1439429184.0, 52060000.0, 36.975281816000034], [1439430912.0, 52080000.0, 37.097958912000024], [1439432640.0, 52100000.0, 37.220760999999996], [1439434368.0, 52120000.0, 37.34368812799998], [1439436096.0, 52140000.0, 37.466740344000016], [1439437824.0, 52160000.0, 37.589917696], [1439439552.0, 52180000.0, 37.71322023199998], [1439441280.0, 52200000.0, 37.83664799999998], [1439443008.0, 52220000.0, 37.96020104800003], [1439444736.0, 52240000.0, 38.08387942400002], [1439446464.0, 52260000.0, 38.207683176], [1439448192.0, 52280000.0, 38.33161235199998], [1439449920.0, 52300000.0, 38.45566700000002], [1439451648.0, 52320000.0, 38.57984716800003], [1439453376.0, 52340000.0, 38.70415290400001], [1439455104.0, 52360000.0, 38.82858425599997], [1439456832.0, 52380000.0, 38.953141272000025], [1439458560.0, 52400000.0, 39.07782400000002], [1439460288.0, 52420000.0, 39.20263248799998], [1439462016.0, 52440000.0, 39.327566784], [1439463744.0, 52460000.0, 39.45262693600003], [1439465472.0, 52480000.0, 39.57781299200002], [1439467200.0, 52500000.0, 39.703125], [1439468928.0, 52520000.0, 39.828563008], [1439470656.0, 52540000.0, 39.95412706399998], [1439472384.0, 52560000.0, 40.07981721600001], [1439474112.0, 52580000.0, 40.20563351200002], [1439475840.0, 52600000.0, 40.331575999999984], [1439477568.0, 52620000.0, 40.45764472799998], [1439479296.0, 52640000.0, 40.58383974400002], [1439481024.0, 52660000.0, 40.71016109600001], [1439482752.0, 52680000.0, 40.83660883199998], [1439484480.0, 52700000.0, 40.96318299999997], [1439486208.0, 52720000.0, 41.08988364800001], [1439487936.0, 52740000.0, 41.216710824], [1439489664.0, 52760000.0, 41.343664575999995], [1439491392.0, 52780000.0, 41.470744951999976], [1439493120.0, 52800000.0, 41.59795200000001], [1439494848.0, 52820000.0, 41.725285768000006], [1439496576.0, 52840000.0, 41.85274630399998], [1439498304.0, 52860000.0, 41.98033365599997], [1439500032.0, 52880000.0, 42.10804787200003], [1439501760.0, 52900000.0, 42.235889], [1439503488.0, 52920000.0, 42.363857087999975], [1439505216.0, 52940000.0, 42.491952183999985], [1439506944.0, 52960000.0, 42.620174336000005], [1439508672.0, 52980000.0, 42.748523592], [1439510400.0, 53000000.0, 42.87699999999998], [1439512128.0, 53020000.0, 43.00560360799997], [1439513856.0, 53040000.0, 43.134334464000005], [1439515584.0, 53060000.0, 43.263192616], [1439517312.0, 53080000.0, 43.39217811199998], [1439519040.0, 53100000.0, 43.52129099999996], [1439520768.0, 53120000.0, 43.65053132800003], [1439522496.0, 53140000.0, 43.77989914400001], [1439524224.0, 53160000.0, 43.909394496000004], [1439525952.0, 53180000.0, 44.03901743199998], [1439527680.0, 53200000.0, 44.168768], [1439529408.0, 53220000.0, 44.29864624800001], [1439531136.0, 53240000.0, 44.42865222399999], [1439532864.0, 53260000.0, 44.55878597599998], [1439534592.0, 53280000.0, 44.689047552000034], [1439536320.0, 53300000.0, 44.81943699999999], [1439538048.0, 53320000.0, 44.94995436799998], [1439539776.0, 53340000.0, 45.080599703999965], [1439541504.0, 53360000.0, 45.21137305600001], [1439543232.0, 53380000.0, 45.342274472], [1439544960.0, 53400000.0, 45.473304], [1439546688.0, 53420000.0, 45.604461688], [1439548416.0, 53440000.0, 45.73574758400001], [1439550144.0, 53460000.0, 45.867161736], [1439551872.0, 53480000.0, 45.998704192000005], [1439553600.0, 53500000.0, 46.13037499999996], [1439555328.0, 53520000.0, 46.26217420800002], [1439557056.0, 53540000.0, 46.39410186400001], [1439558784.0, 53560000.0, 46.52615801599998], [1439560512.0, 53580000.0, 46.65834271199998], [1439562240.0, 53600000.0, 46.79065600000003], [1439563968.0, 53620000.0, 46.923097928000004], [1439565696.0, 53640000.0, 47.055668543999985], [1439567424.0, 53660000.0, 47.18836789599999], [1439569152.0, 53680000.0, 47.32119603200002], [1439570880.0, 53700000.0, 47.45415299999999], [1439572608.0, 53720000.0, 47.587238848], [1439574336.0, 53740000.0, 47.72045362399999], [1439576064.0, 53760000.0, 47.85379737600002], [1439577792.0, 53780000.0, 47.98727015200001], [1439579520.0, 53800000.0, 48.12087199999999], [1439581248.0, 53820000.0, 48.254602968], [1439582976.0, 53840000.0, 48.38846310400004], [1439584704.0, 53860000.0, 48.522452455999996], [1439586432.0, 53880000.0, 48.65657107199999], [1439588160.0, 53900000.0, 48.790818999999985], [1439589888.0, 53920000.0, 48.92519628800002], [1439591616.0, 53940000.0, 49.05970298400001], [1439593344.0, 53960000.0, 49.19433913599998], [1439595072.0, 53980000.0, 49.329104791999995], [1439596800.0, 54000000.0, 49.46400000000003], [1439598528.0, 54020000.0, 49.59902480800001], [1439600256.0, 54040000.0, 49.73417926399999], [1439601984.0, 54060000.0, 49.86946341599999], [1439603712.0, 54080000.0, 50.004877312000005], [1439605440.0, 54100000.0, 50.14042100000002], [1439607168.0, 54120000.0, 50.276094528], [1439608896.0, 54140000.0, 50.411897943999975], [1439610624.0, 54160000.0, 50.54783129600001], [1439612352.0, 54180000.0, 50.68389463200002], [1439614080.0, 54200000.0, 50.820088], [1439615808.0, 54220000.0, 50.95641144799998], [1439617536.0, 54240000.0, 51.092865024000034], [1439619264.0, 54260000.0, 51.229448776], [1439620992.0, 54280000.0, 51.36616275199998], [1439622720.0, 54300000.0, 51.50300699999997], [1439624448.0, 54320000.0, 51.639981568000024], [1439626176.0, 54340000.0, 51.77708650400001], [1439627904.0, 54360000.0, 51.91432185599999], [1439629632.0, 54380000.0, 52.051687671999986], [1439631360.0, 54400000.0, 52.18918400000004], [1439633088.0, 54420000.0, 52.32681088800001], [1439634816.0, 54440000.0, 52.46456838399999], [1439636544.0, 54460000.0, 52.602456536000005], [1439638272.0, 54480000.0, 52.740475392000036], [1439640000.0, 54500000.0, 52.878625], [1439641728.0, 54520000.0, 53.016905408000014], [1439643456.0, 54540000.0, 53.15531666399998], [1439645184.0, 54560000.0, 53.29385881600004], [1439646912.0, 54580000.0, 53.43253191200003], [1439648640.0, 54600000.0, 53.57133599999999], [1439650368.0, 54620000.0, 53.710271127999974], [1439652096.0, 54640000.0, 53.84933734400005], [1439653824.0, 54660000.0, 53.988534696], [1439655552.0, 54680000.0, 54.127863231999996], [1439657280.0, 54700000.0, 54.26732299999999], [1439659008.0, 54720000.0, 54.40691404800002], [1439660736.0, 54740000.0, 54.546636424], [1439662464.0, 54760000.0, 54.68649017599999], [1439664192.0, 54780000.0, 54.82647535199996], [1439665920.0, 54800000.0, 54.966592000000034], [1439667648.0, 54820000.0, 55.106840168000005], [1439669376.0, 54840000.0, 55.24721990399999], [1439671104.0, 54860000.0, 55.387731255999995], [1439672832.0, 54880000.0, 55.52837427200002], [1439674560.0, 54900000.0, 55.669149000000004], [1439676288.0, 54920000.0, 55.81005548799999], [1439678016.0, 54940000.0, 55.951093783999994], [1439679744.0, 54960000.0, 56.09226393600002], [1439681472.0, 54980000.0, 56.233565992000024], [1439683200.0, 55000000.0, 56.375], [1439684928.0, 55020000.0, 56.516566007999984], [1439686656.0, 55040000.0, 56.65826406399998], [1439688384.0, 55060000.0, 56.80009421600002], [1439690112.0, 55080000.0, 56.94205651199999], [1439691840.0, 55100000.0, 57.08415099999999], [1439693568.0, 55120000.0, 57.226377727999974], [1439695296.0, 55140000.0, 57.36873674400002], [1439697024.0, 55160000.0, 57.511228095999996], [1439698752.0, 55180000.0, 57.653851832], [1439700480.0, 55200000.0, 57.79660799999998], [1439702208.0, 55220000.0, 57.939496648000016], [1439703936.0, 55240000.0, 58.08251782399999], [1439705664.0, 55260000.0, 58.22567157599998], [1439707392.0, 55280000.0, 58.368957951999974], [1439709120.0, 55300000.0, 58.51237700000003], [1439710848.0, 55320000.0, 58.65592876800001], [1439712576.0, 55340000.0, 58.799613303999976], [1439714304.0, 55360000.0, 58.943430655999975], [1439716032.0, 55380000.0, 59.087380872000026], [1439717760.0, 55400000.0, 59.231464], [1439719488.0, 55420000.0, 59.37568008799997], [1439721216.0, 55440000.0, 59.52002918399995], [1439722944.0, 55460000.0, 59.66451133600002], [1439724672.0, 55480000.0, 59.80912659200001], [1439726400.0, 55500000.0, 59.95387499999998], [1439728128.0, 55520000.0, 60.098756607999974], [1439729856.0, 55540000.0, 60.24377146400002], [1439731584.0, 55560000.0, 60.38891961600001], [1439733312.0, 55580000.0, 60.534201112000005], [1439735040.0, 55600000.0, 60.67961599999998], [1439736768.0, 55620000.0, 60.82516432800003], [1439738496.0, 55640000.0, 60.97084614400001], [1439740224.0, 55660000.0, 61.11666149599998], [1439741952.0, 55680000.0, 61.262610431999974], [1439743680.0, 55700000.0, 61.40869300000003], [1439745408.0, 55720000.0, 61.554909248], [1439747136.0, 55740000.0, 61.70125922399998], [1439748864.0, 55760000.0, 61.847742975999964], [1439750592.0, 55780000.0, 61.99436055200002], [1439752320.0, 55800000.0, 62.14111200000002], [1439754048.0, 55820000.0, 62.28799736799998], [1439755776.0, 55840000.0, 62.43501670399998], [1439757504.0, 55860000.0, 62.58217005600005], [1439759232.0, 55880000.0, 62.72945747200002], [1439760960.0, 55900000.0, 62.87687899999999], [1439762688.0, 55920000.0, 63.02443468799997], [1439764416.0, 55940000.0, 63.17212458400003], [1439766144.0, 55960000.0, 63.319948736], [1439767872.0, 55980000.0, 63.467907192], [1439769600.0, 56000000.0, 63.61599999999996], [1439771328.0, 56020000.0, 63.76422720800004], [1439773056.0, 56040000.0, 63.912588864], [1439774784.0, 56060000.0, 64.06108501599996], [1439776512.0, 56080000.0, 64.20971571199996], [1439778240.0, 56100000.0, 64.35848100000003], [1439779968.0, 56120000.0, 64.507380928], [1439781696.0, 56140000.0, 64.656415544], [1439783424.0, 56160000.0, 64.80558489599997], [1439785152.0, 56180000.0, 64.95488903200001], [1439786880.0, 56200000.0, 65.10432800000001], [1439788608.0, 56220000.0, 65.25390184799997], [1439790336.0, 56240000.0, 65.40361062399998], [1439792064.0, 56260000.0, 65.55345437600002], [1439793792.0, 56280000.0, 65.703433152], [1439795520.0, 56300000.0, 65.85354699999999], [1439797248.0, 56320000.0, 66.00379596799999], [1439798976.0, 56340000.0, 66.15418010400003], [1439800704.0, 56360000.0, 66.30469945600001], [1439802432.0, 56380000.0, 66.455354072], [1439804160.0, 56400000.0, 66.60614399999996], [1439805888.0, 56420000.0, 66.75706928800003], [1439807616.0, 56440000.0, 66.90812998400003], [1439809344.0, 56460000.0, 67.059326136], [1439811072.0, 56480000.0, 67.21065779199996], [1439812800.0, 56500000.0, 67.36212500000002], [1439814528.0, 56520000.0, 67.51372780800001], [1439816256.0, 56540000.0, 67.66546626399999], [1439817984.0, 56560000.0, 67.81734041599996], [1439819712.0, 56580000.0, 67.96935031200003], [1439821440.0, 56600000.0, 68.12149600000002], [1439823168.0, 56620000.0, 68.27377752800002], [1439824896.0, 56640000.0, 68.42619494399997], [1439826624.0, 56660000.0, 68.57874829600003], [1439828352.0, 56680000.0, 68.73143763200001], [1439830080.0, 56700000.0, 68.88426299999998], [1439831808.0, 56720000.0, 69.03722444799996], [1439833536.0, 56740000.0, 69.19032202400003], [1439835264.0, 56760000.0, 69.34355577600002], [1439836992.0, 56780000.0, 69.49692575199998], [1439838720.0, 56800000.0, 69.650432], [1439840448.0, 56820000.0, 69.804074568], [1439842176.0, 56840000.0, 69.95785350400001], [1439843904.0, 56860000.0, 70.111768856], [1439845632.0, 56880000.0, 70.26582067199999], [1439847360.0, 56900000.0, 70.420009], [1439849088.0, 56920000.0, 70.57433388800001], [1439850816.0, 56940000.0, 70.728795384], [1439852544.0, 56960000.0, 70.88339353599997], [1439854272.0, 56980000.0, 71.03812839200003], [1439856000.0, 57000000.0, 71.19300000000001], [1439857728.0, 57020000.0, 71.34800840800003], [1439859456.0, 57040000.0, 71.50315366399998], [1439861184.0, 57060000.0, 71.65843581600006], [1439862912.0, 57080000.0, 71.81385491200004], [1439864640.0, 57100000.0, 71.96941100000002], [1439866368.0, 57120000.0, 72.12510412799996], [1439868096.0, 57140000.0, 72.28093434400003], [1439869824.0, 57160000.0, 72.43690169600002], [1439871552.0, 57180000.0, 72.59300623200001], [1439873280.0, 57200000.0, 72.74924799999998], [1439875008.0, 57220000.0, 72.90562704800006], [1439876736.0, 57240000.0, 73.06214342399998], [1439878464.0, 57260000.0, 73.218797176], [1439880192.0, 57280000.0, 73.375588352], [1439881920.0, 57300000.0, 73.53251700000003], [1439883648.0, 57320000.0, 73.68958316800003], [1439885376.0, 57340000.0, 73.846786904], [1439887104.0, 57360000.0, 74.00412825599997], [1439888832.0, 57380000.0, 74.16160727200004], [1439890560.0, 57400000.0, 74.31922399999999], [1439892288.0, 57420000.0, 74.47697848800001], [1439894016.0, 57440000.0, 74.63487078399999], [1439895744.0, 57460000.0, 74.79290093600002], [1439897472.0, 57480000.0, 74.95106899200002], [1439899200.0, 57500000.0, 75.109375], [1439900928.0, 57520000.0, 75.267819008], [1439902656.0, 57540000.0, 75.42640106399998], [1439904384.0, 57560000.0, 75.58512121600003], [1439906112.0, 57580000.0, 75.74397951200001], [1439907840.0, 57600000.0, 75.902976], [1439909568.0, 57620000.0, 76.06211072799998], [1439911296.0, 57640000.0, 76.22138374400004], [1439913024.0, 57660000.0, 76.38079509599999], [1439914752.0, 57680000.0, 76.540344832], [1439916480.0, 57700000.0, 76.70003299999998], [1439918208.0, 57720000.0, 76.85985964800003], [1439919936.0, 57740000.0, 77.019824824], [1439921664.0, 57760000.0, 77.179928576], [1439923392.0, 57780000.0, 77.34017095199998], [1439925120.0, 57800000.0, 77.50055200000001], [1439926848.0, 57820000.0, 77.66107176800001], [1439928576.0, 57840000.0, 77.82173030400001], [1439930304.0, 57860000.0, 77.98252765599997], [1439932032.0, 57880000.0, 78.14346387200003], [1439933760.0, 57900000.0, 78.30453899999999], [1439935488.0, 57920000.0, 78.46575308799999], [1439937216.0, 57940000.0, 78.62710618399996], [1439938944.0, 57960000.0, 78.78859833600002], [1439940672.0, 57980000.0, 78.950229592], [1439942400.0, 58000000.0, 79.112], [1439944128.0, 58020000.0, 79.27390960799997], [1439945856.0, 58040000.0, 79.43595846400001], [1439947584.0, 58060000.0, 79.59814661600001], [1439949312.0, 58080000.0, 79.760474112], [1439951040.0, 58100000.0, 79.92294099999998], [1439952768.0, 58120000.0, 80.08554732800002], [1439954496.0, 58140000.0, 80.248293144], [1439956224.0, 58160000.0, 80.41117849599996], [1439957952.0, 58180000.0, 80.57420343199999], [1439959680.0, 58200000.0, 80.73736800000003], [1439961408.0, 58220000.0, 80.90067224800003], [1439963136.0, 58240000.0, 81.064116224], [1439964864.0, 58260000.0, 81.22769997599995], [1439966592.0, 58280000.0, 81.39142355200005], [1439968320.0, 58300000.0, 81.55528700000002], [1439970048.0, 58320000.0, 81.71929036799996], [1439971776.0, 58340000.0, 81.88343370399996], [1439973504.0, 58360000.0, 82.04771705600004], [1439975232.0, 58380000.0, 82.212140472], [1439976960.0, 58400000.0, 82.37670399999998], [1439978688.0, 58420000.0, 82.54140768799998], [1439980416.0, 58440000.0, 82.70625158400004], [1439982144.0, 58460000.0, 82.871235736], [1439983872.0, 58480000.0, 83.036360192], [1439985600.0, 58500000.0, 83.20162499999998], [1439987328.0, 58520000.0, 83.36703020800003], [1439989056.0, 58540000.0, 83.53257586400004], [1439990784.0, 58560000.0, 83.69826201599997], [1439992512.0, 58580000.0, 83.86408871199995], [1439994240.0, 58600000.0, 84.03005600000004], [1439995968.0, 58620000.0, 84.196163928], [1439997696.0, 58640000.0, 84.362412544], [1439999424.0, 58660000.0, 84.52880189599995], [1440001152.0, 58680000.0, 84.69533203200001], [1440002880.0, 58700000.0, 84.86200300000002], [1440004608.0, 58720000.0, 85.028814848], [1440006336.0, 58740000.0, 85.19576762399998], [1440008064.0, 58760000.0, 85.36286137600001], [1440009792.0, 58780000.0, 85.53009615200003], [1440011520.0, 58800000.0, 85.69747199999998], [1440013248.0, 58820000.0, 85.864988968], [1440014976.0, 58840000.0, 86.032647104], [1440016704.0, 58860000.0, 86.20044645600001], [1440018432.0, 58880000.0, 86.36838707199999], [1440020160.0, 58900000.0, 86.53646899999997], [1440021888.0, 58920000.0, 86.70469228800002], [1440023616.0, 58940000.0, 86.87305698399999], [1440025344.0, 58960000.0, 87.041563136], [1440027072.0, 58980000.0, 87.21021079199998], [1440028800.0, 59000000.0, 87.37900000000002], [1440030528.0, 59020000.0, 87.547930808], [1440032256.0, 59040000.0, 87.71700326400001], [1440033984.0, 59060000.0, 87.88621741599998], [1440035712.0, 59080000.0, 88.05557331200002], [1440037440.0, 59100000.0, 88.225071], [1440039168.0, 59120000.0, 88.39471052799998], [1440040896.0, 59140000.0, 88.56449194399997], [1440042624.0, 59160000.0, 88.73441529600002], [1440044352.0, 59180000.0, 88.90448063200002], [1440046080.0, 59200000.0, 89.07468799999998], [1440047808.0, 59220000.0, 89.24503744799995], [1440049536.0, 59240000.0, 89.41552902400004], [1440051264.0, 59260000.0, 89.58616277600001], [1440052992.0, 59280000.0, 89.75693875200002], [1440054720.0, 59300000.0, 89.92785699999996], [1440056448.0, 59320000.0, 90.09891756800002], [1440058176.0, 59340000.0, 90.270120504], [1440059904.0, 59360000.0, 90.44146585599998], [1440061632.0, 59380000.0, 90.61295367199997], [1440063360.0, 59400000.0, 90.78458400000005], [1440065088.0, 59420000.0, 90.95635688799999], [1440066816.0, 59440000.0, 91.12827238400001], [1440068544.0, 59460000.0, 91.30033053599999], [1440070272.0, 59480000.0, 91.47253139200004], [1440072000.0, 59500000.0, 91.64487500000001], [1440073728.0, 59520000.0, 91.81736140800001], [1440075456.0, 59540000.0, 91.98999066399996], [1440077184.0, 59560000.0, 92.16276281600003], [1440078912.0, 59580000.0, 92.33567791200002], [1440080640.0, 59600000.0, 92.50873599999998], [1440082368.0, 59620000.0, 92.68193712799997], [1440084096.0, 59640000.0, 92.85528134400008], [1440085824.0, 59660000.0, 93.028768696], [1440087552.0, 59680000.0, 93.20239923199999], [1440089280.0, 59700000.0, 93.37617299999998], [1440091008.0, 59720000.0, 93.55009004800003], [1440092736.0, 59740000.0, 93.724150424], [1440094464.0, 59760000.0, 93.89835417599998], [1440096192.0, 59780000.0, 94.07270135199997], [1440097920.0, 59800000.0, 94.24719200000003], [1440099648.0, 59820000.0, 94.42182616800004], [1440101376.0, 59840000.0, 94.596603904], [1440103104.0, 59860000.0, 94.77152525599996], [1440104832.0, 59880000.0, 94.94659027200005], [1440106560.0, 59900000.0, 95.12179900000004], [1440108288.0, 59920000.0, 95.297151488], [1440110016.0, 59940000.0, 95.472647784], [1440111744.0, 59960000.0, 95.64828793600003], [1440113472.0, 59980000.0, 95.82407199200003], [1440115200.0, 60000000.0, 96.0], [1440116928.0, 60020000.0, 96.17607200799998], [1440118656.0, 60040000.0, 96.35228806399999], [1440120384.0, 60060000.0, 96.52864821600002], [1440122112.0, 60080000.0, 96.70515251199998], [1440123840.0, 60100000.0, 96.881801], [1440125568.0, 60120000.0, 97.05859372799996], [1440127296.0, 60140000.0, 97.23553074400002], [1440129024.0, 60160000.0, 97.412612096], [1440130752.0, 60180000.0, 97.58983783199999], [1440132480.0, 60200000.0, 97.76720799999997], [1440134208.0, 60220000.0, 97.94472264800004], [1440135936.0, 60240000.0, 98.12238182399999], [1440137664.0, 60260000.0, 98.30018557599998], [1440139392.0, 60280000.0, 98.47813395199996], [1440141120.0, 60300000.0, 98.65622700000002], [1440142848.0, 60320000.0, 98.83446476800002], [1440144576.0, 60340000.0, 99.01284730399998], [1440146304.0, 60360000.0, 99.19137465599997], [1440148032.0, 60380000.0, 99.37004687200003], [1440149760.0, 60400000.0, 99.548864], [1440151488.0, 60420000.0, 99.72782608799997], [1440153216.0, 60440000.0, 99.90693318399994], [1440154944.0, 60460000.0, 100.08618533600001], [1440156672.0, 60480000.0, 100.26558259200002], [1440158400.0, 60500000.0, 100.44512499999999], [1440160128.0, 60520000.0, 100.62481260799998], [1440161856.0, 60540000.0, 100.804645464], [1440163584.0, 60560000.0, 100.98462361600002], [1440165312.0, 60580000.0, 101.16474711199996], [1440167040.0, 60600000.0, 101.34501599999999], [1440168768.0, 60620000.0, 101.525430328], [1440170496.0, 60640000.0, 101.705990144], [1440172224.0, 60660000.0, 101.88669549599999], [1440173952.0, 60680000.0, 102.06754643199997], [1440175680.0, 60700000.0, 102.24854300000001], [1440177408.0, 60720000.0, 102.42968524800003], [1440179136.0, 60740000.0, 102.61097322399999], [1440180864.0, 60760000.0, 102.79240697599998], [1440182592.0, 60780000.0, 102.97398655200001], [1440184320.0, 60800000.0, 103.15571200000002], [1440186048.0, 60820000.0, 103.33758336799998], [1440187776.0, 60840000.0, 103.51960070399996], [1440189504.0, 60860000.0, 103.70176405600003], [1440191232.0, 60880000.0, 103.884073472], [1440192960.0, 60900000.0, 104.06652899999999], [1440194688.0, 60920000.0, 104.24913068799997], [1440196416.0, 60940000.0, 104.43187858400002], [1440198144.0, 60960000.0, 104.61477273600003], [1440199872.0, 60980000.0, 104.79781319199999], [1440201600.0, 61000000.0, 104.98099999999994], [1440203328.0, 61020000.0, 105.16433320800003], [1440205056.0, 61040000.0, 105.34781286400003], [1440206784.0, 61060000.0, 105.53143901599995], [1440208512.0, 61080000.0, 105.71521171199996], [1440210240.0, 61100000.0, 105.89913100000003], [1440211968.0, 61120000.0, 106.08319692799998], [1440213696.0, 61140000.0, 106.26740954399997], [1440215424.0, 61160000.0, 106.45176889599995], [1440217152.0, 61180000.0, 106.63627503200004], [1440218880.0, 61200000.0, 106.82092800000001], [1440220608.0, 61220000.0, 107.00572784799999], [1440222336.0, 61240000.0, 107.19067462399997], [1440224064.0, 61260000.0, 107.37576837600005], [1440225792.0, 61280000.0, 107.56100915200003], [1440227520.0, 61300000.0, 107.746397], [1440229248.0, 61320000.0, 107.93193196799996], [1440230976.0, 61340000.0, 108.11761410400001], [1440232704.0, 61360000.0, 108.30344345600002], [1440234432.0, 61380000.0, 108.489420072], [1440236160.0, 61400000.0, 108.67554399999996], [1440237888.0, 61420000.0, 108.86181528800003], [1440239616.0, 61440000.0, 109.048233984], [1440241344.0, 61460000.0, 109.234800136], [1440243072.0, 61480000.0, 109.42151379199997], [1440244800.0, 61500000.0, 109.60837500000005], [1440246528.0, 61520000.0, 109.79538380800001], [1440248256.0, 61540000.0, 109.98254026400001], [1440249984.0, 61560000.0, 110.16984441599998], [1440251712.0, 61580000.0, 110.35729631200003], [1440253440.0, 61600000.0, 110.54489600000001], [1440255168.0, 61620000.0, 110.732643528], [1440256896.0, 61640000.0, 110.92053894399996], [1440258624.0, 61660000.0, 111.10858229600002], [1440260352.0, 61680000.0, 111.29677363200001], [1440262080.0, 61700000.0, 111.48511299999998], [1440263808.0, 61720000.0, 111.673600448], [1440265536.0, 61740000.0, 111.86223602400001], [1440267264.0, 61760000.0, 112.05101977600003], [1440268992.0, 61780000.0, 112.239951752], [1440270720.0, 61800000.0, 112.42903199999998], [1440272448.0, 61820000.0, 112.61826056800004], [1440274176.0, 61840000.0, 112.80763750399998], [1440275904.0, 61860000.0, 112.99716285599999], [1440277632.0, 61880000.0, 113.18683667199997], [1440279360.0, 61900000.0, 113.37665900000005], [1440281088.0, 61920000.0, 113.56662988800002], [1440282816.0, 61940000.0, 113.75674938400002], [1440284544.0, 61960000.0, 113.94701753599998], [1440286272.0, 61980000.0, 114.13743439200002], [1440288000.0, 62000000.0, 114.32800000000003], [1440289728.0, 62020000.0, 114.51871440800002], [1440291456.0, 62040000.0, 114.70957766399998], [1440293184.0, 62060000.0, 114.90058981600004], [1440294912.0, 62080000.0, 115.09175091200004], [1440296640.0, 62100000.0, 115.28306099999996], [1440298368.0, 62120000.0, 115.47452012799998], [1440300096.0, 62140000.0, 115.66612834400007], [1440301824.0, 62160000.0, 115.85788569600003], [1440303552.0, 62180000.0, 116.049792232], [1440305280.0, 62200000.0, 116.24184799999996], [1440307008.0, 62220000.0, 116.43405304800005], [1440308736.0, 62240000.0, 116.62640742400002], [1440310464.0, 62260000.0, 116.81891117599999], [1440312192.0, 62280000.0, 117.01156435199997], [1440313920.0, 62300000.0, 117.20436700000003], [1440315648.0, 62320000.0, 117.39731916800004], [1440317376.0, 62340000.0, 117.59042090399998], [1440319104.0, 62360000.0, 117.78367225599999], [1440320832.0, 62380000.0, 117.97707327200006], [1440322560.0, 62400000.0, 118.170624], [1440324288.0, 62420000.0, 118.364324488], [1440326016.0, 62440000.0, 118.55817478399999], [1440327744.0, 62460000.0, 118.75217493600005], [1440329472.0, 62480000.0, 118.94632499200003], [1440331200.0, 62500000.0, 119.140625], [1440332928.0, 62520000.0, 119.33507500799996], [1440334656.0, 62540000.0, 119.52967506399995], [1440336384.0, 62560000.0, 119.72442521600004], [1440338112.0, 62580000.0, 119.91932551200003], [1440339840.0, 62600000.0, 120.114376], [1440341568.0, 62620000.0, 120.30957672799998], [1440343296.0, 62640000.0, 120.50492774400001], [1440345024.0, 62660000.0, 120.70042909600002], [1440346752.0, 62680000.0, 120.89608083200001], [1440348480.0, 62700000.0, 121.09188299999995], [1440350208.0, 62720000.0, 121.28783564800005], [1440351936.0, 62740000.0, 121.48393882399999], [1440353664.0, 62760000.0, 121.68019257599995], [1440355392.0, 62780000.0, 121.87659695199999], [1440357120.0, 62800000.0, 122.07315200000001], [1440358848.0, 62820000.0, 122.269857768], [1440360576.0, 62840000.0, 122.46671430399998], [1440362304.0, 62860000.0, 122.66372165599992], [1440364032.0, 62880000.0, 122.86087987200001], [1440365760.0, 62900000.0, 123.05818900000001], [1440367488.0, 62920000.0, 123.25564908799998], [1440369216.0, 62940000.0, 123.45326018399999], [1440370944.0, 62960000.0, 123.65102233600003], [1440372672.0, 62980000.0, 123.848935592], [1440374400.0, 63000000.0, 124.04699999999997], [1440376128.0, 63020000.0, 124.24521560799994], [1440377856.0, 63040000.0, 124.44358246400003], [1440379584.0, 63060000.0, 124.642100616], [1440381312.0, 63080000.0, 124.840770112], [1440383040.0, 63100000.0, 125.03959099999994], [1440384768.0, 63120000.0, 125.23856332800005], [1440386496.0, 63140000.0, 125.43768714400002], [1440388224.0, 63160000.0, 125.636962496], [1440389952.0, 63180000.0, 125.83638943199998], [1440391680.0, 63200000.0, 126.03596800000005], [1440393408.0, 63220000.0, 126.235698248], [1440395136.0, 63240000.0, 126.435580224], [1440396864.0, 63260000.0, 126.63561397599996], [1440398592.0, 63280000.0, 126.83579955200003], [1440400320.0, 63300000.0, 127.036137], [1440402048.0, 63320000.0, 127.23662636799996], [1440403776.0, 63340000.0, 127.43726770399998], [1440405504.0, 63360000.0, 127.63806105600003], [1440407232.0, 63380000.0, 127.83900647200001], [1440408960.0, 63400000.0, 128.04010399999999], [1440410688.0, 63420000.0, 128.24135368799995], [1440412416.0, 63440000.0, 128.44275558400005], [1440414144.0, 63460000.0, 128.64430973599997], [1440415872.0, 63480000.0, 128.84601619199998], [1440417600.0, 63500000.0, 129.04787499999998], [1440419328.0, 63520000.0, 129.24988620800002], [1440421056.0, 63540000.0, 129.45204986400006], [1440422784.0, 63560000.0, 129.65436601599998], [1440424512.0, 63580000.0, 129.856834712], [1440426240.0, 63600000.0, 130.05945600000007], [1440427968.0, 63620000.0, 130.262229928], [1440429696.0, 63640000.0, 130.465156544], [1440431424.0, 63660000.0, 130.66823589599994], [1440433152.0, 63680000.0, 130.87146803200005], [1440434880.0, 63700000.0, 131.074853], [1440436608.0, 63720000.0, 131.27839084800002], [1440438336.0, 63740000.0, 131.48208162399996], [1440440064.0, 63760000.0, 131.68592537600003], [1440441792.0, 63780000.0, 131.889922152], [1440443520.0, 63800000.0, 132.094072], [1440445248.0, 63820000.0, 132.29837496799996], [1440446976.0, 63840000.0, 132.502831104], [1440448704.0, 63860000.0, 132.707440456], [1440450432.0, 63880000.0, 132.91220307199995], [1440452160.0, 63900000.0, 133.11711899999995], [1440453888.0, 63920000.0, 133.32218828800004], [1440455616.0, 63940000.0, 133.52741098400003], [1440457344.0, 63960000.0, 133.732787136], [1440459072.0, 63980000.0, 133.93831679199997], [1440460800.0, 64000000.0, 134.14400000000006], [1440462528.0, 64020000.0, 134.34983680800005], [1440464256.0, 64040000.0, 134.55582726400002], [1440465984.0, 64060000.0, 134.76197141599994], [1440467712.0, 64080000.0, 134.96826931200005], [1440469440.0, 64100000.0, 135.17472100000003], [1440471168.0, 64120000.0, 135.381326528], [1440472896.0, 64140000.0, 135.58808594399997], [1440474624.0, 64160000.0, 135.79499929600007], [1440476352.0, 64180000.0, 136.00206663200004], [1440478080.0, 64200000.0, 136.209288], [1440479808.0, 64220000.0, 136.416663448], [1440481536.0, 64240000.0, 136.62419302400002], [1440483264.0, 64260000.0, 136.83187677600003], [1440484992.0, 64280000.0, 137.039714752], [1440486720.0, 64300000.0, 137.24770699999996], [1440488448.0, 64320000.0, 137.45585356800004], [1440490176.0, 64340000.0, 137.664154504], [1440491904.0, 64360000.0, 137.87260985599997], [1440493632.0, 64380000.0, 138.08121967199997], [1440495360.0, 64400000.0, 138.28998400000006], [1440497088.0, 64420000.0, 138.498902888], [1440498816.0, 64440000.0, 138.707976384], [1440500544.0, 64460000.0, 138.91720453599996], [1440502272.0, 64480000.0, 139.12658739200006], [1440504000.0, 64500000.0, 139.33612499999998], [1440505728.0, 64520000.0, 139.54581740800003], [1440507456.0, 64540000.0, 139.755664664], [1440509184.0, 64560000.0, 139.96566681600007], [1440510912.0, 64580000.0, 140.17582391200003], [1440512640.0, 64600000.0, 140.38613600000002], [1440514368.0, 64620000.0, 140.59660312799997], [1440516096.0, 64640000.0, 140.80722534400005], [1440517824.0, 64660000.0, 141.01800269600005], [1440519552.0, 64680000.0, 141.22893523199997], [1440521280.0, 64700000.0, 141.44002299999997], [1440523008.0, 64720000.0, 141.65126604800008], [1440524736.0, 64740000.0, 141.862664424], [1440526464.0, 64760000.0, 142.07421817599996], [1440528192.0, 64780000.0, 142.285927352], [1440529920.0, 64800000.0, 142.49779200000006], [1440531648.0, 64820000.0, 142.709812168], [1440533376.0, 64840000.0, 142.921987904], [1440535104.0, 64860000.0, 143.134319256], [1440536832.0, 64880000.0, 143.34680627200007], [1440538560.0, 64900000.0, 143.55944900000003], [1440540288.0, 64920000.0, 143.77224748800003], [1440542016.0, 64940000.0, 143.98520178399997], [1440543744.0, 64960000.0, 144.19831193600004], [1440545472.0, 64980000.0, 144.41157799200002], [1440547200.0, 65000000.0, 144.625], [1440548928.0, 65020000.0, 144.83857800799998], [1440550656.0, 65040000.0, 145.05231206399998], [1440552384.0, 65060000.0, 145.266202216], [1440554112.0, 65080000.0, 145.48024851200003], [1440555840.0, 65100000.0, 145.69445100000002], [1440557568.0, 65120000.0, 145.90880972799997], [1440559296.0, 65140000.0, 146.12332474400003], [1440561024.0, 65160000.0, 146.33799609599998], [1440562752.0, 65180000.0, 146.55282383200003], [1440564480.0, 65200000.0, 146.767808], [1440566208.0, 65220000.0, 146.98294864800005], [1440567936.0, 65240000.0, 147.198245824], [1440569664.0, 65260000.0, 147.413699576], [1440571392.0, 65280000.0, 147.62930995199991], [1440573120.0, 65300000.0, 147.84507700000003], [1440574848.0, 65320000.0, 148.06100076799999], [1440576576.0, 65340000.0, 148.27708130399998], [1440578304.0, 65360000.0, 148.49331865599996], [1440580032.0, 65380000.0, 148.70971287200007], [1440581760.0, 65400000.0, 148.926264], [1440583488.0, 65420000.0, 149.142972088], [1440585216.0, 65440000.0, 149.35983718399996], [1440586944.0, 65460000.0, 149.57685933600004], [1440588672.0, 65480000.0, 149.79403859199996], [1440590400.0, 65500000.0, 150.011375], [1440592128.0, 65520000.0, 150.22886860799994], [1440593856.0, 65540000.0, 150.44651946400003], [1440595584.0, 65560000.0, 150.66432761599998], [1440597312.0, 65580000.0, 150.88229311199999], [1440599040.0, 65600000.0, 151.10041599999994], [1440600768.0, 65620000.0, 151.31869632800004], [1440602496.0, 65640000.0, 151.53713414399996], [1440604224.0, 65660000.0, 151.75572949600001], [1440605952.0, 65680000.0, 151.97448243199997], [1440607680.0, 65700000.0, 152.19339300000004], [1440609408.0, 65720000.0, 152.412461248], [1440611136.0, 65740000.0, 152.631687224], [1440612864.0, 65760000.0, 152.85107097599996], [1440614592.0, 65780000.0, 153.07061255200006], [1440616320.0, 65800000.0, 153.290312], [1440618048.0, 65820000.0, 153.510169368], [1440619776.0, 65840000.0, 153.73018470399995], [1440621504.0, 65860000.0, 153.95035805600006], [1440623232.0, 65880000.0, 154.170689472], [1440624960.0, 65900000.0, 154.39117899999997], [1440626688.0, 65920000.0, 154.61182668799992], [1440628416.0, 65940000.0, 154.83263258400007], [1440630144.0, 65960000.0, 155.05359673599997], [1440631872.0, 65980000.0, 155.274719192], [1440633600.0, 66000000.0, 155.49599999999998], [1440635328.0, 66020000.0, 155.71743920800003], [1440637056.0, 66040000.0, 155.93903686400003], [1440638784.0, 66060000.0, 156.16079301599996], [1440640512.0, 66080000.0, 156.38270771199993], [1440642240.0, 66100000.0, 156.60478100000003], [1440643968.0, 66120000.0, 156.827012928], [1440645696.0, 66140000.0, 157.049403544], [1440647424.0, 66160000.0, 157.27195289599996], [1440649152.0, 66180000.0, 157.494661032], [1440650880.0, 66200000.0, 157.71752800000004], [1440652608.0, 66220000.0, 157.94055384799998], [1440654336.0, 66240000.0, 158.163738624], [1440656064.0, 66260000.0, 158.38708237600005], [1440657792.0, 66280000.0, 158.610585152], [1440659520.0, 66300000.0, 158.83424699999998], [1440661248.0, 66320000.0, 159.05806796799993], [1440662976.0, 66340000.0, 159.282048104], [1440664704.0, 66360000.0, 159.506187456], [1440666432.0, 66380000.0, 159.73048607199996], [1440668160.0, 66400000.0, 159.95494399999998], [1440669888.0, 66420000.0, 160.17956128800003], [1440671616.0, 66440000.0, 160.404337984], [1440673344.0, 66460000.0, 160.62927413600002], [1440675072.0, 66480000.0, 160.854369792], [1440676800.0, 66500000.0, 161.07962500000002], [1440678528.0, 66520000.0, 161.30503980800003], [1440680256.0, 66540000.0, 161.530614264], [1440681984.0, 66560000.0, 161.75634841599998], [1440683712.0, 66580000.0, 161.98224231200007], [1440685440.0, 66600000.0, 162.20829600000002], [1440687168.0, 66620000.0, 162.43450952799998], [1440688896.0, 66640000.0, 162.66088294399995], [1440690624.0, 66660000.0, 162.88741629600008], [1440692352.0, 66680000.0, 163.114109632], [1440694080.0, 66700000.0, 163.34096300000002], [1440695808.0, 66720000.0, 163.56797644799997], [1440697536.0, 66740000.0, 163.79515002400007], [1440699264.0, 66760000.0, 164.02248377599997], [1440700992.0, 66780000.0, 164.249977752], [1440702720.0, 66800000.0, 164.477632], [1440704448.0, 66820000.0, 164.70544656800004], [1440706176.0, 66840000.0, 164.93342150400002], [1440707904.0, 66860000.0, 165.16155685599998], [1440709632.0, 66880000.0, 165.38985267199996], [1440711360.0, 66900000.0, 165.618309], [1440713088.0, 66920000.0, 165.84692588800002], [1440714816.0, 66940000.0, 166.075703384], [1440716544.0, 66960000.0, 166.304641536], [1440718272.0, 66980000.0, 166.53374039200006], [1440720000.0, 67000000.0, 166.76300000000003], [1440721728.0, 67020000.0, 166.99242040800002], [1440723456.0, 67040000.0, 167.222001664], [1440725184.0, 67060000.0, 167.45174381600003], [1440726912.0, 67080000.0, 167.68164691200005], [1440728640.0, 67100000.0, 167.91171099999997], [1440730368.0, 67120000.0, 168.14193612799994], [1440732096.0, 67140000.0, 168.37232234400008], [1440733824.0, 67160000.0, 168.60286969600003], [1440735552.0, 67180000.0, 168.83357823199998], [1440737280.0, 67200000.0, 169.06444799999994], [1440739008.0, 67220000.0, 169.29547904800006], [1440740736.0, 67240000.0, 169.52667142399997], [1440742464.0, 67260000.0, 169.75802517599996], [1440744192.0, 67280000.0, 169.98954035199995], [1440745920.0, 67300000.0, 170.22121700000002], [1440747648.0, 67320000.0, 170.45305516800002], [1440749376.0, 67340000.0, 170.68505490399997], [1440751104.0, 67360000.0, 170.91721625599993], [1440752832.0, 67380000.0, 171.14953927200006], [1440754560.0, 67400000.0, 171.38202400000006], [1440756288.0, 67420000.0, 171.61467048799997], [1440758016.0, 67440000.0, 171.84747878399997], [1440759744.0, 67460000.0, 172.08044893600004], [1440761472.0, 67480000.0, 172.313580992], [1440763200.0, 67500000.0, 172.546875], [1440764928.0, 67520000.0, 172.780331008], [1440766656.0, 67540000.0, 173.01394906399997], [1440768384.0, 67560000.0, 173.24772921600004], [1440770112.0, 67580000.0, 173.48167151200002], [1440771840.0, 67600000.0, 173.71577599999995], [1440773568.0, 67620000.0, 173.95004272799994], [1440775296.0, 67640000.0, 174.18447174400004], [1440777024.0, 67660000.0, 174.419063096], [1440778752.0, 67680000.0, 174.653816832], [1440780480.0, 67700000.0, 174.88873299999995], [1440782208.0, 67720000.0, 175.12381164800001], [1440783936.0, 67740000.0, 175.35905282400003], [1440785664.0, 67760000.0, 175.59445657599997], [1440787392.0, 67780000.0, 175.83002295199998], [1440789120.0, 67800000.0, 176.06575200000006], [1440790848.0, 67820000.0, 176.30164376800002], [1440792576.0, 67840000.0, 176.53769830399995], [1440794304.0, 67860000.0, 176.77391565599996], [1440796032.0, 67880000.0, 177.01029587200003], [1440797760.0, 67900000.0, 177.24683900000002], [1440799488.0, 67920000.0, 177.48354508799994], [1440801216.0, 67940000.0, 177.72041418399994], [1440802944.0, 67960000.0, 177.95744633600003], [1440804672.0, 67980000.0, 178.194641592], [1440806400.0, 68000000.0, 178.43199999999996], [1440808128.0, 68020000.0, 178.66952160799994], [1440809856.0, 68040000.0, 178.90720646400004], [1440811584.0, 68060000.0, 179.14505461599998], [1440813312.0, 68080000.0, 179.38306611199997], [1440815040.0, 68100000.0, 179.62124099999994], [1440816768.0, 68120000.0, 179.85957932800005], [1440818496.0, 68140000.0, 180.09808114400002], [1440820224.0, 68160000.0, 180.336746496], [1440821952.0, 68180000.0, 180.57557543199997], [1440823680.0, 68200000.0, 180.81456800000004], [1440825408.0, 68220000.0, 181.05372424800004], [1440827136.0, 68240000.0, 181.293044224], [1440828864.0, 68260000.0, 181.53252797599998], [1440830592.0, 68280000.0, 181.77217555200008], [1440832320.0, 68300000.0, 182.011987], [1440834048.0, 68320000.0, 182.25196236799997], [1440835776.0, 68340000.0, 182.49210170399994], [1440837504.0, 68360000.0, 182.73240505600003], [1440839232.0, 68380000.0, 182.972872472], [1440840960.0, 68400000.0, 183.21350399999994], [1440842688.0, 68420000.0, 183.45429968799996], [1440844416.0, 68440000.0, 183.69525958400004], [1440846144.0, 68460000.0, 183.93638373599998], [1440847872.0, 68480000.0, 184.17767219199996], [1440849600.0, 68500000.0, 184.41912499999995], [1440851328.0, 68520000.0, 184.66074220800004], [1440853056.0, 68540000.0, 184.90252386400002], [1440854784.0, 68560000.0, 185.144470016], [1440856512.0, 68580000.0, 185.38658071199993], [1440858240.0, 68600000.0, 185.628856], [1440859968.0, 68620000.0, 185.871295928], [1440861696.0, 68640000.0, 186.11390054399996], [1440863424.0, 68660000.0, 186.35666989599997], [1440865152.0, 68680000.0, 186.59960403200006], [1440866880.0, 68700000.0, 186.842703], [1440868608.0, 68720000.0, 187.085966848], [1440870336.0, 68740000.0, 187.32939562399994], [1440872064.0, 68760000.0, 187.57298937600004], [1440873792.0, 68780000.0, 187.816748152], [1440875520.0, 68800000.0, 188.06067199999998], [1440877248.0, 68820000.0, 188.30476096799998], [1440878976.0, 68840000.0, 188.54901510400003], [1440880704.0, 68860000.0, 188.79343445600003], [1440882432.0, 68880000.0, 189.038019072], [1440884160.0, 68900000.0, 189.282769], [1440885888.0, 68920000.0, 189.52768428800002], [1440887616.0, 68940000.0, 189.77276498400005], [1440889344.0, 68960000.0, 190.01801113599996], [1440891072.0, 68980000.0, 190.26342279199997], [1440892800.0, 69000000.0, 190.50900000000007], [1440894528.0, 69020000.0, 190.75474280800003], [1440896256.0, 69040000.0, 191.000651264], [1440897984.0, 69060000.0, 191.24672541599995], [1440899712.0, 69080000.0, 191.49296531200005], [1440901440.0, 69100000.0, 191.739371], [1440903168.0, 69120000.0, 191.98594252799995], [1440904896.0, 69140000.0, 192.23267994399995], [1440906624.0, 69160000.0, 192.47958329600004], [1440908352.0, 69180000.0, 192.72665263200003], [1440910080.0, 69200000.0, 192.97388800000002], [1440911808.0, 69220000.0, 193.22128944799994], [1440913536.0, 69240000.0, 193.46885702400004], [1440915264.0, 69260000.0, 193.716590776], [1440916992.0, 69280000.0, 193.96449075199996], [1440918720.0, 69300000.0, 194.21255699999998], [1440920448.0, 69320000.0, 194.46078956800008], [1440922176.0, 69340000.0, 194.709188504], [1440923904.0, 69360000.0, 194.95775385599998], [1440925632.0, 69380000.0, 195.20648567199999], [1440927360.0, 69400000.0, 195.45538400000004], [1440929088.0, 69420000.0, 195.70444888800003], [1440930816.0, 69440000.0, 195.953680384], [1440932544.0, 69460000.0, 196.203078536], [1440934272.0, 69480000.0, 196.45264339200006], [1440936000.0, 69500000.0, 196.70237500000002], [1440937728.0, 69520000.0, 196.95227340799997], [1440939456.0, 69540000.0, 197.20233866399997], [1440941184.0, 69560000.0, 197.45257081600005], [1440942912.0, 69580000.0, 197.70296991200004], [1440944640.0, 69600000.0, 197.95353600000004], [1440946368.0, 69620000.0, 198.20426912799996], [1440948096.0, 69640000.0, 198.45516934400004], [1440949824.0, 69660000.0, 198.70623669600002], [1440951552.0, 69680000.0, 198.957471232], [1440953280.0, 69700000.0, 199.20887299999995], [1440955008.0, 69720000.0, 199.46044204800006], [1440956736.0, 69740000.0, 199.712178424], [1440958464.0, 69760000.0, 199.96408217599995], [1440960192.0, 69780000.0, 200.21615335199994], [1440961920.0, 69800000.0, 200.46839200000005], [1440963648.0, 69820000.0, 200.72079816800002], [1440965376.0, 69840000.0, 200.97337190399998], [1440967104.0, 69860000.0, 201.226113256], [1440968832.0, 69880000.0, 201.47902227200004], [1440970560.0, 69900000.0, 201.732099], [1440972288.0, 69920000.0, 201.98534348799998], [1440974016.0, 69940000.0, 202.23875578399998], [1440975744.0, 69960000.0, 202.49233593600002], [1440977472.0, 69980000.0, 202.74608399200005], [1440979200.0, 70000000.0, 203.0], [1440980928.0, 70020000.0, 203.25408400799998], [1440982656.0, 70040000.0, 203.50833606399993], [1440984384.0, 70060000.0, 203.762756216], [1440986112.0, 70080000.0, 204.017344512], [1440987840.0, 70100000.0, 204.27210099999996], [1440989568.0, 70120000.0, 204.52702572799993], [1440991296.0, 70140000.0, 204.78211874400003], [1440993024.0, 70160000.0, 205.037380096], [1440994752.0, 70180000.0, 205.29280983199996], [1440996480.0, 70200000.0, 205.54840799999994], [1440998208.0, 70220000.0, 205.80417464800001], [1440999936.0, 70240000.0, 206.06010982400002], [1441001664.0, 70260000.0, 206.316213576], [1441003392.0, 70280000.0, 206.5724859519999], [1441005120.0, 70300000.0, 206.82892700000005], [1441006848.0, 70320000.0, 207.085536768], [1441008576.0, 70340000.0, 207.342315304], [1441010304.0, 70360000.0, 207.59926265599992], [1441012032.0, 70380000.0, 207.85637887200005], [1441013760.0, 70400000.0, 208.11366399999997], [1441015488.0, 70420000.0, 208.37111808799997], [1441017216.0, 70440000.0, 208.62874118399992], [1441018944.0, 70460000.0, 208.886533336], [1441020672.0, 70480000.0, 209.14449459199997], [1441022400.0, 70500000.0, 209.402625], [1441024128.0, 70520000.0, 209.66092460799993], [1441025856.0, 70540000.0, 209.91939346400002], [1441027584.0, 70560000.0, 210.178031616], [1441029312.0, 70580000.0, 210.43683911199994], [1441031040.0, 70600000.0, 210.69581599999998], [1441032768.0, 70620000.0, 210.95496232800002], [1441034496.0, 70640000.0, 211.21427814399996], [1441036224.0, 70660000.0, 211.473763496], [1441037952.0, 70680000.0, 211.73341843199998], [1441039680.0, 70700000.0, 211.99324300000004], [1441041408.0, 70720000.0, 212.253237248], [1441043136.0, 70740000.0, 212.51340122399998], [1441044864.0, 70760000.0, 212.77373497599996], [1441046592.0, 70780000.0, 213.0342385520001], [1441048320.0, 70800000.0, 213.29491200000004], [1441050048.0, 70820000.0, 213.55575536799995], [1441051776.0, 70840000.0, 213.8167687039999], [1441053504.0, 70860000.0, 214.07795205600004], [1441055232.0, 70880000.0, 214.33930547200004], [1441056960.0, 70900000.0, 214.60082899999998], [1441058688.0, 70920000.0, 214.86252268799993], [1441060416.0, 70940000.0, 215.12438658400004], [1441062144.0, 70960000.0, 215.386420736], [1441063872.0, 70980000.0, 215.64862519199997], [1441065600.0, 71000000.0, 215.91099999999994], [1441067328.0, 71020000.0, 216.173545208], [1441069056.0, 71040000.0, 216.436260864], [1441070784.0, 71060000.0, 216.69914701599998], [1441072512.0, 71080000.0, 216.96220371199993], [1441074240.0, 71100000.0, 217.22543100000004], [1441075968.0, 71120000.0, 217.48882892800003], [1441077696.0, 71140000.0, 217.752397544], [1441079424.0, 71160000.0, 218.01613689599992], [1441081152.0, 71180000.0, 218.28004703200003], [1441082880.0, 71200000.0, 218.54412800000003], [1441084608.0, 71220000.0, 218.80837984800002], [1441086336.0, 71240000.0, 219.07280262399993], [1441088064.0, 71260000.0, 219.33739637600004], [1441089792.0, 71280000.0, 219.602161152], [1441091520.0, 71300000.0, 219.86709699999997], [1441093248.0, 71320000.0, 220.132203968], [1441094976.0, 71340000.0, 220.397482104], [1441096704.0, 71360000.0, 220.66293145600005], [1441098432.0, 71380000.0, 220.928552072], [1441100160.0, 71400000.0, 221.19434399999997], [1441101888.0, 71420000.0, 221.46030728800005], [1441103616.0, 71440000.0, 221.72644198400002], [1441105344.0, 71460000.0, 221.99274813599996], [1441107072.0, 71480000.0, 222.259225792], [1441108800.0, 71500000.0, 222.52587500000004], [1441110528.0, 71520000.0, 222.79269580800005], [1441112256.0, 71540000.0, 223.059688264], [1441113984.0, 71560000.0, 223.32685241599995], [1441115712.0, 71580000.0, 223.59418831200006], [1441117440.0, 71600000.0, 223.861696], [1441119168.0, 71620000.0, 224.12937552799997], [1441120896.0, 71640000.0, 224.39722694399993], [1441122624.0, 71660000.0, 224.66525029600007], [1441124352.0, 71680000.0, 224.93344563200003], [1441126080.0, 71700000.0, 225.201813], [1441127808.0, 71720000.0, 225.47035244799997], [1441129536.0, 71740000.0, 225.73906402400007], [1441131264.0, 71760000.0, 226.007947776], [1441132992.0, 71780000.0, 226.27700375199998], [1441134720.0, 71800000.0, 226.546232], [1441136448.0, 71820000.0, 226.81563256800004], [1441138176.0, 71840000.0, 227.085205504], [1441139904.0, 71860000.0, 227.354950856], [1441141632.0, 71880000.0, 227.62486867199993], [1441143360.0, 71900000.0, 227.89495900000009], [1441145088.0, 71920000.0, 228.16522188800005], [1441146816.0, 71940000.0, 228.43565738400002], [1441148544.0, 71960000.0, 228.70626553599996], [1441150272.0, 71980000.0, 228.97704639200006], [1441152000.0, 72000000.0, 229.24800000000005], [1441153728.0, 72020000.0, 229.519126408], [1441155456.0, 72040000.0, 229.790425664], [1441157184.0, 72060000.0, 230.06189781600006], [1441158912.0, 72080000.0, 230.333542912], [1441160640.0, 72100000.0, 230.60536100000002], [1441162368.0, 72120000.0, 230.87735212799998], [1441164096.0, 72140000.0, 231.14951634400003], [1441165824.0, 72160000.0, 231.42185369600003], [1441167552.0, 72180000.0, 231.694364232], [1441169280.0, 72200000.0, 231.96704799999995], [1441171008.0, 72220000.0, 232.23990504800008], [1441172736.0, 72240000.0, 232.51293542400003], [1441174464.0, 72260000.0, 232.78613917599998], [1441176192.0, 72280000.0, 233.05951635199995], [1441177920.0, 72300000.0, 233.33306700000003], [1441179648.0, 72320000.0, 233.606791168], [1441181376.0, 72340000.0, 233.880688904], [1441183104.0, 72360000.0, 234.154760256], [1441184832.0, 72380000.0, 234.42900527200007], [1441186560.0, 72400000.0, 234.70342399999998], [1441188288.0, 72420000.0, 234.978016488], [1441190016.0, 72440000.0, 235.25278278399998], [1441191744.0, 72460000.0, 235.5277229360001], [1441193472.0, 72480000.0, 235.802836992], [1441195200.0, 72500000.0, 236.078125], [1441196928.0, 72520000.0, 236.35358700799995], [1441198656.0, 72540000.0, 236.62922306399997], [1441200384.0, 72560000.0, 236.90503321600005], [1441202112.0, 72580000.0, 237.181017512], [1441203840.0, 72600000.0, 237.457176], [1441205568.0, 72620000.0, 237.73350872799992], [1441207296.0, 72640000.0, 238.01001574400007], [1441209024.0, 72660000.0, 238.286697096], [1441210752.0, 72680000.0, 238.56355283199994], [1441212480.0, 72700000.0, 238.84058299999992], [1441214208.0, 72720000.0, 239.11778764800005], [1441215936.0, 72740000.0, 239.39516682400003], [1441217664.0, 72760000.0, 239.67272057599996], [1441219392.0, 72780000.0, 239.95044895199993], [1441221120.0, 72800000.0, 240.22835200000006], [1441222848.0, 72820000.0, 240.50642976800003], [1441224576.0, 72840000.0, 240.78468230399994], [1441226304.0, 72860000.0, 241.06310965599997], [1441228032.0, 72880000.0, 241.34171187200002], [1441229760.0, 72900000.0, 241.62048900000002], [1441231488.0, 72920000.0, 241.89944108799997], [1441233216.0, 72940000.0, 242.17856818399991], [1441234944.0, 72960000.0, 242.45787033600004], [1441236672.0, 72980000.0, 242.73734759200002], [1441238400.0, 73000000.0, 243.017], [1441240128.0, 73020000.0, 243.29682760799992], [1441241856.0, 73040000.0, 243.57683046400004], [1441243584.0, 73060000.0, 243.85700861600003], [1441245312.0, 73080000.0, 244.13736211199998], [1441247040.0, 73100000.0, 244.41789099999994], [1441248768.0, 73120000.0, 244.698595328], [1441250496.0, 73140000.0, 244.97947514400002], [1441252224.0, 73160000.0, 245.26053049599994], [1441253952.0, 73180000.0, 245.54176143199996], [1441255680.0, 73200000.0, 245.82316800000004], [1441257408.0, 73220000.0, 246.10475024800002], [1441259136.0, 73240000.0, 246.38650822399998], [1441260864.0, 73260000.0, 246.66844197599994], [1441262592.0, 73280000.0, 246.95055155200004], [1441264320.0, 73300000.0, 247.23283700000005], [1441266048.0, 73320000.0, 247.515298368], [1441267776.0, 73340000.0, 247.79793570399994], [1441269504.0, 73360000.0, 248.0807490560001], [1441271232.0, 73380000.0, 248.36373847200002], [1441272960.0, 73400000.0, 248.64690399999995], [1441274688.0, 73420000.0, 248.93024568799993], [1441276416.0, 73440000.0, 249.21376358400005], [1441278144.0, 73460000.0, 249.497457736], [1441279872.0, 73480000.0, 249.78132819199996], [1441281600.0, 73500000.0, 250.06537499999996], [1441283328.0, 73520000.0, 250.34959820800003], [1441285056.0, 73540000.0, 250.633997864], [1441286784.0, 73560000.0, 250.91857401599998], [1441288512.0, 73580000.0, 251.20332671199995], [1441290240.0, 73600000.0, 251.488256], [1441291968.0, 73620000.0, 251.77336192799999], [1441293696.0, 73640000.0, 252.05864454399997], [1441295424.0, 73660000.0, 252.34410389599992], [1441297152.0, 73680000.0, 252.62974003200003], [1441298880.0, 73700000.0, 252.91555300000002], [1441300608.0, 73720000.0, 253.20154284799997], [1441302336.0, 73740000.0, 253.48770962399996], [1441304064.0, 73760000.0, 253.774053376], [1441305792.0, 73780000.0, 254.06057415200002], [1441307520.0, 73800000.0, 254.347272], [1441309248.0, 73820000.0, 254.63414696799992], [1441310976.0, 73840000.0, 254.92119910400004], [1441312704.0, 73860000.0, 255.208428456], [1441314432.0, 73880000.0, 255.49583507199998], [1441316160.0, 73900000.0, 255.783419], [1441317888.0, 73920000.0, 256.07118028800005], [1441319616.0, 73940000.0, 256.359118984], [1441321344.0, 73960000.0, 256.64723513599995], [1441323072.0, 73980000.0, 256.93552879199996], [1441324800.0, 74000000.0, 257.22400000000005], [1441326528.0, 74020000.0, 257.512648808], [1441328256.0, 74040000.0, 257.801475264], [1441329984.0, 74060000.0, 258.090479416], [1441331712.0, 74080000.0, 258.37966131200005], [1441333440.0, 74100000.0, 258.66902100000004], [1441335168.0, 74120000.0, 258.958558528], [1441336896.0, 74140000.0, 259.24827394399995], [1441338624.0, 74160000.0, 259.5381672960001], [1441340352.0, 74180000.0, 259.828238632], [1441342080.0, 74200000.0, 260.11848799999996], [1441343808.0, 74220000.0, 260.4089154479999], [1441345536.0, 74240000.0, 260.69952102400003], [1441347264.0, 74260000.0, 260.990304776], [1441348992.0, 74280000.0, 261.281266752], [1441350720.0, 74300000.0, 261.572407], [1441352448.0, 74320000.0, 261.86372556800006], [1441354176.0, 74340000.0, 262.155222504], [1441355904.0, 74360000.0, 262.44689785599996], [1441357632.0, 74380000.0, 262.7387516719999], [1441359360.0, 74400000.0, 263.03078400000004], [1441361088.0, 74420000.0, 263.32299488800004], [1441362816.0, 74440000.0, 263.61538438400004], [1441364544.0, 74460000.0, 263.9079525359999], [1441366272.0, 74480000.0, 264.20069939200005], [1441368000.0, 74500000.0, 264.49362500000007], [1441369728.0, 74520000.0, 264.7867294079999], [1441371456.0, 74540000.0, 265.080012664], [1441373184.0, 74560000.0, 265.37347481600005], [1441374912.0, 74580000.0, 265.6671159120001], [1441376640.0, 74600000.0, 265.960936], [1441378368.0, 74620000.0, 266.25493512799994], [1441380096.0, 74640000.0, 266.54911334400003], [1441381824.0, 74660000.0, 266.84347069600005], [1441383552.0, 74680000.0, 267.13800723199995], [1441385280.0, 74700000.0, 267.432723], [1441387008.0, 74720000.0, 267.72761804800007], [1441388736.0, 74740000.0, 268.022692424], [1441390464.0, 74760000.0, 268.31794617599996], [1441392192.0, 74780000.0, 268.6133793519999], [1441393920.0, 74800000.0, 268.90899200000007], [1441395648.0, 74820000.0, 269.20478416800006], [1441397376.0, 74840000.0, 269.50075590399996], [1441399104.0, 74860000.0, 269.79690725599994], [1441400832.0, 74880000.0, 270.093238272], [1441402560.0, 74900000.0, 270.38974900000005], [1441404288.0, 74920000.0, 270.686439488], [1441406016.0, 74940000.0, 270.98330978399997], [1441407744.0, 74960000.0, 271.2803599360001], [1441409472.0, 74980000.0, 271.57758999200007], [1441411200.0, 75000000.0, 271.875], [1441412928.0, 75020000.0, 272.17259000799993], [1441414656.0, 75040000.0, 272.4703600639999], [1441416384.0, 75060000.0, 272.76831021600003], [1441418112.0, 75080000.0, 273.066440512], [1441419840.0, 75100000.0, 273.36475099999996], [1441421568.0, 75120000.0, 273.6632417279999], [1441423296.0, 75140000.0, 273.9619127440001], [1441425024.0, 75160000.0, 274.260764096], [1441426752.0, 75180000.0, 274.55979583199996], [1441428480.0, 75200000.0, 274.85900799999996], [1441430208.0, 75220000.0, 275.15840064800005], [1441431936.0, 75240000.0, 275.4579738240001], [1441433664.0, 75260000.0, 275.757727576], [1441435392.0, 75280000.0, 276.0576619519999], [1441437120.0, 75300000.0, 276.35777700000006], [1441438848.0, 75320000.0, 276.658072768], [1441440576.0, 75340000.0, 276.958549304], [1441442304.0, 75360000.0, 277.25920665599995], [1441444032.0, 75380000.0, 277.56004487200005], [1441445760.0, 75400000.0, 277.861064], [1441447488.0, 75420000.0, 278.1622640879999], [1441449216.0, 75440000.0, 278.463645184], [1441450944.0, 75460000.0, 278.76520733600006], [1441452672.0, 75480000.0, 279.066950592], [1441454400.0, 75500000.0, 279.36887499999995], [1441456128.0, 75520000.0, 279.6709806079999], [1441457856.0, 75540000.0, 279.97326746400006], [1441459584.0, 75560000.0, 280.275735616], [1441461312.0, 75580000.0, 280.578385112], [1441463040.0, 75600000.0, 280.881216], [1441464768.0, 75620000.0, 281.1842283280001], [1441466496.0, 75640000.0, 281.487422144], [1441468224.0, 75660000.0, 281.790797496], [1441469952.0, 75680000.0, 282.09435443199993], [1441471680.0, 75700000.0, 282.398093], [1441473408.0, 75720000.0, 282.702013248], [1441475136.0, 75740000.0, 283.00611522400004], [1441476864.0, 75760000.0, 283.31039897599993], [1441478592.0, 75780000.0, 283.61486455200003], [1441480320.0, 75800000.0, 283.91951200000005], [1441482048.0, 75820000.0, 284.22434136799995], [1441483776.0, 75840000.0, 284.52935270399996], [1441485504.0, 75860000.0, 284.834546056], [1441487232.0, 75880000.0, 285.139921472], [1441488960.0, 75900000.0, 285.445479], [1441490688.0, 75920000.0, 285.7512186879999], [1441492416.0, 75940000.0, 286.0571405840001], [1441494144.0, 75960000.0, 286.363244736], [1441495872.0, 75980000.0, 286.6695311919999], [1441497600.0, 76000000.0, 286.97599999999994], [1441499328.0, 76020000.0, 287.282651208], [1441501056.0, 76040000.0, 287.58948486400004], [1441502784.0, 76060000.0, 287.896501016], [1441504512.0, 76080000.0, 288.2036997119999], [1441506240.0, 76100000.0, 288.511081], [1441507968.0, 76120000.0, 288.81864492799997], [1441509696.0, 76140000.0, 289.12639154399994], [1441511424.0, 76160000.0, 289.4343208959999], [1441513152.0, 76180000.0, 289.74243303200006], [1441514880.0, 76200000.0, 290.05072800000005], [1441516608.0, 76220000.0, 290.359205848], [1441518336.0, 76240000.0, 290.667866624], [1441520064.0, 76260000.0, 290.976710376], [1441521792.0, 76280000.0, 291.285737152], [1441523520.0, 76300000.0, 291.59494699999993], [1441525248.0, 76320000.0, 291.90433996799993], [1441526976.0, 76340000.0, 292.213916104], [1441528704.0, 76360000.0, 292.5236754560001], [1441530432.0, 76380000.0, 292.83361807200004], [1441532160.0, 76400000.0, 293.14374399999997], [1441533888.0, 76420000.0, 293.45405328800007], [1441535616.0, 76440000.0, 293.76454598400005], [1441537344.0, 76460000.0, 294.075222136], [1441539072.0, 76480000.0, 294.38608179199997], [1441540800.0, 76500000.0, 294.6971250000001], [1441542528.0, 76520000.0, 295.00835180800004], [1441544256.0, 76540000.0, 295.31976226399996], [1441545984.0, 76560000.0, 295.63135641599996], [1441547712.0, 76580000.0, 295.9431343120001], [1441549440.0, 76600000.0, 296.25509600000004], [1441551168.0, 76620000.0, 296.56724152799995], [1441552896.0, 76640000.0, 296.87957094399997], [1441554624.0, 76660000.0, 297.1920842960001], [1441556352.0, 76680000.0, 297.504781632], [1441558080.0, 76700000.0, 297.8176629999999], [1441559808.0, 76720000.0, 298.13072844799996], [1441561536.0, 76740000.0, 298.44397802400005], [1441563264.0, 76760000.0, 298.757411776], [1441564992.0, 76780000.0, 299.071029752], [1441566720.0, 76800000.0, 299.38483199999996], [1441568448.0, 76820000.0, 299.6988185680001], [1441570176.0, 76840000.0, 300.012989504], [1441571904.0, 76860000.0, 300.32734485599997], [1441573632.0, 76880000.0, 300.64188467199995], [1441575360.0, 76900000.0, 300.95660900000007], [1441577088.0, 76920000.0, 301.27151788800006], [1441578816.0, 76940000.0, 301.586611384], [1441580544.0, 76960000.0, 301.901889536], [1441582272.0, 76980000.0, 302.21735239200007], [1441584000.0, 77000000.0, 302.5330000000001], [1441585728.0, 77020000.0, 302.848832408], [1441587456.0, 77040000.0, 303.1648496639999], [1441589184.0, 77060000.0, 303.48105181600005], [1441590912.0, 77080000.0, 303.7974389120001], [1441592640.0, 77100000.0, 304.114011], [1441594368.0, 77120000.0, 304.43076812799995], [1441596096.0, 77140000.0, 304.7477103440001], [1441597824.0, 77160000.0, 305.06483769600004], [1441599552.0, 77180000.0, 305.38215023199996], [1441601280.0, 77200000.0, 305.6996479999999], [1441603008.0, 77220000.0, 306.0173310480001], [1441604736.0, 77240000.0, 306.335199424], [1441606464.0, 77260000.0, 306.653253176], [1441608192.0, 77280000.0, 306.971492352], [1441609920.0, 77300000.0, 307.28991700000006], [1441611648.0, 77320000.0, 307.608527168], [1441613376.0, 77340000.0, 307.927322904], [1441615104.0, 77360000.0, 308.2463042559999], [1441616832.0, 77380000.0, 308.5654712720001], [1441618560.0, 77400000.0, 308.88482400000004], [1441620288.0, 77420000.0, 309.204362488], [1441622016.0, 77440000.0, 309.52408678399996], [1441623744.0, 77460000.0, 309.84399693600005], [1441625472.0, 77480000.0, 310.16409299200006], [1441627200.0, 77500000.0, 310.484375], [1441628928.0, 77520000.0, 310.8048430079999], [1441630656.0, 77540000.0, 311.12549706399994], [1441632384.0, 77560000.0, 311.4463372160001], [1441634112.0, 77580000.0, 311.767363512], [1441635840.0, 77600000.0, 312.088576], [1441637568.0, 77620000.0, 312.40997472799995], [1441639296.0, 77640000.0, 312.73155974400004], [1441641024.0, 77660000.0, 313.05333109599997], [1441642752.0, 77680000.0, 313.375288832], [1441644480.0, 77700000.0, 313.69743299999993], [1441646208.0, 77720000.0, 314.01976364800004], [1441647936.0, 77740000.0, 314.342280824], [1441649664.0, 77760000.0, 314.664984576], [1441651392.0, 77780000.0, 314.9878749519999], [1441653120.0, 77800000.0, 315.31095200000004], [1441654848.0, 77820000.0, 315.63421576800005], [1441656576.0, 77840000.0, 315.95766630399993], [1441658304.0, 77860000.0, 316.281303656], [1441660032.0, 77880000.0, 316.6051278720001], [1441661760.0, 77900000.0, 316.929139], [1441663488.0, 77920000.0, 317.25333708799997], [1441665216.0, 77940000.0, 317.5777221839999], [1441666944.0, 77960000.0, 317.902294336], [1441668672.0, 77980000.0, 318.22705359200006], [1441670400.0, 78000000.0, 318.55199999999996], [1441672128.0, 78020000.0, 318.8771336079999], [1441673856.0, 78040000.0, 319.20245446399997], [1441675584.0, 78060000.0, 319.527962616], [1441677312.0, 78080000.0, 319.85365811199995], [1441679040.0, 78100000.0, 320.1795409999999], [1441680768.0, 78120000.0, 320.50561132800004], [1441682496.0, 78140000.0, 320.83186914400005], [1441684224.0, 78160000.0, 321.158314496], [1441685952.0, 78180000.0, 321.4849474319999], [1441687680.0, 78200000.0, 321.81176800000003], [1441689408.0, 78220000.0, 322.138776248], [1441691136.0, 78240000.0, 322.465972224], [1441692864.0, 78260000.0, 322.79335597599993], [1441694592.0, 78280000.0, 323.12092755200007], [1441696320.0, 78300000.0, 323.44868700000006], [1441698048.0, 78320000.0, 323.776634368], [1441699776.0, 78340000.0, 324.1047697039999], [1441701504.0, 78360000.0, 324.4330930560001], [1441703232.0, 78380000.0, 324.761604472], [1441704960.0, 78400000.0, 325.09030399999995], [1441706688.0, 78420000.0, 325.41919168799996], [1441708416.0, 78440000.0, 325.7482675840001], [1441710144.0, 78460000.0, 326.077531736], [1441711872.0, 78480000.0, 326.406984192], [1441713600.0, 78500000.0, 326.73662499999995], [1441715328.0, 78520000.0, 327.06645420800004], [1441717056.0, 78540000.0, 327.396471864], [1441718784.0, 78560000.0, 327.726678016], [1441720512.0, 78580000.0, 328.0570727119999], [1441722240.0, 78600000.0, 328.387656], [1441723968.0, 78620000.0, 328.71842792800004], [1441725696.0, 78640000.0, 329.04938854399995], [1441727424.0, 78660000.0, 329.3805378959999], [1441729152.0, 78680000.0, 329.711876032], [1441730880.0, 78700000.0, 330.043403], [1441732608.0, 78720000.0, 330.375118848], [1441734336.0, 78740000.0, 330.70702362399993], [1441736064.0, 78760000.0, 331.03911737600004], [1441737792.0, 78780000.0, 331.37140015200004], [1441739520.0, 78800000.0, 331.70387200000005], [1441741248.0, 78820000.0, 332.03653296799996], [1441742976.0, 78840000.0, 332.36938310400006], [1441744704.0, 78860000.0, 332.702422456], [1441746432.0, 78880000.0, 333.03565107199995], [1441748160.0, 78900000.0, 333.36906899999997], [1441749888.0, 78920000.0, 333.70267628800013], [1441751616.0, 78940000.0, 334.036472984], [1441753344.0, 78960000.0, 334.370459136], [1441755072.0, 78980000.0, 334.704634792], [1441756800.0, 79000000.0, 335.03900000000004], [1441758528.0, 79020000.0, 335.3735548080001], [1441760256.0, 79040000.0, 335.708299264], [1441761984.0, 79060000.0, 336.04323341599996], [1441763712.0, 79080000.0, 336.37835731200005], [1441765440.0, 79100000.0, 336.71367100000003], [1441767168.0, 79120000.0, 337.049174528], [1441768896.0, 79140000.0, 337.3848679439999], [1441770624.0, 79160000.0, 337.72075129600006], [1441772352.0, 79180000.0, 338.05682463200003], [1441774080.0, 79200000.0, 338.3930879999999], [1441775808.0, 79220000.0, 338.72954144799996], [1441777536.0, 79240000.0, 339.06618502400005], [1441779264.0, 79260000.0, 339.40301877600007], [1441780992.0, 79280000.0, 339.74004275199997], [1441782720.0, 79300000.0, 340.0772569999999], [1441784448.0, 79320000.0, 340.41466156800004], [1441786176.0, 79340000.0, 340.75225650400006], [1441787904.0, 79360000.0, 341.09004185599997], [1441789632.0, 79380000.0, 341.42801767199995], [1441791360.0, 79400000.0, 341.76618400000007], [1441793088.0, 79420000.0, 342.104540888], [1441794816.0, 79440000.0, 342.44308838399996], [1441796544.0, 79460000.0, 342.7818265359999], [1441798272.0, 79480000.0, 343.1207553920001], [1441800000.0, 79500000.0, 343.459875], [1441801728.0, 79520000.0, 343.79918540799997], [1441803456.0, 79540000.0, 344.138686664], [1441805184.0, 79560000.0, 344.4783788160001], [1441806912.0, 79580000.0, 344.818261912], [1441808640.0, 79600000.0, 345.158336], [1441810368.0, 79620000.0, 345.49860112799996], [1441812096.0, 79640000.0, 345.83905734400014], [1441813824.0, 79660000.0, 346.17970469600004], [1441815552.0, 79680000.0, 346.52054323199997], [1441817280.0, 79700000.0, 346.8615729999999], [1441819008.0, 79720000.0, 347.2027940480001], [1441820736.0, 79740000.0, 347.544206424], [1441822464.0, 79760000.0, 347.88581017599995], [1441824192.0, 79780000.0, 348.22760535199996], [1441825920.0, 79800000.0, 348.56959200000006], [1441827648.0, 79820000.0, 348.911770168], [1441829376.0, 79840000.0, 349.254139904], [1441831104.0, 79860000.0, 349.59670125599996], [1441832832.0, 79880000.0, 349.93945427200003], [1441834560.0, 79900000.0, 350.28239900000005], [1441836288.0, 79920000.0, 350.62553548799997], [1441838016.0, 79940000.0, 350.96886378399995], [1441839744.0, 79960000.0, 351.31238393600006], [1441841472.0, 79980000.0, 351.656095992], [1441843200.0, 80000000.0, 352.0], [1441844928.0, 80020000.0, 352.3440960080001], [1441846656.0, 80040000.0, 352.688384064], [1441848384.0, 80060000.0, 353.032864216], [1441850112.0, 80080000.0, 353.3775365119998], [1441851840.0, 80100000.0, 353.72240100000005], [1441853568.0, 80120000.0, 354.06745772800014], [1441855296.0, 80140000.0, 354.41270674399993], [1441857024.0, 80160000.0, 354.75814809599996], [1441858752.0, 80180000.0, 355.1037818320002], [1441860480.0, 80200000.0, 355.4496079999999], [1441862208.0, 80220000.0, 355.795626648], [1441863936.0, 80240000.0, 356.1418378239998], [1441865664.0, 80260000.0, 356.48824157599995], [1441867392.0, 80280000.0, 356.8348379520001], [1441869120.0, 80300000.0, 357.1816269999998], [1441870848.0, 80320000.0, 357.528608768], [1441872576.0, 80340000.0, 357.8757833040001], [1441874304.0, 80360000.0, 358.2231506559999], [1441876032.0, 80380000.0, 358.57071087200006], [1441877760.0, 80400000.0, 358.91846399999986], [1441879488.0, 80420000.0, 359.26641008799993], [1441881216.0, 80440000.0, 359.6145491840001], [1441882944.0, 80460000.0, 359.9628813359999], [1441884672.0, 80480000.0, 360.3114065919999], [1441886400.0, 80500000.0, 360.6601250000001], [1441888128.0, 80520000.0, 361.00903660799986], [1441889856.0, 80540000.0, 361.358141464], [1441891584.0, 80560000.0, 361.70743961599976], [1441893312.0, 80580000.0, 362.05693111200003], [1441895040.0, 80600000.0, 362.4066160000001], [1441896768.0, 80620000.0, 362.7564943279999], [1441898496.0, 80640000.0, 363.1065661440001], [1441900224.0, 80660000.0, 363.45683149600006], [1441901952.0, 80680000.0, 363.80729043199995], [1441903680.0, 80700000.0, 364.15794300000016], [1441905408.0, 80720000.0, 364.5087892479998], [1441907136.0, 80740000.0, 364.859829224], [1441908864.0, 80760000.0, 365.2110629760001], [1441910592.0, 80780000.0, 365.56249055199993], [1441912320.0, 80800000.0, 365.91411199999993], [1441914048.0, 80820000.0, 366.26592736800023], [1441915776.0, 80840000.0, 366.617936704], [1441917504.0, 80860000.0, 366.970140056], [1441919232.0, 80880000.0, 367.3225374719999], [1441920960.0, 80900000.0, 367.6751289999999], [1441922688.0, 80920000.0, 368.0279146880001], [1441924416.0, 80940000.0, 368.38089458399986], [1441926144.0, 80960000.0, 368.734068736], [1441927872.0, 80980000.0, 369.08743719200004], [1441929600.0, 81000000.0, 369.4409999999999], [1441931328.0, 81020000.0, 369.794757208], [1441933056.0, 81040000.0, 370.14870886399996], [1441934784.0, 81060000.0, 370.5028550159999], [1441936512.0, 81080000.0, 370.8571957120001], [1441938240.0, 81100000.0, 371.21173099999993], [1441939968.0, 81120000.0, 371.5664609280001], [1441941696.0, 81140000.0, 371.9213855440001], [1441943424.0, 81160000.0, 372.27650489599995], [1441945152.0, 81180000.0, 372.63181903200007], [1441946880.0, 81200000.0, 372.9873279999998], [1441948608.0, 81220000.0, 373.34303184799995], [1441950336.0, 81240000.0, 373.6989306240001], [1441952064.0, 81260000.0, 374.055024376], [1441953792.0, 81280000.0, 374.411313152], [1441955520.0, 81300000.0, 374.7677970000002], [1441957248.0, 81320000.0, 375.12447596799996], [1441958976.0, 81340000.0, 375.481350104], [1441960704.0, 81360000.0, 375.8384194559998], [1441962432.0, 81380000.0, 376.19568407199995], [1441964160.0, 81400000.0, 376.55314400000003], [1441965888.0, 81420000.0, 376.91079928799985], [1441967616.0, 81440000.0, 377.26864998400004], [1441969344.0, 81460000.0, 377.62669613600013], [1441971072.0, 81480000.0, 377.98493779200004], [1441972800.0, 81500000.0, 378.34337500000004], [1441974528.0, 81520000.0, 378.70200780799996], [1441976256.0, 81540000.0, 379.060836264], [1441977984.0, 81560000.0, 379.4198604160001], [1441979712.0, 81580000.0, 379.7790803119999], [1441981440.0, 81600000.0, 380.138496], [1441983168.0, 81620000.0, 380.4981075280002], [1441984896.0, 81640000.0, 380.85791494399996], [1441986624.0, 81660000.0, 381.21791829600016], [1441988352.0, 81680000.0, 381.5781176319998], [1441990080.0, 81700000.0, 381.93851299999994], [1441991808.0, 81720000.0, 382.29910444800015], [1441993536.0, 81740000.0, 382.6598920239999], [1441995264.0, 81760000.0, 383.020875776], [1441996992.0, 81780000.0, 383.3820557520001], [1441998720.0, 81800000.0, 383.74343199999987], [1442000448.0, 81820000.0, 384.10500456800014], [1442002176.0, 81840000.0, 384.4667735039999], [1442003904.0, 81860000.0, 384.82873885599986], [1442005632.0, 81880000.0, 385.1909006720001], [1442007360.0, 81900000.0, 385.553259], [1442009088.0, 81920000.0, 385.915813888], [1442010816.0, 81940000.0, 386.2785653840002], [1442012544.0, 81960000.0, 386.64151353599993], [1442014272.0, 81980000.0, 387.004658392], [1442016000.0, 82000000.0, 387.36799999999994], [1442017728.0, 82020000.0, 387.731538408], [1442019456.0, 82040000.0, 388.09527366400016], [1442021184.0, 82060000.0, 388.4592058159999], [1442022912.0, 82080000.0, 388.82333491200006], [1442024640.0, 82100000.0, 389.18766100000016], [1442026368.0, 82120000.0, 389.5521841279999], [1442028096.0, 82140000.0, 389.91690434400005], [1442029824.0, 82160000.0, 390.2818216959999], [1442031552.0, 82180000.0, 390.6469362319999], [1442033280.0, 82200000.0, 391.0122480000001], [1442035008.0, 82220000.0, 391.37775704799986], [1442036736.0, 82240000.0, 391.74346342399997], [1442038464.0, 82260000.0, 392.1093671760001], [1442040192.0, 82280000.0, 392.47546835199995], [1442041920.0, 82300000.0, 392.841767], [1442043648.0, 82320000.0, 393.2082631679999], [1442045376.0, 82340000.0, 393.574956904], [1442047104.0, 82360000.0, 393.94184825600007], [1442048832.0, 82380000.0, 394.308937272], [1442050560.0, 82400000.0, 394.676224], [1442052288.0, 82420000.0, 395.0437084880002], [1442054016.0, 82440000.0, 395.4113907839999], [1442055744.0, 82460000.0, 395.77927093600016], [1442057472.0, 82480000.0, 396.1473489919999], [1442059200.0, 82500000.0, 396.515625], [1442060928.0, 82520000.0, 396.8840990080001], [1442062656.0, 82540000.0, 397.2527710639999], [1442064384.0, 82560000.0, 397.62164121599994], [1442066112.0, 82580000.0, 397.99070951199985], [1442067840.0, 82600000.0, 398.3599759999999], [1442069568.0, 82620000.0, 398.7294407280001], [1442071296.0, 82640000.0, 399.0991037439999], [1442073024.0, 82660000.0, 399.4689650960001], [1442074752.0, 82680000.0, 399.8390248320002], [1442076480.0, 82700000.0, 400.209283], [1442078208.0, 82720000.0, 400.57973964800004], [1442079936.0, 82740000.0, 400.9503948239998], [1442081664.0, 82760000.0, 401.321248576], [1442083392.0, 82780000.0, 401.69230095200015], [1442085120.0, 82800000.0, 402.06355199999985], [1442086848.0, 82820000.0, 402.4350017680001], [1442088576.0, 82840000.0, 402.80665030400013], [1442090304.0, 82860000.0, 403.1784976559999], [1442092032.0, 82880000.0, 403.55054387200005], [1442093760.0, 82900000.0, 403.92278899999997], [1442095488.0, 82920000.0, 404.2952330879999], [1442097216.0, 82940000.0, 404.6678761840002], [1442098944.0, 82960000.0, 405.04071833599994], [1442100672.0, 82980000.0, 405.4137595919999], [1442102400.0, 83000000.0, 405.78700000000015], [1442104128.0, 83020000.0, 406.16043960800005], [1442105856.0, 83040000.0, 406.534078464], [1442107584.0, 83060000.0, 406.90791661599985], [1442109312.0, 83080000.0, 407.281954112], [1442111040.0, 83100000.0, 407.65619100000015], [1442112768.0, 83120000.0, 408.0306273279998], [1442114496.0, 83140000.0, 408.40526314400006], [1442116224.0, 83160000.0, 408.78009849600016], [1442117952.0, 83180000.0, 409.15513343199984], [1442119680.0, 83200000.0, 409.53036800000007], [1442121408.0, 83220000.0, 409.9058022479998], [1442123136.0, 83240000.0, 410.2814362239999], [1442124864.0, 83260000.0, 410.65726997600007], [1442126592.0, 83280000.0, 411.03330355199995], [1442128320.0, 83300000.0, 411.409537], [1442130048.0, 83320000.0, 411.7859703680002], [1442131776.0, 83340000.0, 412.1626037039999], [1442133504.0, 83360000.0, 412.5394370560001], [1442135232.0, 83380000.0, 412.9164704719998], [1442136960.0, 83400000.0, 413.293704], [1442138688.0, 83420000.0, 413.67113768800004], [1442140416.0, 83440000.0, 414.04877158399984], [1442142144.0, 83460000.0, 414.426605736], [1442143872.0, 83480000.0, 414.8046401920002], [1442145600.0, 83500000.0, 415.18287499999997], [1442147328.0, 83520000.0, 415.56131020800007], [1442149056.0, 83540000.0, 415.93994586399987], [1442150784.0, 83560000.0, 416.3187820159999], [1442152512.0, 83580000.0, 416.697818712], [1442154240.0, 83600000.0, 417.0770559999999], [1442155968.0, 83620000.0, 417.456493928], [1442157696.0, 83640000.0, 417.8361325440001], [1442159424.0, 83660000.0, 418.21597189599987], [1442161152.0, 83680000.0, 418.5960120320001], [1442162880.0, 83700000.0, 418.9762529999998], [1442164608.0, 83720000.0, 419.356694848], [1442166336.0, 83740000.0, 419.73733762400013], [1442168064.0, 83760000.0, 420.1181813759998], [1442169792.0, 83780000.0, 420.49922615199995], [1442171520.0, 83800000.0, 420.88047200000017], [1442173248.0, 83820000.0, 421.2619189679999], [1442174976.0, 83840000.0, 421.64356710400006], [1442176704.0, 83860000.0, 422.02541645599985], [1442178432.0, 83880000.0, 422.4074670719999], [1442180160.0, 83900000.0, 422.78971900000016], [1442181888.0, 83920000.0, 423.172172288], [1442183616.0, 83940000.0, 423.5548269840001], [1442185344.0, 83960000.0, 423.9376831360002], [1442187072.0, 83980000.0, 424.320740792], [1442188800.0, 84000000.0, 424.70400000000006], [1442190528.0, 84020000.0, 425.08746080799983], [1442192256.0, 84040000.0, 425.471123264], [1442193984.0, 84060000.0, 425.8549874160001], [1442195712.0, 84080000.0, 426.239053312], [1442197440.0, 84100000.0, 426.623321], [1442199168.0, 84120000.0, 427.0077905280001], [1442200896.0, 84140000.0, 427.39246194399993], [1442202624.0, 84160000.0, 427.7773352960001], [1442204352.0, 84180000.0, 428.1624106319998], [1442206080.0, 84200000.0, 428.547688], [1442207808.0, 84220000.0, 428.9331674480001], [1442209536.0, 84240000.0, 429.31884902399986], [1442211264.0, 84260000.0, 429.7047327760001], [1442212992.0, 84280000.0, 430.0908187520002], [1442214720.0, 84300000.0, 430.47710699999993], [1442216448.0, 84320000.0, 430.86359756800005], [1442218176.0, 84340000.0, 431.25029050399985], [1442219904.0, 84360000.0, 431.637185856], [1442221632.0, 84380000.0, 432.02428367200014], [1442223360.0, 84400000.0, 432.41158399999995], [1442225088.0, 84420000.0, 432.79908688800003], [1442226816.0, 84440000.0, 433.1867923840002], [1442228544.0, 84460000.0, 433.5747005359999], [1442230272.0, 84480000.0, 433.96281139200005], [1442232000.0, 84500000.0, 434.3511249999999], [1442233728.0, 84520000.0, 434.739641408], [1442235456.0, 84540000.0, 435.12836066400007], [1442237184.0, 84560000.0, 435.5172828159999], [1442238912.0, 84580000.0, 435.9064079120001], [1442240640.0, 84600000.0, 436.29573600000015], [1442242368.0, 84620000.0, 436.68526712799985], [1442244096.0, 84640000.0, 437.07500134400004], [1442245824.0, 84660000.0, 437.46493869599993], [1442247552.0, 84680000.0, 437.855079232], [1442249280.0, 84700000.0, 438.2454230000002], [1442251008.0, 84720000.0, 438.63597004799993], [1442252736.0, 84740000.0, 439.026720424], [1442254464.0, 84760000.0, 439.4176741760001], [1442256192.0, 84780000.0, 439.8088313519999], [1442257920.0, 84800000.0, 440.20019200000013], [1442259648.0, 84820000.0, 440.59175616799996], [1442261376.0, 84840000.0, 440.98352390400004], [1442263104.0, 84860000.0, 441.37549525600014], [1442264832.0, 84880000.0, 441.7676702719999], [1442266560.0, 84900000.0, 442.160049], [1442268288.0, 84920000.0, 442.5526314880001], [1442270016.0, 84940000.0, 442.9454177839999], [1442271744.0, 84960000.0, 443.338407936], [1442273472.0, 84980000.0, 443.73160199199987], [1442275200.0, 85000000.0, 444.125], [1442276928.0, 85020000.0, 444.5186020080001], [1442278656.0, 85040000.0, 444.91240806399986], [1442280384.0, 85060000.0, 445.306418216], [1442282112.0, 85080000.0, 445.70063251199986], [1442283840.0, 85100000.0, 446.09505099999996], [1442285568.0, 85120000.0, 446.4896737280002], [1442287296.0, 85140000.0, 446.88450074399987], [1442289024.0, 85160000.0, 447.27953209599997], [1442290752.0, 85180000.0, 447.67476783200016], [1442292480.0, 85200000.0, 448.07020799999987], [1442294208.0, 85220000.0, 448.46585264800007], [1442295936.0, 85240000.0, 448.86170182399974], [1442297664.0, 85260000.0, 449.2577555759999], [1442299392.0, 85280000.0, 449.65401395200007], [1442301120.0, 85300000.0, 450.0504769999999], [1442302848.0, 85320000.0, 450.44714476800004], [1442304576.0, 85340000.0, 450.84401730400015], [1442306304.0, 85360000.0, 451.24109465599986], [1442308032.0, 85380000.0, 451.6383768720001], [1442309760.0, 85400000.0, 452.03586399999983], [1442311488.0, 85420000.0, 452.43355608799993], [1442313216.0, 85440000.0, 452.8314531840001], [1442314944.0, 85460000.0, 453.22955533599986], [1442316672.0, 85480000.0, 453.62786259199993], [1442318400.0, 85500000.0, 454.02637500000014], [1442320128.0, 85520000.0, 454.425092608], [1442321856.0, 85540000.0, 454.824015464], [1442323584.0, 85560000.0, 455.2231436159998], [1442325312.0, 85580000.0, 455.62247711199996], [1442327040.0, 85600000.0, 456.022016], [1442328768.0, 85620000.0, 456.4217603279999], [1442330496.0, 85640000.0, 456.821710144], [1442332224.0, 85660000.0, 457.2218654960002], [1442333952.0, 85680000.0, 457.62222643199993], [1442335680.0, 85700000.0, 458.0227930000001], [1442337408.0, 85720000.0, 458.4235652479999], [1442339136.0, 85740000.0, 458.82454322399997], [1442340864.0, 85760000.0, 459.22572697600015], [1442342592.0, 85780000.0, 459.6271165519999], [1442344320.0, 85800000.0, 460.0287119999999], [1442346048.0, 85820000.0, 460.4305133680001], [1442347776.0, 85840000.0, 460.8325207039998], [1442349504.0, 85860000.0, 461.234734056], [1442351232.0, 85880000.0, 461.6371534719998], [1442352960.0, 85900000.0, 462.039779], [1442354688.0, 85920000.0, 462.44261068800006], [1442356416.0, 85940000.0, 462.84564858399983], [1442358144.0, 85960000.0, 463.24889273599996], [1442359872.0, 85980000.0, 463.6523431920001], [1442361600.0, 86000000.0, 464.0559999999999], [1442363328.0, 86020000.0, 464.45986320800006], [1442365056.0, 86040000.0, 464.8639328639999], [1442366784.0, 86060000.0, 465.268209016], [1442368512.0, 86080000.0, 465.67269171200013], [1442370240.0, 86100000.0, 466.0773809999999], [1442371968.0, 86120000.0, 466.48227692800003], [1442373696.0, 86140000.0, 466.8873795440002], [1442375424.0, 86160000.0, 467.292688896], [1442377152.0, 86180000.0, 467.69820503200003], [1442378880.0, 86200000.0, 468.1039279999999], [1442380608.0, 86220000.0, 468.50985784799997], [1442382336.0, 86240000.0, 468.91599462400006], [1442384064.0, 86260000.0, 469.32233837599983], [1442385792.0, 86280000.0, 469.728889152], [1442387520.0, 86300000.0, 470.1356470000002], [1442389248.0, 86320000.0, 470.54261196799996], [1442390976.0, 86340000.0, 470.949784104], [1442392704.0, 86360000.0, 471.3571634559998], [1442394432.0, 86380000.0, 471.76475007199997], [1442396160.0, 86400000.0, 472.1725440000001], [1442397888.0, 86420000.0, 472.580545288], [1442399616.0, 86440000.0, 472.988753984], [1442401344.0, 86460000.0, 473.39717013600017], [1442403072.0, 86480000.0, 473.805793792], [1442404800.0, 86500000.0, 474.21462500000007], [1442406528.0, 86520000.0, 474.62366380799995], [1442408256.0, 86540000.0, 475.032910264], [1442409984.0, 86560000.0, 475.44236441600015], [1442411712.0, 86580000.0, 475.8520263119999], [1442413440.0, 86600000.0, 476.26189600000004], [1442415168.0, 86620000.0, 476.6719735280002], [1442416896.0, 86640000.0, 477.08225894399993], [1442418624.0, 86660000.0, 477.4927522960001], [1442420352.0, 86680000.0, 477.9034536319998], [1442422080.0, 86700000.0, 478.31436299999996], [1442423808.0, 86720000.0, 478.72548044800016], [1442425536.0, 86740000.0, 479.13680602399984], [1442427264.0, 86760000.0, 479.54833977600003], [1442428992.0, 86780000.0, 479.9600817520001], [1442430720.0, 86800000.0, 480.372032], [1442432448.0, 86820000.0, 480.7841905680001], [1442434176.0, 86840000.0, 481.1965575039999], [1442435904.0, 86860000.0, 481.609132856], [1442437632.0, 86880000.0, 482.0219166720001], [1442439360.0, 86900000.0, 482.43490899999995], [1442441088.0, 86920000.0, 482.84810988800007], [1442442816.0, 86940000.0, 483.26151938400017], [1442444544.0, 86960000.0, 483.67513753599997], [1442446272.0, 86980000.0, 484.0889643920001], [1442448000.0, 87000000.0, 484.5029999999998], [1442449728.0, 87020000.0, 484.9172444080001], [1442451456.0, 87040000.0, 485.3316976640001], [1442453184.0, 87060000.0, 485.7463598159999], [1442454912.0, 87080000.0, 486.1612309120002], [1442456640.0, 87100000.0, 486.57631100000026], [1442458368.0, 87120000.0, 486.99160012799996], [1442460096.0, 87140000.0, 487.407098344], [1442461824.0, 87160000.0, 487.82280569599976], [1442463552.0, 87180000.0, 488.238722232], [1442465280.0, 87200000.0, 488.65484800000013], [1442467008.0, 87220000.0, 489.0711830479998], [1442468736.0, 87240000.0, 489.487727424], [1442470464.0, 87260000.0, 489.90448117600033], [1442472192.0, 87280000.0, 490.3214443519999], [1442473920.0, 87300000.0, 490.7386170000001], [1442475648.0, 87320000.0, 491.1559991679999], [1442477376.0, 87340000.0, 491.573590904], [1442479104.0, 87360000.0, 491.99139225600015], [1442480832.0, 87380000.0, 492.40940327199996], [1442482560.0, 87400000.0, 492.82762400000007], [1442484288.0, 87420000.0, 493.24605448800014], [1442486016.0, 87440000.0, 493.66469478399995], [1442487744.0, 87460000.0, 494.0835449360001], [1442489472.0, 87480000.0, 494.50260499199993], [1442491200.0, 87500000.0, 494.921875], [1442492928.0, 87520000.0, 495.3413550080001], [1442494656.0, 87540000.0, 495.7610450639999], [1442496384.0, 87560000.0, 496.18094521600005], [1442498112.0, 87580000.0, 496.6010555119998], [1442499840.0, 87600000.0, 497.021376], [1442501568.0, 87620000.0, 497.44190672800016], [1442503296.0, 87640000.0, 497.8626477439999], [1442505024.0, 87660000.0, 498.28359909599993], [1442506752.0, 87680000.0, 498.70476083200015], [1442508480.0, 87700000.0, 499.126133], [1442510208.0, 87720000.0, 499.54771564800006], [1442511936.0, 87740000.0, 499.9695088239997], [1442513664.0, 87760000.0, 500.39151257599997], [1442515392.0, 87780000.0, 500.8137269520001], [1442517120.0, 87800000.0, 501.23615199999983], [1442518848.0, 87820000.0, 501.658787768], [1442520576.0, 87840000.0, 502.08163430400015], [1442522304.0, 87860000.0, 502.50469165599986], [1442524032.0, 87880000.0, 502.927959872], [1442525760.0, 87900000.0, 503.3514389999998], [1442527488.0, 87920000.0, 503.77512908799986], [1442529216.0, 87940000.0, 504.1990301840001], [1442530944.0, 87960000.0, 504.6231423359999], [1442532672.0, 87980000.0, 505.047465592], [1442534400.0, 88000000.0, 505.4720000000002], [1442536128.0, 88020000.0, 505.89674560799995], [1442537856.0, 88040000.0, 506.32170246400005], [1442539584.0, 88060000.0, 506.7468706159998], [1442541312.0, 88080000.0, 507.1722501119999], [1442543040.0, 88100000.0, 507.597841], [1442544768.0, 88120000.0, 508.02364332799993], [1442546496.0, 88140000.0, 508.44965714399996], [1442548224.0, 88160000.0, 508.87588249600014], [1442549952.0, 88180000.0, 509.3023194319999], [1442551680.0, 88200000.0, 509.728968], [1442553408.0, 88220000.0, 510.15582824799986], [1442555136.0, 88240000.0, 510.582900224], [1442556864.0, 88260000.0, 511.0101839760001], [1442558592.0, 88280000.0, 511.4376795519999], [1442560320.0, 88300000.0, 511.86538700000006], [1442562048.0, 88320000.0, 512.2933063680001], [1442563776.0, 88340000.0, 512.721437704], [1442565504.0, 88360000.0, 513.149781056], [1442567232.0, 88380000.0, 513.5783364719998], [1442568960.0, 88400000.0, 514.007104], [1442570688.0, 88420000.0, 514.436083688], [1442572416.0, 88440000.0, 514.8652755839998], [1442574144.0, 88460000.0, 515.294679736], [1442575872.0, 88480000.0, 515.7242961920001], [1442577600.0, 88500000.0, 516.1541249999999], [1442579328.0, 88520000.0, 516.5841662079999], [1442581056.0, 88540000.0, 517.0144198639998], [1442582784.0, 88560000.0, 517.4448860159999], [1442584512.0, 88580000.0, 517.8755647120001], [1442586240.0, 88600000.0, 518.3064559999998], [1442587968.0, 88620000.0, 518.737559928], [1442589696.0, 88640000.0, 519.1688765440001], [1442591424.0, 88660000.0, 519.600405896], [1442593152.0, 88680000.0, 520.032148032], [1442594880.0, 88700000.0, 520.4641029999999], [1442596608.0, 88720000.0, 520.8962708480001], [1442598336.0, 88740000.0, 521.328651624], [1442600064.0, 88760000.0, 521.7612453759999], [1442601792.0, 88780000.0, 522.194052152], [1442603520.0, 88800000.0, 522.6270720000001], [1442605248.0, 88820000.0, 523.060304968], [1442606976.0, 88840000.0, 523.493751104], [1442608704.0, 88860000.0, 523.9274104559997], [1442610432.0, 88880000.0, 524.361283072], [1442612160.0, 88900000.0, 524.7953690000002], [1442613888.0, 88920000.0, 525.2296682879999], [1442615616.0, 88940000.0, 525.6641809839999], [1442617344.0, 88960000.0, 526.0989071360002], [1442619072.0, 88980000.0, 526.5338467919998], [1442620800.0, 89000000.0, 526.969], [1442622528.0, 89020000.0, 527.4043668079998], [1442624256.0, 89040000.0, 527.8399472640001], [1442625984.0, 89060000.0, 528.2757414160001], [1442627712.0, 89080000.0, 528.7117493119999], [1442629440.0, 89100000.0, 529.1479710000001], [1442631168.0, 89120000.0, 529.5844065280002], [1442632896.0, 89140000.0, 530.021055944], [1442634624.0, 89160000.0, 530.457919296], [1442636352.0, 89180000.0, 530.8949966319999], [1442638080.0, 89200000.0, 531.3322880000001], [1442639808.0, 89220000.0, 531.7697934480002], [1442641536.0, 89240000.0, 532.2075130239998], [1442643264.0, 89260000.0, 532.6454467760001], [1442644992.0, 89280000.0, 533.0835947520002], [1442646720.0, 89300000.0, 533.5219569999999], [1442648448.0, 89320000.0, 533.9605335680001], [1442650176.0, 89340000.0, 534.3993245039999], [1442651904.0, 89360000.0, 534.838329856], [1442653632.0, 89380000.0, 535.2775496720002], [1442655360.0, 89400000.0, 535.7169839999999], [1442657088.0, 89420000.0, 536.1566328880001], [1442658816.0, 89440000.0, 536.5964963840003], [1442660544.0, 89460000.0, 537.036574536], [1442662272.0, 89480000.0, 537.476867392], [1442664000.0, 89500000.0, 537.9173749999999], [1442665728.0, 89520000.0, 538.358097408], [1442667456.0, 89540000.0, 538.7990346640001], [1442669184.0, 89560000.0, 539.2401868159998], [1442670912.0, 89580000.0, 539.6815539120001], [1442672640.0, 89600000.0, 540.1231360000002], [1442674368.0, 89620000.0, 540.5649331279999], [1442676096.0, 89640000.0, 541.0069453440002], [1442677824.0, 89660000.0, 541.4491726959998], [1442679552.0, 89680000.0, 541.8916152319999], [1442681280.0, 89700000.0, 542.3342730000002], [1442683008.0, 89720000.0, 542.7771460479998], [1442684736.0, 89740000.0, 543.2202344240001], [1442686464.0, 89760000.0, 543.6635381760003], [1442688192.0, 89780000.0, 544.1070573520001], [1442689920.0, 89800000.0, 544.5507920000001], [1442691648.0, 89820000.0, 544.9947421679999], [1442693376.0, 89840000.0, 545.438907904], [1442695104.0, 89860000.0, 545.8832892560001], [1442696832.0, 89880000.0, 546.327886272], [1442698560.0, 89900000.0, 546.7726990000001], [1442700288.0, 89920000.0, 547.2177274880002], [1442702016.0, 89940000.0, 547.6629717839999], [1442703744.0, 89960000.0, 548.1084319360002], [1442705472.0, 89980000.0, 548.5541079919999], [1442707200.0, 90000000.0, 549.0], [1442708928.0, 90020000.0, 549.446108008], [1442710656.0, 90040000.0, 549.8924320639999], [1442712384.0, 90060000.0, 550.338972216], [1442714112.0, 90080000.0, 550.7857285119999], [1442715840.0, 90100000.0, 551.2327009999999], [1442717568.0, 90120000.0, 551.6798897280001], [1442719296.0, 90140000.0, 552.1272947439999], [1442721024.0, 90160000.0, 552.5749160960002], [1442722752.0, 90180000.0, 553.0227538320003], [1442724480.0, 90200000.0, 553.4708079999999], [1442726208.0, 90220000.0, 553.9190786480001], [1442727936.0, 90240000.0, 554.3675658239997], [1442729664.0, 90260000.0, 554.816269576], [1442731392.0, 90280000.0, 555.2651899520001], [1442733120.0, 90300000.0, 555.7143269999999], [1442734848.0, 90320000.0, 556.163680768], [1442736576.0, 90340000.0, 556.6132513040002], [1442738304.0, 90360000.0, 557.0630386559999], [1442740032.0, 90380000.0, 557.513042872], [1442741760.0, 90400000.0, 557.9632639999998], [1442743488.0, 90420000.0, 558.4137020879999], [1442745216.0, 90440000.0, 558.864357184], [1442746944.0, 90460000.0, 559.3152293359999], [1442748672.0, 90480000.0, 559.766318592], [1442750400.0, 90500000.0, 560.2176250000002], [1442752128.0, 90520000.0, 560.6691486079999], [1442753856.0, 90540000.0, 561.120889464], [1442755584.0, 90560000.0, 561.5728476159998], [1442757312.0, 90580000.0, 562.025023112], [1442759040.0, 90600000.0, 562.4774160000001], [1442760768.0, 90620000.0, 562.9300263279998], [1442762496.0, 90640000.0, 563.3828541440001], [1442764224.0, 90660000.0, 563.8358994960001], [1442765952.0, 90680000.0, 564.2891624319999], [1442767680.0, 90700000.0, 564.7426430000002], [1442769408.0, 90720000.0, 565.196341248], [1442771136.0, 90740000.0, 565.6502572239999], [1442772864.0, 90760000.0, 566.1043909760001], [1442774592.0, 90780000.0, 566.5587425519998], [1442776320.0, 90800000.0, 567.0133119999999], [1442778048.0, 90820000.0, 567.4680993680003], [1442779776.0, 90840000.0, 567.9231047039998], [1442781504.0, 90860000.0, 568.378328056], [1442783232.0, 90880000.0, 568.8337694719999], [1442784960.0, 90900000.0, 569.2894289999999], [1442786688.0, 90920000.0, 569.7453066880001], [1442788416.0, 90940000.0, 570.2014025839999], [1442790144.0, 90960000.0, 570.6577167360001], [1442791872.0, 90980000.0, 571.1142491920002], [1442793600.0, 91000000.0, 571.5709999999999], [1442795328.0, 91020000.0, 572.0279692080001], [1442797056.0, 91040000.0, 572.4851568639999], [1442798784.0, 91060000.0, 572.942563016], [1442800512.0, 91080000.0, 573.4001877120002], [1442802240.0, 91100000.0, 573.858031], [1442803968.0, 91120000.0, 574.316092928], [1442805696.0, 91140000.0, 574.7743735440001], [1442807424.0, 91160000.0, 575.2328728959999], [1442809152.0, 91180000.0, 575.6915910320001], [1442810880.0, 91200000.0, 576.1505279999999], [1442812608.0, 91220000.0, 576.609683848], [1442814336.0, 91240000.0, 577.0690586240001], [1442816064.0, 91260000.0, 577.5286523759999], [1442817792.0, 91280000.0, 577.9884651520001], [1442819520.0, 91300000.0, 578.4484970000001], [1442821248.0, 91320000.0, 578.908747968], [1442822976.0, 91340000.0, 579.3692181040001], [1442824704.0, 91360000.0, 579.829907456], [1442826432.0, 91380000.0, 580.290816072], [1442828160.0, 91400000.0, 580.7519440000001], [1442829888.0, 91420000.0, 581.2132912879999], [1442831616.0, 91440000.0, 581.674857984], [1442833344.0, 91460000.0, 582.1366441360001], [1442835072.0, 91480000.0, 582.5986497919998], [1442836800.0, 91500000.0, 583.0608750000001], [1442838528.0, 91520000.0, 583.5233198079998], [1442840256.0, 91540000.0, 583.9859842640001], [1442841984.0, 91560000.0, 584.4488684160002], [1442843712.0, 91580000.0, 584.9119723119999], [1442845440.0, 91600000.0, 585.3752960000002], [1442847168.0, 91620000.0, 585.8388395280002], [1442848896.0, 91640000.0, 586.3026029439999], [1442850624.0, 91660000.0, 586.766586296], [1442852352.0, 91680000.0, 587.2307896319998], [1442854080.0, 91700000.0, 587.695213], [1442855808.0, 91720000.0, 588.1598564480003], [1442857536.0, 91740000.0, 588.6247200239999], [1442859264.0, 91760000.0, 589.089803776], [1442860992.0, 91780000.0, 589.5551077520004], [1442862720.0, 91800000.0, 590.0206319999999], [1442864448.0, 91820000.0, 590.4863765680002], [1442866176.0, 91840000.0, 590.9523415039998], [1442867904.0, 91860000.0, 591.4185268559999], [1442869632.0, 91880000.0, 591.8849326720001], [1442871360.0, 91900000.0, 592.351559], [1442873088.0, 91920000.0, 592.8184058879999], [1442874816.0, 91940000.0, 593.2854733840002], [1442876544.0, 91960000.0, 593.7527615359999], [1442878272.0, 91980000.0, 594.2202703920001], [1442880000.0, 92000000.0, 594.6879999999998], [1442881728.0, 92020000.0, 595.1559504080001], [1442883456.0, 92040000.0, 595.6241216640002], [1442885184.0, 92060000.0, 596.092513816], [1442886912.0, 92080000.0, 596.5611269120001], [1442888640.0, 92100000.0, 597.0299610000002], [1442890368.0, 92120000.0, 597.4990161279999], [1442892096.0, 92140000.0, 597.9682923440001], [1442893824.0, 92160000.0, 598.4377896959998], [1442895552.0, 92180000.0, 598.907508232], [1442897280.0, 92200000.0, 599.3774480000002], [1442899008.0, 92220000.0, 599.8476090479999], [1442900736.0, 92240000.0, 600.3179914240001], [1442902464.0, 92260000.0, 600.7885951760003], [1442904192.0, 92280000.0, 601.2594203519998], [1442905920.0, 92300000.0, 601.7304670000001], [1442907648.0, 92320000.0, 602.2017351679999], [1442909376.0, 92340000.0, 602.6732249040001], [1442911104.0, 92360000.0, 603.1449362560002], [1442912832.0, 92380000.0, 603.6168692719999], [1442914560.0, 92400000.0, 604.0890240000001], [1442916288.0, 92420000.0, 604.5614004880001], [1442918016.0, 92440000.0, 605.0339987839999], [1442919744.0, 92460000.0, 605.5068189360002], [1442921472.0, 92480000.0, 605.9798609919999], [1442923200.0, 92500000.0, 606.453125], [1442924928.0, 92520000.0, 606.9266110080002], [1442926656.0, 92540000.0, 607.4003190639999], [1442928384.0, 92560000.0, 607.874249216], [1442930112.0, 92580000.0, 608.3484015119998], [1442931840.0, 92600000.0, 608.822776], [1442933568.0, 92620000.0, 609.2973727280001], [1442935296.0, 92640000.0, 609.7721917439999], [1442937024.0, 92660000.0, 610.247233096], [1442938752.0, 92680000.0, 610.7224968320003], [1442940480.0, 92700000.0, 611.1979829999999], [1442942208.0, 92720000.0, 611.6736916480002], [1442943936.0, 92740000.0, 612.1496228239997], [1442945664.0, 92760000.0, 612.6257765759999], [1442947392.0, 92780000.0, 613.1021529520001], [1442949120.0, 92800000.0, 613.5787519999999], [1442950848.0, 92820000.0, 614.055573768], [1442952576.0, 92840000.0, 614.5326183040002], [1442954304.0, 92860000.0, 615.0098856559998], [1442956032.0, 92880000.0, 615.4873758720001], [1442957760.0, 92900000.0, 615.9650889999999], [1442959488.0, 92920000.0, 616.4430250879999], [1442961216.0, 92940000.0, 616.9211841840001], [1442962944.0, 92960000.0, 617.3995663359999], [1442964672.0, 92980000.0, 617.878171592], [1442966400.0, 93000000.0, 618.3570000000002], [1442968128.0, 93020000.0, 618.8360516079999], [1442969856.0, 93040000.0, 619.315326464], [1442971584.0, 93060000.0, 619.7948246159998], [1442973312.0, 93080000.0, 620.274546112], [1442975040.0, 93100000.0, 620.754491], [1442976768.0, 93120000.0, 621.2346593279999], [1442978496.0, 93140000.0, 621.7150511440001], [1442980224.0, 93160000.0, 622.1956664960002], [1442981952.0, 93180000.0, 622.6765054319999], [1442983680.0, 93200000.0, 623.1575680000001], [1442985408.0, 93220000.0, 623.6388542479997], [1442987136.0, 93240000.0, 624.120364224], [1442988864.0, 93260000.0, 624.6020979760001], [1442990592.0, 93280000.0, 625.0840555519999], [1442992320.0, 93300000.0, 625.566237], [1442994048.0, 93320000.0, 626.0486423680002], [1442995776.0, 93340000.0, 626.5312717039999], [1442997504.0, 93360000.0, 627.0141250560001], [1442999232.0, 93380000.0, 627.4972024719998], [1443000960.0, 93400000.0, 627.9805039999999], [1443002688.0, 93420000.0, 628.4640296880002], [1443004416.0, 93440000.0, 628.9477795839999], [1443006144.0, 93460000.0, 629.431753736], [1443007872.0, 93480000.0, 629.9159521920002], [1443009600.0, 93500000.0, 630.4003749999999], [1443011328.0, 93520000.0, 630.885022208], [1443013056.0, 93540000.0, 631.3698938639998], [1443014784.0, 93560000.0, 631.854990016], [1443016512.0, 93580000.0, 632.3403107120002], [1443018240.0, 93600000.0, 632.8258559999999], [1443019968.0, 93620000.0, 633.3116259280001], [1443021696.0, 93640000.0, 633.7976205440002], [1443023424.0, 93660000.0, 634.2838398959998], [1443025152.0, 93680000.0, 634.7702840320001], [1443026880.0, 93700000.0, 635.2569529999997], [1443028608.0, 93720000.0, 635.743846848], [1443030336.0, 93740000.0, 636.2309656240002], [1443032064.0, 93760000.0, 636.7183093759999], [1443033792.0, 93780000.0, 637.205878152], [1443035520.0, 93800000.0, 637.6936720000001], [1443037248.0, 93820000.0, 638.181690968], [1443038976.0, 93840000.0, 638.6699351040002], [1443040704.0, 93860000.0, 639.158404456], [1443042432.0, 93880000.0, 639.647099072], [1443044160.0, 93900000.0, 640.1360190000003], [1443045888.0, 93920000.0, 640.625164288], [1443047616.0, 93940000.0, 641.114534984], [1443049344.0, 93960000.0, 641.6041311360002], [1443051072.0, 93980000.0, 642.093952792], [1443052800.0, 94000000.0, 642.5840000000002], [1443054528.0, 94020000.0, 643.0742728079998], [1443056256.0, 94040000.0, 643.564771264], [1443057984.0, 94060000.0, 644.0554954160002], [1443059712.0, 94080000.0, 644.5464453119998], [1443061440.0, 94100000.0, 645.0376210000002], [1443063168.0, 94120000.0, 645.5290225280003], [1443064896.0, 94140000.0, 646.020649944], [1443066624.0, 94160000.0, 646.512503296], [1443068352.0, 94180000.0, 647.0045826319998], [1443070080.0, 94200000.0, 647.496888], [1443071808.0, 94220000.0, 647.9894194480003], [1443073536.0, 94240000.0, 648.4821770239998], [1443075264.0, 94260000.0, 648.9751607760002], [1443076992.0, 94280000.0, 649.4683707520003], [1443078720.0, 94300000.0, 649.9618069999999], [1443080448.0, 94320000.0, 650.4554695680001], [1443082176.0, 94340000.0, 650.9493585039999], [1443083904.0, 94360000.0, 651.443473856], [1443085632.0, 94380000.0, 651.9378156720003], [1443087360.0, 94400000.0, 652.432384], [1443089088.0, 94420000.0, 652.927178888], [1443090816.0, 94440000.0, 653.4222003840002], [1443092544.0, 94460000.0, 653.9174485359999], [1443094272.0, 94480000.0, 654.412923392], [1443096000.0, 94500000.0, 654.9086249999998], [1443097728.0, 94520000.0, 655.4045534080001], [1443099456.0, 94540000.0, 655.900708664], [1443101184.0, 94560000.0, 656.3970908159998], [1443102912.0, 94580000.0, 656.8936999120001], [1443104640.0, 94600000.0, 657.3905360000002], [1443106368.0, 94620000.0, 657.8875991279999], [1443108096.0, 94640000.0, 658.3848893440002], [1443109824.0, 94660000.0, 658.8824066959999], [1443111552.0, 94680000.0, 659.380151232], [1443113280.0, 94700000.0, 659.8781230000002], [1443115008.0, 94720000.0, 660.3763220479998], [1443116736.0, 94740000.0, 660.874748424], [1443118464.0, 94760000.0, 661.3734021760002], [1443120192.0, 94780000.0, 661.8722833519998], [1443121920.0, 94800000.0, 662.371392], [1443123648.0, 94820000.0, 662.8707281679999], [1443125376.0, 94840000.0, 663.3702919039999], [1443127104.0, 94860000.0, 663.8700832560002], [1443128832.0, 94880000.0, 664.3701022719999], [1443130560.0, 94900000.0, 664.870349], [1443132288.0, 94920000.0, 665.3708234880003], [1443134016.0, 94940000.0, 665.8715257839999], [1443135744.0, 94960000.0, 666.372455936], [1443137472.0, 94980000.0, 666.873613992], [1443139200.0, 95000000.0, 667.375], [1443140928.0, 95020000.0, 667.8766140080002], [1443142656.0, 95040000.0, 668.3784560639999], [1443144384.0, 95060000.0, 668.880526216], [1443146112.0, 95080000.0, 669.3828245119997], [1443147840.0, 95100000.0, 669.8853509999999], [1443149568.0, 95120000.0, 670.3881057280001], [1443151296.0, 95140000.0, 670.891088744], [1443153024.0, 95160000.0, 671.394300096], [1443154752.0, 95180000.0, 671.8977398320002], [1443156480.0, 95200000.0, 672.401408], [1443158208.0, 95220000.0, 672.9053046480001], [1443159936.0, 95240000.0, 673.4094298239997], [1443161664.0, 95260000.0, 673.913783576], [1443163392.0, 95280000.0, 674.4183659520002], [1443165120.0, 95300000.0, 674.9231769999999], [1443166848.0, 95320000.0, 675.4282167680001], [1443168576.0, 95340000.0, 675.9334853040002], [1443170304.0, 95360000.0, 676.4389826559999], [1443172032.0, 95380000.0, 676.9447088720001], [1443173760.0, 95400000.0, 677.4506639999998], [1443175488.0, 95420000.0, 677.9568480879999], [1443177216.0, 95440000.0, 678.4632611840002], [1443178944.0, 95460000.0, 678.9699033359998], [1443180672.0, 95480000.0, 679.476774592], [1443182400.0, 95500000.0, 679.9838750000002], [1443184128.0, 95520000.0, 680.491204608], [1443185856.0, 95540000.0, 680.998763464], [1443187584.0, 95560000.0, 681.5065516159998], [1443189312.0, 95580000.0, 682.014569112], [1443191040.0, 95600000.0, 682.522816], [1443192768.0, 95620000.0, 683.0312923279998], [1443194496.0, 95640000.0, 683.539998144], [1443196224.0, 95660000.0, 684.0489334960002], [1443197952.0, 95680000.0, 684.558098432], [1443199680.0, 95700000.0, 685.0674930000001], [1443201408.0, 95720000.0, 685.5771172479997], [1443203136.0, 95740000.0, 686.0869712239999], [1443204864.0, 95760000.0, 686.5970549760002], [1443206592.0, 95780000.0, 687.1073685519998], [1443208320.0, 95800000.0, 687.6179119999999], [1443210048.0, 95820000.0, 688.1286853680002], [1443211776.0, 95840000.0, 688.6396887039998], [1443213504.0, 95860000.0, 689.150922056], [1443215232.0, 95880000.0, 689.6623854719998], [1443216960.0, 95900000.0, 690.1740789999999], [1443218688.0, 95920000.0, 690.6860026880001], [1443220416.0, 95940000.0, 691.1981565839999], [1443222144.0, 95960000.0, 691.710540736], [1443223872.0, 95980000.0, 692.2231551920003], [1443225600.0, 96000000.0, 692.736], [1443227328.0, 96020000.0, 693.249075208], [1443229056.0, 96040000.0, 693.7623808639999], [1443230784.0, 96060000.0, 694.2759170159999], [1443232512.0, 96080000.0, 694.7896837120002], [1443234240.0, 96100000.0, 695.3036809999999], [1443235968.0, 96120000.0, 695.8179089280001], [1443237696.0, 96140000.0, 696.3323675440001], [1443239424.0, 96160000.0, 696.8470568959999], [1443241152.0, 96180000.0, 697.3619770320001], [1443242880.0, 96200000.0, 697.8771279999997], [1443244608.0, 96220000.0, 698.3925098479999], [1443246336.0, 96240000.0, 698.9081226240002], [1443248064.0, 96260000.0, 699.4239663759998], [1443249792.0, 96280000.0, 699.940041152], [1443251520.0, 96300000.0, 700.4563470000003], [1443253248.0, 96320000.0, 700.9728839679999], [1443254976.0, 96340000.0, 701.489652104], [1443256704.0, 96360000.0, 702.0066514559999], [1443258432.0, 96380000.0, 702.523882072], [1443260160.0, 96400000.0, 703.0413440000002], [1443261888.0, 96420000.0, 703.5590372879999], [1443263616.0, 96440000.0, 704.076961984], [1443265344.0, 96460000.0, 704.5951181360001], [1443267072.0, 96480000.0, 705.1135057919998], [1443268800.0, 96500000.0, 705.6321250000001], [1443270528.0, 96520000.0, 706.1509758079998], [1443272256.0, 96540000.0, 706.6700582639999], [1443273984.0, 96560000.0, 707.1893724160002], [1443275712.0, 96580000.0, 707.7089183119999], [1443277440.0, 96600000.0, 708.2286960000001], [1443279168.0, 96620000.0, 708.7487055280003], [1443280896.0, 96640000.0, 709.2689469439999], [1443282624.0, 96660000.0, 709.7894202960001], [1443284352.0, 96680000.0, 710.3101256319998], [1443286080.0, 96700000.0, 710.831063], [1443287808.0, 96720000.0, 711.3522324480002], [1443289536.0, 96740000.0, 711.8736340239998], [1443291264.0, 96760000.0, 712.3952677760001], [1443292992.0, 96780000.0, 712.9171337520002], [1443294720.0, 96800000.0, 713.439232], [1443296448.0, 96820000.0, 713.9615625680002], [1443298176.0, 96840000.0, 714.4841255039998], [1443299904.0, 96860000.0, 715.006920856], [1443301632.0, 96880000.0, 715.5299486720002], [1443303360.0, 96900000.0, 716.0532089999999], [1443305088.0, 96920000.0, 716.576701888], [1443306816.0, 96940000.0, 717.1004273840002], [1443308544.0, 96960000.0, 717.624385536], [1443310272.0, 96980000.0, 718.1485763920001], [1443312000.0, 97000000.0, 718.6729999999998], [1443313728.0, 97020000.0, 719.1976564080001], [1443315456.0, 97040000.0, 719.7225456640001], [1443317184.0, 97060000.0, 720.2476678159999], [1443318912.0, 97080000.0, 720.7730229120001], [1443320640.0, 97100000.0, 721.2986110000003], [1443322368.0, 97120000.0, 721.8244321279999], [1443324096.0, 97140000.0, 722.3504863440002], [1443325824.0, 97160000.0, 722.8767736959999], [1443327552.0, 97180000.0, 723.403294232], [1443329280.0, 97200000.0, 723.9300480000002], [1443331008.0, 97220000.0, 724.4570350479999], [1443332736.0, 97240000.0, 724.984255424], [1443334464.0, 97260000.0, 725.5117091760003], [1443336192.0, 97280000.0, 726.039396352], [1443337920.0, 97300000.0, 726.5673170000001], [1443339648.0, 97320000.0, 727.0954711679999], [1443341376.0, 97340000.0, 727.6238589039999], [1443343104.0, 97360000.0, 728.1524802560001], [1443344832.0, 97380000.0, 728.681335272], [1443346560.0, 97400000.0, 729.2104240000001], [1443348288.0, 97420000.0, 729.7397464880003], [1443350016.0, 97440000.0, 730.2693027839999], [1443351744.0, 97460000.0, 730.7990929360001], [1443353472.0, 97480000.0, 731.3291169919999], [1443355200.0, 97500000.0, 731.859375], [1443356928.0, 97520000.0, 732.3898670080002], [1443358656.0, 97540000.0, 732.9205930639998], [1443360384.0, 97560000.0, 733.451553216], [1443362112.0, 97580000.0, 733.9827475119998], [1443363840.0, 97600000.0, 734.5141759999999], [1443365568.0, 97620000.0, 735.0458387280001], [1443367296.0, 97640000.0, 735.5777357439998], [1443369024.0, 97660000.0, 736.109867096], [1443370752.0, 97680000.0, 736.6422328320002], [1443372480.0, 97700000.0, 737.1748329999998], [1443374208.0, 97720000.0, 737.7076676480001], [1443375936.0, 97740000.0, 738.2407368239998], [1443377664.0, 97760000.0, 738.774040576], [1443379392.0, 97780000.0, 739.3075789520001], [1443381120.0, 97800000.0, 739.8413519999997], [1443382848.0, 97820000.0, 740.375359768], [1443384576.0, 97840000.0, 740.9096023040001], [1443386304.0, 97860000.0, 741.4440796559999], [1443388032.0, 97880000.0, 741.9787918720001], [1443389760.0, 97900000.0, 742.5137389999998], [1443391488.0, 97920000.0, 743.0489210879999], [1443393216.0, 97940000.0, 743.5843381840001], [1443394944.0, 97960000.0, 744.1199903359999], [1443396672.0, 97980000.0, 744.655877592], [1443398400.0, 98000000.0, 745.1920000000002], [1443400128.0, 98020000.0, 745.7283576079999], [1443401856.0, 98040000.0, 746.2649504640001], [1443403584.0, 98060000.0, 746.8017786159998], [1443405312.0, 98080000.0, 747.338842112], [1443407040.0, 98100000.0, 747.8761410000001], [1443408768.0, 98120000.0, 748.4136753279998], [1443410496.0, 98140000.0, 748.951445144], [1443412224.0, 98160000.0, 749.4894504960001], [1443413952.0, 98180000.0, 750.0276914319998], [1443415680.0, 98200000.0, 750.5661680000001], [1443417408.0, 98220000.0, 751.1048802479997], [1443419136.0, 98240000.0, 751.643828224], [1443420864.0, 98260000.0, 752.1830119760002], [1443422592.0, 98280000.0, 752.7224315519998], [1443424320.0, 98300000.0, 753.262087], [1443426048.0, 98320000.0, 753.8019783680002], [1443427776.0, 98340000.0, 754.342105704], [1443429504.0, 98360000.0, 754.8824690560001], [1443431232.0, 98380000.0, 755.4230684719997], [1443432960.0, 98400000.0, 755.963904], [1443434688.0, 98420000.0, 756.5049756880002], [1443436416.0, 98440000.0, 757.0462835839999], [1443438144.0, 98460000.0, 757.587827736], [1443439872.0, 98480000.0, 758.1296081920002], [1443441600.0, 98500000.0, 758.671625], [1443443328.0, 98520000.0, 759.2138782080001], [1443445056.0, 98540000.0, 759.7563678639997], [1443446784.0, 98560000.0, 760.299094016], [1443448512.0, 98580000.0, 760.8420567120002], [1443450240.0, 98600000.0, 761.3852559999998], [1443451968.0, 98620000.0, 761.928691928], [1443453696.0, 98640000.0, 762.4723645440001], [1443455424.0, 98660000.0, 763.0162738959998], [1443457152.0, 98680000.0, 763.560420032], [1443458880.0, 98700000.0, 764.1048029999998], [1443460608.0, 98720000.0, 764.6494228480001], [1443462336.0, 98740000.0, 765.1942796240002], [1443464064.0, 98760000.0, 765.7393733759998], [1443465792.0, 98780000.0, 766.2847041519999], [1443467520.0, 98800000.0, 766.8302720000003], [1443469248.0, 98820000.0, 767.3760769679999], [1443470976.0, 98840000.0, 767.9221191040001], [1443472704.0, 98860000.0, 768.4683984559997], [1443474432.0, 98880000.0, 769.014915072], [1443476160.0, 98900000.0, 769.5616690000002], [1443477888.0, 98920000.0, 770.1086602879998], [1443479616.0, 98940000.0, 770.6558889840001], [1443481344.0, 98960000.0, 771.2033551360003], [1443483072.0, 98980000.0, 771.7510587919999], [1443484800.0, 99000000.0, 772.2990000000001], [1443486528.0, 99020000.0, 772.8471788079999], [1443488256.0, 99040000.0, 773.3955952639999], [1443489984.0, 99060000.0, 773.9442494160002], [1443491712.0, 99080000.0, 774.4931413119998], [1443493440.0, 99100000.0, 775.042271], [1443495168.0, 99120000.0, 775.5916385280002], [1443496896.0, 99140000.0, 776.141243944], [1443498624.0, 99160000.0, 776.6910872960002], [1443500352.0, 99180000.0, 777.2411686319998], [1443502080.0, 99200000.0, 777.7914880000001], [1443503808.0, 99220000.0, 778.3420454480001], [1443505536.0, 99240000.0, 778.8928410239998], [1443507264.0, 99260000.0, 779.443874776], [1443508992.0, 99280000.0, 779.9951467520002], [1443510720.0, 99300000.0, 780.546657], [1443512448.0, 99320000.0, 781.0984055680001], [1443514176.0, 99340000.0, 781.6503925039998], [1443515904.0, 99360000.0, 782.202617856], [1443517632.0, 99380000.0, 782.7550816720001], [1443519360.0, 99400000.0, 783.3077839999999], [1443521088.0, 99420000.0, 783.860724888], [1443522816.0, 99440000.0, 784.4139043840003], [1443524544.0, 99460000.0, 784.967322536], [1443526272.0, 99480000.0, 785.5209793920001], [1443528000.0, 99500000.0, 786.0748749999998], [1443529728.0, 99520000.0, 786.629009408], [1443531456.0, 99540000.0, 787.1833826640002], [1443533184.0, 99560000.0, 787.7379948159999], [1443534912.0, 99580000.0, 788.2928459120001], [1443536640.0, 99600000.0, 788.8479360000001], [1443538368.0, 99620000.0, 789.4032651279999], [1443540096.0, 99640000.0, 789.9588333440001], [1443541824.0, 99660000.0, 790.5146406959998], [1443543552.0, 99680000.0, 791.070687232], [1443545280.0, 99700000.0, 791.6269730000001], [1443547008.0, 99720000.0, 792.1834980479998], [1443548736.0, 99740000.0, 792.740262424], [1443550464.0, 99760000.0, 793.2972661760003], [1443552192.0, 99780000.0, 793.8545093519999], [1443553920.0, 99800000.0, 794.411992], [1443555648.0, 99820000.0, 794.9697141679999], [1443557376.0, 99840000.0, 795.527675904], [1443559104.0, 99860000.0, 796.0858772560002], [1443560832.0, 99880000.0, 796.644318272], [1443562560.0, 99900000.0, 797.2029990000001], [1443564288.0, 99920000.0, 797.7619194880002], [1443566016.0, 99940000.0, 798.3210797839998], [1443567744.0, 99960000.0, 798.880479936], [1443569472.0, 99980000.0, 799.4401199919998]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/app/demo/data/linear.json b/tensorflow/tensorboard/app/demo/data/linear.json new file mode 100644 index 0000000000..3279365a23 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/linear.json @@ -0,0 +1 @@ +[[1434931200.0, 0.0, 5.0], [1434932928.0, 20000.0, 5.04], [1434934656.0, 40000.0, 5.08], [1434936384.0, 60000.0, 5.12], [1434938112.0, 80000.0, 5.16], [1434939840.0, 100000.0, 5.2], [1434941568.0, 120000.0, 5.24], [1434943296.0, 140000.0, 5.28], [1434945024.0, 160000.0, 5.32], [1434946752.0, 180000.0, 5.36], [1434948480.0, 200000.0, 5.4], [1434950208.0, 220000.0, 5.4399999999999995], [1434951936.0, 240000.0, 5.48], [1434953664.0, 260000.0, 5.52], [1434955392.0, 280000.0, 5.5600000000000005], [1434957120.0, 300000.0, 5.6], [1434958848.0, 320000.0, 5.64], [1434960576.0, 340000.0, 5.68], [1434962304.0, 360000.0, 5.72], [1434964032.0, 380000.0, 5.76], [1434965760.0, 400000.0, 5.8], [1434967488.0, 420000.0, 5.84], [1434969216.0, 440000.0, 5.88], [1434970944.0, 460000.0, 5.92], [1434972672.0, 480000.0, 5.96], [1434974400.0, 500000.0, 6.0], [1434976128.0, 520000.0, 6.04], [1434977856.0, 540000.0, 6.08], [1434979584.0, 560000.0, 6.12], [1434981312.0, 580000.0, 6.16], [1434983040.0, 600000.0, 6.2], [1434984768.0, 620000.0, 6.24], [1434986496.0, 640000.0, 6.28], [1434988224.0, 660000.0, 6.32], [1434989952.0, 680000.0, 6.36], [1434991680.0, 700000.0, 6.4], [1434993408.0, 720000.0, 6.4399999999999995], [1434995136.0, 740000.0, 6.48], [1434996864.0, 760000.0, 6.52], [1434998592.0, 780000.0, 6.5600000000000005], [1435000320.0, 800000.0, 6.6], [1435002048.0, 820000.0, 6.640000000000001], [1435003776.0, 840000.0, 6.68], [1435005504.0, 860000.0, 6.72], [1435007232.0, 880000.0, 6.76], [1435008960.0, 900000.0, 6.8], [1435010688.0, 920000.0, 6.84], [1435012416.0, 940000.0, 6.88], [1435014144.0, 960000.0, 6.92], [1435015872.0, 980000.0, 6.96], [1435017600.0, 1000000.0, 7.0], [1435019328.0, 1020000.0, 7.04], [1435021056.0, 1040000.0, 7.08], [1435022784.0, 1060000.0, 7.12], [1435024512.0, 1080000.0, 7.16], [1435026240.0, 1100000.0, 7.2], [1435027968.0, 1120000.0, 7.24], [1435029696.0, 1140000.0, 7.28], [1435031424.0, 1160000.0, 7.32], [1435033152.0, 1180000.0, 7.359999999999999], [1435034880.0, 1200000.0, 7.4], [1435036608.0, 1220000.0, 7.4399999999999995], [1435038336.0, 1240000.0, 7.48], [1435040064.0, 1260000.0, 7.52], [1435041792.0, 1280000.0, 7.5600000000000005], [1435043520.0, 1300000.0, 7.6], [1435045248.0, 1320000.0, 7.640000000000001], [1435046976.0, 1340000.0, 7.68], [1435048704.0, 1360000.0, 7.720000000000001], [1435050432.0, 1380000.0, 7.76], [1435052160.0, 1400000.0, 7.800000000000001], [1435053888.0, 1420000.0, 7.84], [1435055616.0, 1440000.0, 7.88], [1435057344.0, 1460000.0, 7.92], [1435059072.0, 1480000.0, 7.96], [1435060800.0, 1500000.0, 8.0], [1435062528.0, 1520000.0, 8.04], [1435064256.0, 1540000.0, 8.08], [1435065984.0, 1560000.0, 8.120000000000001], [1435067712.0, 1580000.0, 8.16], [1435069440.0, 1600000.0, 8.2], [1435071168.0, 1620000.0, 8.24], [1435072896.0, 1640000.0, 8.280000000000001], [1435074624.0, 1660000.0, 8.32], [1435076352.0, 1680000.0, 8.36], [1435078080.0, 1700000.0, 8.4], [1435079808.0, 1720000.0, 8.44], [1435081536.0, 1740000.0, 8.48], [1435083264.0, 1760000.0, 8.52], [1435084992.0, 1780000.0, 8.559999999999999], [1435086720.0, 1800000.0, 8.6], [1435088448.0, 1820000.0, 8.64], [1435090176.0, 1840000.0, 8.68], [1435091904.0, 1860000.0, 8.719999999999999], [1435093632.0, 1880000.0, 8.76], [1435095360.0, 1900000.0, 8.8], [1435097088.0, 1920000.0, 8.84], [1435098816.0, 1940000.0, 8.879999999999999], [1435100544.0, 1960000.0, 8.92], [1435102272.0, 1980000.0, 8.96], [1435104000.0, 2000000.0, 9.0], [1435105728.0, 2020000.0, 9.04], [1435107456.0, 2040000.0, 9.08], [1435109184.0, 2060000.0, 9.120000000000001], [1435110912.0, 2080000.0, 9.16], [1435112640.0, 2100000.0, 9.2], [1435114368.0, 2120000.0, 9.24], [1435116096.0, 2140000.0, 9.280000000000001], [1435117824.0, 2160000.0, 9.32], [1435119552.0, 2180000.0, 9.36], [1435121280.0, 2200000.0, 9.4], [1435123008.0, 2220000.0, 9.440000000000001], [1435124736.0, 2240000.0, 9.48], [1435126464.0, 2260000.0, 9.52], [1435128192.0, 2280000.0, 9.56], [1435129920.0, 2300000.0, 9.600000000000001], [1435131648.0, 2320000.0, 9.64], [1435133376.0, 2340000.0, 9.68], [1435135104.0, 2360000.0, 9.719999999999999], [1435136832.0, 2380000.0, 9.76], [1435138560.0, 2400000.0, 9.8], [1435140288.0, 2420000.0, 9.84], [1435142016.0, 2440000.0, 9.879999999999999], [1435143744.0, 2460000.0, 9.92], [1435145472.0, 2480000.0, 9.96], [1435147200.0, 2500000.0, 10.0], [1435148928.0, 2520000.0, 10.04], [1435150656.0, 2540000.0, 10.08], [1435152384.0, 2560000.0, 10.120000000000001], [1435154112.0, 2580000.0, 10.16], [1435155840.0, 2600000.0, 10.2], [1435157568.0, 2620000.0, 10.24], [1435159296.0, 2640000.0, 10.280000000000001], [1435161024.0, 2660000.0, 10.32], [1435162752.0, 2680000.0, 10.36], [1435164480.0, 2700000.0, 10.4], [1435166208.0, 2720000.0, 10.440000000000001], [1435167936.0, 2740000.0, 10.48], [1435169664.0, 2760000.0, 10.52], [1435171392.0, 2780000.0, 10.56], [1435173120.0, 2800000.0, 10.600000000000001], [1435174848.0, 2820000.0, 10.64], [1435176576.0, 2840000.0, 10.68], [1435178304.0, 2860000.0, 10.719999999999999], [1435180032.0, 2880000.0, 10.76], [1435181760.0, 2900000.0, 10.8], [1435183488.0, 2920000.0, 10.84], [1435185216.0, 2940000.0, 10.879999999999999], [1435186944.0, 2960000.0, 10.92], [1435188672.0, 2980000.0, 10.96], [1435190400.0, 3000000.0, 11.0], [1435192128.0, 3020000.0, 11.04], [1435193856.0, 3040000.0, 11.08], [1435195584.0, 3060000.0, 11.120000000000001], [1435197312.0, 3080000.0, 11.16], [1435199040.0, 3100000.0, 11.2], [1435200768.0, 3120000.0, 11.24], [1435202496.0, 3140000.0, 11.280000000000001], [1435204224.0, 3160000.0, 11.32], [1435205952.0, 3180000.0, 11.36], [1435207680.0, 3200000.0, 11.4], [1435209408.0, 3220000.0, 11.440000000000001], [1435211136.0, 3240000.0, 11.48], [1435212864.0, 3260000.0, 11.52], [1435214592.0, 3280000.0, 11.56], [1435216320.0, 3300000.0, 11.600000000000001], [1435218048.0, 3320000.0, 11.64], [1435219776.0, 3340000.0, 11.68], [1435221504.0, 3360000.0, 11.72], [1435223232.0, 3380000.0, 11.760000000000002], [1435224960.0, 3400000.0, 11.8], [1435226688.0, 3420000.0, 11.84], [1435228416.0, 3440000.0, 11.879999999999999], [1435230144.0, 3460000.0, 11.92], [1435231872.0, 3480000.0, 11.959999999999999], [1435233600.0, 3500000.0, 12.0], [1435235328.0, 3520000.0, 12.04], [1435237056.0, 3540000.0, 12.08], [1435238784.0, 3560000.0, 12.12], [1435240512.0, 3580000.0, 12.16], [1435242240.0, 3600000.0, 12.2], [1435243968.0, 3620000.0, 12.24], [1435245696.0, 3640000.0, 12.28], [1435247424.0, 3660000.0, 12.32], [1435249152.0, 3680000.0, 12.36], [1435250880.0, 3700000.0, 12.4], [1435252608.0, 3720000.0, 12.44], [1435254336.0, 3740000.0, 12.48], [1435256064.0, 3760000.0, 12.52], [1435257792.0, 3780000.0, 12.56], [1435259520.0, 3800000.0, 12.6], [1435261248.0, 3820000.0, 12.64], [1435262976.0, 3840000.0, 12.68], [1435264704.0, 3860000.0, 12.72], [1435266432.0, 3880000.0, 12.76], [1435268160.0, 3900000.0, 12.8], [1435269888.0, 3920000.0, 12.84], [1435271616.0, 3940000.0, 12.88], [1435273344.0, 3960000.0, 12.92], [1435275072.0, 3980000.0, 12.96], [1435276800.0, 4000000.0, 13.0], [1435278528.0, 4020000.0, 13.040000000000001], [1435280256.0, 4040000.0, 13.08], [1435281984.0, 4060000.0, 13.120000000000001], [1435283712.0, 4080000.0, 13.16], [1435285440.0, 4100000.0, 13.2], [1435287168.0, 4120000.0, 13.24], [1435288896.0, 4140000.0, 13.28], [1435290624.0, 4160000.0, 13.32], [1435292352.0, 4180000.0, 13.36], [1435294080.0, 4200000.0, 13.4], [1435295808.0, 4220000.0, 13.44], [1435297536.0, 4240000.0, 13.48], [1435299264.0, 4260000.0, 13.52], [1435300992.0, 4280000.0, 13.56], [1435302720.0, 4300000.0, 13.6], [1435304448.0, 4320000.0, 13.64], [1435306176.0, 4340000.0, 13.68], [1435307904.0, 4360000.0, 13.72], [1435309632.0, 4380000.0, 13.76], [1435311360.0, 4400000.0, 13.8], [1435313088.0, 4420000.0, 13.84], [1435314816.0, 4440000.0, 13.88], [1435316544.0, 4460000.0, 13.92], [1435318272.0, 4480000.0, 13.96], [1435320000.0, 4500000.0, 14.0], [1435321728.0, 4520000.0, 14.040000000000001], [1435323456.0, 4540000.0, 14.08], [1435325184.0, 4560000.0, 14.120000000000001], [1435326912.0, 4580000.0, 14.16], [1435328640.0, 4600000.0, 14.200000000000001], [1435330368.0, 4620000.0, 14.24], [1435332096.0, 4640000.0, 14.280000000000001], [1435333824.0, 4660000.0, 14.32], [1435335552.0, 4680000.0, 14.360000000000001], [1435337280.0, 4700000.0, 14.399999999999999], [1435339008.0, 4720000.0, 14.44], [1435340736.0, 4740000.0, 14.48], [1435342464.0, 4760000.0, 14.52], [1435344192.0, 4780000.0, 14.559999999999999], [1435345920.0, 4800000.0, 14.6], [1435347648.0, 4820000.0, 14.64], [1435349376.0, 4840000.0, 14.68], [1435351104.0, 4860000.0, 14.719999999999999], [1435352832.0, 4880000.0, 14.76], [1435354560.0, 4900000.0, 14.8], [1435356288.0, 4920000.0, 14.84], [1435358016.0, 4940000.0, 14.879999999999999], [1435359744.0, 4960000.0, 14.92], [1435361472.0, 4980000.0, 14.96], [1435363200.0, 5000000.0, 15.0], [1435364928.0, 5020000.0, 15.04], [1435366656.0, 5040000.0, 15.08], [1435368384.0, 5060000.0, 15.120000000000001], [1435370112.0, 5080000.0, 15.16], [1435371840.0, 5100000.0, 15.2], [1435373568.0, 5120000.0, 15.24], [1435375296.0, 5140000.0, 15.280000000000001], [1435377024.0, 5160000.0, 15.32], [1435378752.0, 5180000.0, 15.36], [1435380480.0, 5200000.0, 15.4], [1435382208.0, 5220000.0, 15.440000000000001], [1435383936.0, 5240000.0, 15.48], [1435385664.0, 5260000.0, 15.52], [1435387392.0, 5280000.0, 15.56], [1435389120.0, 5300000.0, 15.600000000000001], [1435390848.0, 5320000.0, 15.64], [1435392576.0, 5340000.0, 15.68], [1435394304.0, 5360000.0, 15.72], [1435396032.0, 5380000.0, 15.760000000000002], [1435397760.0, 5400000.0, 15.8], [1435399488.0, 5420000.0, 15.84], [1435401216.0, 5440000.0, 15.88], [1435402944.0, 5460000.0, 15.920000000000002], [1435404672.0, 5480000.0, 15.96], [1435406400.0, 5500000.0, 16.0], [1435408128.0, 5520000.0, 16.04], [1435409856.0, 5540000.0, 16.080000000000002], [1435411584.0, 5560000.0, 16.12], [1435413312.0, 5580000.0, 16.16], [1435415040.0, 5600000.0, 16.200000000000003], [1435416768.0, 5620000.0, 16.240000000000002], [1435418496.0, 5640000.0, 16.28], [1435420224.0, 5660000.0, 16.32], [1435421952.0, 5680000.0, 16.36], [1435423680.0, 5700000.0, 16.4], [1435425408.0, 5720000.0, 16.439999999999998], [1435427136.0, 5740000.0, 16.479999999999997], [1435428864.0, 5760000.0, 16.52], [1435430592.0, 5780000.0, 16.56], [1435432320.0, 5800000.0, 16.6], [1435434048.0, 5820000.0, 16.64], [1435435776.0, 5840000.0, 16.68], [1435437504.0, 5860000.0, 16.72], [1435439232.0, 5880000.0, 16.759999999999998], [1435440960.0, 5900000.0, 16.799999999999997], [1435442688.0, 5920000.0, 16.84], [1435444416.0, 5940000.0, 16.88], [1435446144.0, 5960000.0, 16.92], [1435447872.0, 5980000.0, 16.96], [1435449600.0, 6000000.0, 17.0], [1435451328.0, 6020000.0, 17.04], [1435453056.0, 6040000.0, 17.08], [1435454784.0, 6060000.0, 17.119999999999997], [1435456512.0, 6080000.0, 17.16], [1435458240.0, 6100000.0, 17.2], [1435459968.0, 6120000.0, 17.240000000000002], [1435461696.0, 6140000.0, 17.28], [1435463424.0, 6160000.0, 17.32], [1435465152.0, 6180000.0, 17.36], [1435466880.0, 6200000.0, 17.4], [1435468608.0, 6220000.0, 17.439999999999998], [1435470336.0, 6240000.0, 17.48], [1435472064.0, 6260000.0, 17.52], [1435473792.0, 6280000.0, 17.560000000000002], [1435475520.0, 6300000.0, 17.6], [1435477248.0, 6320000.0, 17.64], [1435478976.0, 6340000.0, 17.68], [1435480704.0, 6360000.0, 17.72], [1435482432.0, 6380000.0, 17.759999999999998], [1435484160.0, 6400000.0, 17.8], [1435485888.0, 6420000.0, 17.84], [1435487616.0, 6440000.0, 17.880000000000003], [1435489344.0, 6460000.0, 17.92], [1435491072.0, 6480000.0, 17.96], [1435492800.0, 6500000.0, 18.0], [1435494528.0, 6520000.0, 18.04], [1435496256.0, 6540000.0, 18.08], [1435497984.0, 6560000.0, 18.12], [1435499712.0, 6580000.0, 18.16], [1435501440.0, 6600000.0, 18.200000000000003], [1435503168.0, 6620000.0, 18.240000000000002], [1435504896.0, 6640000.0, 18.28], [1435506624.0, 6660000.0, 18.32], [1435508352.0, 6680000.0, 18.36], [1435510080.0, 6700000.0, 18.4], [1435511808.0, 6720000.0, 18.44], [1435513536.0, 6740000.0, 18.48], [1435515264.0, 6760000.0, 18.520000000000003], [1435516992.0, 6780000.0, 18.560000000000002], [1435518720.0, 6800000.0, 18.6], [1435520448.0, 6820000.0, 18.64], [1435522176.0, 6840000.0, 18.68], [1435523904.0, 6860000.0, 18.72], [1435525632.0, 6880000.0, 18.759999999999998], [1435527360.0, 6900000.0, 18.799999999999997], [1435529088.0, 6920000.0, 18.84], [1435530816.0, 6940000.0, 18.88], [1435532544.0, 6960000.0, 18.919999999999998], [1435534272.0, 6980000.0, 18.96], [1435536000.0, 7000000.0, 19.0], [1435537728.0, 7020000.0, 19.04], [1435539456.0, 7040000.0, 19.08], [1435541184.0, 7060000.0, 19.119999999999997], [1435542912.0, 7080000.0, 19.16], [1435544640.0, 7100000.0, 19.2], [1435546368.0, 7120000.0, 19.24], [1435548096.0, 7140000.0, 19.28], [1435549824.0, 7160000.0, 19.32], [1435551552.0, 7180000.0, 19.36], [1435553280.0, 7200000.0, 19.4], [1435555008.0, 7220000.0, 19.439999999999998], [1435556736.0, 7240000.0, 19.48], [1435558464.0, 7260000.0, 19.52], [1435560192.0, 7280000.0, 19.56], [1435561920.0, 7300000.0, 19.6], [1435563648.0, 7320000.0, 19.64], [1435565376.0, 7340000.0, 19.68], [1435567104.0, 7360000.0, 19.72], [1435568832.0, 7380000.0, 19.759999999999998], [1435570560.0, 7400000.0, 19.8], [1435572288.0, 7420000.0, 19.84], [1435574016.0, 7440000.0, 19.88], [1435575744.0, 7460000.0, 19.92], [1435577472.0, 7480000.0, 19.96], [1435579200.0, 7500000.0, 20.0], [1435580928.0, 7520000.0, 20.04], [1435582656.0, 7540000.0, 20.08], [1435584384.0, 7560000.0, 20.12], [1435586112.0, 7580000.0, 20.16], [1435587840.0, 7600000.0, 20.2], [1435589568.0, 7620000.0, 20.240000000000002], [1435591296.0, 7640000.0, 20.28], [1435593024.0, 7660000.0, 20.32], [1435594752.0, 7680000.0, 20.36], [1435596480.0, 7700000.0, 20.4], [1435598208.0, 7720000.0, 20.44], [1435599936.0, 7740000.0, 20.48], [1435601664.0, 7760000.0, 20.52], [1435603392.0, 7780000.0, 20.560000000000002], [1435605120.0, 7800000.0, 20.6], [1435606848.0, 7820000.0, 20.64], [1435608576.0, 7840000.0, 20.68], [1435610304.0, 7860000.0, 20.72], [1435612032.0, 7880000.0, 20.76], [1435613760.0, 7900000.0, 20.8], [1435615488.0, 7920000.0, 20.84], [1435617216.0, 7940000.0, 20.880000000000003], [1435618944.0, 7960000.0, 20.92], [1435620672.0, 7980000.0, 20.96], [1435622400.0, 8000000.0, 21.0], [1435624128.0, 8020000.0, 21.04], [1435625856.0, 8040000.0, 21.080000000000002], [1435627584.0, 8060000.0, 21.12], [1435629312.0, 8080000.0, 21.16], [1435631040.0, 8100000.0, 21.200000000000003], [1435632768.0, 8120000.0, 21.240000000000002], [1435634496.0, 8140000.0, 21.279999999999998], [1435636224.0, 8160000.0, 21.32], [1435637952.0, 8180000.0, 21.36], [1435639680.0, 8200000.0, 21.4], [1435641408.0, 8220000.0, 21.439999999999998], [1435643136.0, 8240000.0, 21.48], [1435644864.0, 8260000.0, 21.52], [1435646592.0, 8280000.0, 21.56], [1435648320.0, 8300000.0, 21.599999999999998], [1435650048.0, 8320000.0, 21.64], [1435651776.0, 8340000.0, 21.68], [1435653504.0, 8360000.0, 21.72], [1435655232.0, 8380000.0, 21.759999999999998], [1435656960.0, 8400000.0, 21.8], [1435658688.0, 8420000.0, 21.84], [1435660416.0, 8440000.0, 21.88], [1435662144.0, 8460000.0, 21.919999999999998], [1435663872.0, 8480000.0, 21.96], [1435665600.0, 8500000.0, 22.0], [1435667328.0, 8520000.0, 22.04], [1435669056.0, 8540000.0, 22.08], [1435670784.0, 8560000.0, 22.12], [1435672512.0, 8580000.0, 22.16], [1435674240.0, 8600000.0, 22.2], [1435675968.0, 8620000.0, 22.24], [1435677696.0, 8640000.0, 22.28], [1435679424.0, 8660000.0, 22.32], [1435681152.0, 8680000.0, 22.36], [1435682880.0, 8700000.0, 22.4], [1435684608.0, 8720000.0, 22.44], [1435686336.0, 8740000.0, 22.48], [1435688064.0, 8760000.0, 22.52], [1435689792.0, 8780000.0, 22.56], [1435691520.0, 8800000.0, 22.6], [1435693248.0, 8820000.0, 22.64], [1435694976.0, 8840000.0, 22.68], [1435696704.0, 8860000.0, 22.72], [1435698432.0, 8880000.0, 22.76], [1435700160.0, 8900000.0, 22.8], [1435701888.0, 8920000.0, 22.84], [1435703616.0, 8940000.0, 22.88], [1435705344.0, 8960000.0, 22.92], [1435707072.0, 8980000.0, 22.96], [1435708800.0, 9000000.0, 23.0], [1435710528.0, 9020000.0, 23.04], [1435712256.0, 9040000.0, 23.080000000000002], [1435713984.0, 9060000.0, 23.12], [1435715712.0, 9080000.0, 23.16], [1435717440.0, 9100000.0, 23.2], [1435719168.0, 9120000.0, 23.240000000000002], [1435720896.0, 9140000.0, 23.28], [1435722624.0, 9160000.0, 23.32], [1435724352.0, 9180000.0, 23.36], [1435726080.0, 9200000.0, 23.400000000000002], [1435727808.0, 9220000.0, 23.44], [1435729536.0, 9240000.0, 23.48], [1435731264.0, 9260000.0, 23.52], [1435732992.0, 9280000.0, 23.560000000000002], [1435734720.0, 9300000.0, 23.6], [1435736448.0, 9320000.0, 23.64], [1435738176.0, 9340000.0, 23.68], [1435739904.0, 9360000.0, 23.720000000000002], [1435741632.0, 9380000.0, 23.759999999999998], [1435743360.0, 9400000.0, 23.799999999999997], [1435745088.0, 9420000.0, 23.84], [1435746816.0, 9440000.0, 23.88], [1435748544.0, 9460000.0, 23.919999999999998], [1435750272.0, 9480000.0, 23.96], [1435752000.0, 9500000.0, 24.0], [1435753728.0, 9520000.0, 24.04], [1435755456.0, 9540000.0, 24.08], [1435757184.0, 9560000.0, 24.119999999999997], [1435758912.0, 9580000.0, 24.16], [1435760640.0, 9600000.0, 24.2], [1435762368.0, 9620000.0, 24.24], [1435764096.0, 9640000.0, 24.28], [1435765824.0, 9660000.0, 24.32], [1435767552.0, 9680000.0, 24.36], [1435769280.0, 9700000.0, 24.4], [1435771008.0, 9720000.0, 24.439999999999998], [1435772736.0, 9740000.0, 24.48], [1435774464.0, 9760000.0, 24.52], [1435776192.0, 9780000.0, 24.56], [1435777920.0, 9800000.0, 24.6], [1435779648.0, 9820000.0, 24.64], [1435781376.0, 9840000.0, 24.68], [1435783104.0, 9860000.0, 24.72], [1435784832.0, 9880000.0, 24.759999999999998], [1435786560.0, 9900000.0, 24.8], [1435788288.0, 9920000.0, 24.84], [1435790016.0, 9940000.0, 24.88], [1435791744.0, 9960000.0, 24.92], [1435793472.0, 9980000.0, 24.96], [1435795200.0, 10000000.0, 25.0], [1435796928.0, 10020000.0, 25.04], [1435798656.0, 10040000.0, 25.08], [1435800384.0, 10060000.0, 25.12], [1435802112.0, 10080000.0, 25.16], [1435803840.0, 10100000.0, 25.2], [1435805568.0, 10120000.0, 25.240000000000002], [1435807296.0, 10140000.0, 25.28], [1435809024.0, 10160000.0, 25.32], [1435810752.0, 10180000.0, 25.36], [1435812480.0, 10200000.0, 25.4], [1435814208.0, 10220000.0, 25.44], [1435815936.0, 10240000.0, 25.48], [1435817664.0, 10260000.0, 25.52], [1435819392.0, 10280000.0, 25.560000000000002], [1435821120.0, 10300000.0, 25.6], [1435822848.0, 10320000.0, 25.64], [1435824576.0, 10340000.0, 25.68], [1435826304.0, 10360000.0, 25.72], [1435828032.0, 10380000.0, 25.76], [1435829760.0, 10400000.0, 25.8], [1435831488.0, 10420000.0, 25.84], [1435833216.0, 10440000.0, 25.880000000000003], [1435834944.0, 10460000.0, 25.92], [1435836672.0, 10480000.0, 25.96], [1435838400.0, 10500000.0, 26.0], [1435840128.0, 10520000.0, 26.04], [1435841856.0, 10540000.0, 26.080000000000002], [1435843584.0, 10560000.0, 26.12], [1435845312.0, 10580000.0, 26.16], [1435847040.0, 10600000.0, 26.200000000000003], [1435848768.0, 10620000.0, 26.240000000000002], [1435850496.0, 10640000.0, 26.28], [1435852224.0, 10660000.0, 26.32], [1435853952.0, 10680000.0, 26.36], [1435855680.0, 10700000.0, 26.400000000000002], [1435857408.0, 10720000.0, 26.44], [1435859136.0, 10740000.0, 26.48], [1435860864.0, 10760000.0, 26.520000000000003], [1435862592.0, 10780000.0, 26.560000000000002], [1435864320.0, 10800000.0, 26.6], [1435866048.0, 10820000.0, 26.64], [1435867776.0, 10840000.0, 26.68], [1435869504.0, 10860000.0, 26.720000000000002], [1435871232.0, 10880000.0, 26.76], [1435872960.0, 10900000.0, 26.8], [1435874688.0, 10920000.0, 26.840000000000003], [1435876416.0, 10940000.0, 26.880000000000003], [1435878144.0, 10960000.0, 26.92], [1435879872.0, 10980000.0, 26.96], [1435881600.0, 11000000.0, 27.0], [1435883328.0, 11020000.0, 27.040000000000003], [1435885056.0, 11040000.0, 27.080000000000002], [1435886784.0, 11060000.0, 27.12], [1435888512.0, 11080000.0, 27.160000000000004], [1435890240.0, 11100000.0, 27.200000000000003], [1435891968.0, 11120000.0, 27.240000000000002], [1435893696.0, 11140000.0, 27.28], [1435895424.0, 11160000.0, 27.32], [1435897152.0, 11180000.0, 27.360000000000003], [1435898880.0, 11200000.0, 27.400000000000002], [1435900608.0, 11220000.0, 27.44], [1435902336.0, 11240000.0, 27.480000000000004], [1435904064.0, 11260000.0, 27.519999999999996], [1435905792.0, 11280000.0, 27.56], [1435907520.0, 11300000.0, 27.599999999999998], [1435909248.0, 11320000.0, 27.639999999999997], [1435910976.0, 11340000.0, 27.68], [1435912704.0, 11360000.0, 27.72], [1435914432.0, 11380000.0, 27.759999999999998], [1435916160.0, 11400000.0, 27.799999999999997], [1435917888.0, 11420000.0, 27.839999999999996], [1435919616.0, 11440000.0, 27.88], [1435921344.0, 11460000.0, 27.919999999999998], [1435923072.0, 11480000.0, 27.959999999999997], [1435924800.0, 11500000.0, 28.0], [1435926528.0, 11520000.0, 28.04], [1435928256.0, 11540000.0, 28.08], [1435929984.0, 11560000.0, 28.119999999999997], [1435931712.0, 11580000.0, 28.159999999999997], [1435933440.0, 11600000.0, 28.2], [1435935168.0, 11620000.0, 28.24], [1435936896.0, 11640000.0, 28.279999999999998], [1435938624.0, 11660000.0, 28.32], [1435940352.0, 11680000.0, 28.36], [1435942080.0, 11700000.0, 28.4], [1435943808.0, 11720000.0, 28.439999999999998], [1435945536.0, 11740000.0, 28.479999999999997], [1435947264.0, 11760000.0, 28.52], [1435948992.0, 11780000.0, 28.56], [1435950720.0, 11800000.0, 28.599999999999998], [1435952448.0, 11820000.0, 28.64], [1435954176.0, 11840000.0, 28.68], [1435955904.0, 11860000.0, 28.72], [1435957632.0, 11880000.0, 28.759999999999998], [1435959360.0, 11900000.0, 28.799999999999997], [1435961088.0, 11920000.0, 28.84], [1435962816.0, 11940000.0, 28.88], [1435964544.0, 11960000.0, 28.919999999999998], [1435966272.0, 11980000.0, 28.96], [1435968000.0, 12000000.0, 29.0], [1435969728.0, 12020000.0, 29.04], [1435971456.0, 12040000.0, 29.08], [1435973184.0, 12060000.0, 29.119999999999997], [1435974912.0, 12080000.0, 29.16], [1435976640.0, 12100000.0, 29.2], [1435978368.0, 12120000.0, 29.24], [1435980096.0, 12140000.0, 29.28], [1435981824.0, 12160000.0, 29.32], [1435983552.0, 12180000.0, 29.36], [1435985280.0, 12200000.0, 29.4], [1435987008.0, 12220000.0, 29.439999999999998], [1435988736.0, 12240000.0, 29.48], [1435990464.0, 12260000.0, 29.52], [1435992192.0, 12280000.0, 29.56], [1435993920.0, 12300000.0, 29.6], [1435995648.0, 12320000.0, 29.64], [1435997376.0, 12340000.0, 29.68], [1435999104.0, 12360000.0, 29.72], [1436000832.0, 12380000.0, 29.759999999999998], [1436002560.0, 12400000.0, 29.8], [1436004288.0, 12420000.0, 29.84], [1436006016.0, 12440000.0, 29.88], [1436007744.0, 12460000.0, 29.92], [1436009472.0, 12480000.0, 29.96], [1436011200.0, 12500000.0, 30.0], [1436012928.0, 12520000.0, 30.04], [1436014656.0, 12540000.0, 30.08], [1436016384.0, 12560000.0, 30.12], [1436018112.0, 12580000.0, 30.16], [1436019840.0, 12600000.0, 30.2], [1436021568.0, 12620000.0, 30.240000000000002], [1436023296.0, 12640000.0, 30.28], [1436025024.0, 12660000.0, 30.32], [1436026752.0, 12680000.0, 30.36], [1436028480.0, 12700000.0, 30.4], [1436030208.0, 12720000.0, 30.44], [1436031936.0, 12740000.0, 30.48], [1436033664.0, 12760000.0, 30.52], [1436035392.0, 12780000.0, 30.560000000000002], [1436037120.0, 12800000.0, 30.6], [1436038848.0, 12820000.0, 30.64], [1436040576.0, 12840000.0, 30.68], [1436042304.0, 12860000.0, 30.72], [1436044032.0, 12880000.0, 30.76], [1436045760.0, 12900000.0, 30.8], [1436047488.0, 12920000.0, 30.84], [1436049216.0, 12940000.0, 30.880000000000003], [1436050944.0, 12960000.0, 30.92], [1436052672.0, 12980000.0, 30.96], [1436054400.0, 13000000.0, 31.0], [1436056128.0, 13020000.0, 31.04], [1436057856.0, 13040000.0, 31.080000000000002], [1436059584.0, 13060000.0, 31.12], [1436061312.0, 13080000.0, 31.16], [1436063040.0, 13100000.0, 31.200000000000003], [1436064768.0, 13120000.0, 31.240000000000002], [1436066496.0, 13140000.0, 31.28], [1436068224.0, 13160000.0, 31.32], [1436069952.0, 13180000.0, 31.36], [1436071680.0, 13200000.0, 31.400000000000002], [1436073408.0, 13220000.0, 31.44], [1436075136.0, 13240000.0, 31.48], [1436076864.0, 13260000.0, 31.520000000000003], [1436078592.0, 13280000.0, 31.560000000000002], [1436080320.0, 13300000.0, 31.6], [1436082048.0, 13320000.0, 31.64], [1436083776.0, 13340000.0, 31.68], [1436085504.0, 13360000.0, 31.720000000000002], [1436087232.0, 13380000.0, 31.76], [1436088960.0, 13400000.0, 31.8], [1436090688.0, 13420000.0, 31.840000000000003], [1436092416.0, 13440000.0, 31.880000000000003], [1436094144.0, 13460000.0, 31.92], [1436095872.0, 13480000.0, 31.96], [1436097600.0, 13500000.0, 32.0], [1436099328.0, 13520000.0, 32.040000000000006], [1436101056.0, 13540000.0, 32.08], [1436102784.0, 13560000.0, 32.120000000000005], [1436104512.0, 13580000.0, 32.160000000000004], [1436106240.0, 13600000.0, 32.2], [1436107968.0, 13620000.0, 32.24], [1436109696.0, 13640000.0, 32.28], [1436111424.0, 13660000.0, 32.32], [1436113152.0, 13680000.0, 32.36], [1436114880.0, 13700000.0, 32.400000000000006], [1436116608.0, 13720000.0, 32.44], [1436118336.0, 13740000.0, 32.480000000000004], [1436120064.0, 13760000.0, 32.519999999999996], [1436121792.0, 13780000.0, 32.56], [1436123520.0, 13800000.0, 32.599999999999994], [1436125248.0, 13820000.0, 32.64], [1436126976.0, 13840000.0, 32.68], [1436128704.0, 13860000.0, 32.72], [1436130432.0, 13880000.0, 32.76], [1436132160.0, 13900000.0, 32.8], [1436133888.0, 13920000.0, 32.839999999999996], [1436135616.0, 13940000.0, 32.879999999999995], [1436137344.0, 13960000.0, 32.92], [1436139072.0, 13980000.0, 32.959999999999994], [1436140800.0, 14000000.0, 33.0], [1436142528.0, 14020000.0, 33.04], [1436144256.0, 14040000.0, 33.08], [1436145984.0, 14060000.0, 33.12], [1436147712.0, 14080000.0, 33.16], [1436149440.0, 14100000.0, 33.2], [1436151168.0, 14120000.0, 33.239999999999995], [1436152896.0, 14140000.0, 33.28], [1436154624.0, 14160000.0, 33.32], [1436156352.0, 14180000.0, 33.36], [1436158080.0, 14200000.0, 33.4], [1436159808.0, 14220000.0, 33.44], [1436161536.0, 14240000.0, 33.48], [1436163264.0, 14260000.0, 33.519999999999996], [1436164992.0, 14280000.0, 33.56], [1436166720.0, 14300000.0, 33.599999999999994], [1436168448.0, 14320000.0, 33.64], [1436170176.0, 14340000.0, 33.68], [1436171904.0, 14360000.0, 33.72], [1436173632.0, 14380000.0, 33.76], [1436175360.0, 14400000.0, 33.8], [1436177088.0, 14420000.0, 33.84], [1436178816.0, 14440000.0, 33.879999999999995], [1436180544.0, 14460000.0, 33.92], [1436182272.0, 14480000.0, 33.96], [1436184000.0, 14500000.0, 34.0], [1436185728.0, 14520000.0, 34.04], [1436187456.0, 14540000.0, 34.08], [1436189184.0, 14560000.0, 34.12], [1436190912.0, 14580000.0, 34.16], [1436192640.0, 14600000.0, 34.2], [1436194368.0, 14620000.0, 34.239999999999995], [1436196096.0, 14640000.0, 34.28], [1436197824.0, 14660000.0, 34.32], [1436199552.0, 14680000.0, 34.36], [1436201280.0, 14700000.0, 34.4], [1436203008.0, 14720000.0, 34.44], [1436204736.0, 14740000.0, 34.480000000000004], [1436206464.0, 14760000.0, 34.519999999999996], [1436208192.0, 14780000.0, 34.56], [1436209920.0, 14800000.0, 34.6], [1436211648.0, 14820000.0, 34.64], [1436213376.0, 14840000.0, 34.68], [1436215104.0, 14860000.0, 34.72], [1436216832.0, 14880000.0, 34.76], [1436218560.0, 14900000.0, 34.8], [1436220288.0, 14920000.0, 34.84], [1436222016.0, 14940000.0, 34.879999999999995], [1436223744.0, 14960000.0, 34.92], [1436225472.0, 14980000.0, 34.96], [1436227200.0, 15000000.0, 35.0], [1436228928.0, 15020000.0, 35.04], [1436230656.0, 15040000.0, 35.08], [1436232384.0, 15060000.0, 35.120000000000005], [1436234112.0, 15080000.0, 35.16], [1436235840.0, 15100000.0, 35.2], [1436237568.0, 15120000.0, 35.24], [1436239296.0, 15140000.0, 35.28], [1436241024.0, 15160000.0, 35.32], [1436242752.0, 15180000.0, 35.36], [1436244480.0, 15200000.0, 35.4], [1436246208.0, 15220000.0, 35.44], [1436247936.0, 15240000.0, 35.480000000000004], [1436249664.0, 15260000.0, 35.519999999999996], [1436251392.0, 15280000.0, 35.56], [1436253120.0, 15300000.0, 35.6], [1436254848.0, 15320000.0, 35.64], [1436256576.0, 15340000.0, 35.68], [1436258304.0, 15360000.0, 35.72], [1436260032.0, 15380000.0, 35.760000000000005], [1436261760.0, 15400000.0, 35.8], [1436263488.0, 15420000.0, 35.84], [1436265216.0, 15440000.0, 35.88], [1436266944.0, 15460000.0, 35.92], [1436268672.0, 15480000.0, 35.96], [1436270400.0, 15500000.0, 36.0], [1436272128.0, 15520000.0, 36.04], [1436273856.0, 15540000.0, 36.08], [1436275584.0, 15560000.0, 36.120000000000005], [1436277312.0, 15580000.0, 36.16], [1436279040.0, 15600000.0, 36.2], [1436280768.0, 15620000.0, 36.24], [1436282496.0, 15640000.0, 36.28], [1436284224.0, 15660000.0, 36.32], [1436285952.0, 15680000.0, 36.36], [1436287680.0, 15700000.0, 36.400000000000006], [1436289408.0, 15720000.0, 36.44], [1436291136.0, 15740000.0, 36.480000000000004], [1436292864.0, 15760000.0, 36.52], [1436294592.0, 15780000.0, 36.56], [1436296320.0, 15800000.0, 36.6], [1436298048.0, 15820000.0, 36.64], [1436299776.0, 15840000.0, 36.68], [1436301504.0, 15860000.0, 36.72], [1436303232.0, 15880000.0, 36.760000000000005], [1436304960.0, 15900000.0, 36.8], [1436306688.0, 15920000.0, 36.84], [1436308416.0, 15940000.0, 36.88], [1436310144.0, 15960000.0, 36.92], [1436311872.0, 15980000.0, 36.96], [1436313600.0, 16000000.0, 37.0], [1436315328.0, 16020000.0, 37.04], [1436317056.0, 16040000.0, 37.08], [1436318784.0, 16060000.0, 37.120000000000005], [1436320512.0, 16080000.0, 37.160000000000004], [1436322240.0, 16100000.0, 37.2], [1436323968.0, 16120000.0, 37.24], [1436325696.0, 16140000.0, 37.28], [1436327424.0, 16160000.0, 37.32], [1436329152.0, 16180000.0, 37.36], [1436330880.0, 16200000.0, 37.400000000000006], [1436332608.0, 16220000.0, 37.440000000000005], [1436334336.0, 16240000.0, 37.480000000000004], [1436336064.0, 16260000.0, 37.519999999999996], [1436337792.0, 16280000.0, 37.559999999999995], [1436339520.0, 16300000.0, 37.599999999999994], [1436341248.0, 16320000.0, 37.64], [1436342976.0, 16340000.0, 37.68], [1436344704.0, 16360000.0, 37.72], [1436346432.0, 16380000.0, 37.76], [1436348160.0, 16400000.0, 37.8], [1436349888.0, 16420000.0, 37.839999999999996], [1436351616.0, 16440000.0, 37.879999999999995], [1436353344.0, 16460000.0, 37.92], [1436355072.0, 16480000.0, 37.96], [1436356800.0, 16500000.0, 38.0], [1436358528.0, 16520000.0, 38.04], [1436360256.0, 16540000.0, 38.08], [1436361984.0, 16560000.0, 38.12], [1436363712.0, 16580000.0, 38.16], [1436365440.0, 16600000.0, 38.199999999999996], [1436367168.0, 16620000.0, 38.239999999999995], [1436368896.0, 16640000.0, 38.28], [1436370624.0, 16660000.0, 38.32], [1436372352.0, 16680000.0, 38.36], [1436374080.0, 16700000.0, 38.4], [1436375808.0, 16720000.0, 38.44], [1436377536.0, 16740000.0, 38.48], [1436379264.0, 16760000.0, 38.519999999999996], [1436380992.0, 16780000.0, 38.56], [1436382720.0, 16800000.0, 38.6], [1436384448.0, 16820000.0, 38.64], [1436386176.0, 16840000.0, 38.68], [1436387904.0, 16860000.0, 38.72], [1436389632.0, 16880000.0, 38.76], [1436391360.0, 16900000.0, 38.8], [1436393088.0, 16920000.0, 38.839999999999996], [1436394816.0, 16940000.0, 38.879999999999995], [1436396544.0, 16960000.0, 38.92], [1436398272.0, 16980000.0, 38.96], [1436400000.0, 17000000.0, 39.0], [1436401728.0, 17020000.0, 39.04], [1436403456.0, 17040000.0, 39.08], [1436405184.0, 17060000.0, 39.12], [1436406912.0, 17080000.0, 39.16], [1436408640.0, 17100000.0, 39.2], [1436410368.0, 17120000.0, 39.24], [1436412096.0, 17140000.0, 39.28], [1436413824.0, 17160000.0, 39.32], [1436415552.0, 17180000.0, 39.36], [1436417280.0, 17200000.0, 39.4], [1436419008.0, 17220000.0, 39.44], [1436420736.0, 17240000.0, 39.48], [1436422464.0, 17260000.0, 39.519999999999996], [1436424192.0, 17280000.0, 39.56], [1436425920.0, 17300000.0, 39.6], [1436427648.0, 17320000.0, 39.64], [1436429376.0, 17340000.0, 39.68], [1436431104.0, 17360000.0, 39.72], [1436432832.0, 17380000.0, 39.76], [1436434560.0, 17400000.0, 39.8], [1436436288.0, 17420000.0, 39.84], [1436438016.0, 17440000.0, 39.88], [1436439744.0, 17460000.0, 39.92], [1436441472.0, 17480000.0, 39.96], [1436443200.0, 17500000.0, 40.0], [1436444928.0, 17520000.0, 40.04], [1436446656.0, 17540000.0, 40.08], [1436448384.0, 17560000.0, 40.12], [1436450112.0, 17580000.0, 40.16], [1436451840.0, 17600000.0, 40.2], [1436453568.0, 17620000.0, 40.24], [1436455296.0, 17640000.0, 40.28], [1436457024.0, 17660000.0, 40.32], [1436458752.0, 17680000.0, 40.36], [1436460480.0, 17700000.0, 40.4], [1436462208.0, 17720000.0, 40.44], [1436463936.0, 17740000.0, 40.480000000000004], [1436465664.0, 17760000.0, 40.52], [1436467392.0, 17780000.0, 40.56], [1436469120.0, 17800000.0, 40.6], [1436470848.0, 17820000.0, 40.64], [1436472576.0, 17840000.0, 40.68], [1436474304.0, 17860000.0, 40.72], [1436476032.0, 17880000.0, 40.76], [1436477760.0, 17900000.0, 40.8], [1436479488.0, 17920000.0, 40.84], [1436481216.0, 17940000.0, 40.88], [1436482944.0, 17960000.0, 40.92], [1436484672.0, 17980000.0, 40.96], [1436486400.0, 18000000.0, 41.0], [1436488128.0, 18020000.0, 41.04], [1436489856.0, 18040000.0, 41.08], [1436491584.0, 18060000.0, 41.120000000000005], [1436493312.0, 18080000.0, 41.160000000000004], [1436495040.0, 18100000.0, 41.2], [1436496768.0, 18120000.0, 41.24], [1436498496.0, 18140000.0, 41.28], [1436500224.0, 18160000.0, 41.32], [1436501952.0, 18180000.0, 41.36], [1436503680.0, 18200000.0, 41.4], [1436505408.0, 18220000.0, 41.44], [1436507136.0, 18240000.0, 41.480000000000004], [1436508864.0, 18260000.0, 41.52], [1436510592.0, 18280000.0, 41.56], [1436512320.0, 18300000.0, 41.6], [1436514048.0, 18320000.0, 41.64], [1436515776.0, 18340000.0, 41.68], [1436517504.0, 18360000.0, 41.72], [1436519232.0, 18380000.0, 41.760000000000005], [1436520960.0, 18400000.0, 41.800000000000004], [1436522688.0, 18420000.0, 41.84], [1436524416.0, 18440000.0, 41.88], [1436526144.0, 18460000.0, 41.92], [1436527872.0, 18480000.0, 41.96], [1436529600.0, 18500000.0, 42.0], [1436531328.0, 18520000.0, 42.04], [1436533056.0, 18540000.0, 42.08], [1436534784.0, 18560000.0, 42.120000000000005], [1436536512.0, 18580000.0, 42.160000000000004], [1436538240.0, 18600000.0, 42.2], [1436539968.0, 18620000.0, 42.24], [1436541696.0, 18640000.0, 42.28], [1436543424.0, 18660000.0, 42.32], [1436545152.0, 18680000.0, 42.36], [1436546880.0, 18700000.0, 42.400000000000006], [1436548608.0, 18720000.0, 42.440000000000005], [1436550336.0, 18740000.0, 42.480000000000004], [1436552064.0, 18760000.0, 42.519999999999996], [1436553792.0, 18780000.0, 42.559999999999995], [1436555520.0, 18800000.0, 42.599999999999994], [1436557248.0, 18820000.0, 42.64], [1436558976.0, 18840000.0, 42.68], [1436560704.0, 18860000.0, 42.72], [1436562432.0, 18880000.0, 42.76], [1436564160.0, 18900000.0, 42.8], [1436565888.0, 18920000.0, 42.839999999999996], [1436567616.0, 18940000.0, 42.879999999999995], [1436569344.0, 18960000.0, 42.92], [1436571072.0, 18980000.0, 42.96], [1436572800.0, 19000000.0, 43.0], [1436574528.0, 19020000.0, 43.04], [1436576256.0, 19040000.0, 43.08], [1436577984.0, 19060000.0, 43.12], [1436579712.0, 19080000.0, 43.16], [1436581440.0, 19100000.0, 43.199999999999996], [1436583168.0, 19120000.0, 43.239999999999995], [1436584896.0, 19140000.0, 43.28], [1436586624.0, 19160000.0, 43.32], [1436588352.0, 19180000.0, 43.36], [1436590080.0, 19200000.0, 43.4], [1436591808.0, 19220000.0, 43.44], [1436593536.0, 19240000.0, 43.48], [1436595264.0, 19260000.0, 43.519999999999996], [1436596992.0, 19280000.0, 43.56], [1436598720.0, 19300000.0, 43.6], [1436600448.0, 19320000.0, 43.64], [1436602176.0, 19340000.0, 43.68], [1436603904.0, 19360000.0, 43.72], [1436605632.0, 19380000.0, 43.76], [1436607360.0, 19400000.0, 43.8], [1436609088.0, 19420000.0, 43.839999999999996], [1436610816.0, 19440000.0, 43.879999999999995], [1436612544.0, 19460000.0, 43.92], [1436614272.0, 19480000.0, 43.96], [1436616000.0, 19500000.0, 44.0], [1436617728.0, 19520000.0, 44.04], [1436619456.0, 19540000.0, 44.08], [1436621184.0, 19560000.0, 44.12], [1436622912.0, 19580000.0, 44.16], [1436624640.0, 19600000.0, 44.2], [1436626368.0, 19620000.0, 44.24], [1436628096.0, 19640000.0, 44.28], [1436629824.0, 19660000.0, 44.32], [1436631552.0, 19680000.0, 44.36], [1436633280.0, 19700000.0, 44.4], [1436635008.0, 19720000.0, 44.44], [1436636736.0, 19740000.0, 44.48], [1436638464.0, 19760000.0, 44.519999999999996], [1436640192.0, 19780000.0, 44.56], [1436641920.0, 19800000.0, 44.6], [1436643648.0, 19820000.0, 44.64], [1436645376.0, 19840000.0, 44.68], [1436647104.0, 19860000.0, 44.72], [1436648832.0, 19880000.0, 44.76], [1436650560.0, 19900000.0, 44.8], [1436652288.0, 19920000.0, 44.84], [1436654016.0, 19940000.0, 44.88], [1436655744.0, 19960000.0, 44.92], [1436657472.0, 19980000.0, 44.96], [1436659200.0, 20000000.0, 45.0], [1436660928.0, 20020000.0, 45.03999999999999], [1436662656.0, 20040000.0, 45.08], [1436664384.0, 20060000.0, 45.12], [1436666112.0, 20080000.0, 45.16], [1436667840.0, 20100000.0, 45.199999999999996], [1436669568.0, 20120000.0, 45.24], [1436671296.0, 20140000.0, 45.279999999999994], [1436673024.0, 20160000.0, 45.32], [1436674752.0, 20180000.0, 45.36], [1436676480.0, 20200000.0, 45.4], [1436678208.0, 20220000.0, 45.44], [1436679936.0, 20240000.0, 45.480000000000004], [1436681664.0, 20260000.0, 45.519999999999996], [1436683392.0, 20280000.0, 45.56], [1436685120.0, 20300000.0, 45.599999999999994], [1436686848.0, 20320000.0, 45.64], [1436688576.0, 20340000.0, 45.67999999999999], [1436690304.0, 20360000.0, 45.72], [1436692032.0, 20380000.0, 45.76], [1436693760.0, 20400000.0, 45.8], [1436695488.0, 20420000.0, 45.839999999999996], [1436697216.0, 20440000.0, 45.88], [1436698944.0, 20460000.0, 45.919999999999995], [1436700672.0, 20480000.0, 45.96], [1436702400.0, 20500000.0, 46.0], [1436704128.0, 20520000.0, 46.04], [1436705856.0, 20540000.0, 46.08], [1436707584.0, 20560000.0, 46.120000000000005], [1436709312.0, 20580000.0, 46.16], [1436711040.0, 20600000.0, 46.2], [1436712768.0, 20620000.0, 46.239999999999995], [1436714496.0, 20640000.0, 46.28], [1436716224.0, 20660000.0, 46.31999999999999], [1436717952.0, 20680000.0, 46.36], [1436719680.0, 20700000.0, 46.4], [1436721408.0, 20720000.0, 46.44], [1436723136.0, 20740000.0, 46.48], [1436724864.0, 20760000.0, 46.52], [1436726592.0, 20780000.0, 46.559999999999995], [1436728320.0, 20800000.0, 46.6], [1436730048.0, 20820000.0, 46.64], [1436731776.0, 20840000.0, 46.68], [1436733504.0, 20860000.0, 46.72], [1436735232.0, 20880000.0, 46.760000000000005], [1436736960.0, 20900000.0, 46.8], [1436738688.0, 20920000.0, 46.84], [1436740416.0, 20940000.0, 46.879999999999995], [1436742144.0, 20960000.0, 46.92], [1436743872.0, 20980000.0, 46.959999999999994], [1436745600.0, 21000000.0, 47.0], [1436747328.0, 21020000.0, 47.04], [1436749056.0, 21040000.0, 47.08], [1436750784.0, 21060000.0, 47.12], [1436752512.0, 21080000.0, 47.160000000000004], [1436754240.0, 21100000.0, 47.199999999999996], [1436755968.0, 21120000.0, 47.24], [1436757696.0, 21140000.0, 47.28], [1436759424.0, 21160000.0, 47.32], [1436761152.0, 21180000.0, 47.36], [1436762880.0, 21200000.0, 47.400000000000006], [1436764608.0, 21220000.0, 47.44], [1436766336.0, 21240000.0, 47.480000000000004], [1436768064.0, 21260000.0, 47.519999999999996], [1436769792.0, 21280000.0, 47.56], [1436771520.0, 21300000.0, 47.599999999999994], [1436773248.0, 21320000.0, 47.64], [1436774976.0, 21340000.0, 47.68], [1436776704.0, 21360000.0, 47.72], [1436778432.0, 21380000.0, 47.76], [1436780160.0, 21400000.0, 47.800000000000004], [1436781888.0, 21420000.0, 47.839999999999996], [1436783616.0, 21440000.0, 47.88], [1436785344.0, 21460000.0, 47.92], [1436787072.0, 21480000.0, 47.96], [1436788800.0, 21500000.0, 48.0], [1436790528.0, 21520000.0, 48.040000000000006], [1436792256.0, 21540000.0, 48.08], [1436793984.0, 21560000.0, 48.120000000000005], [1436795712.0, 21580000.0, 48.16], [1436797440.0, 21600000.0, 48.2], [1436799168.0, 21620000.0, 48.239999999999995], [1436800896.0, 21640000.0, 48.28], [1436802624.0, 21660000.0, 48.32], [1436804352.0, 21680000.0, 48.36], [1436806080.0, 21700000.0, 48.4], [1436807808.0, 21720000.0, 48.440000000000005], [1436809536.0, 21740000.0, 48.48], [1436811264.0, 21760000.0, 48.52], [1436812992.0, 21780000.0, 48.56], [1436814720.0, 21800000.0, 48.6], [1436816448.0, 21820000.0, 48.64], [1436818176.0, 21840000.0, 48.68000000000001], [1436819904.0, 21860000.0, 48.72], [1436821632.0, 21880000.0, 48.760000000000005], [1436823360.0, 21900000.0, 48.8], [1436825088.0, 21920000.0, 48.84], [1436826816.0, 21940000.0, 48.879999999999995], [1436828544.0, 21960000.0, 48.92], [1436830272.0, 21980000.0, 48.96], [1436832000.0, 22000000.0, 49.0], [1436833728.0, 22020000.0, 49.04], [1436835456.0, 22040000.0, 49.080000000000005], [1436837184.0, 22060000.0, 49.12], [1436838912.0, 22080000.0, 49.160000000000004], [1436840640.0, 22100000.0, 49.2], [1436842368.0, 22120000.0, 49.24], [1436844096.0, 22140000.0, 49.28], [1436845824.0, 22160000.0, 49.32000000000001], [1436847552.0, 22180000.0, 49.36], [1436849280.0, 22200000.0, 49.400000000000006], [1436851008.0, 22220000.0, 49.44], [1436852736.0, 22240000.0, 49.480000000000004], [1436854464.0, 22260000.0, 49.519999999999996], [1436856192.0, 22280000.0, 49.56], [1436857920.0, 22300000.0, 49.6], [1436859648.0, 22320000.0, 49.64], [1436861376.0, 22340000.0, 49.68], [1436863104.0, 22360000.0, 49.720000000000006], [1436864832.0, 22380000.0, 49.76], [1436866560.0, 22400000.0, 49.800000000000004], [1436868288.0, 22420000.0, 49.84], [1436870016.0, 22440000.0, 49.88], [1436871744.0, 22460000.0, 49.92], [1436873472.0, 22480000.0, 49.96000000000001], [1436875200.0, 22500000.0, 50.0], [1436876928.0, 22520000.0, 50.03999999999999], [1436878656.0, 22540000.0, 50.08], [1436880384.0, 22560000.0, 50.12], [1436882112.0, 22580000.0, 50.16], [1436883840.0, 22600000.0, 50.199999999999996], [1436885568.0, 22620000.0, 50.24], [1436887296.0, 22640000.0, 50.279999999999994], [1436889024.0, 22660000.0, 50.32], [1436890752.0, 22680000.0, 50.36], [1436892480.0, 22700000.0, 50.4], [1436894208.0, 22720000.0, 50.44], [1436895936.0, 22740000.0, 50.480000000000004], [1436897664.0, 22760000.0, 50.519999999999996], [1436899392.0, 22780000.0, 50.56], [1436901120.0, 22800000.0, 50.599999999999994], [1436902848.0, 22820000.0, 50.64], [1436904576.0, 22840000.0, 50.67999999999999], [1436906304.0, 22860000.0, 50.72], [1436908032.0, 22880000.0, 50.76], [1436909760.0, 22900000.0, 50.8], [1436911488.0, 22920000.0, 50.839999999999996], [1436913216.0, 22940000.0, 50.88], [1436914944.0, 22960000.0, 50.919999999999995], [1436916672.0, 22980000.0, 50.96], [1436918400.0, 23000000.0, 51.0], [1436920128.0, 23020000.0, 51.04], [1436921856.0, 23040000.0, 51.08], [1436923584.0, 23060000.0, 51.120000000000005], [1436925312.0, 23080000.0, 51.16], [1436927040.0, 23100000.0, 51.2], [1436928768.0, 23120000.0, 51.239999999999995], [1436930496.0, 23140000.0, 51.28], [1436932224.0, 23160000.0, 51.31999999999999], [1436933952.0, 23180000.0, 51.36], [1436935680.0, 23200000.0, 51.4], [1436937408.0, 23220000.0, 51.44], [1436939136.0, 23240000.0, 51.48], [1436940864.0, 23260000.0, 51.52], [1436942592.0, 23280000.0, 51.559999999999995], [1436944320.0, 23300000.0, 51.6], [1436946048.0, 23320000.0, 51.64], [1436947776.0, 23340000.0, 51.68], [1436949504.0, 23360000.0, 51.72], [1436951232.0, 23380000.0, 51.760000000000005], [1436952960.0, 23400000.0, 51.8], [1436954688.0, 23420000.0, 51.84], [1436956416.0, 23440000.0, 51.879999999999995], [1436958144.0, 23460000.0, 51.92], [1436959872.0, 23480000.0, 51.959999999999994], [1436961600.0, 23500000.0, 52.0], [1436963328.0, 23520000.0, 52.04], [1436965056.0, 23540000.0, 52.08], [1436966784.0, 23560000.0, 52.12], [1436968512.0, 23580000.0, 52.160000000000004], [1436970240.0, 23600000.0, 52.199999999999996], [1436971968.0, 23620000.0, 52.24], [1436973696.0, 23640000.0, 52.28], [1436975424.0, 23660000.0, 52.32], [1436977152.0, 23680000.0, 52.36], [1436978880.0, 23700000.0, 52.400000000000006], [1436980608.0, 23720000.0, 52.44], [1436982336.0, 23740000.0, 52.480000000000004], [1436984064.0, 23760000.0, 52.519999999999996], [1436985792.0, 23780000.0, 52.56], [1436987520.0, 23800000.0, 52.599999999999994], [1436989248.0, 23820000.0, 52.64], [1436990976.0, 23840000.0, 52.68], [1436992704.0, 23860000.0, 52.72], [1436994432.0, 23880000.0, 52.76], [1436996160.0, 23900000.0, 52.800000000000004], [1436997888.0, 23920000.0, 52.839999999999996], [1436999616.0, 23940000.0, 52.88], [1437001344.0, 23960000.0, 52.92], [1437003072.0, 23980000.0, 52.96], [1437004800.0, 24000000.0, 53.0], [1437006528.0, 24020000.0, 53.040000000000006], [1437008256.0, 24040000.0, 53.08], [1437009984.0, 24060000.0, 53.120000000000005], [1437011712.0, 24080000.0, 53.16], [1437013440.0, 24100000.0, 53.2], [1437015168.0, 24120000.0, 53.239999999999995], [1437016896.0, 24140000.0, 53.28], [1437018624.0, 24160000.0, 53.32], [1437020352.0, 24180000.0, 53.36], [1437022080.0, 24200000.0, 53.4], [1437023808.0, 24220000.0, 53.440000000000005], [1437025536.0, 24240000.0, 53.48], [1437027264.0, 24260000.0, 53.52], [1437028992.0, 24280000.0, 53.56], [1437030720.0, 24300000.0, 53.6], [1437032448.0, 24320000.0, 53.64], [1437034176.0, 24340000.0, 53.68000000000001], [1437035904.0, 24360000.0, 53.72], [1437037632.0, 24380000.0, 53.760000000000005], [1437039360.0, 24400000.0, 53.8], [1437041088.0, 24420000.0, 53.84], [1437042816.0, 24440000.0, 53.879999999999995], [1437044544.0, 24460000.0, 53.92], [1437046272.0, 24480000.0, 53.96], [1437048000.0, 24500000.0, 54.0], [1437049728.0, 24520000.0, 54.04], [1437051456.0, 24540000.0, 54.080000000000005], [1437053184.0, 24560000.0, 54.12], [1437054912.0, 24580000.0, 54.160000000000004], [1437056640.0, 24600000.0, 54.2], [1437058368.0, 24620000.0, 54.24], [1437060096.0, 24640000.0, 54.28], [1437061824.0, 24660000.0, 54.32000000000001], [1437063552.0, 24680000.0, 54.36], [1437065280.0, 24700000.0, 54.400000000000006], [1437067008.0, 24720000.0, 54.44], [1437068736.0, 24740000.0, 54.480000000000004], [1437070464.0, 24760000.0, 54.519999999999996], [1437072192.0, 24780000.0, 54.56], [1437073920.0, 24800000.0, 54.6], [1437075648.0, 24820000.0, 54.64], [1437077376.0, 24840000.0, 54.68], [1437079104.0, 24860000.0, 54.720000000000006], [1437080832.0, 24880000.0, 54.76], [1437082560.0, 24900000.0, 54.800000000000004], [1437084288.0, 24920000.0, 54.84], [1437086016.0, 24940000.0, 54.88], [1437087744.0, 24960000.0, 54.92], [1437089472.0, 24980000.0, 54.96000000000001], [1437091200.0, 25000000.0, 55.0], [1437092928.0, 25020000.0, 55.03999999999999], [1437094656.0, 25040000.0, 55.08], [1437096384.0, 25060000.0, 55.12], [1437098112.0, 25080000.0, 55.16], [1437099840.0, 25100000.0, 55.199999999999996], [1437101568.0, 25120000.0, 55.24], [1437103296.0, 25140000.0, 55.279999999999994], [1437105024.0, 25160000.0, 55.32], [1437106752.0, 25180000.0, 55.36], [1437108480.0, 25200000.0, 55.4], [1437110208.0, 25220000.0, 55.44], [1437111936.0, 25240000.0, 55.480000000000004], [1437113664.0, 25260000.0, 55.519999999999996], [1437115392.0, 25280000.0, 55.56], [1437117120.0, 25300000.0, 55.599999999999994], [1437118848.0, 25320000.0, 55.64], [1437120576.0, 25340000.0, 55.67999999999999], [1437122304.0, 25360000.0, 55.72], [1437124032.0, 25380000.0, 55.76], [1437125760.0, 25400000.0, 55.8], [1437127488.0, 25420000.0, 55.839999999999996], [1437129216.0, 25440000.0, 55.88], [1437130944.0, 25460000.0, 55.919999999999995], [1437132672.0, 25480000.0, 55.96], [1437134400.0, 25500000.0, 56.0], [1437136128.0, 25520000.0, 56.04], [1437137856.0, 25540000.0, 56.08], [1437139584.0, 25560000.0, 56.120000000000005], [1437141312.0, 25580000.0, 56.16], [1437143040.0, 25600000.0, 56.2], [1437144768.0, 25620000.0, 56.239999999999995], [1437146496.0, 25640000.0, 56.28], [1437148224.0, 25660000.0, 56.31999999999999], [1437149952.0, 25680000.0, 56.36], [1437151680.0, 25700000.0, 56.4], [1437153408.0, 25720000.0, 56.44], [1437155136.0, 25740000.0, 56.48], [1437156864.0, 25760000.0, 56.52], [1437158592.0, 25780000.0, 56.559999999999995], [1437160320.0, 25800000.0, 56.6], [1437162048.0, 25820000.0, 56.64], [1437163776.0, 25840000.0, 56.68], [1437165504.0, 25860000.0, 56.72], [1437167232.0, 25880000.0, 56.760000000000005], [1437168960.0, 25900000.0, 56.8], [1437170688.0, 25920000.0, 56.84], [1437172416.0, 25940000.0, 56.879999999999995], [1437174144.0, 25960000.0, 56.92], [1437175872.0, 25980000.0, 56.959999999999994], [1437177600.0, 26000000.0, 57.0], [1437179328.0, 26020000.0, 57.04], [1437181056.0, 26040000.0, 57.08], [1437182784.0, 26060000.0, 57.12], [1437184512.0, 26080000.0, 57.160000000000004], [1437186240.0, 26100000.0, 57.199999999999996], [1437187968.0, 26120000.0, 57.24], [1437189696.0, 26140000.0, 57.28], [1437191424.0, 26160000.0, 57.32], [1437193152.0, 26180000.0, 57.36], [1437194880.0, 26200000.0, 57.400000000000006], [1437196608.0, 26220000.0, 57.44], [1437198336.0, 26240000.0, 57.480000000000004], [1437200064.0, 26260000.0, 57.519999999999996], [1437201792.0, 26280000.0, 57.56], [1437203520.0, 26300000.0, 57.599999999999994], [1437205248.0, 26320000.0, 57.64], [1437206976.0, 26340000.0, 57.68], [1437208704.0, 26360000.0, 57.72], [1437210432.0, 26380000.0, 57.76], [1437212160.0, 26400000.0, 57.800000000000004], [1437213888.0, 26420000.0, 57.839999999999996], [1437215616.0, 26440000.0, 57.88], [1437217344.0, 26460000.0, 57.92], [1437219072.0, 26480000.0, 57.96], [1437220800.0, 26500000.0, 58.0], [1437222528.0, 26520000.0, 58.040000000000006], [1437224256.0, 26540000.0, 58.08], [1437225984.0, 26560000.0, 58.120000000000005], [1437227712.0, 26580000.0, 58.16], [1437229440.0, 26600000.0, 58.2], [1437231168.0, 26620000.0, 58.239999999999995], [1437232896.0, 26640000.0, 58.28], [1437234624.0, 26660000.0, 58.32], [1437236352.0, 26680000.0, 58.36], [1437238080.0, 26700000.0, 58.4], [1437239808.0, 26720000.0, 58.440000000000005], [1437241536.0, 26740000.0, 58.48], [1437243264.0, 26760000.0, 58.52], [1437244992.0, 26780000.0, 58.56], [1437246720.0, 26800000.0, 58.6], [1437248448.0, 26820000.0, 58.64], [1437250176.0, 26840000.0, 58.68000000000001], [1437251904.0, 26860000.0, 58.72], [1437253632.0, 26880000.0, 58.760000000000005], [1437255360.0, 26900000.0, 58.8], [1437257088.0, 26920000.0, 58.84], [1437258816.0, 26940000.0, 58.879999999999995], [1437260544.0, 26960000.0, 58.92], [1437262272.0, 26980000.0, 58.96], [1437264000.0, 27000000.0, 59.0], [1437265728.0, 27020000.0, 59.04], [1437267456.0, 27040000.0, 59.080000000000005], [1437269184.0, 27060000.0, 59.12], [1437270912.0, 27080000.0, 59.160000000000004], [1437272640.0, 27100000.0, 59.2], [1437274368.0, 27120000.0, 59.24], [1437276096.0, 27140000.0, 59.28], [1437277824.0, 27160000.0, 59.32000000000001], [1437279552.0, 27180000.0, 59.36], [1437281280.0, 27200000.0, 59.400000000000006], [1437283008.0, 27220000.0, 59.44], [1437284736.0, 27240000.0, 59.480000000000004], [1437286464.0, 27260000.0, 59.519999999999996], [1437288192.0, 27280000.0, 59.56], [1437289920.0, 27300000.0, 59.6], [1437291648.0, 27320000.0, 59.64], [1437293376.0, 27340000.0, 59.68], [1437295104.0, 27360000.0, 59.720000000000006], [1437296832.0, 27380000.0, 59.76], [1437298560.0, 27400000.0, 59.800000000000004], [1437300288.0, 27420000.0, 59.84], [1437302016.0, 27440000.0, 59.88], [1437303744.0, 27460000.0, 59.92], [1437305472.0, 27480000.0, 59.96000000000001], [1437307200.0, 27500000.0, 60.0], [1437308928.0, 27520000.0, 60.03999999999999], [1437310656.0, 27540000.0, 60.08], [1437312384.0, 27560000.0, 60.12], [1437314112.0, 27580000.0, 60.16], [1437315840.0, 27600000.0, 60.199999999999996], [1437317568.0, 27620000.0, 60.24], [1437319296.0, 27640000.0, 60.279999999999994], [1437321024.0, 27660000.0, 60.32], [1437322752.0, 27680000.0, 60.36], [1437324480.0, 27700000.0, 60.4], [1437326208.0, 27720000.0, 60.44], [1437327936.0, 27740000.0, 60.480000000000004], [1437329664.0, 27760000.0, 60.519999999999996], [1437331392.0, 27780000.0, 60.56], [1437333120.0, 27800000.0, 60.599999999999994], [1437334848.0, 27820000.0, 60.64], [1437336576.0, 27840000.0, 60.67999999999999], [1437338304.0, 27860000.0, 60.72], [1437340032.0, 27880000.0, 60.76], [1437341760.0, 27900000.0, 60.8], [1437343488.0, 27920000.0, 60.839999999999996], [1437345216.0, 27940000.0, 60.88], [1437346944.0, 27960000.0, 60.919999999999995], [1437348672.0, 27980000.0, 60.96], [1437350400.0, 28000000.0, 61.0], [1437352128.0, 28020000.0, 61.04], [1437353856.0, 28040000.0, 61.08], [1437355584.0, 28060000.0, 61.120000000000005], [1437357312.0, 28080000.0, 61.16], [1437359040.0, 28100000.0, 61.2], [1437360768.0, 28120000.0, 61.239999999999995], [1437362496.0, 28140000.0, 61.28], [1437364224.0, 28160000.0, 61.31999999999999], [1437365952.0, 28180000.0, 61.36], [1437367680.0, 28200000.0, 61.4], [1437369408.0, 28220000.0, 61.44], [1437371136.0, 28240000.0, 61.48], [1437372864.0, 28260000.0, 61.52], [1437374592.0, 28280000.0, 61.559999999999995], [1437376320.0, 28300000.0, 61.6], [1437378048.0, 28320000.0, 61.64], [1437379776.0, 28340000.0, 61.68], [1437381504.0, 28360000.0, 61.72], [1437383232.0, 28380000.0, 61.760000000000005], [1437384960.0, 28400000.0, 61.8], [1437386688.0, 28420000.0, 61.84], [1437388416.0, 28440000.0, 61.879999999999995], [1437390144.0, 28460000.0, 61.92], [1437391872.0, 28480000.0, 61.959999999999994], [1437393600.0, 28500000.0, 62.0], [1437395328.0, 28520000.0, 62.04], [1437397056.0, 28540000.0, 62.08], [1437398784.0, 28560000.0, 62.12], [1437400512.0, 28580000.0, 62.160000000000004], [1437402240.0, 28600000.0, 62.199999999999996], [1437403968.0, 28620000.0, 62.24], [1437405696.0, 28640000.0, 62.28], [1437407424.0, 28660000.0, 62.32], [1437409152.0, 28680000.0, 62.36], [1437410880.0, 28700000.0, 62.400000000000006], [1437412608.0, 28720000.0, 62.44], [1437414336.0, 28740000.0, 62.480000000000004], [1437416064.0, 28760000.0, 62.519999999999996], [1437417792.0, 28780000.0, 62.56], [1437419520.0, 28800000.0, 62.599999999999994], [1437421248.0, 28820000.0, 62.64], [1437422976.0, 28840000.0, 62.68], [1437424704.0, 28860000.0, 62.72], [1437426432.0, 28880000.0, 62.76], [1437428160.0, 28900000.0, 62.800000000000004], [1437429888.0, 28920000.0, 62.839999999999996], [1437431616.0, 28940000.0, 62.88], [1437433344.0, 28960000.0, 62.92], [1437435072.0, 28980000.0, 62.96], [1437436800.0, 29000000.0, 63.0], [1437438528.0, 29020000.0, 63.040000000000006], [1437440256.0, 29040000.0, 63.08], [1437441984.0, 29060000.0, 63.120000000000005], [1437443712.0, 29080000.0, 63.16], [1437445440.0, 29100000.0, 63.2], [1437447168.0, 29120000.0, 63.239999999999995], [1437448896.0, 29140000.0, 63.28], [1437450624.0, 29160000.0, 63.32], [1437452352.0, 29180000.0, 63.36], [1437454080.0, 29200000.0, 63.4], [1437455808.0, 29220000.0, 63.440000000000005], [1437457536.0, 29240000.0, 63.48], [1437459264.0, 29260000.0, 63.52], [1437460992.0, 29280000.0, 63.56], [1437462720.0, 29300000.0, 63.6], [1437464448.0, 29320000.0, 63.64], [1437466176.0, 29340000.0, 63.68000000000001], [1437467904.0, 29360000.0, 63.72], [1437469632.0, 29380000.0, 63.760000000000005], [1437471360.0, 29400000.0, 63.8], [1437473088.0, 29420000.0, 63.84], [1437474816.0, 29440000.0, 63.879999999999995], [1437476544.0, 29460000.0, 63.92], [1437478272.0, 29480000.0, 63.96], [1437480000.0, 29500000.0, 64.0], [1437481728.0, 29520000.0, 64.03999999999999], [1437483456.0, 29540000.0, 64.08000000000001], [1437485184.0, 29560000.0, 64.12], [1437486912.0, 29580000.0, 64.16], [1437488640.0, 29600000.0, 64.2], [1437490368.0, 29620000.0, 64.24000000000001], [1437492096.0, 29640000.0, 64.28], [1437493824.0, 29660000.0, 64.32000000000001], [1437495552.0, 29680000.0, 64.36], [1437497280.0, 29700000.0, 64.4], [1437499008.0, 29720000.0, 64.44], [1437500736.0, 29740000.0, 64.48], [1437502464.0, 29760000.0, 64.52], [1437504192.0, 29780000.0, 64.56], [1437505920.0, 29800000.0, 64.6], [1437507648.0, 29820000.0, 64.64], [1437509376.0, 29840000.0, 64.68], [1437511104.0, 29860000.0, 64.72], [1437512832.0, 29880000.0, 64.75999999999999], [1437514560.0, 29900000.0, 64.80000000000001], [1437516288.0, 29920000.0, 64.84], [1437518016.0, 29940000.0, 64.88], [1437519744.0, 29960000.0, 64.92], [1437521472.0, 29980000.0, 64.96000000000001], [1437523200.0, 30000000.0, 65.0], [1437524928.0, 30020000.0, 65.03999999999999], [1437526656.0, 30040000.0, 65.08], [1437528384.0, 30060000.0, 65.12], [1437530112.0, 30080000.0, 65.16], [1437531840.0, 30100000.0, 65.19999999999999], [1437533568.0, 30120000.0, 65.24000000000001], [1437535296.0, 30140000.0, 65.28], [1437537024.0, 30160000.0, 65.32], [1437538752.0, 30180000.0, 65.36], [1437540480.0, 30200000.0, 65.4], [1437542208.0, 30220000.0, 65.44], [1437543936.0, 30240000.0, 65.48], [1437545664.0, 30260000.0, 65.52], [1437547392.0, 30280000.0, 65.56], [1437549120.0, 30300000.0, 65.6], [1437550848.0, 30320000.0, 65.64], [1437552576.0, 30340000.0, 65.67999999999999], [1437554304.0, 30360000.0, 65.72], [1437556032.0, 30380000.0, 65.75999999999999], [1437557760.0, 30400000.0, 65.8], [1437559488.0, 30420000.0, 65.84], [1437561216.0, 30440000.0, 65.88], [1437562944.0, 30460000.0, 65.91999999999999], [1437564672.0, 30480000.0, 65.96000000000001], [1437566400.0, 30500000.0, 66.0], [1437568128.0, 30520000.0, 66.03999999999999], [1437569856.0, 30540000.0, 66.08], [1437571584.0, 30560000.0, 66.12], [1437573312.0, 30580000.0, 66.16], [1437575040.0, 30600000.0, 66.2], [1437576768.0, 30620000.0, 66.24], [1437578496.0, 30640000.0, 66.28], [1437580224.0, 30660000.0, 66.32], [1437581952.0, 30680000.0, 66.36], [1437583680.0, 30700000.0, 66.4], [1437585408.0, 30720000.0, 66.44], [1437587136.0, 30740000.0, 66.47999999999999], [1437588864.0, 30760000.0, 66.52000000000001], [1437590592.0, 30780000.0, 66.56], [1437592320.0, 30800000.0, 66.6], [1437594048.0, 30820000.0, 66.64], [1437595776.0, 30840000.0, 66.68], [1437597504.0, 30860000.0, 66.72], [1437599232.0, 30880000.0, 66.76], [1437600960.0, 30900000.0, 66.8], [1437602688.0, 30920000.0, 66.84], [1437604416.0, 30940000.0, 66.88], [1437606144.0, 30960000.0, 66.92], [1437607872.0, 30980000.0, 66.96], [1437609600.0, 31000000.0, 67.0], [1437611328.0, 31020000.0, 67.03999999999999], [1437613056.0, 31040000.0, 67.08], [1437614784.0, 31060000.0, 67.12], [1437616512.0, 31080000.0, 67.16], [1437618240.0, 31100000.0, 67.19999999999999], [1437619968.0, 31120000.0, 67.24000000000001], [1437621696.0, 31140000.0, 67.28], [1437623424.0, 31160000.0, 67.32], [1437625152.0, 31180000.0, 67.36], [1437626880.0, 31200000.0, 67.4], [1437628608.0, 31220000.0, 67.44], [1437630336.0, 31240000.0, 67.48], [1437632064.0, 31260000.0, 67.52], [1437633792.0, 31280000.0, 67.56], [1437635520.0, 31300000.0, 67.6], [1437637248.0, 31320000.0, 67.64], [1437638976.0, 31340000.0, 67.68], [1437640704.0, 31360000.0, 67.72], [1437642432.0, 31380000.0, 67.75999999999999], [1437644160.0, 31400000.0, 67.80000000000001], [1437645888.0, 31420000.0, 67.84], [1437647616.0, 31440000.0, 67.88], [1437649344.0, 31460000.0, 67.92], [1437651072.0, 31480000.0, 67.96000000000001], [1437652800.0, 31500000.0, 68.0], [1437654528.0, 31520000.0, 68.04], [1437656256.0, 31540000.0, 68.08], [1437657984.0, 31560000.0, 68.12], [1437659712.0, 31580000.0, 68.16], [1437661440.0, 31600000.0, 68.2], [1437663168.0, 31620000.0, 68.24], [1437664896.0, 31640000.0, 68.28], [1437666624.0, 31660000.0, 68.32], [1437668352.0, 31680000.0, 68.36], [1437670080.0, 31700000.0, 68.4], [1437671808.0, 31720000.0, 68.44], [1437673536.0, 31740000.0, 68.47999999999999], [1437675264.0, 31760000.0, 68.52000000000001], [1437676992.0, 31780000.0, 68.56], [1437678720.0, 31800000.0, 68.6], [1437680448.0, 31820000.0, 68.64], [1437682176.0, 31840000.0, 68.68], [1437683904.0, 31860000.0, 68.72], [1437685632.0, 31880000.0, 68.76], [1437687360.0, 31900000.0, 68.8], [1437689088.0, 31920000.0, 68.84], [1437690816.0, 31940000.0, 68.88], [1437692544.0, 31960000.0, 68.92], [1437694272.0, 31980000.0, 68.96000000000001], [1437696000.0, 32000000.0, 69.0], [1437697728.0, 32020000.0, 69.03999999999999], [1437699456.0, 32040000.0, 69.08], [1437701184.0, 32060000.0, 69.12], [1437702912.0, 32080000.0, 69.16], [1437704640.0, 32100000.0, 69.2], [1437706368.0, 32120000.0, 69.24000000000001], [1437708096.0, 32140000.0, 69.28], [1437709824.0, 32160000.0, 69.32000000000001], [1437711552.0, 32180000.0, 69.36], [1437713280.0, 32200000.0, 69.4], [1437715008.0, 32220000.0, 69.44], [1437716736.0, 32240000.0, 69.48], [1437718464.0, 32260000.0, 69.52], [1437720192.0, 32280000.0, 69.56], [1437721920.0, 32300000.0, 69.6], [1437723648.0, 32320000.0, 69.64], [1437725376.0, 32340000.0, 69.68], [1437727104.0, 32360000.0, 69.72], [1437728832.0, 32380000.0, 69.76], [1437730560.0, 32400000.0, 69.80000000000001], [1437732288.0, 32420000.0, 69.84], [1437734016.0, 32440000.0, 69.88000000000001], [1437735744.0, 32460000.0, 69.92], [1437737472.0, 32480000.0, 69.96000000000001], [1437739200.0, 32500000.0, 70.0], [1437740928.0, 32520000.0, 70.03999999999999], [1437742656.0, 32540000.0, 70.08], [1437744384.0, 32560000.0, 70.11999999999999], [1437746112.0, 32580000.0, 70.16], [1437747840.0, 32600000.0, 70.19999999999999], [1437749568.0, 32620000.0, 70.24], [1437751296.0, 32640000.0, 70.28], [1437753024.0, 32660000.0, 70.32], [1437754752.0, 32680000.0, 70.36], [1437756480.0, 32700000.0, 70.4], [1437758208.0, 32720000.0, 70.44], [1437759936.0, 32740000.0, 70.48], [1437761664.0, 32760000.0, 70.52], [1437763392.0, 32780000.0, 70.56], [1437765120.0, 32800000.0, 70.6], [1437766848.0, 32820000.0, 70.64], [1437768576.0, 32840000.0, 70.67999999999999], [1437770304.0, 32860000.0, 70.72], [1437772032.0, 32880000.0, 70.75999999999999], [1437773760.0, 32900000.0, 70.8], [1437775488.0, 32920000.0, 70.84], [1437777216.0, 32940000.0, 70.88], [1437778944.0, 32960000.0, 70.92], [1437780672.0, 32980000.0, 70.96000000000001], [1437782400.0, 33000000.0, 71.0], [1437784128.0, 33020000.0, 71.04], [1437785856.0, 33040000.0, 71.08], [1437787584.0, 33060000.0, 71.12], [1437789312.0, 33080000.0, 71.16], [1437791040.0, 33100000.0, 71.2], [1437792768.0, 33120000.0, 71.24], [1437794496.0, 33140000.0, 71.28], [1437796224.0, 33160000.0, 71.32], [1437797952.0, 33180000.0, 71.36], [1437799680.0, 33200000.0, 71.39999999999999], [1437801408.0, 33220000.0, 71.44], [1437803136.0, 33240000.0, 71.47999999999999], [1437804864.0, 33260000.0, 71.52], [1437806592.0, 33280000.0, 71.56], [1437808320.0, 33300000.0, 71.6], [1437810048.0, 33320000.0, 71.64], [1437811776.0, 33340000.0, 71.68], [1437813504.0, 33360000.0, 71.72], [1437815232.0, 33380000.0, 71.76], [1437816960.0, 33400000.0, 71.8], [1437818688.0, 33420000.0, 71.84], [1437820416.0, 33440000.0, 71.88], [1437822144.0, 33460000.0, 71.92], [1437823872.0, 33480000.0, 71.96], [1437825600.0, 33500000.0, 72.0], [1437827328.0, 33520000.0, 72.03999999999999], [1437829056.0, 33540000.0, 72.08], [1437830784.0, 33560000.0, 72.12], [1437832512.0, 33580000.0, 72.16], [1437834240.0, 33600000.0, 72.2], [1437835968.0, 33620000.0, 72.24000000000001], [1437837696.0, 33640000.0, 72.28], [1437839424.0, 33660000.0, 72.32000000000001], [1437841152.0, 33680000.0, 72.36], [1437842880.0, 33700000.0, 72.4], [1437844608.0, 33720000.0, 72.44], [1437846336.0, 33740000.0, 72.48], [1437848064.0, 33760000.0, 72.52], [1437849792.0, 33780000.0, 72.56], [1437851520.0, 33800000.0, 72.6], [1437853248.0, 33820000.0, 72.64], [1437854976.0, 33840000.0, 72.67999999999999], [1437856704.0, 33860000.0, 72.72], [1437858432.0, 33880000.0, 72.75999999999999], [1437860160.0, 33900000.0, 72.8], [1437861888.0, 33920000.0, 72.84], [1437863616.0, 33940000.0, 72.88], [1437865344.0, 33960000.0, 72.92], [1437867072.0, 33980000.0, 72.96000000000001], [1437868800.0, 34000000.0, 73.0], [1437870528.0, 34020000.0, 73.04], [1437872256.0, 34040000.0, 73.08], [1437873984.0, 34060000.0, 73.12], [1437875712.0, 34080000.0, 73.16], [1437877440.0, 34100000.0, 73.2], [1437879168.0, 34120000.0, 73.24], [1437880896.0, 34140000.0, 73.28], [1437882624.0, 34160000.0, 73.32], [1437884352.0, 34180000.0, 73.36], [1437886080.0, 34200000.0, 73.4], [1437887808.0, 34220000.0, 73.44], [1437889536.0, 34240000.0, 73.48], [1437891264.0, 34260000.0, 73.52000000000001], [1437892992.0, 34280000.0, 73.56], [1437894720.0, 34300000.0, 73.60000000000001], [1437896448.0, 34320000.0, 73.64], [1437898176.0, 34340000.0, 73.68], [1437899904.0, 34360000.0, 73.72], [1437901632.0, 34380000.0, 73.76], [1437903360.0, 34400000.0, 73.8], [1437905088.0, 34420000.0, 73.84], [1437906816.0, 34440000.0, 73.88], [1437908544.0, 34460000.0, 73.92], [1437910272.0, 34480000.0, 73.96], [1437912000.0, 34500000.0, 74.0], [1437913728.0, 34520000.0, 74.03999999999999], [1437915456.0, 34540000.0, 74.08], [1437917184.0, 34560000.0, 74.12], [1437918912.0, 34580000.0, 74.16], [1437920640.0, 34600000.0, 74.2], [1437922368.0, 34620000.0, 74.24000000000001], [1437924096.0, 34640000.0, 74.28], [1437925824.0, 34660000.0, 74.32000000000001], [1437927552.0, 34680000.0, 74.36], [1437929280.0, 34700000.0, 74.4], [1437931008.0, 34720000.0, 74.44], [1437932736.0, 34740000.0, 74.48], [1437934464.0, 34760000.0, 74.52], [1437936192.0, 34780000.0, 74.56], [1437937920.0, 34800000.0, 74.6], [1437939648.0, 34820000.0, 74.64], [1437941376.0, 34840000.0, 74.68], [1437943104.0, 34860000.0, 74.72], [1437944832.0, 34880000.0, 74.76], [1437946560.0, 34900000.0, 74.80000000000001], [1437948288.0, 34920000.0, 74.84], [1437950016.0, 34940000.0, 74.88000000000001], [1437951744.0, 34960000.0, 74.92], [1437953472.0, 34980000.0, 74.96000000000001], [1437955200.0, 35000000.0, 75.0], [1437956928.0, 35020000.0, 75.03999999999999], [1437958656.0, 35040000.0, 75.08], [1437960384.0, 35060000.0, 75.11999999999999], [1437962112.0, 35080000.0, 75.16], [1437963840.0, 35100000.0, 75.19999999999999], [1437965568.0, 35120000.0, 75.24], [1437967296.0, 35140000.0, 75.28], [1437969024.0, 35160000.0, 75.32], [1437970752.0, 35180000.0, 75.36], [1437972480.0, 35200000.0, 75.4], [1437974208.0, 35220000.0, 75.44], [1437975936.0, 35240000.0, 75.48], [1437977664.0, 35260000.0, 75.52], [1437979392.0, 35280000.0, 75.56], [1437981120.0, 35300000.0, 75.6], [1437982848.0, 35320000.0, 75.64], [1437984576.0, 35340000.0, 75.67999999999999], [1437986304.0, 35360000.0, 75.72], [1437988032.0, 35380000.0, 75.75999999999999], [1437989760.0, 35400000.0, 75.8], [1437991488.0, 35420000.0, 75.84], [1437993216.0, 35440000.0, 75.88], [1437994944.0, 35460000.0, 75.92], [1437996672.0, 35480000.0, 75.96000000000001], [1437998400.0, 35500000.0, 76.0], [1438000128.0, 35520000.0, 76.04], [1438001856.0, 35540000.0, 76.08], [1438003584.0, 35560000.0, 76.12], [1438005312.0, 35580000.0, 76.16], [1438007040.0, 35600000.0, 76.2], [1438008768.0, 35620000.0, 76.24], [1438010496.0, 35640000.0, 76.28], [1438012224.0, 35660000.0, 76.32], [1438013952.0, 35680000.0, 76.36], [1438015680.0, 35700000.0, 76.39999999999999], [1438017408.0, 35720000.0, 76.44], [1438019136.0, 35740000.0, 76.47999999999999], [1438020864.0, 35760000.0, 76.52], [1438022592.0, 35780000.0, 76.56], [1438024320.0, 35800000.0, 76.6], [1438026048.0, 35820000.0, 76.64], [1438027776.0, 35840000.0, 76.68], [1438029504.0, 35860000.0, 76.72], [1438031232.0, 35880000.0, 76.76], [1438032960.0, 35900000.0, 76.8], [1438034688.0, 35920000.0, 76.84], [1438036416.0, 35940000.0, 76.88], [1438038144.0, 35960000.0, 76.92], [1438039872.0, 35980000.0, 76.96], [1438041600.0, 36000000.0, 77.0], [1438043328.0, 36020000.0, 77.03999999999999], [1438045056.0, 36040000.0, 77.08], [1438046784.0, 36060000.0, 77.12], [1438048512.0, 36080000.0, 77.16], [1438050240.0, 36100000.0, 77.2], [1438051968.0, 36120000.0, 77.24000000000001], [1438053696.0, 36140000.0, 77.28], [1438055424.0, 36160000.0, 77.32000000000001], [1438057152.0, 36180000.0, 77.36], [1438058880.0, 36200000.0, 77.4], [1438060608.0, 36220000.0, 77.44], [1438062336.0, 36240000.0, 77.48], [1438064064.0, 36260000.0, 77.52], [1438065792.0, 36280000.0, 77.56], [1438067520.0, 36300000.0, 77.6], [1438069248.0, 36320000.0, 77.64], [1438070976.0, 36340000.0, 77.67999999999999], [1438072704.0, 36360000.0, 77.72], [1438074432.0, 36380000.0, 77.75999999999999], [1438076160.0, 36400000.0, 77.8], [1438077888.0, 36420000.0, 77.84], [1438079616.0, 36440000.0, 77.88], [1438081344.0, 36460000.0, 77.92], [1438083072.0, 36480000.0, 77.96000000000001], [1438084800.0, 36500000.0, 78.0], [1438086528.0, 36520000.0, 78.04], [1438088256.0, 36540000.0, 78.08], [1438089984.0, 36560000.0, 78.12], [1438091712.0, 36580000.0, 78.16], [1438093440.0, 36600000.0, 78.2], [1438095168.0, 36620000.0, 78.24], [1438096896.0, 36640000.0, 78.28], [1438098624.0, 36660000.0, 78.32], [1438100352.0, 36680000.0, 78.36], [1438102080.0, 36700000.0, 78.4], [1438103808.0, 36720000.0, 78.44], [1438105536.0, 36740000.0, 78.48], [1438107264.0, 36760000.0, 78.52000000000001], [1438108992.0, 36780000.0, 78.56], [1438110720.0, 36800000.0, 78.60000000000001], [1438112448.0, 36820000.0, 78.64], [1438114176.0, 36840000.0, 78.68], [1438115904.0, 36860000.0, 78.72], [1438117632.0, 36880000.0, 78.76], [1438119360.0, 36900000.0, 78.8], [1438121088.0, 36920000.0, 78.84], [1438122816.0, 36940000.0, 78.88], [1438124544.0, 36960000.0, 78.92], [1438126272.0, 36980000.0, 78.96], [1438128000.0, 37000000.0, 79.0], [1438129728.0, 37020000.0, 79.03999999999999], [1438131456.0, 37040000.0, 79.08], [1438133184.0, 37060000.0, 79.12], [1438134912.0, 37080000.0, 79.16], [1438136640.0, 37100000.0, 79.2], [1438138368.0, 37120000.0, 79.24000000000001], [1438140096.0, 37140000.0, 79.28], [1438141824.0, 37160000.0, 79.32000000000001], [1438143552.0, 37180000.0, 79.36], [1438145280.0, 37200000.0, 79.4], [1438147008.0, 37220000.0, 79.44], [1438148736.0, 37240000.0, 79.48], [1438150464.0, 37260000.0, 79.52], [1438152192.0, 37280000.0, 79.56], [1438153920.0, 37300000.0, 79.6], [1438155648.0, 37320000.0, 79.64], [1438157376.0, 37340000.0, 79.68], [1438159104.0, 37360000.0, 79.72], [1438160832.0, 37380000.0, 79.76], [1438162560.0, 37400000.0, 79.80000000000001], [1438164288.0, 37420000.0, 79.84], [1438166016.0, 37440000.0, 79.88000000000001], [1438167744.0, 37460000.0, 79.92], [1438169472.0, 37480000.0, 79.96000000000001], [1438171200.0, 37500000.0, 80.0], [1438172928.0, 37520000.0, 80.03999999999999], [1438174656.0, 37540000.0, 80.08], [1438176384.0, 37560000.0, 80.11999999999999], [1438178112.0, 37580000.0, 80.16], [1438179840.0, 37600000.0, 80.19999999999999], [1438181568.0, 37620000.0, 80.24], [1438183296.0, 37640000.0, 80.28], [1438185024.0, 37660000.0, 80.32], [1438186752.0, 37680000.0, 80.36], [1438188480.0, 37700000.0, 80.4], [1438190208.0, 37720000.0, 80.44], [1438191936.0, 37740000.0, 80.48], [1438193664.0, 37760000.0, 80.52], [1438195392.0, 37780000.0, 80.56], [1438197120.0, 37800000.0, 80.6], [1438198848.0, 37820000.0, 80.64], [1438200576.0, 37840000.0, 80.67999999999999], [1438202304.0, 37860000.0, 80.72], [1438204032.0, 37880000.0, 80.75999999999999], [1438205760.0, 37900000.0, 80.8], [1438207488.0, 37920000.0, 80.84], [1438209216.0, 37940000.0, 80.88], [1438210944.0, 37960000.0, 80.92], [1438212672.0, 37980000.0, 80.96000000000001], [1438214400.0, 38000000.0, 81.0], [1438216128.0, 38020000.0, 81.04], [1438217856.0, 38040000.0, 81.08], [1438219584.0, 38060000.0, 81.12], [1438221312.0, 38080000.0, 81.16], [1438223040.0, 38100000.0, 81.2], [1438224768.0, 38120000.0, 81.24], [1438226496.0, 38140000.0, 81.28], [1438228224.0, 38160000.0, 81.32], [1438229952.0, 38180000.0, 81.36], [1438231680.0, 38200000.0, 81.39999999999999], [1438233408.0, 38220000.0, 81.44], [1438235136.0, 38240000.0, 81.47999999999999], [1438236864.0, 38260000.0, 81.52], [1438238592.0, 38280000.0, 81.56], [1438240320.0, 38300000.0, 81.6], [1438242048.0, 38320000.0, 81.64], [1438243776.0, 38340000.0, 81.68], [1438245504.0, 38360000.0, 81.72], [1438247232.0, 38380000.0, 81.76], [1438248960.0, 38400000.0, 81.8], [1438250688.0, 38420000.0, 81.84], [1438252416.0, 38440000.0, 81.88], [1438254144.0, 38460000.0, 81.92], [1438255872.0, 38480000.0, 81.96], [1438257600.0, 38500000.0, 82.0], [1438259328.0, 38520000.0, 82.03999999999999], [1438261056.0, 38540000.0, 82.08], [1438262784.0, 38560000.0, 82.12], [1438264512.0, 38580000.0, 82.16], [1438266240.0, 38600000.0, 82.2], [1438267968.0, 38620000.0, 82.24000000000001], [1438269696.0, 38640000.0, 82.28], [1438271424.0, 38660000.0, 82.32000000000001], [1438273152.0, 38680000.0, 82.36], [1438274880.0, 38700000.0, 82.4], [1438276608.0, 38720000.0, 82.44], [1438278336.0, 38740000.0, 82.48], [1438280064.0, 38760000.0, 82.52], [1438281792.0, 38780000.0, 82.56], [1438283520.0, 38800000.0, 82.6], [1438285248.0, 38820000.0, 82.64], [1438286976.0, 38840000.0, 82.67999999999999], [1438288704.0, 38860000.0, 82.72], [1438290432.0, 38880000.0, 82.75999999999999], [1438292160.0, 38900000.0, 82.8], [1438293888.0, 38920000.0, 82.84], [1438295616.0, 38940000.0, 82.88], [1438297344.0, 38960000.0, 82.92], [1438299072.0, 38980000.0, 82.96000000000001], [1438300800.0, 39000000.0, 83.0], [1438302528.0, 39020000.0, 83.04], [1438304256.0, 39040000.0, 83.08], [1438305984.0, 39060000.0, 83.12], [1438307712.0, 39080000.0, 83.16], [1438309440.0, 39100000.0, 83.2], [1438311168.0, 39120000.0, 83.24], [1438312896.0, 39140000.0, 83.28], [1438314624.0, 39160000.0, 83.32], [1438316352.0, 39180000.0, 83.36], [1438318080.0, 39200000.0, 83.4], [1438319808.0, 39220000.0, 83.44], [1438321536.0, 39240000.0, 83.48], [1438323264.0, 39260000.0, 83.52000000000001], [1438324992.0, 39280000.0, 83.56], [1438326720.0, 39300000.0, 83.60000000000001], [1438328448.0, 39320000.0, 83.64], [1438330176.0, 39340000.0, 83.68], [1438331904.0, 39360000.0, 83.72], [1438333632.0, 39380000.0, 83.76], [1438335360.0, 39400000.0, 83.8], [1438337088.0, 39420000.0, 83.84], [1438338816.0, 39440000.0, 83.88], [1438340544.0, 39460000.0, 83.92], [1438342272.0, 39480000.0, 83.96], [1438344000.0, 39500000.0, 84.0], [1438345728.0, 39520000.0, 84.03999999999999], [1438347456.0, 39540000.0, 84.08], [1438349184.0, 39560000.0, 84.12], [1438350912.0, 39580000.0, 84.16], [1438352640.0, 39600000.0, 84.2], [1438354368.0, 39620000.0, 84.24000000000001], [1438356096.0, 39640000.0, 84.28], [1438357824.0, 39660000.0, 84.32000000000001], [1438359552.0, 39680000.0, 84.36], [1438361280.0, 39700000.0, 84.4], [1438363008.0, 39720000.0, 84.44], [1438364736.0, 39740000.0, 84.48], [1438366464.0, 39760000.0, 84.52], [1438368192.0, 39780000.0, 84.56], [1438369920.0, 39800000.0, 84.6], [1438371648.0, 39820000.0, 84.64], [1438373376.0, 39840000.0, 84.68], [1438375104.0, 39860000.0, 84.72], [1438376832.0, 39880000.0, 84.76], [1438378560.0, 39900000.0, 84.80000000000001], [1438380288.0, 39920000.0, 84.84], [1438382016.0, 39940000.0, 84.88000000000001], [1438383744.0, 39960000.0, 84.92], [1438385472.0, 39980000.0, 84.96000000000001], [1438387200.0, 40000000.0, 85.0], [1438388928.0, 40020000.0, 85.03999999999999], [1438390656.0, 40040000.0, 85.07999999999998], [1438392384.0, 40060000.0, 85.12], [1438394112.0, 40080000.0, 85.16], [1438395840.0, 40100000.0, 85.19999999999999], [1438397568.0, 40120000.0, 85.24], [1438399296.0, 40140000.0, 85.28], [1438401024.0, 40160000.0, 85.32], [1438402752.0, 40180000.0, 85.36], [1438404480.0, 40200000.0, 85.39999999999999], [1438406208.0, 40220000.0, 85.44], [1438407936.0, 40240000.0, 85.48], [1438409664.0, 40260000.0, 85.52], [1438411392.0, 40280000.0, 85.55999999999999], [1438413120.0, 40300000.0, 85.60000000000001], [1438414848.0, 40320000.0, 85.64], [1438416576.0, 40340000.0, 85.67999999999999], [1438418304.0, 40360000.0, 85.72], [1438420032.0, 40380000.0, 85.76], [1438421760.0, 40400000.0, 85.8], [1438423488.0, 40420000.0, 85.84], [1438425216.0, 40440000.0, 85.88], [1438426944.0, 40460000.0, 85.92], [1438428672.0, 40480000.0, 85.96000000000001], [1438430400.0, 40500000.0, 86.0], [1438432128.0, 40520000.0, 86.03999999999999], [1438433856.0, 40540000.0, 86.08000000000001], [1438435584.0, 40560000.0, 86.12], [1438437312.0, 40580000.0, 86.16], [1438439040.0, 40600000.0, 86.19999999999999], [1438440768.0, 40620000.0, 86.24000000000001], [1438442496.0, 40640000.0, 86.28], [1438444224.0, 40660000.0, 86.32], [1438445952.0, 40680000.0, 86.35999999999999], [1438447680.0, 40700000.0, 86.4], [1438449408.0, 40720000.0, 86.44], [1438451136.0, 40740000.0, 86.47999999999999], [1438452864.0, 40760000.0, 86.52], [1438454592.0, 40780000.0, 86.56], [1438456320.0, 40800000.0, 86.6], [1438458048.0, 40820000.0, 86.64], [1438459776.0, 40840000.0, 86.67999999999999], [1438461504.0, 40860000.0, 86.72], [1438463232.0, 40880000.0, 86.76], [1438464960.0, 40900000.0, 86.8], [1438466688.0, 40920000.0, 86.83999999999999], [1438468416.0, 40940000.0, 86.88000000000001], [1438470144.0, 40960000.0, 86.92], [1438471872.0, 40980000.0, 86.96], [1438473600.0, 41000000.0, 87.0], [1438475328.0, 41020000.0, 87.04], [1438477056.0, 41040000.0, 87.08], [1438478784.0, 41060000.0, 87.12], [1438480512.0, 41080000.0, 87.16], [1438482240.0, 41100000.0, 87.2], [1438483968.0, 41120000.0, 87.24000000000001], [1438485696.0, 41140000.0, 87.28], [1438487424.0, 41160000.0, 87.32], [1438489152.0, 41180000.0, 87.36000000000001], [1438490880.0, 41200000.0, 87.4], [1438492608.0, 41220000.0, 87.44], [1438494336.0, 41240000.0, 87.47999999999999], [1438496064.0, 41260000.0, 87.52000000000001], [1438497792.0, 41280000.0, 87.56], [1438499520.0, 41300000.0, 87.6], [1438501248.0, 41320000.0, 87.63999999999999], [1438502976.0, 41340000.0, 87.68], [1438504704.0, 41360000.0, 87.72], [1438506432.0, 41380000.0, 87.75999999999999], [1438508160.0, 41400000.0, 87.8], [1438509888.0, 41420000.0, 87.84], [1438511616.0, 41440000.0, 87.88], [1438513344.0, 41460000.0, 87.92], [1438515072.0, 41480000.0, 87.96], [1438516800.0, 41500000.0, 88.0], [1438518528.0, 41520000.0, 88.04], [1438520256.0, 41540000.0, 88.08], [1438521984.0, 41560000.0, 88.11999999999999], [1438523712.0, 41580000.0, 88.16000000000001], [1438525440.0, 41600000.0, 88.2], [1438527168.0, 41620000.0, 88.24], [1438528896.0, 41640000.0, 88.28], [1438530624.0, 41660000.0, 88.32000000000001], [1438532352.0, 41680000.0, 88.36], [1438534080.0, 41700000.0, 88.4], [1438535808.0, 41720000.0, 88.44], [1438537536.0, 41740000.0, 88.48], [1438539264.0, 41760000.0, 88.52000000000001], [1438540992.0, 41780000.0, 88.56], [1438542720.0, 41800000.0, 88.6], [1438544448.0, 41820000.0, 88.64000000000001], [1438546176.0, 41840000.0, 88.68], [1438547904.0, 41860000.0, 88.72], [1438549632.0, 41880000.0, 88.75999999999999], [1438551360.0, 41900000.0, 88.80000000000001], [1438553088.0, 41920000.0, 88.84], [1438554816.0, 41940000.0, 88.88], [1438556544.0, 41960000.0, 88.91999999999999], [1438558272.0, 41980000.0, 88.96000000000001], [1438560000.0, 42000000.0, 89.0], [1438561728.0, 42020000.0, 89.03999999999999], [1438563456.0, 42040000.0, 89.08], [1438565184.0, 42060000.0, 89.12], [1438566912.0, 42080000.0, 89.16], [1438568640.0, 42100000.0, 89.2], [1438570368.0, 42120000.0, 89.24], [1438572096.0, 42140000.0, 89.28], [1438573824.0, 42160000.0, 89.32000000000001], [1438575552.0, 42180000.0, 89.36], [1438577280.0, 42200000.0, 89.39999999999999], [1438579008.0, 42220000.0, 89.44000000000001], [1438580736.0, 42240000.0, 89.48], [1438582464.0, 42260000.0, 89.52], [1438584192.0, 42280000.0, 89.56], [1438585920.0, 42300000.0, 89.60000000000001], [1438587648.0, 42320000.0, 89.64], [1438589376.0, 42340000.0, 89.68], [1438591104.0, 42360000.0, 89.72], [1438592832.0, 42380000.0, 89.76], [1438594560.0, 42400000.0, 89.80000000000001], [1438596288.0, 42420000.0, 89.84], [1438598016.0, 42440000.0, 89.88], [1438599744.0, 42460000.0, 89.92000000000002], [1438601472.0, 42480000.0, 89.96000000000001], [1438603200.0, 42500000.0, 90.0], [1438604928.0, 42520000.0, 90.03999999999999], [1438606656.0, 42540000.0, 90.07999999999998], [1438608384.0, 42560000.0, 90.12], [1438610112.0, 42580000.0, 90.16], [1438611840.0, 42600000.0, 90.19999999999999], [1438613568.0, 42620000.0, 90.24], [1438615296.0, 42640000.0, 90.28], [1438617024.0, 42660000.0, 90.32], [1438618752.0, 42680000.0, 90.36], [1438620480.0, 42700000.0, 90.39999999999999], [1438622208.0, 42720000.0, 90.44], [1438623936.0, 42740000.0, 90.48], [1438625664.0, 42760000.0, 90.52], [1438627392.0, 42780000.0, 90.55999999999999], [1438629120.0, 42800000.0, 90.60000000000001], [1438630848.0, 42820000.0, 90.64], [1438632576.0, 42840000.0, 90.67999999999999], [1438634304.0, 42860000.0, 90.72], [1438636032.0, 42880000.0, 90.76], [1438637760.0, 42900000.0, 90.8], [1438639488.0, 42920000.0, 90.84], [1438641216.0, 42940000.0, 90.88], [1438642944.0, 42960000.0, 90.92], [1438644672.0, 42980000.0, 90.96000000000001], [1438646400.0, 43000000.0, 91.0], [1438648128.0, 43020000.0, 91.03999999999999], [1438649856.0, 43040000.0, 91.08000000000001], [1438651584.0, 43060000.0, 91.12], [1438653312.0, 43080000.0, 91.16], [1438655040.0, 43100000.0, 91.19999999999999], [1438656768.0, 43120000.0, 91.24000000000001], [1438658496.0, 43140000.0, 91.28], [1438660224.0, 43160000.0, 91.32], [1438661952.0, 43180000.0, 91.35999999999999], [1438663680.0, 43200000.0, 91.4], [1438665408.0, 43220000.0, 91.44], [1438667136.0, 43240000.0, 91.47999999999999], [1438668864.0, 43260000.0, 91.52], [1438670592.0, 43280000.0, 91.56], [1438672320.0, 43300000.0, 91.6], [1438674048.0, 43320000.0, 91.64], [1438675776.0, 43340000.0, 91.67999999999999], [1438677504.0, 43360000.0, 91.72], [1438679232.0, 43380000.0, 91.76], [1438680960.0, 43400000.0, 91.8], [1438682688.0, 43420000.0, 91.83999999999999], [1438684416.0, 43440000.0, 91.88000000000001], [1438686144.0, 43460000.0, 91.92], [1438687872.0, 43480000.0, 91.96], [1438689600.0, 43500000.0, 92.0], [1438691328.0, 43520000.0, 92.04], [1438693056.0, 43540000.0, 92.08], [1438694784.0, 43560000.0, 92.12], [1438696512.0, 43580000.0, 92.16], [1438698240.0, 43600000.0, 92.2], [1438699968.0, 43620000.0, 92.24000000000001], [1438701696.0, 43640000.0, 92.28], [1438703424.0, 43660000.0, 92.32], [1438705152.0, 43680000.0, 92.36000000000001], [1438706880.0, 43700000.0, 92.4], [1438708608.0, 43720000.0, 92.44], [1438710336.0, 43740000.0, 92.47999999999999], [1438712064.0, 43760000.0, 92.52000000000001], [1438713792.0, 43780000.0, 92.56], [1438715520.0, 43800000.0, 92.6], [1438717248.0, 43820000.0, 92.63999999999999], [1438718976.0, 43840000.0, 92.68], [1438720704.0, 43860000.0, 92.72], [1438722432.0, 43880000.0, 92.75999999999999], [1438724160.0, 43900000.0, 92.8], [1438725888.0, 43920000.0, 92.84], [1438727616.0, 43940000.0, 92.88], [1438729344.0, 43960000.0, 92.92], [1438731072.0, 43980000.0, 92.96], [1438732800.0, 44000000.0, 93.0], [1438734528.0, 44020000.0, 93.04], [1438736256.0, 44040000.0, 93.08], [1438737984.0, 44060000.0, 93.11999999999999], [1438739712.0, 44080000.0, 93.16000000000001], [1438741440.0, 44100000.0, 93.2], [1438743168.0, 44120000.0, 93.24], [1438744896.0, 44140000.0, 93.28], [1438746624.0, 44160000.0, 93.32000000000001], [1438748352.0, 44180000.0, 93.36], [1438750080.0, 44200000.0, 93.4], [1438751808.0, 44220000.0, 93.44], [1438753536.0, 44240000.0, 93.48], [1438755264.0, 44260000.0, 93.52000000000001], [1438756992.0, 44280000.0, 93.56], [1438758720.0, 44300000.0, 93.6], [1438760448.0, 44320000.0, 93.64000000000001], [1438762176.0, 44340000.0, 93.68], [1438763904.0, 44360000.0, 93.72], [1438765632.0, 44380000.0, 93.75999999999999], [1438767360.0, 44400000.0, 93.80000000000001], [1438769088.0, 44420000.0, 93.84], [1438770816.0, 44440000.0, 93.88], [1438772544.0, 44460000.0, 93.91999999999999], [1438774272.0, 44480000.0, 93.96000000000001], [1438776000.0, 44500000.0, 94.0], [1438777728.0, 44520000.0, 94.03999999999999], [1438779456.0, 44540000.0, 94.08], [1438781184.0, 44560000.0, 94.12], [1438782912.0, 44580000.0, 94.16], [1438784640.0, 44600000.0, 94.2], [1438786368.0, 44620000.0, 94.24], [1438788096.0, 44640000.0, 94.28], [1438789824.0, 44660000.0, 94.32000000000001], [1438791552.0, 44680000.0, 94.36], [1438793280.0, 44700000.0, 94.39999999999999], [1438795008.0, 44720000.0, 94.44000000000001], [1438796736.0, 44740000.0, 94.48], [1438798464.0, 44760000.0, 94.52], [1438800192.0, 44780000.0, 94.56], [1438801920.0, 44800000.0, 94.60000000000001], [1438803648.0, 44820000.0, 94.64], [1438805376.0, 44840000.0, 94.68], [1438807104.0, 44860000.0, 94.72], [1438808832.0, 44880000.0, 94.76], [1438810560.0, 44900000.0, 94.80000000000001], [1438812288.0, 44920000.0, 94.84], [1438814016.0, 44940000.0, 94.88], [1438815744.0, 44960000.0, 94.92000000000002], [1438817472.0, 44980000.0, 94.96000000000001], [1438819200.0, 45000000.0, 95.0], [1438820928.0, 45020000.0, 95.03999999999999], [1438822656.0, 45040000.0, 95.07999999999998], [1438824384.0, 45060000.0, 95.12], [1438826112.0, 45080000.0, 95.16], [1438827840.0, 45100000.0, 95.19999999999999], [1438829568.0, 45120000.0, 95.24], [1438831296.0, 45140000.0, 95.28], [1438833024.0, 45160000.0, 95.32], [1438834752.0, 45180000.0, 95.36], [1438836480.0, 45200000.0, 95.39999999999999], [1438838208.0, 45220000.0, 95.44], [1438839936.0, 45240000.0, 95.48], [1438841664.0, 45260000.0, 95.52], [1438843392.0, 45280000.0, 95.55999999999999], [1438845120.0, 45300000.0, 95.60000000000001], [1438846848.0, 45320000.0, 95.64], [1438848576.0, 45340000.0, 95.67999999999999], [1438850304.0, 45360000.0, 95.72], [1438852032.0, 45380000.0, 95.76], [1438853760.0, 45400000.0, 95.8], [1438855488.0, 45420000.0, 95.84], [1438857216.0, 45440000.0, 95.88], [1438858944.0, 45460000.0, 95.92], [1438860672.0, 45480000.0, 95.96000000000001], [1438862400.0, 45500000.0, 96.0], [1438864128.0, 45520000.0, 96.03999999999999], [1438865856.0, 45540000.0, 96.08000000000001], [1438867584.0, 45560000.0, 96.12], [1438869312.0, 45580000.0, 96.16], [1438871040.0, 45600000.0, 96.19999999999999], [1438872768.0, 45620000.0, 96.24000000000001], [1438874496.0, 45640000.0, 96.28], [1438876224.0, 45660000.0, 96.32], [1438877952.0, 45680000.0, 96.35999999999999], [1438879680.0, 45700000.0, 96.4], [1438881408.0, 45720000.0, 96.44], [1438883136.0, 45740000.0, 96.47999999999999], [1438884864.0, 45760000.0, 96.52], [1438886592.0, 45780000.0, 96.56], [1438888320.0, 45800000.0, 96.6], [1438890048.0, 45820000.0, 96.64], [1438891776.0, 45840000.0, 96.67999999999999], [1438893504.0, 45860000.0, 96.72], [1438895232.0, 45880000.0, 96.76], [1438896960.0, 45900000.0, 96.8], [1438898688.0, 45920000.0, 96.83999999999999], [1438900416.0, 45940000.0, 96.88000000000001], [1438902144.0, 45960000.0, 96.92], [1438903872.0, 45980000.0, 96.96], [1438905600.0, 46000000.0, 97.0], [1438907328.0, 46020000.0, 97.04], [1438909056.0, 46040000.0, 97.08], [1438910784.0, 46060000.0, 97.12], [1438912512.0, 46080000.0, 97.16], [1438914240.0, 46100000.0, 97.2], [1438915968.0, 46120000.0, 97.24000000000001], [1438917696.0, 46140000.0, 97.28], [1438919424.0, 46160000.0, 97.32], [1438921152.0, 46180000.0, 97.36000000000001], [1438922880.0, 46200000.0, 97.4], [1438924608.0, 46220000.0, 97.44], [1438926336.0, 46240000.0, 97.47999999999999], [1438928064.0, 46260000.0, 97.52000000000001], [1438929792.0, 46280000.0, 97.56], [1438931520.0, 46300000.0, 97.6], [1438933248.0, 46320000.0, 97.63999999999999], [1438934976.0, 46340000.0, 97.68], [1438936704.0, 46360000.0, 97.72], [1438938432.0, 46380000.0, 97.75999999999999], [1438940160.0, 46400000.0, 97.8], [1438941888.0, 46420000.0, 97.84], [1438943616.0, 46440000.0, 97.88], [1438945344.0, 46460000.0, 97.92], [1438947072.0, 46480000.0, 97.96], [1438948800.0, 46500000.0, 98.0], [1438950528.0, 46520000.0, 98.04], [1438952256.0, 46540000.0, 98.08], [1438953984.0, 46560000.0, 98.11999999999999], [1438955712.0, 46580000.0, 98.16000000000001], [1438957440.0, 46600000.0, 98.2], [1438959168.0, 46620000.0, 98.24], [1438960896.0, 46640000.0, 98.28], [1438962624.0, 46660000.0, 98.32000000000001], [1438964352.0, 46680000.0, 98.36], [1438966080.0, 46700000.0, 98.4], [1438967808.0, 46720000.0, 98.44], [1438969536.0, 46740000.0, 98.48], [1438971264.0, 46760000.0, 98.52000000000001], [1438972992.0, 46780000.0, 98.56], [1438974720.0, 46800000.0, 98.6], [1438976448.0, 46820000.0, 98.64000000000001], [1438978176.0, 46840000.0, 98.68], [1438979904.0, 46860000.0, 98.72], [1438981632.0, 46880000.0, 98.75999999999999], [1438983360.0, 46900000.0, 98.80000000000001], [1438985088.0, 46920000.0, 98.84], [1438986816.0, 46940000.0, 98.88], [1438988544.0, 46960000.0, 98.91999999999999], [1438990272.0, 46980000.0, 98.96000000000001], [1438992000.0, 47000000.0, 99.0], [1438993728.0, 47020000.0, 99.03999999999999], [1438995456.0, 47040000.0, 99.08], [1438997184.0, 47060000.0, 99.12], [1438998912.0, 47080000.0, 99.16], [1439000640.0, 47100000.0, 99.2], [1439002368.0, 47120000.0, 99.24], [1439004096.0, 47140000.0, 99.28], [1439005824.0, 47160000.0, 99.32000000000001], [1439007552.0, 47180000.0, 99.36], [1439009280.0, 47200000.0, 99.39999999999999], [1439011008.0, 47220000.0, 99.44000000000001], [1439012736.0, 47240000.0, 99.48], [1439014464.0, 47260000.0, 99.52], [1439016192.0, 47280000.0, 99.56], [1439017920.0, 47300000.0, 99.60000000000001], [1439019648.0, 47320000.0, 99.64], [1439021376.0, 47340000.0, 99.68], [1439023104.0, 47360000.0, 99.72], [1439024832.0, 47380000.0, 99.76], [1439026560.0, 47400000.0, 99.80000000000001], [1439028288.0, 47420000.0, 99.84], [1439030016.0, 47440000.0, 99.88], [1439031744.0, 47460000.0, 99.92000000000002], [1439033472.0, 47480000.0, 99.96000000000001], [1439035200.0, 47500000.0, 100.0], [1439036928.0, 47520000.0, 100.03999999999999], [1439038656.0, 47540000.0, 100.07999999999998], [1439040384.0, 47560000.0, 100.12], [1439042112.0, 47580000.0, 100.16], [1439043840.0, 47600000.0, 100.19999999999999], [1439045568.0, 47620000.0, 100.24], [1439047296.0, 47640000.0, 100.28], [1439049024.0, 47660000.0, 100.32], [1439050752.0, 47680000.0, 100.36], [1439052480.0, 47700000.0, 100.39999999999999], [1439054208.0, 47720000.0, 100.44], [1439055936.0, 47740000.0, 100.48], [1439057664.0, 47760000.0, 100.52], [1439059392.0, 47780000.0, 100.55999999999999], [1439061120.0, 47800000.0, 100.60000000000001], [1439062848.0, 47820000.0, 100.64], [1439064576.0, 47840000.0, 100.67999999999999], [1439066304.0, 47860000.0, 100.72], [1439068032.0, 47880000.0, 100.76], [1439069760.0, 47900000.0, 100.8], [1439071488.0, 47920000.0, 100.84], [1439073216.0, 47940000.0, 100.88], [1439074944.0, 47960000.0, 100.92], [1439076672.0, 47980000.0, 100.96000000000001], [1439078400.0, 48000000.0, 101.0], [1439080128.0, 48020000.0, 101.03999999999999], [1439081856.0, 48040000.0, 101.08000000000001], [1439083584.0, 48060000.0, 101.12], [1439085312.0, 48080000.0, 101.16], [1439087040.0, 48100000.0, 101.19999999999999], [1439088768.0, 48120000.0, 101.24000000000001], [1439090496.0, 48140000.0, 101.28], [1439092224.0, 48160000.0, 101.32], [1439093952.0, 48180000.0, 101.35999999999999], [1439095680.0, 48200000.0, 101.4], [1439097408.0, 48220000.0, 101.44], [1439099136.0, 48240000.0, 101.47999999999999], [1439100864.0, 48260000.0, 101.52], [1439102592.0, 48280000.0, 101.56], [1439104320.0, 48300000.0, 101.6], [1439106048.0, 48320000.0, 101.64], [1439107776.0, 48340000.0, 101.67999999999999], [1439109504.0, 48360000.0, 101.72], [1439111232.0, 48380000.0, 101.76], [1439112960.0, 48400000.0, 101.8], [1439114688.0, 48420000.0, 101.83999999999999], [1439116416.0, 48440000.0, 101.88000000000001], [1439118144.0, 48460000.0, 101.92], [1439119872.0, 48480000.0, 101.96], [1439121600.0, 48500000.0, 102.0], [1439123328.0, 48520000.0, 102.04], [1439125056.0, 48540000.0, 102.08], [1439126784.0, 48560000.0, 102.12], [1439128512.0, 48580000.0, 102.16], [1439130240.0, 48600000.0, 102.2], [1439131968.0, 48620000.0, 102.24000000000001], [1439133696.0, 48640000.0, 102.28], [1439135424.0, 48660000.0, 102.32], [1439137152.0, 48680000.0, 102.36000000000001], [1439138880.0, 48700000.0, 102.4], [1439140608.0, 48720000.0, 102.44], [1439142336.0, 48740000.0, 102.47999999999999], [1439144064.0, 48760000.0, 102.52000000000001], [1439145792.0, 48780000.0, 102.56], [1439147520.0, 48800000.0, 102.6], [1439149248.0, 48820000.0, 102.63999999999999], [1439150976.0, 48840000.0, 102.68], [1439152704.0, 48860000.0, 102.72], [1439154432.0, 48880000.0, 102.75999999999999], [1439156160.0, 48900000.0, 102.8], [1439157888.0, 48920000.0, 102.84], [1439159616.0, 48940000.0, 102.88], [1439161344.0, 48960000.0, 102.92], [1439163072.0, 48980000.0, 102.96], [1439164800.0, 49000000.0, 103.0], [1439166528.0, 49020000.0, 103.04], [1439168256.0, 49040000.0, 103.08], [1439169984.0, 49060000.0, 103.11999999999999], [1439171712.0, 49080000.0, 103.16000000000001], [1439173440.0, 49100000.0, 103.2], [1439175168.0, 49120000.0, 103.24], [1439176896.0, 49140000.0, 103.28], [1439178624.0, 49160000.0, 103.32000000000001], [1439180352.0, 49180000.0, 103.36], [1439182080.0, 49200000.0, 103.4], [1439183808.0, 49220000.0, 103.44], [1439185536.0, 49240000.0, 103.48], [1439187264.0, 49260000.0, 103.52000000000001], [1439188992.0, 49280000.0, 103.56], [1439190720.0, 49300000.0, 103.6], [1439192448.0, 49320000.0, 103.64000000000001], [1439194176.0, 49340000.0, 103.68], [1439195904.0, 49360000.0, 103.72], [1439197632.0, 49380000.0, 103.75999999999999], [1439199360.0, 49400000.0, 103.80000000000001], [1439201088.0, 49420000.0, 103.84], [1439202816.0, 49440000.0, 103.88], [1439204544.0, 49460000.0, 103.91999999999999], [1439206272.0, 49480000.0, 103.96000000000001], [1439208000.0, 49500000.0, 104.0], [1439209728.0, 49520000.0, 104.03999999999999], [1439211456.0, 49540000.0, 104.08], [1439213184.0, 49560000.0, 104.12], [1439214912.0, 49580000.0, 104.16], [1439216640.0, 49600000.0, 104.2], [1439218368.0, 49620000.0, 104.24], [1439220096.0, 49640000.0, 104.28], [1439221824.0, 49660000.0, 104.32000000000001], [1439223552.0, 49680000.0, 104.36], [1439225280.0, 49700000.0, 104.39999999999999], [1439227008.0, 49720000.0, 104.44000000000001], [1439228736.0, 49740000.0, 104.48], [1439230464.0, 49760000.0, 104.52], [1439232192.0, 49780000.0, 104.56], [1439233920.0, 49800000.0, 104.60000000000001], [1439235648.0, 49820000.0, 104.64], [1439237376.0, 49840000.0, 104.68], [1439239104.0, 49860000.0, 104.72], [1439240832.0, 49880000.0, 104.76], [1439242560.0, 49900000.0, 104.80000000000001], [1439244288.0, 49920000.0, 104.84], [1439246016.0, 49940000.0, 104.88], [1439247744.0, 49960000.0, 104.92000000000002], [1439249472.0, 49980000.0, 104.96000000000001], [1439251200.0, 50000000.0, 105.0], [1439252928.0, 50020000.0, 105.03999999999999], [1439254656.0, 50040000.0, 105.07999999999998], [1439256384.0, 50060000.0, 105.12], [1439258112.0, 50080000.0, 105.16], [1439259840.0, 50100000.0, 105.19999999999999], [1439261568.0, 50120000.0, 105.24], [1439263296.0, 50140000.0, 105.28], [1439265024.0, 50160000.0, 105.32], [1439266752.0, 50180000.0, 105.36], [1439268480.0, 50200000.0, 105.39999999999999], [1439270208.0, 50220000.0, 105.44], [1439271936.0, 50240000.0, 105.48], [1439273664.0, 50260000.0, 105.52], [1439275392.0, 50280000.0, 105.55999999999999], [1439277120.0, 50300000.0, 105.60000000000001], [1439278848.0, 50320000.0, 105.64], [1439280576.0, 50340000.0, 105.67999999999999], [1439282304.0, 50360000.0, 105.72], [1439284032.0, 50380000.0, 105.76], [1439285760.0, 50400000.0, 105.8], [1439287488.0, 50420000.0, 105.84], [1439289216.0, 50440000.0, 105.88], [1439290944.0, 50460000.0, 105.92], [1439292672.0, 50480000.0, 105.96000000000001], [1439294400.0, 50500000.0, 106.0], [1439296128.0, 50520000.0, 106.03999999999999], [1439297856.0, 50540000.0, 106.08000000000001], [1439299584.0, 50560000.0, 106.12], [1439301312.0, 50580000.0, 106.16], [1439303040.0, 50600000.0, 106.19999999999999], [1439304768.0, 50620000.0, 106.24000000000001], [1439306496.0, 50640000.0, 106.28], [1439308224.0, 50660000.0, 106.32], [1439309952.0, 50680000.0, 106.35999999999999], [1439311680.0, 50700000.0, 106.4], [1439313408.0, 50720000.0, 106.44], [1439315136.0, 50740000.0, 106.47999999999999], [1439316864.0, 50760000.0, 106.52], [1439318592.0, 50780000.0, 106.56], [1439320320.0, 50800000.0, 106.6], [1439322048.0, 50820000.0, 106.64], [1439323776.0, 50840000.0, 106.67999999999999], [1439325504.0, 50860000.0, 106.72], [1439327232.0, 50880000.0, 106.76], [1439328960.0, 50900000.0, 106.8], [1439330688.0, 50920000.0, 106.83999999999999], [1439332416.0, 50940000.0, 106.88000000000001], [1439334144.0, 50960000.0, 106.92], [1439335872.0, 50980000.0, 106.96], [1439337600.0, 51000000.0, 107.0], [1439339328.0, 51020000.0, 107.04], [1439341056.0, 51040000.0, 107.08], [1439342784.0, 51060000.0, 107.12], [1439344512.0, 51080000.0, 107.16], [1439346240.0, 51100000.0, 107.2], [1439347968.0, 51120000.0, 107.24000000000001], [1439349696.0, 51140000.0, 107.28], [1439351424.0, 51160000.0, 107.32], [1439353152.0, 51180000.0, 107.36000000000001], [1439354880.0, 51200000.0, 107.4], [1439356608.0, 51220000.0, 107.44], [1439358336.0, 51240000.0, 107.47999999999999], [1439360064.0, 51260000.0, 107.52000000000001], [1439361792.0, 51280000.0, 107.56], [1439363520.0, 51300000.0, 107.6], [1439365248.0, 51320000.0, 107.63999999999999], [1439366976.0, 51340000.0, 107.68], [1439368704.0, 51360000.0, 107.72], [1439370432.0, 51380000.0, 107.75999999999999], [1439372160.0, 51400000.0, 107.8], [1439373888.0, 51420000.0, 107.84], [1439375616.0, 51440000.0, 107.88], [1439377344.0, 51460000.0, 107.92], [1439379072.0, 51480000.0, 107.96], [1439380800.0, 51500000.0, 108.0], [1439382528.0, 51520000.0, 108.04], [1439384256.0, 51540000.0, 108.08], [1439385984.0, 51560000.0, 108.11999999999999], [1439387712.0, 51580000.0, 108.16000000000001], [1439389440.0, 51600000.0, 108.2], [1439391168.0, 51620000.0, 108.24], [1439392896.0, 51640000.0, 108.28], [1439394624.0, 51660000.0, 108.32000000000001], [1439396352.0, 51680000.0, 108.36], [1439398080.0, 51700000.0, 108.4], [1439399808.0, 51720000.0, 108.44], [1439401536.0, 51740000.0, 108.48], [1439403264.0, 51760000.0, 108.52000000000001], [1439404992.0, 51780000.0, 108.56], [1439406720.0, 51800000.0, 108.6], [1439408448.0, 51820000.0, 108.64000000000001], [1439410176.0, 51840000.0, 108.68], [1439411904.0, 51860000.0, 108.72], [1439413632.0, 51880000.0, 108.75999999999999], [1439415360.0, 51900000.0, 108.80000000000001], [1439417088.0, 51920000.0, 108.84], [1439418816.0, 51940000.0, 108.88], [1439420544.0, 51960000.0, 108.91999999999999], [1439422272.0, 51980000.0, 108.96000000000001], [1439424000.0, 52000000.0, 109.0], [1439425728.0, 52020000.0, 109.03999999999999], [1439427456.0, 52040000.0, 109.08], [1439429184.0, 52060000.0, 109.12], [1439430912.0, 52080000.0, 109.16], [1439432640.0, 52100000.0, 109.2], [1439434368.0, 52120000.0, 109.24], [1439436096.0, 52140000.0, 109.28], [1439437824.0, 52160000.0, 109.32000000000001], [1439439552.0, 52180000.0, 109.36], [1439441280.0, 52200000.0, 109.39999999999999], [1439443008.0, 52220000.0, 109.44000000000001], [1439444736.0, 52240000.0, 109.48], [1439446464.0, 52260000.0, 109.52], [1439448192.0, 52280000.0, 109.56], [1439449920.0, 52300000.0, 109.60000000000001], [1439451648.0, 52320000.0, 109.64], [1439453376.0, 52340000.0, 109.68], [1439455104.0, 52360000.0, 109.72], [1439456832.0, 52380000.0, 109.76], [1439458560.0, 52400000.0, 109.80000000000001], [1439460288.0, 52420000.0, 109.84], [1439462016.0, 52440000.0, 109.88], [1439463744.0, 52460000.0, 109.92000000000002], [1439465472.0, 52480000.0, 109.96000000000001], [1439467200.0, 52500000.0, 110.0], [1439468928.0, 52520000.0, 110.03999999999999], [1439470656.0, 52540000.0, 110.07999999999998], [1439472384.0, 52560000.0, 110.12], [1439474112.0, 52580000.0, 110.16], [1439475840.0, 52600000.0, 110.19999999999999], [1439477568.0, 52620000.0, 110.24], [1439479296.0, 52640000.0, 110.28], [1439481024.0, 52660000.0, 110.32], [1439482752.0, 52680000.0, 110.36], [1439484480.0, 52700000.0, 110.39999999999999], [1439486208.0, 52720000.0, 110.44], [1439487936.0, 52740000.0, 110.48], [1439489664.0, 52760000.0, 110.52], [1439491392.0, 52780000.0, 110.55999999999999], [1439493120.0, 52800000.0, 110.60000000000001], [1439494848.0, 52820000.0, 110.64], [1439496576.0, 52840000.0, 110.67999999999999], [1439498304.0, 52860000.0, 110.72], [1439500032.0, 52880000.0, 110.76], [1439501760.0, 52900000.0, 110.8], [1439503488.0, 52920000.0, 110.84], [1439505216.0, 52940000.0, 110.88], [1439506944.0, 52960000.0, 110.92], [1439508672.0, 52980000.0, 110.96000000000001], [1439510400.0, 53000000.0, 111.0], [1439512128.0, 53020000.0, 111.03999999999999], [1439513856.0, 53040000.0, 111.08000000000001], [1439515584.0, 53060000.0, 111.12], [1439517312.0, 53080000.0, 111.16], [1439519040.0, 53100000.0, 111.19999999999999], [1439520768.0, 53120000.0, 111.24000000000001], [1439522496.0, 53140000.0, 111.28], [1439524224.0, 53160000.0, 111.32], [1439525952.0, 53180000.0, 111.35999999999999], [1439527680.0, 53200000.0, 111.4], [1439529408.0, 53220000.0, 111.44], [1439531136.0, 53240000.0, 111.47999999999999], [1439532864.0, 53260000.0, 111.52], [1439534592.0, 53280000.0, 111.56], [1439536320.0, 53300000.0, 111.6], [1439538048.0, 53320000.0, 111.64], [1439539776.0, 53340000.0, 111.67999999999999], [1439541504.0, 53360000.0, 111.72], [1439543232.0, 53380000.0, 111.76], [1439544960.0, 53400000.0, 111.8], [1439546688.0, 53420000.0, 111.83999999999999], [1439548416.0, 53440000.0, 111.88000000000001], [1439550144.0, 53460000.0, 111.92], [1439551872.0, 53480000.0, 111.96], [1439553600.0, 53500000.0, 112.0], [1439555328.0, 53520000.0, 112.04], [1439557056.0, 53540000.0, 112.08], [1439558784.0, 53560000.0, 112.12], [1439560512.0, 53580000.0, 112.16], [1439562240.0, 53600000.0, 112.2], [1439563968.0, 53620000.0, 112.24000000000001], [1439565696.0, 53640000.0, 112.28], [1439567424.0, 53660000.0, 112.32], [1439569152.0, 53680000.0, 112.36000000000001], [1439570880.0, 53700000.0, 112.4], [1439572608.0, 53720000.0, 112.44], [1439574336.0, 53740000.0, 112.47999999999999], [1439576064.0, 53760000.0, 112.52000000000001], [1439577792.0, 53780000.0, 112.56], [1439579520.0, 53800000.0, 112.6], [1439581248.0, 53820000.0, 112.63999999999999], [1439582976.0, 53840000.0, 112.68], [1439584704.0, 53860000.0, 112.72], [1439586432.0, 53880000.0, 112.75999999999999], [1439588160.0, 53900000.0, 112.8], [1439589888.0, 53920000.0, 112.84], [1439591616.0, 53940000.0, 112.88], [1439593344.0, 53960000.0, 112.92], [1439595072.0, 53980000.0, 112.96], [1439596800.0, 54000000.0, 113.0], [1439598528.0, 54020000.0, 113.04], [1439600256.0, 54040000.0, 113.08], [1439601984.0, 54060000.0, 113.11999999999999], [1439603712.0, 54080000.0, 113.16000000000001], [1439605440.0, 54100000.0, 113.2], [1439607168.0, 54120000.0, 113.24], [1439608896.0, 54140000.0, 113.28], [1439610624.0, 54160000.0, 113.32000000000001], [1439612352.0, 54180000.0, 113.36], [1439614080.0, 54200000.0, 113.4], [1439615808.0, 54220000.0, 113.44], [1439617536.0, 54240000.0, 113.48], [1439619264.0, 54260000.0, 113.52000000000001], [1439620992.0, 54280000.0, 113.56], [1439622720.0, 54300000.0, 113.6], [1439624448.0, 54320000.0, 113.64000000000001], [1439626176.0, 54340000.0, 113.68], [1439627904.0, 54360000.0, 113.72], [1439629632.0, 54380000.0, 113.75999999999999], [1439631360.0, 54400000.0, 113.80000000000001], [1439633088.0, 54420000.0, 113.84], [1439634816.0, 54440000.0, 113.88], [1439636544.0, 54460000.0, 113.91999999999999], [1439638272.0, 54480000.0, 113.96000000000001], [1439640000.0, 54500000.0, 114.0], [1439641728.0, 54520000.0, 114.03999999999999], [1439643456.0, 54540000.0, 114.08], [1439645184.0, 54560000.0, 114.12], [1439646912.0, 54580000.0, 114.16], [1439648640.0, 54600000.0, 114.2], [1439650368.0, 54620000.0, 114.24], [1439652096.0, 54640000.0, 114.28], [1439653824.0, 54660000.0, 114.32000000000001], [1439655552.0, 54680000.0, 114.36], [1439657280.0, 54700000.0, 114.39999999999999], [1439659008.0, 54720000.0, 114.44000000000001], [1439660736.0, 54740000.0, 114.48], [1439662464.0, 54760000.0, 114.52], [1439664192.0, 54780000.0, 114.56], [1439665920.0, 54800000.0, 114.60000000000001], [1439667648.0, 54820000.0, 114.64], [1439669376.0, 54840000.0, 114.68], [1439671104.0, 54860000.0, 114.72], [1439672832.0, 54880000.0, 114.76], [1439674560.0, 54900000.0, 114.80000000000001], [1439676288.0, 54920000.0, 114.84], [1439678016.0, 54940000.0, 114.88], [1439679744.0, 54960000.0, 114.92000000000002], [1439681472.0, 54980000.0, 114.96000000000001], [1439683200.0, 55000000.0, 115.0], [1439684928.0, 55020000.0, 115.03999999999999], [1439686656.0, 55040000.0, 115.07999999999998], [1439688384.0, 55060000.0, 115.12], [1439690112.0, 55080000.0, 115.16], [1439691840.0, 55100000.0, 115.19999999999999], [1439693568.0, 55120000.0, 115.24], [1439695296.0, 55140000.0, 115.28], [1439697024.0, 55160000.0, 115.32], [1439698752.0, 55180000.0, 115.36], [1439700480.0, 55200000.0, 115.39999999999999], [1439702208.0, 55220000.0, 115.44], [1439703936.0, 55240000.0, 115.48], [1439705664.0, 55260000.0, 115.52], [1439707392.0, 55280000.0, 115.55999999999999], [1439709120.0, 55300000.0, 115.60000000000001], [1439710848.0, 55320000.0, 115.64], [1439712576.0, 55340000.0, 115.67999999999999], [1439714304.0, 55360000.0, 115.72], [1439716032.0, 55380000.0, 115.76], [1439717760.0, 55400000.0, 115.8], [1439719488.0, 55420000.0, 115.84], [1439721216.0, 55440000.0, 115.88], [1439722944.0, 55460000.0, 115.92], [1439724672.0, 55480000.0, 115.96000000000001], [1439726400.0, 55500000.0, 116.0], [1439728128.0, 55520000.0, 116.03999999999999], [1439729856.0, 55540000.0, 116.08000000000001], [1439731584.0, 55560000.0, 116.12], [1439733312.0, 55580000.0, 116.16], [1439735040.0, 55600000.0, 116.19999999999999], [1439736768.0, 55620000.0, 116.24000000000001], [1439738496.0, 55640000.0, 116.28], [1439740224.0, 55660000.0, 116.32], [1439741952.0, 55680000.0, 116.35999999999999], [1439743680.0, 55700000.0, 116.4], [1439745408.0, 55720000.0, 116.44], [1439747136.0, 55740000.0, 116.47999999999999], [1439748864.0, 55760000.0, 116.52], [1439750592.0, 55780000.0, 116.56], [1439752320.0, 55800000.0, 116.6], [1439754048.0, 55820000.0, 116.64], [1439755776.0, 55840000.0, 116.67999999999999], [1439757504.0, 55860000.0, 116.72], [1439759232.0, 55880000.0, 116.76], [1439760960.0, 55900000.0, 116.8], [1439762688.0, 55920000.0, 116.83999999999999], [1439764416.0, 55940000.0, 116.88000000000001], [1439766144.0, 55960000.0, 116.92], [1439767872.0, 55980000.0, 116.96], [1439769600.0, 56000000.0, 117.0], [1439771328.0, 56020000.0, 117.04], [1439773056.0, 56040000.0, 117.08], [1439774784.0, 56060000.0, 117.12], [1439776512.0, 56080000.0, 117.16], [1439778240.0, 56100000.0, 117.2], [1439779968.0, 56120000.0, 117.24000000000001], [1439781696.0, 56140000.0, 117.28], [1439783424.0, 56160000.0, 117.32], [1439785152.0, 56180000.0, 117.36000000000001], [1439786880.0, 56200000.0, 117.4], [1439788608.0, 56220000.0, 117.44], [1439790336.0, 56240000.0, 117.47999999999999], [1439792064.0, 56260000.0, 117.52000000000001], [1439793792.0, 56280000.0, 117.56], [1439795520.0, 56300000.0, 117.6], [1439797248.0, 56320000.0, 117.63999999999999], [1439798976.0, 56340000.0, 117.68], [1439800704.0, 56360000.0, 117.72], [1439802432.0, 56380000.0, 117.75999999999999], [1439804160.0, 56400000.0, 117.8], [1439805888.0, 56420000.0, 117.84], [1439807616.0, 56440000.0, 117.88], [1439809344.0, 56460000.0, 117.92], [1439811072.0, 56480000.0, 117.96], [1439812800.0, 56500000.0, 118.0], [1439814528.0, 56520000.0, 118.04], [1439816256.0, 56540000.0, 118.08], [1439817984.0, 56560000.0, 118.11999999999999], [1439819712.0, 56580000.0, 118.16000000000001], [1439821440.0, 56600000.0, 118.2], [1439823168.0, 56620000.0, 118.24], [1439824896.0, 56640000.0, 118.28], [1439826624.0, 56660000.0, 118.32000000000001], [1439828352.0, 56680000.0, 118.36], [1439830080.0, 56700000.0, 118.4], [1439831808.0, 56720000.0, 118.44], [1439833536.0, 56740000.0, 118.48], [1439835264.0, 56760000.0, 118.52000000000001], [1439836992.0, 56780000.0, 118.56], [1439838720.0, 56800000.0, 118.6], [1439840448.0, 56820000.0, 118.64000000000001], [1439842176.0, 56840000.0, 118.68], [1439843904.0, 56860000.0, 118.72], [1439845632.0, 56880000.0, 118.75999999999999], [1439847360.0, 56900000.0, 118.80000000000001], [1439849088.0, 56920000.0, 118.84], [1439850816.0, 56940000.0, 118.88], [1439852544.0, 56960000.0, 118.91999999999999], [1439854272.0, 56980000.0, 118.96000000000001], [1439856000.0, 57000000.0, 119.0], [1439857728.0, 57020000.0, 119.03999999999999], [1439859456.0, 57040000.0, 119.08], [1439861184.0, 57060000.0, 119.12], [1439862912.0, 57080000.0, 119.16], [1439864640.0, 57100000.0, 119.2], [1439866368.0, 57120000.0, 119.24], [1439868096.0, 57140000.0, 119.28], [1439869824.0, 57160000.0, 119.32000000000001], [1439871552.0, 57180000.0, 119.36], [1439873280.0, 57200000.0, 119.39999999999999], [1439875008.0, 57220000.0, 119.44000000000001], [1439876736.0, 57240000.0, 119.48], [1439878464.0, 57260000.0, 119.52], [1439880192.0, 57280000.0, 119.56], [1439881920.0, 57300000.0, 119.60000000000001], [1439883648.0, 57320000.0, 119.64], [1439885376.0, 57340000.0, 119.68], [1439887104.0, 57360000.0, 119.72], [1439888832.0, 57380000.0, 119.76], [1439890560.0, 57400000.0, 119.80000000000001], [1439892288.0, 57420000.0, 119.84], [1439894016.0, 57440000.0, 119.88], [1439895744.0, 57460000.0, 119.92000000000002], [1439897472.0, 57480000.0, 119.96000000000001], [1439899200.0, 57500000.0, 120.0], [1439900928.0, 57520000.0, 120.03999999999999], [1439902656.0, 57540000.0, 120.07999999999998], [1439904384.0, 57560000.0, 120.12], [1439906112.0, 57580000.0, 120.16], [1439907840.0, 57600000.0, 120.19999999999999], [1439909568.0, 57620000.0, 120.24], [1439911296.0, 57640000.0, 120.28], [1439913024.0, 57660000.0, 120.32], [1439914752.0, 57680000.0, 120.36], [1439916480.0, 57700000.0, 120.39999999999999], [1439918208.0, 57720000.0, 120.44], [1439919936.0, 57740000.0, 120.48], [1439921664.0, 57760000.0, 120.52], [1439923392.0, 57780000.0, 120.55999999999999], [1439925120.0, 57800000.0, 120.60000000000001], [1439926848.0, 57820000.0, 120.64], [1439928576.0, 57840000.0, 120.67999999999999], [1439930304.0, 57860000.0, 120.72], [1439932032.0, 57880000.0, 120.76], [1439933760.0, 57900000.0, 120.8], [1439935488.0, 57920000.0, 120.84], [1439937216.0, 57940000.0, 120.88], [1439938944.0, 57960000.0, 120.92], [1439940672.0, 57980000.0, 120.96000000000001], [1439942400.0, 58000000.0, 121.0], [1439944128.0, 58020000.0, 121.03999999999999], [1439945856.0, 58040000.0, 121.08000000000001], [1439947584.0, 58060000.0, 121.12], [1439949312.0, 58080000.0, 121.16], [1439951040.0, 58100000.0, 121.19999999999999], [1439952768.0, 58120000.0, 121.24000000000001], [1439954496.0, 58140000.0, 121.28], [1439956224.0, 58160000.0, 121.32], [1439957952.0, 58180000.0, 121.35999999999999], [1439959680.0, 58200000.0, 121.4], [1439961408.0, 58220000.0, 121.44], [1439963136.0, 58240000.0, 121.47999999999999], [1439964864.0, 58260000.0, 121.52], [1439966592.0, 58280000.0, 121.56], [1439968320.0, 58300000.0, 121.6], [1439970048.0, 58320000.0, 121.64], [1439971776.0, 58340000.0, 121.67999999999999], [1439973504.0, 58360000.0, 121.72], [1439975232.0, 58380000.0, 121.76], [1439976960.0, 58400000.0, 121.8], [1439978688.0, 58420000.0, 121.83999999999999], [1439980416.0, 58440000.0, 121.88000000000001], [1439982144.0, 58460000.0, 121.92], [1439983872.0, 58480000.0, 121.96], [1439985600.0, 58500000.0, 122.0], [1439987328.0, 58520000.0, 122.04], [1439989056.0, 58540000.0, 122.08], [1439990784.0, 58560000.0, 122.12], [1439992512.0, 58580000.0, 122.16], [1439994240.0, 58600000.0, 122.2], [1439995968.0, 58620000.0, 122.24000000000001], [1439997696.0, 58640000.0, 122.28], [1439999424.0, 58660000.0, 122.32], [1440001152.0, 58680000.0, 122.36000000000001], [1440002880.0, 58700000.0, 122.4], [1440004608.0, 58720000.0, 122.44], [1440006336.0, 58740000.0, 122.47999999999999], [1440008064.0, 58760000.0, 122.52000000000001], [1440009792.0, 58780000.0, 122.56], [1440011520.0, 58800000.0, 122.6], [1440013248.0, 58820000.0, 122.63999999999999], [1440014976.0, 58840000.0, 122.68], [1440016704.0, 58860000.0, 122.72], [1440018432.0, 58880000.0, 122.75999999999999], [1440020160.0, 58900000.0, 122.8], [1440021888.0, 58920000.0, 122.84], [1440023616.0, 58940000.0, 122.88], [1440025344.0, 58960000.0, 122.92], [1440027072.0, 58980000.0, 122.96], [1440028800.0, 59000000.0, 123.0], [1440030528.0, 59020000.0, 123.04], [1440032256.0, 59040000.0, 123.08], [1440033984.0, 59060000.0, 123.11999999999999], [1440035712.0, 59080000.0, 123.16000000000001], [1440037440.0, 59100000.0, 123.2], [1440039168.0, 59120000.0, 123.24], [1440040896.0, 59140000.0, 123.28], [1440042624.0, 59160000.0, 123.32000000000001], [1440044352.0, 59180000.0, 123.36], [1440046080.0, 59200000.0, 123.4], [1440047808.0, 59220000.0, 123.44], [1440049536.0, 59240000.0, 123.48], [1440051264.0, 59260000.0, 123.52000000000001], [1440052992.0, 59280000.0, 123.56], [1440054720.0, 59300000.0, 123.6], [1440056448.0, 59320000.0, 123.64000000000001], [1440058176.0, 59340000.0, 123.68], [1440059904.0, 59360000.0, 123.72], [1440061632.0, 59380000.0, 123.75999999999999], [1440063360.0, 59400000.0, 123.80000000000001], [1440065088.0, 59420000.0, 123.84], [1440066816.0, 59440000.0, 123.88], [1440068544.0, 59460000.0, 123.91999999999999], [1440070272.0, 59480000.0, 123.96000000000001], [1440072000.0, 59500000.0, 124.0], [1440073728.0, 59520000.0, 124.03999999999999], [1440075456.0, 59540000.0, 124.08], [1440077184.0, 59560000.0, 124.12], [1440078912.0, 59580000.0, 124.16], [1440080640.0, 59600000.0, 124.2], [1440082368.0, 59620000.0, 124.24], [1440084096.0, 59640000.0, 124.28], [1440085824.0, 59660000.0, 124.32000000000001], [1440087552.0, 59680000.0, 124.36], [1440089280.0, 59700000.0, 124.39999999999999], [1440091008.0, 59720000.0, 124.44000000000001], [1440092736.0, 59740000.0, 124.48], [1440094464.0, 59760000.0, 124.52], [1440096192.0, 59780000.0, 124.56], [1440097920.0, 59800000.0, 124.60000000000001], [1440099648.0, 59820000.0, 124.64], [1440101376.0, 59840000.0, 124.68], [1440103104.0, 59860000.0, 124.72], [1440104832.0, 59880000.0, 124.76], [1440106560.0, 59900000.0, 124.80000000000001], [1440108288.0, 59920000.0, 124.84], [1440110016.0, 59940000.0, 124.88], [1440111744.0, 59960000.0, 124.92000000000002], [1440113472.0, 59980000.0, 124.96000000000001], [1440115200.0, 60000000.0, 125.0], [1440116928.0, 60020000.0, 125.03999999999999], [1440118656.0, 60040000.0, 125.07999999999998], [1440120384.0, 60060000.0, 125.12], [1440122112.0, 60080000.0, 125.16], [1440123840.0, 60100000.0, 125.19999999999999], [1440125568.0, 60120000.0, 125.24], [1440127296.0, 60140000.0, 125.28], [1440129024.0, 60160000.0, 125.32], [1440130752.0, 60180000.0, 125.36], [1440132480.0, 60200000.0, 125.39999999999999], [1440134208.0, 60220000.0, 125.44], [1440135936.0, 60240000.0, 125.48], [1440137664.0, 60260000.0, 125.52], [1440139392.0, 60280000.0, 125.55999999999999], [1440141120.0, 60300000.0, 125.60000000000001], [1440142848.0, 60320000.0, 125.64], [1440144576.0, 60340000.0, 125.67999999999999], [1440146304.0, 60360000.0, 125.72], [1440148032.0, 60380000.0, 125.76], [1440149760.0, 60400000.0, 125.8], [1440151488.0, 60420000.0, 125.84], [1440153216.0, 60440000.0, 125.88], [1440154944.0, 60460000.0, 125.92], [1440156672.0, 60480000.0, 125.96000000000001], [1440158400.0, 60500000.0, 126.0], [1440160128.0, 60520000.0, 126.03999999999999], [1440161856.0, 60540000.0, 126.08000000000001], [1440163584.0, 60560000.0, 126.12], [1440165312.0, 60580000.0, 126.16], [1440167040.0, 60600000.0, 126.19999999999999], [1440168768.0, 60620000.0, 126.24000000000001], [1440170496.0, 60640000.0, 126.28], [1440172224.0, 60660000.0, 126.32], [1440173952.0, 60680000.0, 126.35999999999999], [1440175680.0, 60700000.0, 126.4], [1440177408.0, 60720000.0, 126.44], [1440179136.0, 60740000.0, 126.47999999999999], [1440180864.0, 60760000.0, 126.52], [1440182592.0, 60780000.0, 126.56], [1440184320.0, 60800000.0, 126.6], [1440186048.0, 60820000.0, 126.64], [1440187776.0, 60840000.0, 126.67999999999999], [1440189504.0, 60860000.0, 126.72], [1440191232.0, 60880000.0, 126.76], [1440192960.0, 60900000.0, 126.8], [1440194688.0, 60920000.0, 126.83999999999999], [1440196416.0, 60940000.0, 126.88000000000001], [1440198144.0, 60960000.0, 126.92], [1440199872.0, 60980000.0, 126.96], [1440201600.0, 61000000.0, 127.0], [1440203328.0, 61020000.0, 127.04], [1440205056.0, 61040000.0, 127.08], [1440206784.0, 61060000.0, 127.12], [1440208512.0, 61080000.0, 127.16], [1440210240.0, 61100000.0, 127.2], [1440211968.0, 61120000.0, 127.24000000000001], [1440213696.0, 61140000.0, 127.28], [1440215424.0, 61160000.0, 127.32], [1440217152.0, 61180000.0, 127.36000000000001], [1440218880.0, 61200000.0, 127.4], [1440220608.0, 61220000.0, 127.44], [1440222336.0, 61240000.0, 127.47999999999999], [1440224064.0, 61260000.0, 127.52000000000001], [1440225792.0, 61280000.0, 127.56], [1440227520.0, 61300000.0, 127.6], [1440229248.0, 61320000.0, 127.63999999999999], [1440230976.0, 61340000.0, 127.68], [1440232704.0, 61360000.0, 127.72], [1440234432.0, 61380000.0, 127.75999999999999], [1440236160.0, 61400000.0, 127.8], [1440237888.0, 61420000.0, 127.84], [1440239616.0, 61440000.0, 127.88], [1440241344.0, 61460000.0, 127.92], [1440243072.0, 61480000.0, 127.96], [1440244800.0, 61500000.0, 128.0], [1440246528.0, 61520000.0, 128.04000000000002], [1440248256.0, 61540000.0, 128.07999999999998], [1440249984.0, 61560000.0, 128.12], [1440251712.0, 61580000.0, 128.16000000000003], [1440253440.0, 61600000.0, 128.2], [1440255168.0, 61620000.0, 128.24], [1440256896.0, 61640000.0, 128.28], [1440258624.0, 61660000.0, 128.32], [1440260352.0, 61680000.0, 128.36], [1440262080.0, 61700000.0, 128.4], [1440263808.0, 61720000.0, 128.44], [1440265536.0, 61740000.0, 128.48000000000002], [1440267264.0, 61760000.0, 128.52], [1440268992.0, 61780000.0, 128.56], [1440270720.0, 61800000.0, 128.6], [1440272448.0, 61820000.0, 128.64000000000001], [1440274176.0, 61840000.0, 128.68], [1440275904.0, 61860000.0, 128.72], [1440277632.0, 61880000.0, 128.76], [1440279360.0, 61900000.0, 128.8], [1440281088.0, 61920000.0, 128.84], [1440282816.0, 61940000.0, 128.88], [1440284544.0, 61960000.0, 128.92], [1440286272.0, 61980000.0, 128.96], [1440288000.0, 62000000.0, 129.0], [1440289728.0, 62020000.0, 129.04], [1440291456.0, 62040000.0, 129.07999999999998], [1440293184.0, 62060000.0, 129.12], [1440294912.0, 62080000.0, 129.16], [1440296640.0, 62100000.0, 129.2], [1440298368.0, 62120000.0, 129.24], [1440300096.0, 62140000.0, 129.28], [1440301824.0, 62160000.0, 129.32], [1440303552.0, 62180000.0, 129.36], [1440305280.0, 62200000.0, 129.39999999999998], [1440307008.0, 62220000.0, 129.44], [1440308736.0, 62240000.0, 129.48000000000002], [1440310464.0, 62260000.0, 129.51999999999998], [1440312192.0, 62280000.0, 129.56], [1440313920.0, 62300000.0, 129.60000000000002], [1440315648.0, 62320000.0, 129.64], [1440317376.0, 62340000.0, 129.68], [1440319104.0, 62360000.0, 129.72], [1440320832.0, 62380000.0, 129.76], [1440322560.0, 62400000.0, 129.8], [1440324288.0, 62420000.0, 129.84], [1440326016.0, 62440000.0, 129.88], [1440327744.0, 62460000.0, 129.92000000000002], [1440329472.0, 62480000.0, 129.96], [1440331200.0, 62500000.0, 130.0], [1440332928.0, 62520000.0, 130.04], [1440334656.0, 62540000.0, 130.07999999999998], [1440336384.0, 62560000.0, 130.12], [1440338112.0, 62580000.0, 130.16], [1440339840.0, 62600000.0, 130.2], [1440341568.0, 62620000.0, 130.24], [1440343296.0, 62640000.0, 130.28], [1440345024.0, 62660000.0, 130.32], [1440346752.0, 62680000.0, 130.36], [1440348480.0, 62700000.0, 130.39999999999998], [1440350208.0, 62720000.0, 130.44], [1440351936.0, 62740000.0, 130.48000000000002], [1440353664.0, 62760000.0, 130.51999999999998], [1440355392.0, 62780000.0, 130.56], [1440357120.0, 62800000.0, 130.60000000000002], [1440358848.0, 62820000.0, 130.64], [1440360576.0, 62840000.0, 130.68], [1440362304.0, 62860000.0, 130.72], [1440364032.0, 62880000.0, 130.76], [1440365760.0, 62900000.0, 130.8], [1440367488.0, 62920000.0, 130.84], [1440369216.0, 62940000.0, 130.88], [1440370944.0, 62960000.0, 130.92000000000002], [1440372672.0, 62980000.0, 130.96], [1440374400.0, 63000000.0, 131.0], [1440376128.0, 63020000.0, 131.04], [1440377856.0, 63040000.0, 131.08], [1440379584.0, 63060000.0, 131.12], [1440381312.0, 63080000.0, 131.16], [1440383040.0, 63100000.0, 131.2], [1440384768.0, 63120000.0, 131.24], [1440386496.0, 63140000.0, 131.28], [1440388224.0, 63160000.0, 131.32], [1440389952.0, 63180000.0, 131.35999999999999], [1440391680.0, 63200000.0, 131.4], [1440393408.0, 63220000.0, 131.44], [1440395136.0, 63240000.0, 131.48], [1440396864.0, 63260000.0, 131.51999999999998], [1440398592.0, 63280000.0, 131.56], [1440400320.0, 63300000.0, 131.6], [1440402048.0, 63320000.0, 131.64], [1440403776.0, 63340000.0, 131.68], [1440405504.0, 63360000.0, 131.72], [1440407232.0, 63380000.0, 131.76], [1440408960.0, 63400000.0, 131.8], [1440410688.0, 63420000.0, 131.83999999999997], [1440412416.0, 63440000.0, 131.88], [1440414144.0, 63460000.0, 131.92000000000002], [1440415872.0, 63480000.0, 131.95999999999998], [1440417600.0, 63500000.0, 132.0], [1440419328.0, 63520000.0, 132.04000000000002], [1440421056.0, 63540000.0, 132.07999999999998], [1440422784.0, 63560000.0, 132.12], [1440424512.0, 63580000.0, 132.16], [1440426240.0, 63600000.0, 132.2], [1440427968.0, 63620000.0, 132.24], [1440429696.0, 63640000.0, 132.28], [1440431424.0, 63660000.0, 132.32], [1440433152.0, 63680000.0, 132.36], [1440434880.0, 63700000.0, 132.4], [1440436608.0, 63720000.0, 132.44], [1440438336.0, 63740000.0, 132.48], [1440440064.0, 63760000.0, 132.52], [1440441792.0, 63780000.0, 132.56], [1440443520.0, 63800000.0, 132.6], [1440445248.0, 63820000.0, 132.64], [1440446976.0, 63840000.0, 132.68], [1440448704.0, 63860000.0, 132.72], [1440450432.0, 63880000.0, 132.76], [1440452160.0, 63900000.0, 132.8], [1440453888.0, 63920000.0, 132.84], [1440455616.0, 63940000.0, 132.88], [1440457344.0, 63960000.0, 132.92000000000002], [1440459072.0, 63980000.0, 132.95999999999998], [1440460800.0, 64000000.0, 133.0], [1440462528.0, 64020000.0, 133.04], [1440464256.0, 64040000.0, 133.07999999999998], [1440465984.0, 64060000.0, 133.12], [1440467712.0, 64080000.0, 133.16], [1440469440.0, 64100000.0, 133.2], [1440471168.0, 64120000.0, 133.24], [1440472896.0, 64140000.0, 133.28], [1440474624.0, 64160000.0, 133.32], [1440476352.0, 64180000.0, 133.36], [1440478080.0, 64200000.0, 133.4], [1440479808.0, 64220000.0, 133.44], [1440481536.0, 64240000.0, 133.48000000000002], [1440483264.0, 64260000.0, 133.52], [1440484992.0, 64280000.0, 133.56], [1440486720.0, 64300000.0, 133.6], [1440488448.0, 64320000.0, 133.64000000000001], [1440490176.0, 64340000.0, 133.68], [1440491904.0, 64360000.0, 133.72], [1440493632.0, 64380000.0, 133.76], [1440495360.0, 64400000.0, 133.8], [1440497088.0, 64420000.0, 133.84], [1440498816.0, 64440000.0, 133.88], [1440500544.0, 64460000.0, 133.92], [1440502272.0, 64480000.0, 133.96], [1440504000.0, 64500000.0, 134.0], [1440505728.0, 64520000.0, 134.04], [1440507456.0, 64540000.0, 134.07999999999998], [1440509184.0, 64560000.0, 134.12], [1440510912.0, 64580000.0, 134.16], [1440512640.0, 64600000.0, 134.2], [1440514368.0, 64620000.0, 134.24], [1440516096.0, 64640000.0, 134.28], [1440517824.0, 64660000.0, 134.32], [1440519552.0, 64680000.0, 134.36], [1440521280.0, 64700000.0, 134.4], [1440523008.0, 64720000.0, 134.44], [1440524736.0, 64740000.0, 134.48000000000002], [1440526464.0, 64760000.0, 134.52], [1440528192.0, 64780000.0, 134.56], [1440529920.0, 64800000.0, 134.60000000000002], [1440531648.0, 64820000.0, 134.64000000000001], [1440533376.0, 64840000.0, 134.68], [1440535104.0, 64860000.0, 134.72], [1440536832.0, 64880000.0, 134.76000000000002], [1440538560.0, 64900000.0, 134.8], [1440540288.0, 64920000.0, 134.84], [1440542016.0, 64940000.0, 134.88], [1440543744.0, 64960000.0, 134.92000000000002], [1440545472.0, 64980000.0, 134.96], [1440547200.0, 65000000.0, 135.0], [1440548928.0, 65020000.0, 135.04], [1440550656.0, 65040000.0, 135.07999999999998], [1440552384.0, 65060000.0, 135.12], [1440554112.0, 65080000.0, 135.16], [1440555840.0, 65100000.0, 135.2], [1440557568.0, 65120000.0, 135.23999999999998], [1440559296.0, 65140000.0, 135.28], [1440561024.0, 65160000.0, 135.32], [1440562752.0, 65180000.0, 135.35999999999999], [1440564480.0, 65200000.0, 135.39999999999998], [1440566208.0, 65220000.0, 135.44], [1440567936.0, 65240000.0, 135.48], [1440569664.0, 65260000.0, 135.51999999999998], [1440571392.0, 65280000.0, 135.56], [1440573120.0, 65300000.0, 135.6], [1440574848.0, 65320000.0, 135.64], [1440576576.0, 65340000.0, 135.68], [1440578304.0, 65360000.0, 135.72], [1440580032.0, 65380000.0, 135.76], [1440581760.0, 65400000.0, 135.8], [1440583488.0, 65420000.0, 135.84], [1440585216.0, 65440000.0, 135.88], [1440586944.0, 65460000.0, 135.92000000000002], [1440588672.0, 65480000.0, 135.96], [1440590400.0, 65500000.0, 136.0], [1440592128.0, 65520000.0, 136.04], [1440593856.0, 65540000.0, 136.08], [1440595584.0, 65560000.0, 136.12], [1440597312.0, 65580000.0, 136.16], [1440599040.0, 65600000.0, 136.2], [1440600768.0, 65620000.0, 136.24], [1440602496.0, 65640000.0, 136.28], [1440604224.0, 65660000.0, 136.32], [1440605952.0, 65680000.0, 136.35999999999999], [1440607680.0, 65700000.0, 136.4], [1440609408.0, 65720000.0, 136.44], [1440611136.0, 65740000.0, 136.48], [1440612864.0, 65760000.0, 136.51999999999998], [1440614592.0, 65780000.0, 136.56], [1440616320.0, 65800000.0, 136.6], [1440618048.0, 65820000.0, 136.64], [1440619776.0, 65840000.0, 136.68], [1440621504.0, 65860000.0, 136.72], [1440623232.0, 65880000.0, 136.76], [1440624960.0, 65900000.0, 136.8], [1440626688.0, 65920000.0, 136.84], [1440628416.0, 65940000.0, 136.88], [1440630144.0, 65960000.0, 136.92000000000002], [1440631872.0, 65980000.0, 136.96], [1440633600.0, 66000000.0, 137.0], [1440635328.0, 66020000.0, 137.04000000000002], [1440637056.0, 66040000.0, 137.08], [1440638784.0, 66060000.0, 137.12], [1440640512.0, 66080000.0, 137.16], [1440642240.0, 66100000.0, 137.20000000000002], [1440643968.0, 66120000.0, 137.24], [1440645696.0, 66140000.0, 137.28], [1440647424.0, 66160000.0, 137.32], [1440649152.0, 66180000.0, 137.36], [1440650880.0, 66200000.0, 137.4], [1440652608.0, 66220000.0, 137.44], [1440654336.0, 66240000.0, 137.48], [1440656064.0, 66260000.0, 137.52], [1440657792.0, 66280000.0, 137.56], [1440659520.0, 66300000.0, 137.6], [1440661248.0, 66320000.0, 137.64], [1440662976.0, 66340000.0, 137.68], [1440664704.0, 66360000.0, 137.72], [1440666432.0, 66380000.0, 137.76], [1440668160.0, 66400000.0, 137.79999999999998], [1440669888.0, 66420000.0, 137.84], [1440671616.0, 66440000.0, 137.88], [1440673344.0, 66460000.0, 137.92], [1440675072.0, 66480000.0, 137.95999999999998], [1440676800.0, 66500000.0, 138.0], [1440678528.0, 66520000.0, 138.04], [1440680256.0, 66540000.0, 138.07999999999998], [1440681984.0, 66560000.0, 138.12], [1440683712.0, 66580000.0, 138.16], [1440685440.0, 66600000.0, 138.2], [1440687168.0, 66620000.0, 138.24], [1440688896.0, 66640000.0, 138.28], [1440690624.0, 66660000.0, 138.32], [1440692352.0, 66680000.0, 138.36], [1440694080.0, 66700000.0, 138.4], [1440695808.0, 66720000.0, 138.44], [1440697536.0, 66740000.0, 138.48000000000002], [1440699264.0, 66760000.0, 138.52], [1440700992.0, 66780000.0, 138.56], [1440702720.0, 66800000.0, 138.6], [1440704448.0, 66820000.0, 138.64000000000001], [1440706176.0, 66840000.0, 138.68], [1440707904.0, 66860000.0, 138.72], [1440709632.0, 66880000.0, 138.76], [1440711360.0, 66900000.0, 138.8], [1440713088.0, 66920000.0, 138.84], [1440714816.0, 66940000.0, 138.88], [1440716544.0, 66960000.0, 138.92], [1440718272.0, 66980000.0, 138.96], [1440720000.0, 67000000.0, 139.0], [1440721728.0, 67020000.0, 139.04], [1440723456.0, 67040000.0, 139.07999999999998], [1440725184.0, 67060000.0, 139.12], [1440726912.0, 67080000.0, 139.16], [1440728640.0, 67100000.0, 139.2], [1440730368.0, 67120000.0, 139.24], [1440732096.0, 67140000.0, 139.28], [1440733824.0, 67160000.0, 139.32], [1440735552.0, 67180000.0, 139.36], [1440737280.0, 67200000.0, 139.4], [1440739008.0, 67220000.0, 139.44], [1440740736.0, 67240000.0, 139.48000000000002], [1440742464.0, 67260000.0, 139.52], [1440744192.0, 67280000.0, 139.56], [1440745920.0, 67300000.0, 139.60000000000002], [1440747648.0, 67320000.0, 139.64000000000001], [1440749376.0, 67340000.0, 139.68], [1440751104.0, 67360000.0, 139.72], [1440752832.0, 67380000.0, 139.76000000000002], [1440754560.0, 67400000.0, 139.8], [1440756288.0, 67420000.0, 139.84], [1440758016.0, 67440000.0, 139.88], [1440759744.0, 67460000.0, 139.92000000000002], [1440761472.0, 67480000.0, 139.96], [1440763200.0, 67500000.0, 140.0], [1440764928.0, 67520000.0, 140.04], [1440766656.0, 67540000.0, 140.07999999999998], [1440768384.0, 67560000.0, 140.12], [1440770112.0, 67580000.0, 140.16], [1440771840.0, 67600000.0, 140.2], [1440773568.0, 67620000.0, 140.23999999999998], [1440775296.0, 67640000.0, 140.28], [1440777024.0, 67660000.0, 140.32], [1440778752.0, 67680000.0, 140.35999999999999], [1440780480.0, 67700000.0, 140.39999999999998], [1440782208.0, 67720000.0, 140.44], [1440783936.0, 67740000.0, 140.48], [1440785664.0, 67760000.0, 140.51999999999998], [1440787392.0, 67780000.0, 140.56], [1440789120.0, 67800000.0, 140.6], [1440790848.0, 67820000.0, 140.64], [1440792576.0, 67840000.0, 140.68], [1440794304.0, 67860000.0, 140.72], [1440796032.0, 67880000.0, 140.76], [1440797760.0, 67900000.0, 140.8], [1440799488.0, 67920000.0, 140.84], [1440801216.0, 67940000.0, 140.88], [1440802944.0, 67960000.0, 140.92000000000002], [1440804672.0, 67980000.0, 140.96], [1440806400.0, 68000000.0, 141.0], [1440808128.0, 68020000.0, 141.04], [1440809856.0, 68040000.0, 141.08], [1440811584.0, 68060000.0, 141.12], [1440813312.0, 68080000.0, 141.16], [1440815040.0, 68100000.0, 141.2], [1440816768.0, 68120000.0, 141.24], [1440818496.0, 68140000.0, 141.28], [1440820224.0, 68160000.0, 141.32], [1440821952.0, 68180000.0, 141.35999999999999], [1440823680.0, 68200000.0, 141.4], [1440825408.0, 68220000.0, 141.44], [1440827136.0, 68240000.0, 141.48], [1440828864.0, 68260000.0, 141.51999999999998], [1440830592.0, 68280000.0, 141.56], [1440832320.0, 68300000.0, 141.6], [1440834048.0, 68320000.0, 141.64], [1440835776.0, 68340000.0, 141.68], [1440837504.0, 68360000.0, 141.72], [1440839232.0, 68380000.0, 141.76], [1440840960.0, 68400000.0, 141.8], [1440842688.0, 68420000.0, 141.84], [1440844416.0, 68440000.0, 141.88], [1440846144.0, 68460000.0, 141.92000000000002], [1440847872.0, 68480000.0, 141.96], [1440849600.0, 68500000.0, 142.0], [1440851328.0, 68520000.0, 142.04000000000002], [1440853056.0, 68540000.0, 142.08], [1440854784.0, 68560000.0, 142.12], [1440856512.0, 68580000.0, 142.16], [1440858240.0, 68600000.0, 142.20000000000002], [1440859968.0, 68620000.0, 142.24], [1440861696.0, 68640000.0, 142.28], [1440863424.0, 68660000.0, 142.32], [1440865152.0, 68680000.0, 142.36], [1440866880.0, 68700000.0, 142.4], [1440868608.0, 68720000.0, 142.44], [1440870336.0, 68740000.0, 142.48], [1440872064.0, 68760000.0, 142.52], [1440873792.0, 68780000.0, 142.56], [1440875520.0, 68800000.0, 142.6], [1440877248.0, 68820000.0, 142.64], [1440878976.0, 68840000.0, 142.68], [1440880704.0, 68860000.0, 142.72], [1440882432.0, 68880000.0, 142.76], [1440884160.0, 68900000.0, 142.79999999999998], [1440885888.0, 68920000.0, 142.84], [1440887616.0, 68940000.0, 142.88], [1440889344.0, 68960000.0, 142.92], [1440891072.0, 68980000.0, 142.95999999999998], [1440892800.0, 69000000.0, 143.0], [1440894528.0, 69020000.0, 143.04], [1440896256.0, 69040000.0, 143.07999999999998], [1440897984.0, 69060000.0, 143.12], [1440899712.0, 69080000.0, 143.16], [1440901440.0, 69100000.0, 143.2], [1440903168.0, 69120000.0, 143.24], [1440904896.0, 69140000.0, 143.28], [1440906624.0, 69160000.0, 143.32], [1440908352.0, 69180000.0, 143.36], [1440910080.0, 69200000.0, 143.4], [1440911808.0, 69220000.0, 143.44], [1440913536.0, 69240000.0, 143.48000000000002], [1440915264.0, 69260000.0, 143.52], [1440916992.0, 69280000.0, 143.56], [1440918720.0, 69300000.0, 143.6], [1440920448.0, 69320000.0, 143.64000000000001], [1440922176.0, 69340000.0, 143.68], [1440923904.0, 69360000.0, 143.72], [1440925632.0, 69380000.0, 143.76], [1440927360.0, 69400000.0, 143.8], [1440929088.0, 69420000.0, 143.84], [1440930816.0, 69440000.0, 143.88], [1440932544.0, 69460000.0, 143.92], [1440934272.0, 69480000.0, 143.96], [1440936000.0, 69500000.0, 144.0], [1440937728.0, 69520000.0, 144.04], [1440939456.0, 69540000.0, 144.07999999999998], [1440941184.0, 69560000.0, 144.12], [1440942912.0, 69580000.0, 144.16], [1440944640.0, 69600000.0, 144.2], [1440946368.0, 69620000.0, 144.24], [1440948096.0, 69640000.0, 144.28], [1440949824.0, 69660000.0, 144.32], [1440951552.0, 69680000.0, 144.36], [1440953280.0, 69700000.0, 144.4], [1440955008.0, 69720000.0, 144.44], [1440956736.0, 69740000.0, 144.48000000000002], [1440958464.0, 69760000.0, 144.52], [1440960192.0, 69780000.0, 144.56], [1440961920.0, 69800000.0, 144.60000000000002], [1440963648.0, 69820000.0, 144.64000000000001], [1440965376.0, 69840000.0, 144.68], [1440967104.0, 69860000.0, 144.72], [1440968832.0, 69880000.0, 144.76000000000002], [1440970560.0, 69900000.0, 144.8], [1440972288.0, 69920000.0, 144.84], [1440974016.0, 69940000.0, 144.88], [1440975744.0, 69960000.0, 144.92000000000002], [1440977472.0, 69980000.0, 144.96], [1440979200.0, 70000000.0, 145.0], [1440980928.0, 70020000.0, 145.04], [1440982656.0, 70040000.0, 145.07999999999998], [1440984384.0, 70060000.0, 145.12], [1440986112.0, 70080000.0, 145.16], [1440987840.0, 70100000.0, 145.2], [1440989568.0, 70120000.0, 145.23999999999998], [1440991296.0, 70140000.0, 145.28], [1440993024.0, 70160000.0, 145.32], [1440994752.0, 70180000.0, 145.35999999999999], [1440996480.0, 70200000.0, 145.39999999999998], [1440998208.0, 70220000.0, 145.44], [1440999936.0, 70240000.0, 145.48], [1441001664.0, 70260000.0, 145.51999999999998], [1441003392.0, 70280000.0, 145.56], [1441005120.0, 70300000.0, 145.6], [1441006848.0, 70320000.0, 145.64], [1441008576.0, 70340000.0, 145.68], [1441010304.0, 70360000.0, 145.72], [1441012032.0, 70380000.0, 145.76], [1441013760.0, 70400000.0, 145.8], [1441015488.0, 70420000.0, 145.84], [1441017216.0, 70440000.0, 145.88], [1441018944.0, 70460000.0, 145.92000000000002], [1441020672.0, 70480000.0, 145.96], [1441022400.0, 70500000.0, 146.0], [1441024128.0, 70520000.0, 146.04], [1441025856.0, 70540000.0, 146.08], [1441027584.0, 70560000.0, 146.12], [1441029312.0, 70580000.0, 146.16], [1441031040.0, 70600000.0, 146.2], [1441032768.0, 70620000.0, 146.24], [1441034496.0, 70640000.0, 146.28], [1441036224.0, 70660000.0, 146.32], [1441037952.0, 70680000.0, 146.35999999999999], [1441039680.0, 70700000.0, 146.4], [1441041408.0, 70720000.0, 146.44], [1441043136.0, 70740000.0, 146.48], [1441044864.0, 70760000.0, 146.51999999999998], [1441046592.0, 70780000.0, 146.56], [1441048320.0, 70800000.0, 146.6], [1441050048.0, 70820000.0, 146.64], [1441051776.0, 70840000.0, 146.68], [1441053504.0, 70860000.0, 146.72], [1441055232.0, 70880000.0, 146.76], [1441056960.0, 70900000.0, 146.8], [1441058688.0, 70920000.0, 146.84], [1441060416.0, 70940000.0, 146.88], [1441062144.0, 70960000.0, 146.92000000000002], [1441063872.0, 70980000.0, 146.96], [1441065600.0, 71000000.0, 147.0], [1441067328.0, 71020000.0, 147.04000000000002], [1441069056.0, 71040000.0, 147.08], [1441070784.0, 71060000.0, 147.12], [1441072512.0, 71080000.0, 147.16], [1441074240.0, 71100000.0, 147.20000000000002], [1441075968.0, 71120000.0, 147.24], [1441077696.0, 71140000.0, 147.28], [1441079424.0, 71160000.0, 147.32], [1441081152.0, 71180000.0, 147.36], [1441082880.0, 71200000.0, 147.4], [1441084608.0, 71220000.0, 147.44], [1441086336.0, 71240000.0, 147.48], [1441088064.0, 71260000.0, 147.52], [1441089792.0, 71280000.0, 147.56], [1441091520.0, 71300000.0, 147.6], [1441093248.0, 71320000.0, 147.64], [1441094976.0, 71340000.0, 147.68], [1441096704.0, 71360000.0, 147.72], [1441098432.0, 71380000.0, 147.76], [1441100160.0, 71400000.0, 147.79999999999998], [1441101888.0, 71420000.0, 147.84], [1441103616.0, 71440000.0, 147.88], [1441105344.0, 71460000.0, 147.92], [1441107072.0, 71480000.0, 147.95999999999998], [1441108800.0, 71500000.0, 148.0], [1441110528.0, 71520000.0, 148.04], [1441112256.0, 71540000.0, 148.07999999999998], [1441113984.0, 71560000.0, 148.12], [1441115712.0, 71580000.0, 148.16], [1441117440.0, 71600000.0, 148.2], [1441119168.0, 71620000.0, 148.24], [1441120896.0, 71640000.0, 148.28], [1441122624.0, 71660000.0, 148.32], [1441124352.0, 71680000.0, 148.36], [1441126080.0, 71700000.0, 148.4], [1441127808.0, 71720000.0, 148.44], [1441129536.0, 71740000.0, 148.48000000000002], [1441131264.0, 71760000.0, 148.52], [1441132992.0, 71780000.0, 148.56], [1441134720.0, 71800000.0, 148.6], [1441136448.0, 71820000.0, 148.64000000000001], [1441138176.0, 71840000.0, 148.68], [1441139904.0, 71860000.0, 148.72], [1441141632.0, 71880000.0, 148.76], [1441143360.0, 71900000.0, 148.8], [1441145088.0, 71920000.0, 148.84], [1441146816.0, 71940000.0, 148.88], [1441148544.0, 71960000.0, 148.92], [1441150272.0, 71980000.0, 148.96], [1441152000.0, 72000000.0, 149.0], [1441153728.0, 72020000.0, 149.04], [1441155456.0, 72040000.0, 149.07999999999998], [1441157184.0, 72060000.0, 149.12], [1441158912.0, 72080000.0, 149.16], [1441160640.0, 72100000.0, 149.2], [1441162368.0, 72120000.0, 149.24], [1441164096.0, 72140000.0, 149.28], [1441165824.0, 72160000.0, 149.32], [1441167552.0, 72180000.0, 149.36], [1441169280.0, 72200000.0, 149.4], [1441171008.0, 72220000.0, 149.44], [1441172736.0, 72240000.0, 149.48000000000002], [1441174464.0, 72260000.0, 149.52], [1441176192.0, 72280000.0, 149.56], [1441177920.0, 72300000.0, 149.60000000000002], [1441179648.0, 72320000.0, 149.64000000000001], [1441181376.0, 72340000.0, 149.68], [1441183104.0, 72360000.0, 149.72], [1441184832.0, 72380000.0, 149.76000000000002], [1441186560.0, 72400000.0, 149.8], [1441188288.0, 72420000.0, 149.84], [1441190016.0, 72440000.0, 149.88], [1441191744.0, 72460000.0, 149.92000000000002], [1441193472.0, 72480000.0, 149.96], [1441195200.0, 72500000.0, 150.0], [1441196928.0, 72520000.0, 150.04], [1441198656.0, 72540000.0, 150.07999999999998], [1441200384.0, 72560000.0, 150.12], [1441202112.0, 72580000.0, 150.16], [1441203840.0, 72600000.0, 150.2], [1441205568.0, 72620000.0, 150.23999999999998], [1441207296.0, 72640000.0, 150.28], [1441209024.0, 72660000.0, 150.32], [1441210752.0, 72680000.0, 150.35999999999999], [1441212480.0, 72700000.0, 150.39999999999998], [1441214208.0, 72720000.0, 150.44], [1441215936.0, 72740000.0, 150.48], [1441217664.0, 72760000.0, 150.51999999999998], [1441219392.0, 72780000.0, 150.56], [1441221120.0, 72800000.0, 150.6], [1441222848.0, 72820000.0, 150.64], [1441224576.0, 72840000.0, 150.68], [1441226304.0, 72860000.0, 150.72], [1441228032.0, 72880000.0, 150.76], [1441229760.0, 72900000.0, 150.8], [1441231488.0, 72920000.0, 150.84], [1441233216.0, 72940000.0, 150.88], [1441234944.0, 72960000.0, 150.92000000000002], [1441236672.0, 72980000.0, 150.96], [1441238400.0, 73000000.0, 151.0], [1441240128.0, 73020000.0, 151.04], [1441241856.0, 73040000.0, 151.08], [1441243584.0, 73060000.0, 151.12], [1441245312.0, 73080000.0, 151.16], [1441247040.0, 73100000.0, 151.2], [1441248768.0, 73120000.0, 151.24], [1441250496.0, 73140000.0, 151.28], [1441252224.0, 73160000.0, 151.32], [1441253952.0, 73180000.0, 151.35999999999999], [1441255680.0, 73200000.0, 151.4], [1441257408.0, 73220000.0, 151.44], [1441259136.0, 73240000.0, 151.48], [1441260864.0, 73260000.0, 151.51999999999998], [1441262592.0, 73280000.0, 151.56], [1441264320.0, 73300000.0, 151.6], [1441266048.0, 73320000.0, 151.64], [1441267776.0, 73340000.0, 151.68], [1441269504.0, 73360000.0, 151.72], [1441271232.0, 73380000.0, 151.76], [1441272960.0, 73400000.0, 151.8], [1441274688.0, 73420000.0, 151.84], [1441276416.0, 73440000.0, 151.88], [1441278144.0, 73460000.0, 151.92000000000002], [1441279872.0, 73480000.0, 151.96], [1441281600.0, 73500000.0, 152.0], [1441283328.0, 73520000.0, 152.04000000000002], [1441285056.0, 73540000.0, 152.08], [1441286784.0, 73560000.0, 152.12], [1441288512.0, 73580000.0, 152.16], [1441290240.0, 73600000.0, 152.20000000000002], [1441291968.0, 73620000.0, 152.24], [1441293696.0, 73640000.0, 152.28], [1441295424.0, 73660000.0, 152.32], [1441297152.0, 73680000.0, 152.36], [1441298880.0, 73700000.0, 152.4], [1441300608.0, 73720000.0, 152.44], [1441302336.0, 73740000.0, 152.48], [1441304064.0, 73760000.0, 152.52], [1441305792.0, 73780000.0, 152.56], [1441307520.0, 73800000.0, 152.6], [1441309248.0, 73820000.0, 152.64], [1441310976.0, 73840000.0, 152.68], [1441312704.0, 73860000.0, 152.72], [1441314432.0, 73880000.0, 152.76], [1441316160.0, 73900000.0, 152.79999999999998], [1441317888.0, 73920000.0, 152.84], [1441319616.0, 73940000.0, 152.88], [1441321344.0, 73960000.0, 152.92], [1441323072.0, 73980000.0, 152.95999999999998], [1441324800.0, 74000000.0, 153.0], [1441326528.0, 74020000.0, 153.04], [1441328256.0, 74040000.0, 153.07999999999998], [1441329984.0, 74060000.0, 153.12], [1441331712.0, 74080000.0, 153.16], [1441333440.0, 74100000.0, 153.2], [1441335168.0, 74120000.0, 153.24], [1441336896.0, 74140000.0, 153.28], [1441338624.0, 74160000.0, 153.32], [1441340352.0, 74180000.0, 153.36], [1441342080.0, 74200000.0, 153.4], [1441343808.0, 74220000.0, 153.44], [1441345536.0, 74240000.0, 153.48000000000002], [1441347264.0, 74260000.0, 153.52], [1441348992.0, 74280000.0, 153.56], [1441350720.0, 74300000.0, 153.6], [1441352448.0, 74320000.0, 153.64000000000001], [1441354176.0, 74340000.0, 153.68], [1441355904.0, 74360000.0, 153.72], [1441357632.0, 74380000.0, 153.76], [1441359360.0, 74400000.0, 153.8], [1441361088.0, 74420000.0, 153.84], [1441362816.0, 74440000.0, 153.88], [1441364544.0, 74460000.0, 153.92], [1441366272.0, 74480000.0, 153.96], [1441368000.0, 74500000.0, 154.0], [1441369728.0, 74520000.0, 154.04], [1441371456.0, 74540000.0, 154.07999999999998], [1441373184.0, 74560000.0, 154.12], [1441374912.0, 74580000.0, 154.16], [1441376640.0, 74600000.0, 154.2], [1441378368.0, 74620000.0, 154.24], [1441380096.0, 74640000.0, 154.28], [1441381824.0, 74660000.0, 154.32], [1441383552.0, 74680000.0, 154.36], [1441385280.0, 74700000.0, 154.4], [1441387008.0, 74720000.0, 154.44], [1441388736.0, 74740000.0, 154.48000000000002], [1441390464.0, 74760000.0, 154.52], [1441392192.0, 74780000.0, 154.56], [1441393920.0, 74800000.0, 154.60000000000002], [1441395648.0, 74820000.0, 154.64000000000001], [1441397376.0, 74840000.0, 154.68], [1441399104.0, 74860000.0, 154.72], [1441400832.0, 74880000.0, 154.76000000000002], [1441402560.0, 74900000.0, 154.8], [1441404288.0, 74920000.0, 154.84], [1441406016.0, 74940000.0, 154.88], [1441407744.0, 74960000.0, 154.92000000000002], [1441409472.0, 74980000.0, 154.96], [1441411200.0, 75000000.0, 155.0], [1441412928.0, 75020000.0, 155.04], [1441414656.0, 75040000.0, 155.07999999999998], [1441416384.0, 75060000.0, 155.12], [1441418112.0, 75080000.0, 155.16], [1441419840.0, 75100000.0, 155.2], [1441421568.0, 75120000.0, 155.23999999999998], [1441423296.0, 75140000.0, 155.28], [1441425024.0, 75160000.0, 155.32], [1441426752.0, 75180000.0, 155.35999999999999], [1441428480.0, 75200000.0, 155.39999999999998], [1441430208.0, 75220000.0, 155.44], [1441431936.0, 75240000.0, 155.48], [1441433664.0, 75260000.0, 155.51999999999998], [1441435392.0, 75280000.0, 155.56], [1441437120.0, 75300000.0, 155.6], [1441438848.0, 75320000.0, 155.64], [1441440576.0, 75340000.0, 155.68], [1441442304.0, 75360000.0, 155.72], [1441444032.0, 75380000.0, 155.76], [1441445760.0, 75400000.0, 155.8], [1441447488.0, 75420000.0, 155.84], [1441449216.0, 75440000.0, 155.88], [1441450944.0, 75460000.0, 155.92000000000002], [1441452672.0, 75480000.0, 155.96], [1441454400.0, 75500000.0, 156.0], [1441456128.0, 75520000.0, 156.04], [1441457856.0, 75540000.0, 156.08], [1441459584.0, 75560000.0, 156.12], [1441461312.0, 75580000.0, 156.16], [1441463040.0, 75600000.0, 156.2], [1441464768.0, 75620000.0, 156.24], [1441466496.0, 75640000.0, 156.28], [1441468224.0, 75660000.0, 156.32], [1441469952.0, 75680000.0, 156.35999999999999], [1441471680.0, 75700000.0, 156.4], [1441473408.0, 75720000.0, 156.44], [1441475136.0, 75740000.0, 156.48], [1441476864.0, 75760000.0, 156.51999999999998], [1441478592.0, 75780000.0, 156.56], [1441480320.0, 75800000.0, 156.6], [1441482048.0, 75820000.0, 156.64], [1441483776.0, 75840000.0, 156.68], [1441485504.0, 75860000.0, 156.72], [1441487232.0, 75880000.0, 156.76], [1441488960.0, 75900000.0, 156.8], [1441490688.0, 75920000.0, 156.84], [1441492416.0, 75940000.0, 156.88], [1441494144.0, 75960000.0, 156.92000000000002], [1441495872.0, 75980000.0, 156.96], [1441497600.0, 76000000.0, 157.0], [1441499328.0, 76020000.0, 157.04000000000002], [1441501056.0, 76040000.0, 157.08], [1441502784.0, 76060000.0, 157.12], [1441504512.0, 76080000.0, 157.16], [1441506240.0, 76100000.0, 157.20000000000002], [1441507968.0, 76120000.0, 157.24], [1441509696.0, 76140000.0, 157.28], [1441511424.0, 76160000.0, 157.32], [1441513152.0, 76180000.0, 157.36], [1441514880.0, 76200000.0, 157.4], [1441516608.0, 76220000.0, 157.44], [1441518336.0, 76240000.0, 157.48], [1441520064.0, 76260000.0, 157.52], [1441521792.0, 76280000.0, 157.56], [1441523520.0, 76300000.0, 157.6], [1441525248.0, 76320000.0, 157.64], [1441526976.0, 76340000.0, 157.68], [1441528704.0, 76360000.0, 157.72], [1441530432.0, 76380000.0, 157.76], [1441532160.0, 76400000.0, 157.79999999999998], [1441533888.0, 76420000.0, 157.84], [1441535616.0, 76440000.0, 157.88], [1441537344.0, 76460000.0, 157.92], [1441539072.0, 76480000.0, 157.95999999999998], [1441540800.0, 76500000.0, 158.0], [1441542528.0, 76520000.0, 158.04], [1441544256.0, 76540000.0, 158.07999999999998], [1441545984.0, 76560000.0, 158.12], [1441547712.0, 76580000.0, 158.16], [1441549440.0, 76600000.0, 158.2], [1441551168.0, 76620000.0, 158.24], [1441552896.0, 76640000.0, 158.28], [1441554624.0, 76660000.0, 158.32], [1441556352.0, 76680000.0, 158.36], [1441558080.0, 76700000.0, 158.4], [1441559808.0, 76720000.0, 158.44], [1441561536.0, 76740000.0, 158.48000000000002], [1441563264.0, 76760000.0, 158.52], [1441564992.0, 76780000.0, 158.56], [1441566720.0, 76800000.0, 158.6], [1441568448.0, 76820000.0, 158.64000000000001], [1441570176.0, 76840000.0, 158.68], [1441571904.0, 76860000.0, 158.72], [1441573632.0, 76880000.0, 158.76], [1441575360.0, 76900000.0, 158.8], [1441577088.0, 76920000.0, 158.84], [1441578816.0, 76940000.0, 158.88], [1441580544.0, 76960000.0, 158.92], [1441582272.0, 76980000.0, 158.96], [1441584000.0, 77000000.0, 159.0], [1441585728.0, 77020000.0, 159.04], [1441587456.0, 77040000.0, 159.07999999999998], [1441589184.0, 77060000.0, 159.12], [1441590912.0, 77080000.0, 159.16], [1441592640.0, 77100000.0, 159.2], [1441594368.0, 77120000.0, 159.24], [1441596096.0, 77140000.0, 159.28], [1441597824.0, 77160000.0, 159.32], [1441599552.0, 77180000.0, 159.36], [1441601280.0, 77200000.0, 159.4], [1441603008.0, 77220000.0, 159.44], [1441604736.0, 77240000.0, 159.48000000000002], [1441606464.0, 77260000.0, 159.52], [1441608192.0, 77280000.0, 159.56], [1441609920.0, 77300000.0, 159.60000000000002], [1441611648.0, 77320000.0, 159.64000000000001], [1441613376.0, 77340000.0, 159.68], [1441615104.0, 77360000.0, 159.72], [1441616832.0, 77380000.0, 159.76000000000002], [1441618560.0, 77400000.0, 159.8], [1441620288.0, 77420000.0, 159.84], [1441622016.0, 77440000.0, 159.88], [1441623744.0, 77460000.0, 159.92000000000002], [1441625472.0, 77480000.0, 159.96], [1441627200.0, 77500000.0, 160.0], [1441628928.0, 77520000.0, 160.04], [1441630656.0, 77540000.0, 160.07999999999998], [1441632384.0, 77560000.0, 160.12], [1441634112.0, 77580000.0, 160.16], [1441635840.0, 77600000.0, 160.2], [1441637568.0, 77620000.0, 160.23999999999998], [1441639296.0, 77640000.0, 160.28], [1441641024.0, 77660000.0, 160.32], [1441642752.0, 77680000.0, 160.35999999999999], [1441644480.0, 77700000.0, 160.39999999999998], [1441646208.0, 77720000.0, 160.44], [1441647936.0, 77740000.0, 160.48], [1441649664.0, 77760000.0, 160.51999999999998], [1441651392.0, 77780000.0, 160.56], [1441653120.0, 77800000.0, 160.6], [1441654848.0, 77820000.0, 160.64], [1441656576.0, 77840000.0, 160.68], [1441658304.0, 77860000.0, 160.72], [1441660032.0, 77880000.0, 160.76], [1441661760.0, 77900000.0, 160.8], [1441663488.0, 77920000.0, 160.84], [1441665216.0, 77940000.0, 160.88], [1441666944.0, 77960000.0, 160.92000000000002], [1441668672.0, 77980000.0, 160.96], [1441670400.0, 78000000.0, 161.0], [1441672128.0, 78020000.0, 161.04], [1441673856.0, 78040000.0, 161.08], [1441675584.0, 78060000.0, 161.12], [1441677312.0, 78080000.0, 161.16], [1441679040.0, 78100000.0, 161.2], [1441680768.0, 78120000.0, 161.24], [1441682496.0, 78140000.0, 161.28], [1441684224.0, 78160000.0, 161.32], [1441685952.0, 78180000.0, 161.35999999999999], [1441687680.0, 78200000.0, 161.4], [1441689408.0, 78220000.0, 161.44], [1441691136.0, 78240000.0, 161.48], [1441692864.0, 78260000.0, 161.51999999999998], [1441694592.0, 78280000.0, 161.56], [1441696320.0, 78300000.0, 161.6], [1441698048.0, 78320000.0, 161.64], [1441699776.0, 78340000.0, 161.68], [1441701504.0, 78360000.0, 161.72], [1441703232.0, 78380000.0, 161.76], [1441704960.0, 78400000.0, 161.8], [1441706688.0, 78420000.0, 161.84], [1441708416.0, 78440000.0, 161.88], [1441710144.0, 78460000.0, 161.92000000000002], [1441711872.0, 78480000.0, 161.96], [1441713600.0, 78500000.0, 162.0], [1441715328.0, 78520000.0, 162.04000000000002], [1441717056.0, 78540000.0, 162.08], [1441718784.0, 78560000.0, 162.12], [1441720512.0, 78580000.0, 162.16], [1441722240.0, 78600000.0, 162.20000000000002], [1441723968.0, 78620000.0, 162.24], [1441725696.0, 78640000.0, 162.28], [1441727424.0, 78660000.0, 162.32], [1441729152.0, 78680000.0, 162.36], [1441730880.0, 78700000.0, 162.4], [1441732608.0, 78720000.0, 162.44], [1441734336.0, 78740000.0, 162.48], [1441736064.0, 78760000.0, 162.52], [1441737792.0, 78780000.0, 162.56], [1441739520.0, 78800000.0, 162.6], [1441741248.0, 78820000.0, 162.64], [1441742976.0, 78840000.0, 162.68], [1441744704.0, 78860000.0, 162.72], [1441746432.0, 78880000.0, 162.76], [1441748160.0, 78900000.0, 162.79999999999998], [1441749888.0, 78920000.0, 162.84], [1441751616.0, 78940000.0, 162.88], [1441753344.0, 78960000.0, 162.92], [1441755072.0, 78980000.0, 162.95999999999998], [1441756800.0, 79000000.0, 163.0], [1441758528.0, 79020000.0, 163.04], [1441760256.0, 79040000.0, 163.07999999999998], [1441761984.0, 79060000.0, 163.12], [1441763712.0, 79080000.0, 163.16], [1441765440.0, 79100000.0, 163.2], [1441767168.0, 79120000.0, 163.24], [1441768896.0, 79140000.0, 163.28], [1441770624.0, 79160000.0, 163.32], [1441772352.0, 79180000.0, 163.36], [1441774080.0, 79200000.0, 163.4], [1441775808.0, 79220000.0, 163.44], [1441777536.0, 79240000.0, 163.48000000000002], [1441779264.0, 79260000.0, 163.52], [1441780992.0, 79280000.0, 163.56], [1441782720.0, 79300000.0, 163.6], [1441784448.0, 79320000.0, 163.64000000000001], [1441786176.0, 79340000.0, 163.68], [1441787904.0, 79360000.0, 163.72], [1441789632.0, 79380000.0, 163.76], [1441791360.0, 79400000.0, 163.8], [1441793088.0, 79420000.0, 163.84], [1441794816.0, 79440000.0, 163.88], [1441796544.0, 79460000.0, 163.92], [1441798272.0, 79480000.0, 163.96], [1441800000.0, 79500000.0, 164.0], [1441801728.0, 79520000.0, 164.04], [1441803456.0, 79540000.0, 164.07999999999998], [1441805184.0, 79560000.0, 164.12], [1441806912.0, 79580000.0, 164.16], [1441808640.0, 79600000.0, 164.2], [1441810368.0, 79620000.0, 164.24], [1441812096.0, 79640000.0, 164.28], [1441813824.0, 79660000.0, 164.32], [1441815552.0, 79680000.0, 164.36], [1441817280.0, 79700000.0, 164.4], [1441819008.0, 79720000.0, 164.44], [1441820736.0, 79740000.0, 164.48000000000002], [1441822464.0, 79760000.0, 164.52], [1441824192.0, 79780000.0, 164.56], [1441825920.0, 79800000.0, 164.60000000000002], [1441827648.0, 79820000.0, 164.64000000000001], [1441829376.0, 79840000.0, 164.68], [1441831104.0, 79860000.0, 164.72], [1441832832.0, 79880000.0, 164.76000000000002], [1441834560.0, 79900000.0, 164.8], [1441836288.0, 79920000.0, 164.84], [1441838016.0, 79940000.0, 164.88], [1441839744.0, 79960000.0, 164.92000000000002], [1441841472.0, 79980000.0, 164.96], [1441843200.0, 80000000.0, 165.0], [1441844928.0, 80020000.0, 165.04000000000002], [1441846656.0, 80040000.0, 165.07999999999998], [1441848384.0, 80060000.0, 165.12], [1441850112.0, 80080000.0, 165.15999999999997], [1441851840.0, 80100000.0, 165.2], [1441853568.0, 80120000.0, 165.24], [1441855296.0, 80140000.0, 165.27999999999997], [1441857024.0, 80160000.0, 165.32], [1441858752.0, 80180000.0, 165.36], [1441860480.0, 80200000.0, 165.39999999999998], [1441862208.0, 80220000.0, 165.44], [1441863936.0, 80240000.0, 165.48], [1441865664.0, 80260000.0, 165.51999999999998], [1441867392.0, 80280000.0, 165.56], [1441869120.0, 80300000.0, 165.6], [1441870848.0, 80320000.0, 165.64], [1441872576.0, 80340000.0, 165.68], [1441874304.0, 80360000.0, 165.72], [1441876032.0, 80380000.0, 165.76], [1441877760.0, 80400000.0, 165.79999999999998], [1441879488.0, 80420000.0, 165.84], [1441881216.0, 80440000.0, 165.88], [1441882944.0, 80460000.0, 165.92], [1441884672.0, 80480000.0, 165.96], [1441886400.0, 80500000.0, 166.0], [1441888128.0, 80520000.0, 166.04], [1441889856.0, 80540000.0, 166.08], [1441891584.0, 80560000.0, 166.11999999999998], [1441893312.0, 80580000.0, 166.16], [1441895040.0, 80600000.0, 166.20000000000002], [1441896768.0, 80620000.0, 166.23999999999998], [1441898496.0, 80640000.0, 166.28], [1441900224.0, 80660000.0, 166.32000000000002], [1441901952.0, 80680000.0, 166.35999999999999], [1441903680.0, 80700000.0, 166.4], [1441905408.0, 80720000.0, 166.44], [1441907136.0, 80740000.0, 166.48], [1441908864.0, 80760000.0, 166.52], [1441910592.0, 80780000.0, 166.56], [1441912320.0, 80800000.0, 166.6], [1441914048.0, 80820000.0, 166.64000000000001], [1441915776.0, 80840000.0, 166.68], [1441917504.0, 80860000.0, 166.72], [1441919232.0, 80880000.0, 166.76], [1441920960.0, 80900000.0, 166.8], [1441922688.0, 80920000.0, 166.84], [1441924416.0, 80940000.0, 166.88], [1441926144.0, 80960000.0, 166.92000000000002], [1441927872.0, 80980000.0, 166.96], [1441929600.0, 81000000.0, 167.0], [1441931328.0, 81020000.0, 167.04000000000002], [1441933056.0, 81040000.0, 167.07999999999998], [1441934784.0, 81060000.0, 167.12], [1441936512.0, 81080000.0, 167.16000000000003], [1441938240.0, 81100000.0, 167.2], [1441939968.0, 81120000.0, 167.24], [1441941696.0, 81140000.0, 167.28000000000003], [1441943424.0, 81160000.0, 167.32], [1441945152.0, 81180000.0, 167.36], [1441946880.0, 81200000.0, 167.39999999999998], [1441948608.0, 81220000.0, 167.44], [1441950336.0, 81240000.0, 167.48000000000002], [1441952064.0, 81260000.0, 167.51999999999998], [1441953792.0, 81280000.0, 167.56], [1441955520.0, 81300000.0, 167.60000000000002], [1441957248.0, 81320000.0, 167.64], [1441958976.0, 81340000.0, 167.68], [1441960704.0, 81360000.0, 167.71999999999997], [1441962432.0, 81380000.0, 167.76], [1441964160.0, 81400000.0, 167.8], [1441965888.0, 81420000.0, 167.83999999999997], [1441967616.0, 81440000.0, 167.88], [1441969344.0, 81460000.0, 167.92000000000002], [1441971072.0, 81480000.0, 167.95999999999998], [1441972800.0, 81500000.0, 168.0], [1441974528.0, 81520000.0, 168.04], [1441976256.0, 81540000.0, 168.07999999999998], [1441977984.0, 81560000.0, 168.12], [1441979712.0, 81580000.0, 168.16], [1441981440.0, 81600000.0, 168.2], [1441983168.0, 81620000.0, 168.24], [1441984896.0, 81640000.0, 168.28], [1441986624.0, 81660000.0, 168.32], [1441988352.0, 81680000.0, 168.35999999999999], [1441990080.0, 81700000.0, 168.4], [1441991808.0, 81720000.0, 168.44], [1441993536.0, 81740000.0, 168.48], [1441995264.0, 81760000.0, 168.52], [1441996992.0, 81780000.0, 168.56], [1441998720.0, 81800000.0, 168.6], [1442000448.0, 81820000.0, 168.64000000000001], [1442002176.0, 81840000.0, 168.67999999999998], [1442003904.0, 81860000.0, 168.72], [1442005632.0, 81880000.0, 168.76000000000002], [1442007360.0, 81900000.0, 168.79999999999998], [1442009088.0, 81920000.0, 168.84], [1442010816.0, 81940000.0, 168.88000000000002], [1442012544.0, 81960000.0, 168.92], [1442014272.0, 81980000.0, 168.96], [1442016000.0, 82000000.0, 169.0], [1442017728.0, 82020000.0, 169.04], [1442019456.0, 82040000.0, 169.08], [1442021184.0, 82060000.0, 169.12], [1442022912.0, 82080000.0, 169.16], [1442024640.0, 82100000.0, 169.20000000000002], [1442026368.0, 82120000.0, 169.24], [1442028096.0, 82140000.0, 169.28], [1442029824.0, 82160000.0, 169.32], [1442031552.0, 82180000.0, 169.36], [1442033280.0, 82200000.0, 169.4], [1442035008.0, 82220000.0, 169.44], [1442036736.0, 82240000.0, 169.48000000000002], [1442038464.0, 82260000.0, 169.52], [1442040192.0, 82280000.0, 169.56], [1442041920.0, 82300000.0, 169.60000000000002], [1442043648.0, 82320000.0, 169.64], [1442045376.0, 82340000.0, 169.68], [1442047104.0, 82360000.0, 169.72000000000003], [1442048832.0, 82380000.0, 169.76], [1442050560.0, 82400000.0, 169.8], [1442052288.0, 82420000.0, 169.84000000000003], [1442054016.0, 82440000.0, 169.88], [1442055744.0, 82460000.0, 169.92000000000002], [1442057472.0, 82480000.0, 169.95999999999998], [1442059200.0, 82500000.0, 170.0], [1442060928.0, 82520000.0, 170.04000000000002], [1442062656.0, 82540000.0, 170.07999999999998], [1442064384.0, 82560000.0, 170.12], [1442066112.0, 82580000.0, 170.15999999999997], [1442067840.0, 82600000.0, 170.2], [1442069568.0, 82620000.0, 170.24], [1442071296.0, 82640000.0, 170.27999999999997], [1442073024.0, 82660000.0, 170.32], [1442074752.0, 82680000.0, 170.36], [1442076480.0, 82700000.0, 170.39999999999998], [1442078208.0, 82720000.0, 170.44], [1442079936.0, 82740000.0, 170.48], [1442081664.0, 82760000.0, 170.51999999999998], [1442083392.0, 82780000.0, 170.56], [1442085120.0, 82800000.0, 170.6], [1442086848.0, 82820000.0, 170.64], [1442088576.0, 82840000.0, 170.68], [1442090304.0, 82860000.0, 170.72], [1442092032.0, 82880000.0, 170.76], [1442093760.0, 82900000.0, 170.79999999999998], [1442095488.0, 82920000.0, 170.84], [1442097216.0, 82940000.0, 170.88], [1442098944.0, 82960000.0, 170.92], [1442100672.0, 82980000.0, 170.96], [1442102400.0, 83000000.0, 171.0], [1442104128.0, 83020000.0, 171.04], [1442105856.0, 83040000.0, 171.08], [1442107584.0, 83060000.0, 171.11999999999998], [1442109312.0, 83080000.0, 171.16], [1442111040.0, 83100000.0, 171.20000000000002], [1442112768.0, 83120000.0, 171.23999999999998], [1442114496.0, 83140000.0, 171.28], [1442116224.0, 83160000.0, 171.32000000000002], [1442117952.0, 83180000.0, 171.35999999999999], [1442119680.0, 83200000.0, 171.4], [1442121408.0, 83220000.0, 171.44], [1442123136.0, 83240000.0, 171.48], [1442124864.0, 83260000.0, 171.52], [1442126592.0, 83280000.0, 171.56], [1442128320.0, 83300000.0, 171.6], [1442130048.0, 83320000.0, 171.64000000000001], [1442131776.0, 83340000.0, 171.68], [1442133504.0, 83360000.0, 171.72], [1442135232.0, 83380000.0, 171.76], [1442136960.0, 83400000.0, 171.8], [1442138688.0, 83420000.0, 171.84], [1442140416.0, 83440000.0, 171.88], [1442142144.0, 83460000.0, 171.92000000000002], [1442143872.0, 83480000.0, 171.96], [1442145600.0, 83500000.0, 172.0], [1442147328.0, 83520000.0, 172.04000000000002], [1442149056.0, 83540000.0, 172.07999999999998], [1442150784.0, 83560000.0, 172.12], [1442152512.0, 83580000.0, 172.16000000000003], [1442154240.0, 83600000.0, 172.2], [1442155968.0, 83620000.0, 172.24], [1442157696.0, 83640000.0, 172.28000000000003], [1442159424.0, 83660000.0, 172.32], [1442161152.0, 83680000.0, 172.36], [1442162880.0, 83700000.0, 172.39999999999998], [1442164608.0, 83720000.0, 172.44], [1442166336.0, 83740000.0, 172.48000000000002], [1442168064.0, 83760000.0, 172.51999999999998], [1442169792.0, 83780000.0, 172.56], [1442171520.0, 83800000.0, 172.60000000000002], [1442173248.0, 83820000.0, 172.64], [1442174976.0, 83840000.0, 172.68], [1442176704.0, 83860000.0, 172.71999999999997], [1442178432.0, 83880000.0, 172.76], [1442180160.0, 83900000.0, 172.8], [1442181888.0, 83920000.0, 172.83999999999997], [1442183616.0, 83940000.0, 172.88], [1442185344.0, 83960000.0, 172.92000000000002], [1442187072.0, 83980000.0, 172.95999999999998], [1442188800.0, 84000000.0, 173.0], [1442190528.0, 84020000.0, 173.04], [1442192256.0, 84040000.0, 173.07999999999998], [1442193984.0, 84060000.0, 173.12], [1442195712.0, 84080000.0, 173.16], [1442197440.0, 84100000.0, 173.2], [1442199168.0, 84120000.0, 173.24], [1442200896.0, 84140000.0, 173.28], [1442202624.0, 84160000.0, 173.32], [1442204352.0, 84180000.0, 173.35999999999999], [1442206080.0, 84200000.0, 173.4], [1442207808.0, 84220000.0, 173.44], [1442209536.0, 84240000.0, 173.48], [1442211264.0, 84260000.0, 173.52], [1442212992.0, 84280000.0, 173.56], [1442214720.0, 84300000.0, 173.6], [1442216448.0, 84320000.0, 173.64000000000001], [1442218176.0, 84340000.0, 173.67999999999998], [1442219904.0, 84360000.0, 173.72], [1442221632.0, 84380000.0, 173.76000000000002], [1442223360.0, 84400000.0, 173.79999999999998], [1442225088.0, 84420000.0, 173.84], [1442226816.0, 84440000.0, 173.88000000000002], [1442228544.0, 84460000.0, 173.92], [1442230272.0, 84480000.0, 173.96], [1442232000.0, 84500000.0, 174.0], [1442233728.0, 84520000.0, 174.04], [1442235456.0, 84540000.0, 174.08], [1442237184.0, 84560000.0, 174.12], [1442238912.0, 84580000.0, 174.16], [1442240640.0, 84600000.0, 174.20000000000002], [1442242368.0, 84620000.0, 174.24], [1442244096.0, 84640000.0, 174.28], [1442245824.0, 84660000.0, 174.32], [1442247552.0, 84680000.0, 174.36], [1442249280.0, 84700000.0, 174.4], [1442251008.0, 84720000.0, 174.44], [1442252736.0, 84740000.0, 174.48000000000002], [1442254464.0, 84760000.0, 174.52], [1442256192.0, 84780000.0, 174.56], [1442257920.0, 84800000.0, 174.60000000000002], [1442259648.0, 84820000.0, 174.64], [1442261376.0, 84840000.0, 174.68], [1442263104.0, 84860000.0, 174.72000000000003], [1442264832.0, 84880000.0, 174.76], [1442266560.0, 84900000.0, 174.8], [1442268288.0, 84920000.0, 174.84000000000003], [1442270016.0, 84940000.0, 174.88], [1442271744.0, 84960000.0, 174.92000000000002], [1442273472.0, 84980000.0, 174.95999999999998], [1442275200.0, 85000000.0, 175.0], [1442276928.0, 85020000.0, 175.04000000000002], [1442278656.0, 85040000.0, 175.07999999999998], [1442280384.0, 85060000.0, 175.12], [1442282112.0, 85080000.0, 175.15999999999997], [1442283840.0, 85100000.0, 175.2], [1442285568.0, 85120000.0, 175.24], [1442287296.0, 85140000.0, 175.27999999999997], [1442289024.0, 85160000.0, 175.32], [1442290752.0, 85180000.0, 175.36], [1442292480.0, 85200000.0, 175.39999999999998], [1442294208.0, 85220000.0, 175.44], [1442295936.0, 85240000.0, 175.48], [1442297664.0, 85260000.0, 175.51999999999998], [1442299392.0, 85280000.0, 175.56], [1442301120.0, 85300000.0, 175.6], [1442302848.0, 85320000.0, 175.64], [1442304576.0, 85340000.0, 175.68], [1442306304.0, 85360000.0, 175.72], [1442308032.0, 85380000.0, 175.76], [1442309760.0, 85400000.0, 175.79999999999998], [1442311488.0, 85420000.0, 175.84], [1442313216.0, 85440000.0, 175.88], [1442314944.0, 85460000.0, 175.92], [1442316672.0, 85480000.0, 175.96], [1442318400.0, 85500000.0, 176.0], [1442320128.0, 85520000.0, 176.04], [1442321856.0, 85540000.0, 176.08], [1442323584.0, 85560000.0, 176.11999999999998], [1442325312.0, 85580000.0, 176.16], [1442327040.0, 85600000.0, 176.20000000000002], [1442328768.0, 85620000.0, 176.23999999999998], [1442330496.0, 85640000.0, 176.28], [1442332224.0, 85660000.0, 176.32000000000002], [1442333952.0, 85680000.0, 176.35999999999999], [1442335680.0, 85700000.0, 176.4], [1442337408.0, 85720000.0, 176.44], [1442339136.0, 85740000.0, 176.48], [1442340864.0, 85760000.0, 176.52], [1442342592.0, 85780000.0, 176.56], [1442344320.0, 85800000.0, 176.6], [1442346048.0, 85820000.0, 176.64000000000001], [1442347776.0, 85840000.0, 176.68], [1442349504.0, 85860000.0, 176.72], [1442351232.0, 85880000.0, 176.76], [1442352960.0, 85900000.0, 176.8], [1442354688.0, 85920000.0, 176.84], [1442356416.0, 85940000.0, 176.88], [1442358144.0, 85960000.0, 176.92000000000002], [1442359872.0, 85980000.0, 176.96], [1442361600.0, 86000000.0, 177.0], [1442363328.0, 86020000.0, 177.04000000000002], [1442365056.0, 86040000.0, 177.07999999999998], [1442366784.0, 86060000.0, 177.12], [1442368512.0, 86080000.0, 177.16000000000003], [1442370240.0, 86100000.0, 177.2], [1442371968.0, 86120000.0, 177.24], [1442373696.0, 86140000.0, 177.28000000000003], [1442375424.0, 86160000.0, 177.32], [1442377152.0, 86180000.0, 177.36], [1442378880.0, 86200000.0, 177.39999999999998], [1442380608.0, 86220000.0, 177.44], [1442382336.0, 86240000.0, 177.48000000000002], [1442384064.0, 86260000.0, 177.51999999999998], [1442385792.0, 86280000.0, 177.56], [1442387520.0, 86300000.0, 177.60000000000002], [1442389248.0, 86320000.0, 177.64], [1442390976.0, 86340000.0, 177.68], [1442392704.0, 86360000.0, 177.71999999999997], [1442394432.0, 86380000.0, 177.76], [1442396160.0, 86400000.0, 177.8], [1442397888.0, 86420000.0, 177.83999999999997], [1442399616.0, 86440000.0, 177.88], [1442401344.0, 86460000.0, 177.92000000000002], [1442403072.0, 86480000.0, 177.95999999999998], [1442404800.0, 86500000.0, 178.0], [1442406528.0, 86520000.0, 178.04], [1442408256.0, 86540000.0, 178.07999999999998], [1442409984.0, 86560000.0, 178.12], [1442411712.0, 86580000.0, 178.16], [1442413440.0, 86600000.0, 178.2], [1442415168.0, 86620000.0, 178.24], [1442416896.0, 86640000.0, 178.28], [1442418624.0, 86660000.0, 178.32], [1442420352.0, 86680000.0, 178.35999999999999], [1442422080.0, 86700000.0, 178.4], [1442423808.0, 86720000.0, 178.44], [1442425536.0, 86740000.0, 178.48], [1442427264.0, 86760000.0, 178.52], [1442428992.0, 86780000.0, 178.56], [1442430720.0, 86800000.0, 178.6], [1442432448.0, 86820000.0, 178.64000000000001], [1442434176.0, 86840000.0, 178.67999999999998], [1442435904.0, 86860000.0, 178.72], [1442437632.0, 86880000.0, 178.76000000000002], [1442439360.0, 86900000.0, 178.79999999999998], [1442441088.0, 86920000.0, 178.84], [1442442816.0, 86940000.0, 178.88000000000002], [1442444544.0, 86960000.0, 178.92], [1442446272.0, 86980000.0, 178.96], [1442448000.0, 87000000.0, 179.0], [1442449728.0, 87020000.0, 179.04], [1442451456.0, 87040000.0, 179.08], [1442453184.0, 87060000.0, 179.12], [1442454912.0, 87080000.0, 179.16], [1442456640.0, 87100000.0, 179.20000000000002], [1442458368.0, 87120000.0, 179.24], [1442460096.0, 87140000.0, 179.28], [1442461824.0, 87160000.0, 179.32], [1442463552.0, 87180000.0, 179.36], [1442465280.0, 87200000.0, 179.4], [1442467008.0, 87220000.0, 179.44], [1442468736.0, 87240000.0, 179.48000000000002], [1442470464.0, 87260000.0, 179.52], [1442472192.0, 87280000.0, 179.56], [1442473920.0, 87300000.0, 179.60000000000002], [1442475648.0, 87320000.0, 179.64], [1442477376.0, 87340000.0, 179.68], [1442479104.0, 87360000.0, 179.72000000000003], [1442480832.0, 87380000.0, 179.76], [1442482560.0, 87400000.0, 179.8], [1442484288.0, 87420000.0, 179.84000000000003], [1442486016.0, 87440000.0, 179.88], [1442487744.0, 87460000.0, 179.92000000000002], [1442489472.0, 87480000.0, 179.95999999999998], [1442491200.0, 87500000.0, 180.0], [1442492928.0, 87520000.0, 180.04000000000002], [1442494656.0, 87540000.0, 180.07999999999998], [1442496384.0, 87560000.0, 180.12], [1442498112.0, 87580000.0, 180.15999999999997], [1442499840.0, 87600000.0, 180.2], [1442501568.0, 87620000.0, 180.24], [1442503296.0, 87640000.0, 180.27999999999997], [1442505024.0, 87660000.0, 180.32], [1442506752.0, 87680000.0, 180.36], [1442508480.0, 87700000.0, 180.39999999999998], [1442510208.0, 87720000.0, 180.44], [1442511936.0, 87740000.0, 180.48], [1442513664.0, 87760000.0, 180.51999999999998], [1442515392.0, 87780000.0, 180.56], [1442517120.0, 87800000.0, 180.6], [1442518848.0, 87820000.0, 180.64], [1442520576.0, 87840000.0, 180.68], [1442522304.0, 87860000.0, 180.72], [1442524032.0, 87880000.0, 180.76], [1442525760.0, 87900000.0, 180.79999999999998], [1442527488.0, 87920000.0, 180.84], [1442529216.0, 87940000.0, 180.88], [1442530944.0, 87960000.0, 180.92], [1442532672.0, 87980000.0, 180.96], [1442534400.0, 88000000.0, 181.0], [1442536128.0, 88020000.0, 181.04], [1442537856.0, 88040000.0, 181.08], [1442539584.0, 88060000.0, 181.11999999999998], [1442541312.0, 88080000.0, 181.16], [1442543040.0, 88100000.0, 181.20000000000002], [1442544768.0, 88120000.0, 181.23999999999998], [1442546496.0, 88140000.0, 181.28], [1442548224.0, 88160000.0, 181.32000000000002], [1442549952.0, 88180000.0, 181.35999999999999], [1442551680.0, 88200000.0, 181.4], [1442553408.0, 88220000.0, 181.44], [1442555136.0, 88240000.0, 181.48], [1442556864.0, 88260000.0, 181.52], [1442558592.0, 88280000.0, 181.56], [1442560320.0, 88300000.0, 181.6], [1442562048.0, 88320000.0, 181.64000000000001], [1442563776.0, 88340000.0, 181.68], [1442565504.0, 88360000.0, 181.72], [1442567232.0, 88380000.0, 181.76], [1442568960.0, 88400000.0, 181.8], [1442570688.0, 88420000.0, 181.84], [1442572416.0, 88440000.0, 181.88], [1442574144.0, 88460000.0, 181.92000000000002], [1442575872.0, 88480000.0, 181.96], [1442577600.0, 88500000.0, 182.0], [1442579328.0, 88520000.0, 182.04000000000002], [1442581056.0, 88540000.0, 182.07999999999998], [1442582784.0, 88560000.0, 182.12], [1442584512.0, 88580000.0, 182.16000000000003], [1442586240.0, 88600000.0, 182.2], [1442587968.0, 88620000.0, 182.24], [1442589696.0, 88640000.0, 182.28000000000003], [1442591424.0, 88660000.0, 182.32], [1442593152.0, 88680000.0, 182.36], [1442594880.0, 88700000.0, 182.39999999999998], [1442596608.0, 88720000.0, 182.44], [1442598336.0, 88740000.0, 182.48000000000002], [1442600064.0, 88760000.0, 182.51999999999998], [1442601792.0, 88780000.0, 182.56], [1442603520.0, 88800000.0, 182.60000000000002], [1442605248.0, 88820000.0, 182.64], [1442606976.0, 88840000.0, 182.68], [1442608704.0, 88860000.0, 182.71999999999997], [1442610432.0, 88880000.0, 182.76], [1442612160.0, 88900000.0, 182.8], [1442613888.0, 88920000.0, 182.83999999999997], [1442615616.0, 88940000.0, 182.88], [1442617344.0, 88960000.0, 182.92000000000002], [1442619072.0, 88980000.0, 182.95999999999998], [1442620800.0, 89000000.0, 183.0], [1442622528.0, 89020000.0, 183.04], [1442624256.0, 89040000.0, 183.07999999999998], [1442625984.0, 89060000.0, 183.12], [1442627712.0, 89080000.0, 183.16], [1442629440.0, 89100000.0, 183.2], [1442631168.0, 89120000.0, 183.24], [1442632896.0, 89140000.0, 183.28], [1442634624.0, 89160000.0, 183.32], [1442636352.0, 89180000.0, 183.35999999999999], [1442638080.0, 89200000.0, 183.4], [1442639808.0, 89220000.0, 183.44], [1442641536.0, 89240000.0, 183.48], [1442643264.0, 89260000.0, 183.52], [1442644992.0, 89280000.0, 183.56], [1442646720.0, 89300000.0, 183.6], [1442648448.0, 89320000.0, 183.64000000000001], [1442650176.0, 89340000.0, 183.67999999999998], [1442651904.0, 89360000.0, 183.72], [1442653632.0, 89380000.0, 183.76000000000002], [1442655360.0, 89400000.0, 183.79999999999998], [1442657088.0, 89420000.0, 183.84], [1442658816.0, 89440000.0, 183.88000000000002], [1442660544.0, 89460000.0, 183.92], [1442662272.0, 89480000.0, 183.96], [1442664000.0, 89500000.0, 184.0], [1442665728.0, 89520000.0, 184.04], [1442667456.0, 89540000.0, 184.08], [1442669184.0, 89560000.0, 184.12], [1442670912.0, 89580000.0, 184.16], [1442672640.0, 89600000.0, 184.20000000000002], [1442674368.0, 89620000.0, 184.24], [1442676096.0, 89640000.0, 184.28], [1442677824.0, 89660000.0, 184.32], [1442679552.0, 89680000.0, 184.36], [1442681280.0, 89700000.0, 184.4], [1442683008.0, 89720000.0, 184.44], [1442684736.0, 89740000.0, 184.48000000000002], [1442686464.0, 89760000.0, 184.52], [1442688192.0, 89780000.0, 184.56], [1442689920.0, 89800000.0, 184.60000000000002], [1442691648.0, 89820000.0, 184.64], [1442693376.0, 89840000.0, 184.68], [1442695104.0, 89860000.0, 184.72000000000003], [1442696832.0, 89880000.0, 184.76], [1442698560.0, 89900000.0, 184.8], [1442700288.0, 89920000.0, 184.84000000000003], [1442702016.0, 89940000.0, 184.88], [1442703744.0, 89960000.0, 184.92000000000002], [1442705472.0, 89980000.0, 184.95999999999998], [1442707200.0, 90000000.0, 185.0], [1442708928.0, 90020000.0, 185.04000000000002], [1442710656.0, 90040000.0, 185.07999999999998], [1442712384.0, 90060000.0, 185.12], [1442714112.0, 90080000.0, 185.15999999999997], [1442715840.0, 90100000.0, 185.2], [1442717568.0, 90120000.0, 185.24], [1442719296.0, 90140000.0, 185.27999999999997], [1442721024.0, 90160000.0, 185.32], [1442722752.0, 90180000.0, 185.36], [1442724480.0, 90200000.0, 185.39999999999998], [1442726208.0, 90220000.0, 185.44], [1442727936.0, 90240000.0, 185.48], [1442729664.0, 90260000.0, 185.51999999999998], [1442731392.0, 90280000.0, 185.56], [1442733120.0, 90300000.0, 185.6], [1442734848.0, 90320000.0, 185.64], [1442736576.0, 90340000.0, 185.68], [1442738304.0, 90360000.0, 185.72], [1442740032.0, 90380000.0, 185.76], [1442741760.0, 90400000.0, 185.79999999999998], [1442743488.0, 90420000.0, 185.84], [1442745216.0, 90440000.0, 185.88], [1442746944.0, 90460000.0, 185.92], [1442748672.0, 90480000.0, 185.96], [1442750400.0, 90500000.0, 186.0], [1442752128.0, 90520000.0, 186.04], [1442753856.0, 90540000.0, 186.08], [1442755584.0, 90560000.0, 186.11999999999998], [1442757312.0, 90580000.0, 186.16], [1442759040.0, 90600000.0, 186.20000000000002], [1442760768.0, 90620000.0, 186.23999999999998], [1442762496.0, 90640000.0, 186.28], [1442764224.0, 90660000.0, 186.32000000000002], [1442765952.0, 90680000.0, 186.35999999999999], [1442767680.0, 90700000.0, 186.4], [1442769408.0, 90720000.0, 186.44], [1442771136.0, 90740000.0, 186.48], [1442772864.0, 90760000.0, 186.52], [1442774592.0, 90780000.0, 186.56], [1442776320.0, 90800000.0, 186.6], [1442778048.0, 90820000.0, 186.64000000000001], [1442779776.0, 90840000.0, 186.68], [1442781504.0, 90860000.0, 186.72], [1442783232.0, 90880000.0, 186.76], [1442784960.0, 90900000.0, 186.8], [1442786688.0, 90920000.0, 186.84], [1442788416.0, 90940000.0, 186.88], [1442790144.0, 90960000.0, 186.92000000000002], [1442791872.0, 90980000.0, 186.96], [1442793600.0, 91000000.0, 187.0], [1442795328.0, 91020000.0, 187.04000000000002], [1442797056.0, 91040000.0, 187.07999999999998], [1442798784.0, 91060000.0, 187.12], [1442800512.0, 91080000.0, 187.16000000000003], [1442802240.0, 91100000.0, 187.2], [1442803968.0, 91120000.0, 187.24], [1442805696.0, 91140000.0, 187.28000000000003], [1442807424.0, 91160000.0, 187.32], [1442809152.0, 91180000.0, 187.36], [1442810880.0, 91200000.0, 187.39999999999998], [1442812608.0, 91220000.0, 187.44], [1442814336.0, 91240000.0, 187.48000000000002], [1442816064.0, 91260000.0, 187.51999999999998], [1442817792.0, 91280000.0, 187.56], [1442819520.0, 91300000.0, 187.60000000000002], [1442821248.0, 91320000.0, 187.64], [1442822976.0, 91340000.0, 187.68], [1442824704.0, 91360000.0, 187.71999999999997], [1442826432.0, 91380000.0, 187.76], [1442828160.0, 91400000.0, 187.8], [1442829888.0, 91420000.0, 187.83999999999997], [1442831616.0, 91440000.0, 187.88], [1442833344.0, 91460000.0, 187.92000000000002], [1442835072.0, 91480000.0, 187.95999999999998], [1442836800.0, 91500000.0, 188.0], [1442838528.0, 91520000.0, 188.04], [1442840256.0, 91540000.0, 188.07999999999998], [1442841984.0, 91560000.0, 188.12], [1442843712.0, 91580000.0, 188.16], [1442845440.0, 91600000.0, 188.2], [1442847168.0, 91620000.0, 188.24], [1442848896.0, 91640000.0, 188.28], [1442850624.0, 91660000.0, 188.32], [1442852352.0, 91680000.0, 188.35999999999999], [1442854080.0, 91700000.0, 188.4], [1442855808.0, 91720000.0, 188.44], [1442857536.0, 91740000.0, 188.48], [1442859264.0, 91760000.0, 188.52], [1442860992.0, 91780000.0, 188.56], [1442862720.0, 91800000.0, 188.6], [1442864448.0, 91820000.0, 188.64000000000001], [1442866176.0, 91840000.0, 188.67999999999998], [1442867904.0, 91860000.0, 188.72], [1442869632.0, 91880000.0, 188.76000000000002], [1442871360.0, 91900000.0, 188.79999999999998], [1442873088.0, 91920000.0, 188.84], [1442874816.0, 91940000.0, 188.88000000000002], [1442876544.0, 91960000.0, 188.92], [1442878272.0, 91980000.0, 188.96], [1442880000.0, 92000000.0, 189.0], [1442881728.0, 92020000.0, 189.04], [1442883456.0, 92040000.0, 189.08], [1442885184.0, 92060000.0, 189.12], [1442886912.0, 92080000.0, 189.16], [1442888640.0, 92100000.0, 189.20000000000002], [1442890368.0, 92120000.0, 189.24], [1442892096.0, 92140000.0, 189.28], [1442893824.0, 92160000.0, 189.32], [1442895552.0, 92180000.0, 189.36], [1442897280.0, 92200000.0, 189.4], [1442899008.0, 92220000.0, 189.44], [1442900736.0, 92240000.0, 189.48000000000002], [1442902464.0, 92260000.0, 189.52], [1442904192.0, 92280000.0, 189.56], [1442905920.0, 92300000.0, 189.60000000000002], [1442907648.0, 92320000.0, 189.64], [1442909376.0, 92340000.0, 189.68], [1442911104.0, 92360000.0, 189.72000000000003], [1442912832.0, 92380000.0, 189.76], [1442914560.0, 92400000.0, 189.8], [1442916288.0, 92420000.0, 189.84000000000003], [1442918016.0, 92440000.0, 189.88], [1442919744.0, 92460000.0, 189.92000000000002], [1442921472.0, 92480000.0, 189.95999999999998], [1442923200.0, 92500000.0, 190.0], [1442924928.0, 92520000.0, 190.04000000000002], [1442926656.0, 92540000.0, 190.07999999999998], [1442928384.0, 92560000.0, 190.12], [1442930112.0, 92580000.0, 190.15999999999997], [1442931840.0, 92600000.0, 190.2], [1442933568.0, 92620000.0, 190.24], [1442935296.0, 92640000.0, 190.27999999999997], [1442937024.0, 92660000.0, 190.32], [1442938752.0, 92680000.0, 190.36], [1442940480.0, 92700000.0, 190.39999999999998], [1442942208.0, 92720000.0, 190.44], [1442943936.0, 92740000.0, 190.48], [1442945664.0, 92760000.0, 190.51999999999998], [1442947392.0, 92780000.0, 190.56], [1442949120.0, 92800000.0, 190.6], [1442950848.0, 92820000.0, 190.64], [1442952576.0, 92840000.0, 190.68], [1442954304.0, 92860000.0, 190.72], [1442956032.0, 92880000.0, 190.76], [1442957760.0, 92900000.0, 190.79999999999998], [1442959488.0, 92920000.0, 190.84], [1442961216.0, 92940000.0, 190.88], [1442962944.0, 92960000.0, 190.92], [1442964672.0, 92980000.0, 190.96], [1442966400.0, 93000000.0, 191.0], [1442968128.0, 93020000.0, 191.04], [1442969856.0, 93040000.0, 191.08], [1442971584.0, 93060000.0, 191.11999999999998], [1442973312.0, 93080000.0, 191.16], [1442975040.0, 93100000.0, 191.20000000000002], [1442976768.0, 93120000.0, 191.23999999999998], [1442978496.0, 93140000.0, 191.28], [1442980224.0, 93160000.0, 191.32000000000002], [1442981952.0, 93180000.0, 191.35999999999999], [1442983680.0, 93200000.0, 191.4], [1442985408.0, 93220000.0, 191.44], [1442987136.0, 93240000.0, 191.48], [1442988864.0, 93260000.0, 191.52], [1442990592.0, 93280000.0, 191.56], [1442992320.0, 93300000.0, 191.6], [1442994048.0, 93320000.0, 191.64000000000001], [1442995776.0, 93340000.0, 191.68], [1442997504.0, 93360000.0, 191.72], [1442999232.0, 93380000.0, 191.76], [1443000960.0, 93400000.0, 191.8], [1443002688.0, 93420000.0, 191.84], [1443004416.0, 93440000.0, 191.88], [1443006144.0, 93460000.0, 191.92000000000002], [1443007872.0, 93480000.0, 191.96], [1443009600.0, 93500000.0, 192.0], [1443011328.0, 93520000.0, 192.04000000000002], [1443013056.0, 93540000.0, 192.07999999999998], [1443014784.0, 93560000.0, 192.12], [1443016512.0, 93580000.0, 192.16000000000003], [1443018240.0, 93600000.0, 192.2], [1443019968.0, 93620000.0, 192.24], [1443021696.0, 93640000.0, 192.28000000000003], [1443023424.0, 93660000.0, 192.32], [1443025152.0, 93680000.0, 192.36], [1443026880.0, 93700000.0, 192.39999999999998], [1443028608.0, 93720000.0, 192.44], [1443030336.0, 93740000.0, 192.48000000000002], [1443032064.0, 93760000.0, 192.51999999999998], [1443033792.0, 93780000.0, 192.56], [1443035520.0, 93800000.0, 192.60000000000002], [1443037248.0, 93820000.0, 192.64], [1443038976.0, 93840000.0, 192.68], [1443040704.0, 93860000.0, 192.71999999999997], [1443042432.0, 93880000.0, 192.76], [1443044160.0, 93900000.0, 192.8], [1443045888.0, 93920000.0, 192.83999999999997], [1443047616.0, 93940000.0, 192.88], [1443049344.0, 93960000.0, 192.92000000000002], [1443051072.0, 93980000.0, 192.95999999999998], [1443052800.0, 94000000.0, 193.0], [1443054528.0, 94020000.0, 193.04], [1443056256.0, 94040000.0, 193.07999999999998], [1443057984.0, 94060000.0, 193.12], [1443059712.0, 94080000.0, 193.16], [1443061440.0, 94100000.0, 193.2], [1443063168.0, 94120000.0, 193.24], [1443064896.0, 94140000.0, 193.28], [1443066624.0, 94160000.0, 193.32], [1443068352.0, 94180000.0, 193.35999999999999], [1443070080.0, 94200000.0, 193.4], [1443071808.0, 94220000.0, 193.44], [1443073536.0, 94240000.0, 193.48], [1443075264.0, 94260000.0, 193.52], [1443076992.0, 94280000.0, 193.56], [1443078720.0, 94300000.0, 193.6], [1443080448.0, 94320000.0, 193.64000000000001], [1443082176.0, 94340000.0, 193.67999999999998], [1443083904.0, 94360000.0, 193.72], [1443085632.0, 94380000.0, 193.76000000000002], [1443087360.0, 94400000.0, 193.79999999999998], [1443089088.0, 94420000.0, 193.84], [1443090816.0, 94440000.0, 193.88000000000002], [1443092544.0, 94460000.0, 193.92], [1443094272.0, 94480000.0, 193.96], [1443096000.0, 94500000.0, 194.0], [1443097728.0, 94520000.0, 194.04], [1443099456.0, 94540000.0, 194.08], [1443101184.0, 94560000.0, 194.12], [1443102912.0, 94580000.0, 194.16], [1443104640.0, 94600000.0, 194.20000000000002], [1443106368.0, 94620000.0, 194.24], [1443108096.0, 94640000.0, 194.28], [1443109824.0, 94660000.0, 194.32], [1443111552.0, 94680000.0, 194.36], [1443113280.0, 94700000.0, 194.4], [1443115008.0, 94720000.0, 194.44], [1443116736.0, 94740000.0, 194.48000000000002], [1443118464.0, 94760000.0, 194.52], [1443120192.0, 94780000.0, 194.56], [1443121920.0, 94800000.0, 194.60000000000002], [1443123648.0, 94820000.0, 194.64], [1443125376.0, 94840000.0, 194.68], [1443127104.0, 94860000.0, 194.72000000000003], [1443128832.0, 94880000.0, 194.76], [1443130560.0, 94900000.0, 194.8], [1443132288.0, 94920000.0, 194.84000000000003], [1443134016.0, 94940000.0, 194.88], [1443135744.0, 94960000.0, 194.92000000000002], [1443137472.0, 94980000.0, 194.95999999999998], [1443139200.0, 95000000.0, 195.0], [1443140928.0, 95020000.0, 195.04000000000002], [1443142656.0, 95040000.0, 195.07999999999998], [1443144384.0, 95060000.0, 195.12], [1443146112.0, 95080000.0, 195.15999999999997], [1443147840.0, 95100000.0, 195.2], [1443149568.0, 95120000.0, 195.24], [1443151296.0, 95140000.0, 195.27999999999997], [1443153024.0, 95160000.0, 195.32], [1443154752.0, 95180000.0, 195.36], [1443156480.0, 95200000.0, 195.39999999999998], [1443158208.0, 95220000.0, 195.44], [1443159936.0, 95240000.0, 195.48], [1443161664.0, 95260000.0, 195.51999999999998], [1443163392.0, 95280000.0, 195.56], [1443165120.0, 95300000.0, 195.6], [1443166848.0, 95320000.0, 195.64], [1443168576.0, 95340000.0, 195.68], [1443170304.0, 95360000.0, 195.72], [1443172032.0, 95380000.0, 195.76], [1443173760.0, 95400000.0, 195.79999999999998], [1443175488.0, 95420000.0, 195.84], [1443177216.0, 95440000.0, 195.88], [1443178944.0, 95460000.0, 195.92], [1443180672.0, 95480000.0, 195.96], [1443182400.0, 95500000.0, 196.0], [1443184128.0, 95520000.0, 196.04], [1443185856.0, 95540000.0, 196.08], [1443187584.0, 95560000.0, 196.11999999999998], [1443189312.0, 95580000.0, 196.16], [1443191040.0, 95600000.0, 196.20000000000002], [1443192768.0, 95620000.0, 196.23999999999998], [1443194496.0, 95640000.0, 196.28], [1443196224.0, 95660000.0, 196.32000000000002], [1443197952.0, 95680000.0, 196.35999999999999], [1443199680.0, 95700000.0, 196.4], [1443201408.0, 95720000.0, 196.44], [1443203136.0, 95740000.0, 196.48], [1443204864.0, 95760000.0, 196.52], [1443206592.0, 95780000.0, 196.56], [1443208320.0, 95800000.0, 196.6], [1443210048.0, 95820000.0, 196.64000000000001], [1443211776.0, 95840000.0, 196.68], [1443213504.0, 95860000.0, 196.72], [1443215232.0, 95880000.0, 196.76], [1443216960.0, 95900000.0, 196.8], [1443218688.0, 95920000.0, 196.84], [1443220416.0, 95940000.0, 196.88], [1443222144.0, 95960000.0, 196.92000000000002], [1443223872.0, 95980000.0, 196.96], [1443225600.0, 96000000.0, 197.0], [1443227328.0, 96020000.0, 197.04000000000002], [1443229056.0, 96040000.0, 197.07999999999998], [1443230784.0, 96060000.0, 197.12], [1443232512.0, 96080000.0, 197.16000000000003], [1443234240.0, 96100000.0, 197.2], [1443235968.0, 96120000.0, 197.24], [1443237696.0, 96140000.0, 197.28000000000003], [1443239424.0, 96160000.0, 197.32], [1443241152.0, 96180000.0, 197.36], [1443242880.0, 96200000.0, 197.39999999999998], [1443244608.0, 96220000.0, 197.44], [1443246336.0, 96240000.0, 197.48000000000002], [1443248064.0, 96260000.0, 197.51999999999998], [1443249792.0, 96280000.0, 197.56], [1443251520.0, 96300000.0, 197.60000000000002], [1443253248.0, 96320000.0, 197.64], [1443254976.0, 96340000.0, 197.68], [1443256704.0, 96360000.0, 197.71999999999997], [1443258432.0, 96380000.0, 197.76], [1443260160.0, 96400000.0, 197.8], [1443261888.0, 96420000.0, 197.83999999999997], [1443263616.0, 96440000.0, 197.88], [1443265344.0, 96460000.0, 197.92000000000002], [1443267072.0, 96480000.0, 197.95999999999998], [1443268800.0, 96500000.0, 198.0], [1443270528.0, 96520000.0, 198.04], [1443272256.0, 96540000.0, 198.07999999999998], [1443273984.0, 96560000.0, 198.12], [1443275712.0, 96580000.0, 198.16], [1443277440.0, 96600000.0, 198.2], [1443279168.0, 96620000.0, 198.24], [1443280896.0, 96640000.0, 198.28], [1443282624.0, 96660000.0, 198.32], [1443284352.0, 96680000.0, 198.35999999999999], [1443286080.0, 96700000.0, 198.4], [1443287808.0, 96720000.0, 198.44], [1443289536.0, 96740000.0, 198.48], [1443291264.0, 96760000.0, 198.52], [1443292992.0, 96780000.0, 198.56], [1443294720.0, 96800000.0, 198.6], [1443296448.0, 96820000.0, 198.64000000000001], [1443298176.0, 96840000.0, 198.67999999999998], [1443299904.0, 96860000.0, 198.72], [1443301632.0, 96880000.0, 198.76000000000002], [1443303360.0, 96900000.0, 198.79999999999998], [1443305088.0, 96920000.0, 198.84], [1443306816.0, 96940000.0, 198.88000000000002], [1443308544.0, 96960000.0, 198.92], [1443310272.0, 96980000.0, 198.96], [1443312000.0, 97000000.0, 199.0], [1443313728.0, 97020000.0, 199.04], [1443315456.0, 97040000.0, 199.08], [1443317184.0, 97060000.0, 199.12], [1443318912.0, 97080000.0, 199.16], [1443320640.0, 97100000.0, 199.20000000000002], [1443322368.0, 97120000.0, 199.24], [1443324096.0, 97140000.0, 199.28], [1443325824.0, 97160000.0, 199.32], [1443327552.0, 97180000.0, 199.36], [1443329280.0, 97200000.0, 199.4], [1443331008.0, 97220000.0, 199.44], [1443332736.0, 97240000.0, 199.48000000000002], [1443334464.0, 97260000.0, 199.52], [1443336192.0, 97280000.0, 199.56], [1443337920.0, 97300000.0, 199.60000000000002], [1443339648.0, 97320000.0, 199.64], [1443341376.0, 97340000.0, 199.68], [1443343104.0, 97360000.0, 199.72000000000003], [1443344832.0, 97380000.0, 199.76], [1443346560.0, 97400000.0, 199.8], [1443348288.0, 97420000.0, 199.84000000000003], [1443350016.0, 97440000.0, 199.88], [1443351744.0, 97460000.0, 199.92000000000002], [1443353472.0, 97480000.0, 199.95999999999998], [1443355200.0, 97500000.0, 200.0], [1443356928.0, 97520000.0, 200.04000000000002], [1443358656.0, 97540000.0, 200.07999999999998], [1443360384.0, 97560000.0, 200.12], [1443362112.0, 97580000.0, 200.15999999999997], [1443363840.0, 97600000.0, 200.2], [1443365568.0, 97620000.0, 200.24], [1443367296.0, 97640000.0, 200.27999999999997], [1443369024.0, 97660000.0, 200.32], [1443370752.0, 97680000.0, 200.36], [1443372480.0, 97700000.0, 200.39999999999998], [1443374208.0, 97720000.0, 200.44], [1443375936.0, 97740000.0, 200.48], [1443377664.0, 97760000.0, 200.51999999999998], [1443379392.0, 97780000.0, 200.56], [1443381120.0, 97800000.0, 200.6], [1443382848.0, 97820000.0, 200.64], [1443384576.0, 97840000.0, 200.68], [1443386304.0, 97860000.0, 200.72], [1443388032.0, 97880000.0, 200.76], [1443389760.0, 97900000.0, 200.79999999999998], [1443391488.0, 97920000.0, 200.84], [1443393216.0, 97940000.0, 200.88], [1443394944.0, 97960000.0, 200.92], [1443396672.0, 97980000.0, 200.96], [1443398400.0, 98000000.0, 201.0], [1443400128.0, 98020000.0, 201.04], [1443401856.0, 98040000.0, 201.08], [1443403584.0, 98060000.0, 201.11999999999998], [1443405312.0, 98080000.0, 201.16], [1443407040.0, 98100000.0, 201.20000000000002], [1443408768.0, 98120000.0, 201.23999999999998], [1443410496.0, 98140000.0, 201.28], [1443412224.0, 98160000.0, 201.32000000000002], [1443413952.0, 98180000.0, 201.35999999999999], [1443415680.0, 98200000.0, 201.4], [1443417408.0, 98220000.0, 201.44], [1443419136.0, 98240000.0, 201.48], [1443420864.0, 98260000.0, 201.52], [1443422592.0, 98280000.0, 201.56], [1443424320.0, 98300000.0, 201.6], [1443426048.0, 98320000.0, 201.64000000000001], [1443427776.0, 98340000.0, 201.68], [1443429504.0, 98360000.0, 201.72], [1443431232.0, 98380000.0, 201.76], [1443432960.0, 98400000.0, 201.8], [1443434688.0, 98420000.0, 201.84], [1443436416.0, 98440000.0, 201.88], [1443438144.0, 98460000.0, 201.92000000000002], [1443439872.0, 98480000.0, 201.96], [1443441600.0, 98500000.0, 202.0], [1443443328.0, 98520000.0, 202.04000000000002], [1443445056.0, 98540000.0, 202.07999999999998], [1443446784.0, 98560000.0, 202.12], [1443448512.0, 98580000.0, 202.16000000000003], [1443450240.0, 98600000.0, 202.2], [1443451968.0, 98620000.0, 202.24], [1443453696.0, 98640000.0, 202.28000000000003], [1443455424.0, 98660000.0, 202.32], [1443457152.0, 98680000.0, 202.36], [1443458880.0, 98700000.0, 202.39999999999998], [1443460608.0, 98720000.0, 202.44], [1443462336.0, 98740000.0, 202.48000000000002], [1443464064.0, 98760000.0, 202.51999999999998], [1443465792.0, 98780000.0, 202.56], [1443467520.0, 98800000.0, 202.60000000000002], [1443469248.0, 98820000.0, 202.64], [1443470976.0, 98840000.0, 202.68], [1443472704.0, 98860000.0, 202.71999999999997], [1443474432.0, 98880000.0, 202.76], [1443476160.0, 98900000.0, 202.8], [1443477888.0, 98920000.0, 202.83999999999997], [1443479616.0, 98940000.0, 202.88], [1443481344.0, 98960000.0, 202.92000000000002], [1443483072.0, 98980000.0, 202.95999999999998], [1443484800.0, 99000000.0, 203.0], [1443486528.0, 99020000.0, 203.04], [1443488256.0, 99040000.0, 203.07999999999998], [1443489984.0, 99060000.0, 203.12], [1443491712.0, 99080000.0, 203.16], [1443493440.0, 99100000.0, 203.2], [1443495168.0, 99120000.0, 203.24], [1443496896.0, 99140000.0, 203.28], [1443498624.0, 99160000.0, 203.32], [1443500352.0, 99180000.0, 203.35999999999999], [1443502080.0, 99200000.0, 203.4], [1443503808.0, 99220000.0, 203.44], [1443505536.0, 99240000.0, 203.48], [1443507264.0, 99260000.0, 203.52], [1443508992.0, 99280000.0, 203.56], [1443510720.0, 99300000.0, 203.6], [1443512448.0, 99320000.0, 203.64000000000001], [1443514176.0, 99340000.0, 203.67999999999998], [1443515904.0, 99360000.0, 203.72], [1443517632.0, 99380000.0, 203.76000000000002], [1443519360.0, 99400000.0, 203.79999999999998], [1443521088.0, 99420000.0, 203.84], [1443522816.0, 99440000.0, 203.88000000000002], [1443524544.0, 99460000.0, 203.92], [1443526272.0, 99480000.0, 203.96], [1443528000.0, 99500000.0, 204.0], [1443529728.0, 99520000.0, 204.04], [1443531456.0, 99540000.0, 204.08], [1443533184.0, 99560000.0, 204.12], [1443534912.0, 99580000.0, 204.16], [1443536640.0, 99600000.0, 204.20000000000002], [1443538368.0, 99620000.0, 204.24], [1443540096.0, 99640000.0, 204.28], [1443541824.0, 99660000.0, 204.32], [1443543552.0, 99680000.0, 204.36], [1443545280.0, 99700000.0, 204.4], [1443547008.0, 99720000.0, 204.44], [1443548736.0, 99740000.0, 204.48000000000002], [1443550464.0, 99760000.0, 204.52], [1443552192.0, 99780000.0, 204.56], [1443553920.0, 99800000.0, 204.60000000000002], [1443555648.0, 99820000.0, 204.64], [1443557376.0, 99840000.0, 204.68], [1443559104.0, 99860000.0, 204.72000000000003], [1443560832.0, 99880000.0, 204.76], [1443562560.0, 99900000.0, 204.8], [1443564288.0, 99920000.0, 204.84000000000003], [1443566016.0, 99940000.0, 204.88], [1443567744.0, 99960000.0, 204.92000000000002], [1443569472.0, 99980000.0, 204.95999999999998]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/app/demo/data/poly5-graph.pbtxt b/tensorflow/tensorboard/app/demo/data/poly5-graph.pbtxt new file mode 100644 index 0000000000..5bf8834752 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/poly5-graph.pbtxt @@ -0,0 +1,14 @@ +node { + name: "A" + op: "Input" +} +node { + name: "B" + op: "Input" +} +node { + name: "C" + op: "MatMul" + input: "A" + input: "B" +} diff --git a/tensorflow/tensorboard/app/demo/data/poly5.json b/tensorflow/tensorboard/app/demo/data/poly5.json new file mode 100644 index 0000000000..bd885f3be9 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/poly5.json @@ -0,0 +1 @@ +[[1434931200.0, 0.0, 0.0], [1434932928.0, 20000.0, 1.9960079840320003e-06], [1434934656.0, 40000.0, 3.9840637450240005e-06], [1434936384.0, 60000.0, 5.964214711776e-06], [1434938112.0, 80000.0, 7.936507936768e-06], [1434939840.0, 100000.0, 9.9009901e-06], [1434941568.0, 120000.0, 1.1857707512831999e-05], [1434943296.0, 140000.0, 1.3806706121824001e-05], [1434945024.0, 160000.0, 1.5748031512576e-05], [1434946752.0, 180000.0, 1.7681728913568e-05], [1434948480.0, 200000.0, 1.96078432e-05], [1434950208.0, 220000.0, 2.1526418897632e-05], [1434951936.0, 240000.0, 2.3437500186624e-05], [1434953664.0, 260000.0, 2.5341130905376e-05], [1434955392.0, 280000.0, 2.7237354554368002e-05], [1434957120.0, 300000.0, 2.91262143e-05], [1434958848.0, 320000.0, 3.1007752978432e-05], [1434960576.0, 340000.0, 3.2882013099424006e-05], [1434962304.0, 360000.0, 3.4749036850175996e-05], [1434964032.0, 380000.0, 3.6608866099167997e-05], [1434965760.0, 400000.0, 3.84615424e-05], [1434967488.0, 420000.0, 4.0307106995232e-05], [1434969216.0, 440000.0, 4.2145600820224e-05], [1434970944.0, 460000.0, 4.3977064506975996e-05], [1434972672.0, 480000.0, 4.5801538387968e-05], [1434974400.0, 500000.0, 4.76190625e-05], [1434976128.0, 520000.0, 4.9429676588031996e-05], [1434977856.0, 540000.0, 5.1233420109024e-05], [1434979584.0, 560000.0, 5.3030332235776005e-05], [1434981312.0, 580000.0, 5.482045186076801e-05], [1434983040.0, 600000.0, 5.66038176e-05], [1434984768.0, 620000.0, 5.8380467796832e-05], [1434986496.0, 640000.0, 6.0150440525824e-05], [1434988224.0, 660000.0, 6.1913773596576e-05], [1434989952.0, 680000.0, 6.367050455756801e-05], [1434991680.0, 700000.0, 6.542067070000001e-05], [1434993408.0, 720000.0, 6.7164309061632e-05], [1434995136.0, 740000.0, 6.890145643062399e-05], [1434996864.0, 760000.0, 7.0632149349376e-05], [1434998592.0, 780000.0, 7.2356424118368e-05], [1435000320.0, 800000.0, 7.407431679999999e-05], [1435002048.0, 820000.0, 7.5785863222432e-05], [1435003776.0, 840000.0, 7.7491098983424e-05], [1435005504.0, 860000.0, 7.919005945417599e-05], [1435007232.0, 880000.0, 8.088277978316798e-05], [1435008960.0, 900000.0, 8.25692949e-05], [1435010688.0, 920000.0, 8.4249639519232e-05], [1435012416.0, 940000.0, 8.5923848144224e-05], [1435014144.0, 960000.0, 8.7591955070976e-05], [1435015872.0, 980000.0, 8.9253994391968e-05], [1435017600.0, 1000000.0, 9.091000000000001e-05], [1435019328.0, 1020000.0, 9.2560005592032e-05], [1435021056.0, 1040000.0, 9.4204044673024e-05], [1435022784.0, 1060000.0, 9.584215055977599e-05], [1435024512.0, 1080000.0, 9.7474356384768e-05], [1435026240.0, 1100000.0, 9.91006951e-05], [1435027968.0, 1120000.0, 0.000100721199480832], [1435029696.0, 1140000.0, 0.00010233590212982401], [1435031424.0, 1160000.0, 0.000103944835480576], [1435033152.0, 1180000.0, 0.000105548031801568], [1435034880.0, 1200000.0, 0.0001071455232], [1435036608.0, 1220000.0, 0.000108737341625632], [1435038336.0, 1240000.0, 0.00011032351887462399], [1435040064.0, 1260000.0, 0.000111904086593376], [1435041792.0, 1280000.0, 0.000113479076282368], [1435043520.0, 1300000.0, 0.0001150485193], [1435045248.0, 1320000.0, 0.000116612446866432], [1435046976.0, 1340000.0, 0.00011817089006742401], [1435048704.0, 1360000.0, 0.000119723879858176], [1435050432.0, 1380000.0, 0.000121271447067168], [1435052160.0, 1400000.0, 0.00012281362240000002], [1435053888.0, 1420000.0, 0.000124350436443232], [1435055616.0, 1440000.0, 0.00012588191966822398], [1435057344.0, 1460000.0, 0.000127408102434976], [1435059072.0, 1480000.0, 0.000128929014995968], [1435060800.0, 1500000.0, 0.00013044468749999998], [1435062528.0, 1520000.0, 0.000131955149996032], [1435064256.0, 1540000.0, 0.000133460432437024], [1435065984.0, 1560000.0, 0.000134960564683776], [1435067712.0, 1580000.0, 0.000136455576508768], [1435069440.0, 1600000.0, 0.0001379454976], [1435071168.0, 1620000.0, 0.00013943035756483203], [1435072896.0, 1640000.0, 0.000140910185933824], [1435074624.0, 1660000.0, 0.000142385012164576], [1435076352.0, 1680000.0, 0.000143854865645568], [1435078080.0, 1700000.0, 0.0001453197757], [1435079808.0, 1720000.0, 0.000146779771589632], [1435081536.0, 1740000.0, 0.00014823488251862398], [1435083264.0, 1760000.0, 0.00014968513763737598], [1435084992.0, 1780000.0, 0.00015113056604636798], [1435086720.0, 1800000.0, 0.00015257119680000002], [1435088448.0, 1820000.0, 0.00015400705891043198], [1435090176.0, 1840000.0, 0.00015543818135142402], [1435091904.0, 1860000.0, 0.000156864593062176], [1435093632.0, 1880000.0, 0.000158286322951168], [1435095360.0, 1900000.0, 0.0001597033999], [1435097088.0, 1920000.0, 0.000161115852767232], [1435098816.0, 1940000.0, 0.00016252371039222403], [1435100544.0, 1960000.0, 0.000163927001598976], [1435102272.0, 1980000.0, 0.000165325755199968], [1435104000.0, 2000000.0, 0.00016672], [1435105728.0, 2020000.0, 0.000168109764800032], [1435107456.0, 2040000.0, 0.00016949507840102398], [1435109184.0, 2060000.0, 0.00017087596960777598], [1435110912.0, 2080000.0, 0.00017225246723276798], [1435112640.0, 2100000.0, 0.0001736246001], [1435114368.0, 2120000.0, 0.000174992397048832], [1435116096.0, 2140000.0, 0.000176355886937824], [1435117824.0, 2160000.0, 0.000177715098648576], [1435119552.0, 2180000.0, 0.000179070061089568], [1435121280.0, 2200000.0, 0.0001804208032], [1435123008.0, 2220000.0, 0.000181767353953632], [1435124736.0, 2240000.0, 0.000183109742362624], [1435126464.0, 2260000.0, 0.000184447997481376], [1435128192.0, 2280000.0, 0.000185782148410368], [1435129920.0, 2300000.0, 0.0001871122243], [1435131648.0, 2320000.0, 0.00018843825435443202], [1435133376.0, 2340000.0, 0.00018976026783542398], [1435135104.0, 2360000.0, 0.000191078294066176], [1435136832.0, 2380000.0, 0.000192392362435168], [1435138560.0, 2400000.0, 0.0001937025024], [1435140288.0, 2420000.0, 0.00019500874349123197], [1435142016.0, 2440000.0, 0.000196311115316224], [1435143744.0, 2460000.0, 0.000197609647562976], [1435145472.0, 2480000.0, 0.000198904370003968], [1435147200.0, 2500000.0, 0.0002001953125], [1435148928.0, 2520000.0, 0.000201482505004032], [1435150656.0, 2540000.0, 0.000202765977565024], [1435152384.0, 2560000.0, 0.000204045760331776], [1435154112.0, 2580000.0, 0.00020532188355676801], [1435155840.0, 2600000.0, 0.00020659437759999998], [1435157568.0, 2620000.0, 0.000207863272932832], [1435159296.0, 2640000.0, 0.000209128600141824], [1435161024.0, 2660000.0, 0.000210390389932576], [1435162752.0, 2680000.0, 0.000211648673133568], [1435164480.0, 2700000.0, 0.0002129034807], [1435166208.0, 2720000.0, 0.000214154843717632], [1435167936.0, 2740000.0, 0.000215402793406624], [1435169664.0, 2760000.0, 0.00021664736112537604], [1435171392.0, 2780000.0, 0.000217888578374368], [1435173120.0, 2800000.0, 0.00021912647680000002], [1435174848.0, 2820000.0, 0.00022036108819843198], [1435176576.0, 2840000.0, 0.00022159244451942398], [1435178304.0, 2860000.0, 0.000222820577870176], [1435180032.0, 2880000.0, 0.000224045520519168], [1435181760.0, 2900000.0, 0.00022526730489999997], [1435183488.0, 2920000.0, 0.000226485963615232], [1435185216.0, 2940000.0, 0.00022770152944022397], [1435186944.0, 2960000.0, 0.000228914035326976], [1435188672.0, 2980000.0, 0.00023012351440796798], [1435190400.0, 3000000.0, 0.00023132999999999997], [1435192128.0, 3020000.0, 0.00023253352560803197], [1435193856.0, 3040000.0, 0.000233734124929024], [1435195584.0, 3060000.0, 0.00023493183185577598], [1435197312.0, 3080000.0, 0.00023612668048076797], [1435199040.0, 3100000.0, 0.0002373187051], [1435200768.0, 3120000.0, 0.000238507940216832], [1435202496.0, 3140000.0, 0.000239694420545824], [1435204224.0, 3160000.0, 0.00024087818101657598], [1435205952.0, 3180000.0, 0.00024205925677756802], [1435207680.0, 3200000.0, 0.0002432376832], [1435209408.0, 3220000.0, 0.000244413495881632], [1435211136.0, 3240000.0, 0.000245586730650624], [1435212864.0, 3260000.0, 0.000246757423569376], [1435214592.0, 3280000.0, 0.000247925610938368], [1435216320.0, 3300000.0, 0.0002490913293], [1435218048.0, 3320000.0, 0.000250254615442432], [1435219776.0, 3340000.0, 0.00025141550640342403], [1435221504.0, 3360000.0, 0.00025257403947417603], [1435223232.0, 3380000.0, 0.00025373025220316804], [1435224960.0, 3400000.0, 0.0002548841824], [1435226688.0, 3420000.0, 0.000256035868139232], [1435228416.0, 3440000.0, 0.000257185347764224], [1435230144.0, 3460000.0, 0.00025833265989097596], [1435231872.0, 3480000.0, 0.000259477843411968], [1435233600.0, 3500000.0, 0.0002606209375], [1435235328.0, 3520000.0, 0.000261761981612032], [1435237056.0, 3540000.0, 0.00026290101549302403], [1435238784.0, 3560000.0, 0.000264038079179776], [1435240512.0, 3580000.0, 0.00026517321300476796], [1435242240.0, 3600000.0, 0.0002663064576], [1435243968.0, 3620000.0, 0.00026743785390083197], [1435245696.0, 3640000.0, 0.000268567443149824], [1435247424.0, 3660000.0, 0.000269695266900576], [1435249152.0, 3680000.0, 0.000270821367021568], [1435250880.0, 3700000.0, 0.0002719457857], [1435252608.0, 3720000.0, 0.00027306856544563195], [1435254336.0, 3740000.0, 0.000274189749094624], [1435256064.0, 3760000.0, 0.000275309379813376], [1435257792.0, 3780000.0, 0.00027642750110236803], [1435259520.0, 3800000.0, 0.00027754415679999997], [1435261248.0, 3820000.0, 0.000278659391086432], [1435262976.0, 3840000.0, 0.00027977324848742403], [1435264704.0, 3860000.0, 0.000280885773878176], [1435266432.0, 3880000.0, 0.000281997012487168], [1435268160.0, 3900000.0, 0.0002831070099], [1435269888.0, 3920000.0, 0.00028421581206323197], [1435271616.0, 3940000.0, 0.000285323465288224], [1435273344.0, 3960000.0, 0.000286430016254976], [1435275072.0, 3980000.0, 0.000287535512015968], [1435276800.0, 4000000.0, 0.00028864], [1435278528.0, 4020000.0, 0.00028974352801603196], [1435280256.0, 4040000.0, 0.00029084614425702406], [1435281984.0, 4060000.0, 0.000291947897303776], [1435283712.0, 4080000.0, 0.00029304883612876797], [1435285440.0, 4100000.0, 0.0002941490101], [1435287168.0, 4120000.0, 0.000295248468984832], [1435288896.0, 4140000.0, 0.00029634726295382394], [1435290624.0, 4160000.0, 0.000297445442584576], [1435292352.0, 4180000.0, 0.000298543058865568], [1435294080.0, 4200000.0, 0.00029964016319999995], [1435295808.0, 4220000.0, 0.000300736807409632], [1435297536.0, 4240000.0, 0.00030183304373862394], [1435299264.0, 4260000.0, 0.000302928924857376], [1435300992.0, 4280000.0, 0.000304024503866368], [1435302720.0, 4300000.0, 0.0003051198343], [1435304448.0, 4320000.0, 0.00030621497013043195], [1435306176.0, 4340000.0, 0.000307309965771424], [1435307904.0, 4360000.0, 0.000308404876082176], [1435309632.0, 4380000.0, 0.000309499756371168], [1435311360.0, 4400000.0, 0.0003105946624], [1435313088.0, 4420000.0, 0.000311689650387232], [1435314816.0, 4440000.0, 0.000312784777012224], [1435316544.0, 4460000.0, 0.000313880099418976], [1435318272.0, 4480000.0, 0.000314975675219968], [1435320000.0, 4500000.0, 0.0003160715625], [1435321728.0, 4520000.0, 0.000317167819820032], [1435323456.0, 4540000.0, 0.000318264506221024], [1435325184.0, 4560000.0, 0.000319361681227776], [1435326912.0, 4580000.0, 0.00032045940485276805], [1435328640.0, 4600000.0, 0.0003215577376], [1435330368.0, 4620000.0, 0.000322656740468832], [1435332096.0, 4640000.0, 0.000323756474957824], [1435333824.0, 4660000.0, 0.000324857003068576], [1435335552.0, 4680000.0, 0.000325958387309568], [1435337280.0, 4700000.0, 0.00032706069069999996], [1435339008.0, 4720000.0, 0.00032816397677363194], [1435340736.0, 4740000.0, 0.000329268309582624], [1435342464.0, 4760000.0, 0.000330373753701376], [1435344192.0, 4780000.0, 0.000331480374230368], [1435345920.0, 4800000.0, 0.0003325882368], [1435347648.0, 4820000.0, 0.000333697407574432], [1435349376.0, 4840000.0, 0.000334807953255424], [1435351104.0, 4860000.0, 0.000335919941086176], [1435352832.0, 4880000.0, 0.000337033438855168], [1435354560.0, 4900000.0, 0.0003381485149], [1435356288.0, 4920000.0, 0.000339265238111232], [1435358016.0, 4940000.0, 0.00034038367793622396], [1435359744.0, 4960000.0, 0.000341503904382976], [1435361472.0, 4980000.0, 0.00034262598802396797], [1435363200.0, 5000000.0, 0.00034375], [1435364928.0, 5020000.0, 0.00034487601202403203], [1435366656.0, 5040000.0, 0.000346004096385024], [1435368384.0, 5060000.0, 0.000347134325951776], [1435370112.0, 5080000.0, 0.000348266774176768], [1435371840.0, 5100000.0, 0.0003494015151000001], [1435373568.0, 5120000.0, 0.00035053862335283204], [1435375296.0, 5140000.0, 0.00035167817416182403], [1435377024.0, 5160000.0, 0.000352820243352576], [1435378752.0, 5180000.0, 0.000353964907353568], [1435380480.0, 5200000.0, 0.0003551122432], [1435382208.0, 5220000.0, 0.0003562623285376321], [1435383936.0, 5240000.0, 0.00035741524162662396], [1435385664.0, 5260000.0, 0.000358571061345376], [1435387392.0, 5280000.0, 0.000359729867194368], [1435389120.0, 5300000.0, 0.0003608917393], [1435390848.0, 5320000.0, 0.000362056758418432], [1435392576.0, 5340000.0, 0.00036322500593942403], [1435394304.0, 5360000.0, 0.000364396563890176], [1435396032.0, 5380000.0, 0.00036557151493916805], [1435397760.0, 5400000.0, 0.00036674994240000003], [1435399488.0, 5420000.0, 0.00036793193023523205], [1435401216.0, 5440000.0, 0.000369117563060224], [1435402944.0, 5460000.0, 0.00037030692614697605], [1435404672.0, 5480000.0, 0.000371500105427968], [1435406400.0, 5500000.0, 0.0003726971875], [1435408128.0, 5520000.0, 0.0003738982596280321], [1435409856.0, 5540000.0, 0.000375103409749024], [1435411584.0, 5560000.0, 0.00037631272647577603], [1435413312.0, 5580000.0, 0.000377526299100768], [1435415040.0, 5600000.0, 0.00037874421760000006], [1435416768.0, 5620000.0, 0.000379966572636832], [1435418496.0, 5640000.0, 0.00038119345556582394], [1435420224.0, 5660000.0, 0.000382424958436576], [1435421952.0, 5680000.0, 0.00038366117399756797], [1435423680.0, 5700000.0, 0.00038490219569999994], [1435425408.0, 5720000.0, 0.000386148117701632], [1435427136.0, 5740000.0, 0.000387399034870624], [1435428864.0, 5760000.0, 0.00038865504278937595], [1435430592.0, 5780000.0, 0.000389916237758368], [1435432320.0, 5800000.0, 0.00039118271679999995], [1435434048.0, 5820000.0, 0.000392454577662432], [1435435776.0, 5840000.0, 0.00039373191882342395], [1435437504.0, 5860000.0, 0.00039501483949417595], [1435439232.0, 5880000.0, 0.000396303439623168], [1435440960.0, 5900000.0, 0.00039759781989999997], [1435442688.0, 5920000.0, 0.00039889808175923205], [1435444416.0, 5940000.0, 0.00040020432738422393], [1435446144.0, 5960000.0, 0.000401516659710976], [1435447872.0, 5980000.0, 0.00040283518243196796], [1435449600.0, 6000000.0, 0.00040416], [1435451328.0, 6020000.0, 0.000405491217632032], [1435453056.0, 6040000.0, 0.000406828941313024], [1435454784.0, 6060000.0, 0.000408173277799776], [1435456512.0, 6080000.0, 0.00040952433462476803], [1435458240.0, 6100000.0, 0.00041088222009999997], [1435459968.0, 6120000.0, 0.00041224704332083203], [1435461696.0, 6140000.0, 0.00041361891416982397], [1435463424.0, 6160000.0, 0.00041499794332057596], [1435465152.0, 6180000.0, 0.000416384242241568], [1435466880.0, 6200000.0, 0.00041777792319999994], [1435468608.0, 6220000.0, 0.000419179099265632], [1435470336.0, 6240000.0, 0.000420587884314624], [1435472064.0, 6260000.0, 0.000422004393033376], [1435473792.0, 6280000.0, 0.000423428740922368], [1435475520.0, 6300000.0, 0.0004248610443], [1435477248.0, 6320000.0, 0.00042630142030643204], [1435478976.0, 6340000.0, 0.00042774998690742395], [1435480704.0, 6360000.0, 0.000429206862898176], [1435482432.0, 6380000.0, 0.000430672167907168], [1435484160.0, 6400000.0, 0.00043214602240000005], [1435485888.0, 6420000.0, 0.000433628547683232], [1435487616.0, 6440000.0, 0.00043511986590822395], [1435489344.0, 6460000.0, 0.00043662010007497606], [1435491072.0, 6480000.0, 0.00043812937403596804], [1435492800.0, 6500000.0, 0.00043964781249999994], [1435494528.0, 6520000.0, 0.000441175541036032], [1435496256.0, 6540000.0, 0.000442712686077024], [1435497984.0, 6560000.0, 0.000444259374923776], [1435499712.0, 6580000.0, 0.000445815735748768], [1435501440.0, 6600000.0, 0.00044738189760000003], [1435503168.0, 6620000.0, 0.0004489579904048321], [1435504896.0, 6640000.0, 0.000450544144973824], [1435506624.0, 6660000.0, 0.00045214049300457604], [1435508352.0, 6680000.0, 0.000453747167085568], [1435510080.0, 6700000.0, 0.0004553643007], [1435511808.0, 6720000.0, 0.00045699202822963204], [1435513536.0, 6740000.0, 0.000458630484958624], [1435515264.0, 6760000.0, 0.00046027980707737603], [1435516992.0, 6780000.0, 0.00046194013168636807], [1435518720.0, 6800000.0, 0.0004636115968], [1435520448.0, 6820000.0, 0.000465294341350432], [1435522176.0, 6840000.0, 0.0004669885051914241], [1435523904.0, 6860000.0, 0.000468694229102176], [1435525632.0, 6880000.0, 0.0004704116547911679], [1435527360.0, 6900000.0, 0.0004721409249], [1435529088.0, 6920000.0, 0.00047388218300723194], [1435530816.0, 6940000.0, 0.000475635573632224], [1435532544.0, 6960000.0, 0.00047740124223897597], [1435534272.0, 6980000.0, 0.000479179335239968], [1435536000.0, 7000000.0, 0.00048096999999999994], [1435537728.0, 7020000.0, 0.0004827733848400319], [1435539456.0, 7040000.0, 0.000484589639041024], [1435541184.0, 7060000.0, 0.000486418912847776], [1435542912.0, 7080000.0, 0.000488261357472768], [1435544640.0, 7100000.0, 0.0004901171250999999], [1435546368.0, 7120000.0, 0.0004919863688888319], [1435548096.0, 7140000.0, 0.0004938692429778239], [1435549824.0, 7160000.0, 0.0004957659024885758], [1435551552.0, 7180000.0, 0.0004976765035295679], [1435553280.0, 7200000.0, 0.0004996012032], [1435555008.0, 7220000.0, 0.000501540159593632], [1435556736.0, 7240000.0, 0.0005034935318026239], [1435558464.0, 7260000.0, 0.0005054614799213759], [1435560192.0, 7280000.0, 0.0005074441650503679], [1435561920.0, 7300000.0, 0.0005094417493000001], [1435563648.0, 7320000.0, 0.000511454395794432], [1435565376.0, 7340000.0, 0.0005134822686754239], [1435567104.0, 7360000.0, 0.000515525533106176], [1435568832.0, 7380000.0, 0.000517584355275168], [1435570560.0, 7400000.0, 0.0005196589024], [1435572288.0, 7420000.0, 0.0005217493427312321], [1435574016.0, 7440000.0, 0.000523855845556224], [1435575744.0, 7460000.0, 0.0005259785812029759], [1435577472.0, 7480000.0, 0.0005281177210439681], [1435579200.0, 7500000.0, 0.0005302734375], [1435580928.0, 7520000.0, 0.000532445904044032], [1435582656.0, 7540000.0, 0.0005346352952050239], [1435584384.0, 7560000.0, 0.000536841786571776], [1435586112.0, 7580000.0, 0.000539065554796768], [1435587840.0, 7600000.0, 0.0005413067776], [1435589568.0, 7620000.0, 0.000543565633772832], [1435591296.0, 7640000.0, 0.000545842303181824], [1435593024.0, 7660000.0, 0.0005481369667725759], [1435594752.0, 7680000.0, 0.000550449806573568], [1435596480.0, 7700000.0, 0.0005527810057], [1435598208.0, 7720000.0, 0.000555130748357632], [1435599936.0, 7740000.0, 0.000557499219846624], [1435601664.0, 7760000.0, 0.000559886606565376], [1435603392.0, 7780000.0, 0.000562293096014368], [1435605120.0, 7800000.0, 0.0005647188768], [1435606848.0, 7820000.0, 0.0005671641386384321], [1435608576.0, 7840000.0, 0.000569629072359424], [1435610304.0, 7860000.0, 0.000572113869910176], [1435612032.0, 7880000.0, 0.0005746187243591681], [1435613760.0, 7900000.0, 0.0005771438299], [1435615488.0, 7920000.0, 0.000579689381855232], [1435617216.0, 7940000.0, 0.000582255576680224], [1435618944.0, 7960000.0, 0.000584842611966976], [1435620672.0, 7980000.0, 0.000587450686447968], [1435622400.0, 8000000.0, 0.0005900800000000001], [1435624128.0, 8020000.0, 0.0005927307536480321], [1435625856.0, 8040000.0, 0.000595403149569024], [1435627584.0, 8060000.0, 0.0005980973910957761], [1435629312.0, 8080000.0, 0.000600813682720768], [1435631040.0, 8100000.0, 0.0006035522301000001], [1435632768.0, 8120000.0, 0.0006063132400568321], [1435634496.0, 8140000.0, 0.0006090969205858239], [1435636224.0, 8160000.0, 0.0006119034808565759], [1435637952.0, 8180000.0, 0.0006147331312175679], [1435639680.0, 8200000.0, 0.0006175860832], [1435641408.0, 8220000.0, 0.0006204625495216319], [1435643136.0, 8240000.0, 0.000623362744090624], [1435644864.0, 8260000.0, 0.0006262868820093761], [1435646592.0, 8280000.0, 0.0006292351795783679], [1435648320.0, 8300000.0, 0.0006322078543], [1435650048.0, 8320000.0, 0.000635205124882432], [1435651776.0, 8340000.0, 0.000638227211243424], [1435653504.0, 8360000.0, 0.000641274334514176], [1435655232.0, 8380000.0, 0.0006443467170431681], [1435656960.0, 8400000.0, 0.0006474445823999999], [1435658688.0, 8420000.0, 0.0006505681553792321], [1435660416.0, 8440000.0, 0.000653717662004224], [1435662144.0, 8460000.0, 0.000656893329530976], [1435663872.0, 8480000.0, 0.0006600953864519678], [1435665600.0, 8500000.0, 0.0006633240624999999], [1435667328.0, 8520000.0, 0.000666579588652032], [1435669056.0, 8540000.0, 0.0006698621971330239], [1435670784.0, 8560000.0, 0.0006731721214197759], [1435672512.0, 8580000.0, 0.000676509596244768], [1435674240.0, 8600000.0, 0.0006798748576], [1435675968.0, 8620000.0, 0.0006832681427408321], [1435677696.0, 8640000.0, 0.000686689690189824], [1435679424.0, 8660000.0, 0.000690139739740576], [1435681152.0, 8680000.0, 0.000693618532461568], [1435682880.0, 8700000.0, 0.0006971263107], [1435684608.0, 8720000.0, 0.0007006633180856321], [1435686336.0, 8740000.0, 0.000704229799534624], [1435688064.0, 8760000.0, 0.000707826001253376], [1435689792.0, 8780000.0, 0.000711452170742368], [1435691520.0, 8800000.0, 0.0007151085568], [1435693248.0, 8820000.0, 0.0007187954095264319], [1435694976.0, 8840000.0, 0.000722512980327424], [1435696704.0, 8860000.0, 0.0007262615219181761], [1435698432.0, 8880000.0, 0.000730041288327168], [1435700160.0, 8900000.0, 0.0007338525349000002], [1435701888.0, 8920000.0, 0.000737695518303232], [1435703616.0, 8940000.0, 0.000741570496528224], [1435705344.0, 8960000.0, 0.000745477728894976], [1435707072.0, 8980000.0, 0.0007494174760559681], [1435708800.0, 9000000.0, 0.0007533900000000002], [1435710528.0, 9020000.0, 0.000757395564056032], [1435712256.0, 9040000.0, 0.0007614344328970241], [1435713984.0, 9060000.0, 0.0007655068725437762], [1435715712.0, 9080000.0, 0.0007696131503687679], [1435717440.0, 9100000.0, 0.0007737535351000001], [1435719168.0, 9120000.0, 0.0007779282968248321], [1435720896.0, 9140000.0, 0.000782137706993824], [1435722624.0, 9160000.0, 0.0007863820384245761], [1435724352.0, 9180000.0, 0.0007906615653055681], [1435726080.0, 9200000.0, 0.0007949765632000001], [1435727808.0, 9220000.0, 0.0007993273090496321], [1435729536.0, 9240000.0, 0.0008037140811786242], [1435731264.0, 9260000.0, 0.0008081371592973762], [1435732992.0, 9280000.0, 0.0008125968245063682], [1435734720.0, 9300000.0, 0.0008170933593000001], [1435736448.0, 9320000.0, 0.0008216270475704322], [1435738176.0, 9340000.0, 0.000826198174611424], [1435739904.0, 9360000.0, 0.0008308070271221761], [1435741632.0, 9380000.0, 0.0008354538932111679], [1435743360.0, 9400000.0, 0.0008401390623999998], [1435745088.0, 9420000.0, 0.0008448628256272318], [1435746816.0, 9440000.0, 0.0008496254752522239], [1435748544.0, 9460000.0, 0.0008544273050589759], [1435750272.0, 9480000.0, 0.0008592686102599678], [1435752000.0, 9500000.0, 0.0008641496874999998], [1435753728.0, 9520000.0, 0.000869070834860032], [1435755456.0, 9540000.0, 0.0008740323518610239], [1435757184.0, 9560000.0, 0.0008790345394677759], [1435758912.0, 9580000.0, 0.0008840777000927679], [1435760640.0, 9600000.0, 0.0008891621375999998], [1435762368.0, 9620000.0, 0.0008942881573088319], [1435764096.0, 9640000.0, 0.0008994560659978239], [1435765824.0, 9660000.0, 0.0009046661719085757], [1435767552.0, 9680000.0, 0.0009099187847495679], [1435769280.0, 9700000.0, 0.0009152142157], [1435771008.0, 9720000.0, 0.000920552777413632], [1435772736.0, 9740000.0, 0.0009259347840226238], [1435774464.0, 9760000.0, 0.0009313605511413759], [1435776192.0, 9780000.0, 0.0009368303958703678], [1435777920.0, 9800000.0, 0.0009423446368], [1435779648.0, 9820000.0, 0.000947903594014432], [1435781376.0, 9840000.0, 0.000953507589095424], [1435783104.0, 9860000.0, 0.000959156945126176], [1435784832.0, 9880000.0, 0.0009648519866951679], [1435786560.0, 9900000.0, 0.0009705930399], [1435788288.0, 9920000.0, 0.0009763804323512321], [1435790016.0, 9940000.0, 0.000982214493176224], [1435791744.0, 9960000.0, 0.000988095553022976], [1435793472.0, 9980000.0, 0.000994023944063968], [1435795200.0, 10000000.0, 0.001], [1435796928.0, 10020000.0, 0.0010060240560640318], [1435798656.0, 10040000.0, 0.0010120964490250238], [1435800384.0, 10060000.0, 0.0010182175171917762], [1435802112.0, 10080000.0, 0.001024387600416768], [1435803840.0, 10100000.0, 0.0010306070401000004], [1435805568.0, 10120000.0, 0.0010368761791928322], [1435807296.0, 10140000.0, 0.0010431953622018239], [1435809024.0, 10160000.0, 0.001049564935192576], [1435810752.0, 10180000.0, 0.0010559852457935682], [1435812480.0, 10200000.0, 0.0010624566432000002], [1435814208.0, 10220000.0, 0.001068979478177632], [1435815936.0, 10240000.0, 0.001075554103066624], [1435817664.0, 10260000.0, 0.001082180871785376], [1435819392.0, 10280000.0, 0.0010888601398343681], [1435821120.0, 10300000.0, 0.0010955922643], [1435822848.0, 10320000.0, 0.0011023776038584323], [1435824576.0, 10340000.0, 0.0011092165187794243], [1435826304.0, 10360000.0, 0.0011161093709301762], [1435828032.0, 10380000.0, 0.0011230565237791681], [1435829760.0, 10400000.0, 0.0011300583423999998], [1435831488.0, 10420000.0, 0.0011371151934752319], [1435833216.0, 10440000.0, 0.0011442274453002243], [1435834944.0, 10460000.0, 0.0011513954677869762], [1435836672.0, 10480000.0, 0.001158619632467968], [1435838400.0, 10500000.0, 0.0011659003125000004], [1435840128.0, 10520000.0, 0.0011732378826680323], [1435841856.0, 10540000.0, 0.001180632719389024], [1435843584.0, 10560000.0, 0.001188085200715776], [1435845312.0, 10580000.0, 0.0011955957063407682], [1435847040.0, 10600000.0, 0.0012031646175999998], [1435848768.0, 10620000.0, 0.0012107923174768322], [1435850496.0, 10640000.0, 0.001218479190605824], [1435852224.0, 10660000.0, 0.001226225623276576], [1435853952.0, 10680000.0, 0.0012340320034375683], [1435855680.0, 10700000.0, 0.0012418987207000003], [1435857408.0, 10720000.0, 0.0012498261663416322], [1435859136.0, 10740000.0, 0.0012578147333106241], [1435860864.0, 10760000.0, 0.0012658648162293764], [1435862592.0, 10780000.0, 0.0012739768113983682], [1435864320.0, 10800000.0, 0.0012821511168000005], [1435866048.0, 10820000.0, 0.0012903881321024325], [1435867776.0, 10840000.0, 0.0012986882586634245], [1435869504.0, 10860000.0, 0.0013070518995341764], [1435871232.0, 10880000.0, 0.0013154794594631685], [1435872960.0, 10900000.0, 0.0013239713449000002], [1435874688.0, 10920000.0, 0.0013325279639992325], [1435876416.0, 10940000.0, 0.0013411497266242244], [1435878144.0, 10960000.0, 0.0013498370443509762], [1435879872.0, 10980000.0, 0.0013585903304719684], [1435881600.0, 11000000.0, 0.0013674100000000005], [1435883328.0, 11020000.0, 0.0013762964696720323], [1435885056.0, 11040000.0, 0.0013852501579530248], [1435886784.0, 11060000.0, 0.0013942714850397765], [1435888512.0, 11080000.0, 0.0014033608728647685], [1435890240.0, 11100000.0, 0.0014125187451000006], [1435891968.0, 11120000.0, 0.0014217455271608324], [1435893696.0, 11140000.0, 0.0014310416462098244], [1435895424.0, 11160000.0, 0.0014404075311605766], [1435897152.0, 11180000.0, 0.0014498436126815686], [1435898880.0, 11200000.0, 0.0014593503232000005], [1435900608.0, 11220000.0, 0.0014689280969056324], [1435902336.0, 11240000.0, 0.0014785773697546245], [1435904064.0, 11260000.0, 0.0014882985794733754], [1435905792.0, 11280000.0, 0.0014980921655623675], [1435907520.0, 11300000.0, 0.0015079585692999995], [1435909248.0, 11320000.0, 0.0015178982337464314], [1435910976.0, 11340000.0, 0.0015279116037474232], [1435912704.0, 11360000.0, 0.0015379991259381756], [1435914432.0, 11380000.0, 0.0015481612487471676], [1435916160.0, 11400000.0, 0.0015583984223999992], [1435917888.0, 11420000.0, 0.0015687110989232313], [1435919616.0, 11440000.0, 0.0015790997321482236], [1435921344.0, 11460000.0, 0.0015895647777149754], [1435923072.0, 11480000.0, 0.0016001066930759675], [1435924800.0, 11500000.0, 0.0016107259374999999], [1435926528.0, 11520000.0, 0.0016214229720760316], [1435928256.0, 11540000.0, 0.0016321982597170233], [1435929984.0, 11560000.0, 0.0016430522651637758], [1435931712.0, 11580000.0, 0.0016539854549887673], [1435933440.0, 11600000.0, 0.0016649982975999993], [1435935168.0, 11620000.0, 0.0016760912632448317], [1435936896.0, 11640000.0, 0.0016872648240138235], [1435938624.0, 11660000.0, 0.0016985194538445753], [1435940352.0, 11680000.0, 0.0017098556285255675], [1435942080.0, 11700000.0, 0.0017212738256999996], [1435943808.0, 11720000.0, 0.0017327745248696316], [1435945536.0, 11740000.0, 0.0017443582073986238], [1435947264.0, 11760000.0, 0.0017560253565173758], [1435948992.0, 11780000.0, 0.0017677764573263677], [1435950720.0, 11800000.0, 0.0017796119968], [1435952448.0, 11820000.0, 0.0017915324637904316], [1435954176.0, 11840000.0, 0.0018035383490314235], [1435955904.0, 11860000.0, 0.0018156301451421758], [1435957632.0, 11880000.0, 0.0018278083466311673], [1435959360.0, 11900000.0, 0.001840073449899999], [1435961088.0, 11920000.0, 0.0018524259532472322], [1435962816.0, 11940000.0, 0.0018648663568722234], [1435964544.0, 11960000.0, 0.0018773951628789755], [1435966272.0, 11980000.0, 0.0018900128752799674], [1435968000.0, 12000000.0, 0.0019027199999999992], [1435969728.0, 12020000.0, 0.0019155170448800316], [1435971456.0, 12040000.0, 0.0019284045196810234], [1435973184.0, 12060000.0, 0.0019413829360877756], [1435974912.0, 12080000.0, 0.0019544528077127675], [1435976640.0, 12100000.0, 0.0019676146501], [1435978368.0, 12120000.0, 0.0019808689807288317], [1435980096.0, 12140000.0, 0.0019942163190178235], [1435981824.0, 12160000.0, 0.0020076571863285758], [1435983552.0, 12180000.0, 0.0020211921059695684], [1435985280.0, 12200000.0, 0.0020348216032], [1435987008.0, 12220000.0, 0.002048546205233632], [1435988736.0, 12240000.0, 0.0020623664412426235], [1435990464.0, 12260000.0, 0.002076282842361376], [1435992192.0, 12280000.0, 0.002090295941690368], [1435993920.0, 12300000.0, 0.0021044062742999995], [1435995648.0, 12320000.0, 0.002118614377234431], [1435997376.0, 12340000.0, 0.002132920789515423], [1435999104.0, 12360000.0, 0.002147326052146176], [1436000832.0, 12380000.0, 0.0021618307081151676], [1436002560.0, 12400000.0, 0.0021764353024], [1436004288.0, 12420000.0, 0.002191140381971232], [1436006016.0, 12440000.0, 0.0022059464957962247], [1436007744.0, 12460000.0, 0.0022208541948429755], [1436009472.0, 12480000.0, 0.002235864032083968], [1436011200.0, 12500000.0, 0.0022509765625], [1436012928.0, 12520000.0, 0.0022661923430840314], [1436014656.0, 12540000.0, 0.0022815119328450243], [1436016384.0, 12560000.0, 0.002296935892811776], [1436018112.0, 12580000.0, 0.002312464786036768], [1436019840.0, 12600000.0, 0.0023280991775999995], [1436021568.0, 12620000.0, 0.0023438396346128322], [1436023296.0, 12640000.0, 0.002359686726221824], [1436025024.0, 12660000.0, 0.002375641023612576], [1436026752.0, 12680000.0, 0.002391703100013568], [1436028480.0, 12700000.0, 0.0024078735307], [1436030208.0, 12720000.0, 0.002424152892997632], [1436031936.0, 12740000.0, 0.002440541766286624], [1436033664.0, 12760000.0, 0.002457040732005376], [1436035392.0, 12780000.0, 0.0024736503736543687], [1436037120.0, 12800000.0, 0.002490371276800001], [1436038848.0, 12820000.0, 0.002507204029078432], [1436040576.0, 12840000.0, 0.002524149220199424], [1436042304.0, 12860000.0, 0.002541207441950176], [1436044032.0, 12880000.0, 0.002558379288199168], [1436045760.0, 12900000.0, 0.0025756653549], [1436047488.0, 12920000.0, 0.002593066240095233], [1436049216.0, 12940000.0, 0.002610582543920225], [1436050944.0, 12960000.0, 0.0026282148686069765], [1436052672.0, 12980000.0, 0.0026459638184879687], [1436054400.0, 13000000.0, 0.00266383], [1436056128.0, 13020000.0, 0.002681814021688032], [1436057856.0, 13040000.0, 0.002699916494209024], [1436059584.0, 13060000.0, 0.002718138030335776], [1436061312.0, 13080000.0, 0.0027364792449607687], [1436063040.0, 13100000.0, 0.0027549407551], [1436064768.0, 13120000.0, 0.0027735231798968326], [1436066496.0, 13140000.0, 0.0027922271406258243], [1436068224.0, 13160000.0, 0.0028110532606965767], [1436069952.0, 13180000.0, 0.0028300021656575683], [1436071680.0, 13200000.0, 0.002849074483200001], [1436073408.0, 13220000.0, 0.002868270843161633], [1436075136.0, 13240000.0, 0.0028875918775306247], [1436076864.0, 13260000.0, 0.002907038220449376], [1436078592.0, 13280000.0, 0.002926610508218369], [1436080320.0, 13300000.0, 0.0029463093793000014], [1436082048.0, 13320000.0, 0.0029661354743224333], [1436083776.0, 13340000.0, 0.002986089436083424], [1436085504.0, 13360000.0, 0.003006171909554177], [1436087232.0, 13380000.0, 0.0030263835418831687], [1436088960.0, 13400000.0, 0.0030467249824000005], [1436090688.0, 13420000.0, 0.003067196882619233], [1436092416.0, 13440000.0, 0.0030877998962442247], [1436094144.0, 13460000.0, 0.003108534679170976], [1436095872.0, 13480000.0, 0.0031294018894919688], [1436097600.0, 13500000.0, 0.003150402187500001], [1436099328.0, 13520000.0, 0.0031715362356920327], [1436101056.0, 13540000.0, 0.003192804698773025], [1436102784.0, 13560000.0, 0.0032142082436597773], [1436104512.0, 13580000.0, 0.0032357475394847687], [1436106240.0, 13600000.0, 0.0032574232576], [1436107968.0, 13620000.0, 0.0032792360715808333], [1436109696.0, 13640000.0, 0.0033011866572298255], [1436111424.0, 13660000.0, 0.0033232756925805776], [1436113152.0, 13680000.0, 0.0033455038579015693], [1436114880.0, 13700000.0, 0.0033678718357000015], [1436116608.0, 13720000.0, 0.0033903803107256333], [1436118336.0, 13740000.0, 0.003413029969974625], [1436120064.0, 13760000.0, 0.0034358215026933743], [1436121792.0, 13780000.0, 0.003458755600382367], [1436123520.0, 13800000.0, 0.003481832956799998], [1436125248.0, 13820000.0, 0.0035050542679664317], [1436126976.0, 13840000.0, 0.0035284202321674224], [1436128704.0, 13860000.0, 0.0035519315499581757], [1436130432.0, 13880000.0, 0.0035755889241671675], [1436132160.0, 13900000.0, 0.003599393059899999], [1436133888.0, 13920000.0, 0.003623344664543231], [1436135616.0, 13940000.0, 0.0036474444477682237], [1436137344.0, 13960000.0, 0.0036716931215349745], [1436139072.0, 13980000.0, 0.003696091400095967], [1436140800.0, 14000000.0, 0.003720639999999998], [1436142528.0, 14020000.0, 0.0037453396400960307], [1436144256.0, 14040000.0, 0.0037701910415370234], [1436145984.0, 14060000.0, 0.0037951949277837756], [1436147712.0, 14080000.0, 0.0038203520246087672], [1436149440.0, 14100000.0, 0.003845663060099999], [1436151168.0, 14120000.0, 0.0038711287646648316], [1436152896.0, 14140000.0, 0.0038967498710338233], [1436154624.0, 14160000.0, 0.003922527114264575], [1436156352.0, 14180000.0, 0.0039484612317455675], [1436158080.0, 14200000.0, 0.003974552963199998], [1436159808.0, 14220000.0, 0.004000803050689632], [1436161536.0, 14240000.0, 0.004027212238618623], [1436163264.0, 14260000.0, 0.004053781273737375], [1436164992.0, 14280000.0, 0.0040805109051463674], [1436166720.0, 14300000.0, 0.004107401884299999], [1436168448.0, 14320000.0, 0.00413445496501043], [1436170176.0, 14340000.0, 0.004161670903451423], [1436171904.0, 14360000.0, 0.004189050458162175], [1436173632.0, 14380000.0, 0.004216594390051167], [1436175360.0, 14400000.0, 0.0042443034624], [1436177088.0, 14420000.0, 0.004272178440867231], [1436178816.0, 14440000.0, 0.004300220093492223], [1436180544.0, 14460000.0, 0.004328429190698975], [1436182272.0, 14480000.0, 0.004356806505299966], [1436184000.0, 14500000.0, 0.004385352812499999], [1436185728.0, 14520000.0, 0.004414068889900031], [1436187456.0, 14540000.0, 0.004442955517501024], [1436189184.0, 14560000.0, 0.004472013477707776], [1436190912.0, 14580000.0, 0.004501243555332767], [1436192640.0, 14600000.0, 0.0045306465376], [1436194368.0, 14620000.0, 0.004560223214148832], [1436196096.0, 14640000.0, 0.004589974377037824], [1436197824.0, 14660000.0, 0.004619900820748575], [1436199552.0, 14680000.0, 0.004650003342189566], [1436201280.0, 14700000.0, 0.0046802827407000005], [1436203008.0, 14720000.0, 0.004710739818053632], [1436204736.0, 14740000.0, 0.004741375378462625], [1436206464.0, 14760000.0, 0.004772190228581374], [1436208192.0, 14780000.0, 0.004803185177510368], [1436209920.0, 14800000.0, 0.004834361036799999], [1436211648.0, 14820000.0, 0.0048657186204544315], [1436213376.0, 14840000.0, 0.004897258744935424], [1436215104.0, 14860000.0, 0.004928982229166176], [1436216832.0, 14880000.0, 0.004960889894535168], [1436218560.0, 14900000.0, 0.004992982564899999], [1436220288.0, 14920000.0, 0.00502526106659123], [1436222016.0, 14940000.0, 0.0050577262284162245], [1436223744.0, 14960000.0, 0.005090378881662977], [1436225472.0, 14980000.0, 0.005123219860103968], [1436227200.0, 15000000.0, 0.00515625], [1436228928.0, 15020000.0, 0.005189470140104032], [1436230656.0, 15040000.0, 0.005222881121665024], [1436232384.0, 15060000.0, 0.005256483788431776], [1436234112.0, 15080000.0, 0.005290278986656767], [1436235840.0, 15100000.0, 0.0053242675650999995], [1436237568.0, 15120000.0, 0.005358450375032833], [1436239296.0, 15140000.0, 0.005392828270241824], [1436241024.0, 15160000.0, 0.005427402107032576], [1436242752.0, 15180000.0, 0.0054621727442335675], [1436244480.0, 15200000.0, 0.005497141043200001], [1436246208.0, 15220000.0, 0.005532307867817632], [1436247936.0, 15240000.0, 0.005567674084506625], [1436249664.0, 15260000.0, 0.005603240562225377], [1436251392.0, 15280000.0, 0.005639008172474367], [1436253120.0, 15300000.0, 0.005674977789300001], [1436254848.0, 15320000.0, 0.005711150289298432], [1436256576.0, 15340000.0, 0.005747526551619424], [1436258304.0, 15360000.0, 0.005784107457970176], [1436260032.0, 15380000.0, 0.0058208938926191675], [1436261760.0, 15400000.0, 0.0058578867424], [1436263488.0, 15420000.0, 0.005895086896715232], [1436265216.0, 15440000.0, 0.005932495247540224], [1436266944.0, 15460000.0, 0.005970112689426977], [1436268672.0, 15480000.0, 0.006007940119507969], [1436270400.0, 15500000.0, 0.006045978437499999], [1436272128.0, 15520000.0, 0.006084228545708033], [1436273856.0, 15540000.0, 0.006122691349029026], [1436275584.0, 15560000.0, 0.006161367754955776], [1436277312.0, 15580000.0, 0.006200258673580768], [1436279040.0, 15600000.0, 0.006239365017600001], [1436280768.0, 15620000.0, 0.006278687702316833], [1436282496.0, 15640000.0, 0.006318227645645825], [1436284224.0, 15660000.0, 0.006357985768116577], [1436285952.0, 15680000.0, 0.0063979629928775684], [1436287680.0, 15700000.0, 0.006438160245700001], [1436289408.0, 15720000.0, 0.0064785784549816336], [1436291136.0, 15740000.0, 0.0065192185517506255], [1436292864.0, 15760000.0, 0.006560081469669378], [1436294592.0, 15780000.0, 0.00660116814503837], [1436296320.0, 15800000.0, 0.006642479516800001], [1436298048.0, 15820000.0, 0.006684016526542433], [1436299776.0, 15840000.0, 0.0067257801185034265], [1436301504.0, 15860000.0, 0.006767771239574177], [1436303232.0, 15880000.0, 0.006809990839303169], [1436304960.0, 15900000.0, 0.006852439869900002], [1436306688.0, 15920000.0, 0.0068951192862392345], [1436308416.0, 15940000.0, 0.006938030045864227], [1436310144.0, 15960000.0, 0.006981173108990978], [1436311872.0, 15980000.0, 0.0070245494385119695], [1436313600.0, 16000000.0, 0.007068160000000002], [1436315328.0, 16020000.0, 0.007112005761712036], [1436317056.0, 16040000.0, 0.007156087694593026], [1436318784.0, 16060000.0, 0.007200406772279779], [1436320512.0, 16080000.0, 0.0072449639711047705], [1436322240.0, 16100000.0, 0.007289760270100003], [1436323968.0, 16120000.0, 0.007334796651000834], [1436325696.0, 16140000.0, 0.007380074098249827], [1436327424.0, 16160000.0, 0.007425593599000578], [1436329152.0, 16180000.0, 0.007471356143121571], [1436330880.0, 16200000.0, 0.007517362723200001], [1436332608.0, 16220000.0, 0.007563614334545633], [1436334336.0, 16240000.0, 0.007610111975194629], [1436336064.0, 16260000.0, 0.007656856645913374], [1436337792.0, 16280000.0, 0.007703849350202366], [1436339520.0, 16300000.0, 0.0077510910942999965], [1436341248.0, 16320000.0, 0.007798582887186429], [1436342976.0, 16340000.0, 0.00784632574058742], [1436344704.0, 16360000.0, 0.007894320668978171], [1436346432.0, 16380000.0, 0.007942568689587166], [1436348160.0, 16400000.0, 0.007991070822399996], [1436349888.0, 16420000.0, 0.00803982809016323], [1436351616.0, 16440000.0, 0.008088841518388222], [1436353344.0, 16460000.0, 0.008138112135354973], [1436355072.0, 16480000.0, 0.008187640972115967], [1436356800.0, 16500000.0, 0.008237429062499997], [1436358528.0, 16520000.0, 0.00828747744311603], [1436360256.0, 16540000.0, 0.00833778715335702], [1436361984.0, 16560000.0, 0.008388359235403776], [1436363712.0, 16580000.0, 0.008439194734228767], [1436365440.0, 16600000.0, 0.008490294697599998], [1436367168.0, 16620000.0, 0.008541660176084829], [1436368896.0, 16640000.0, 0.008593292223053823], [1436370624.0, 16660000.0, 0.008645191894684575], [1436372352.0, 16680000.0, 0.008697360249965567], [1436374080.0, 16700000.0, 0.008749798350699996], [1436375808.0, 16720000.0, 0.008802507261509631], [1436377536.0, 16740000.0, 0.008855488049838623], [1436379264.0, 16760000.0, 0.008908741785957375], [1436380992.0, 16780000.0, 0.008962269542966365], [1436382720.0, 16800000.0, 0.009016072396799997], [1436384448.0, 16820000.0, 0.00907015142623043], [1436386176.0, 16840000.0, 0.009124507712871422], [1436387904.0, 16860000.0, 0.009179142341182174], [1436389632.0, 16880000.0, 0.009234056398471168], [1436391360.0, 16900000.0, 0.0092892509749], [1436393088.0, 16920000.0, 0.009344727163487231], [1436394816.0, 16940000.0, 0.009400486060112222], [1436396544.0, 16960000.0, 0.009456528763518973], [1436398272.0, 16980000.0, 0.009512856375319968], [1436400000.0, 17000000.0, 0.00956947], [1436401728.0, 17020000.0, 0.009626370744920029], [1436403456.0, 17040000.0, 0.009683559720321025], [1436405184.0, 17060000.0, 0.009741038039327772], [1436406912.0, 17080000.0, 0.009798806817952768], [1436408640.0, 17100000.0, 0.009856867175099999], [1436410368.0, 17120000.0, 0.00991522023256883], [1436412096.0, 17140000.0, 0.009973867115057825], [1436413824.0, 17160000.0, 0.010032808950168575], [1436415552.0, 17180000.0, 0.010092046868409569], [1436417280.0, 17200000.0, 0.0101515820032], [1436419008.0, 17220000.0, 0.01021141549087363], [1436420736.0, 17240000.0, 0.010271548470682625], [1436422464.0, 17260000.0, 0.010331982084801374], [1436424192.0, 17280000.0, 0.010392717478330364], [1436425920.0, 17300000.0, 0.010453755799299998], [1436427648.0, 17320000.0, 0.01051509819867443], [1436429376.0, 17340000.0, 0.010576745830355424], [1436431104.0, 17360000.0, 0.010638699851186177], [1436432832.0, 17380000.0, 0.010700961420955167], [1436434560.0, 17400000.0, 0.010763531702399999], [1436436288.0, 17420000.0, 0.01082641186121123], [1436438016.0, 17440000.0, 0.010889603066036223], [1436439744.0, 17460000.0, 0.010953106488482977], [1436441472.0, 17480000.0, 0.011016923303123968], [1436443200.0, 17500000.0, 0.0110810546875], [1436444928.0, 17520000.0, 0.011145501822124032], [1436446656.0, 17540000.0, 0.011210265890485023], [1436448384.0, 17560000.0, 0.011275348079051777], [1436450112.0, 17580000.0, 0.011340749577276767], [1436451840.0, 17600000.0, 0.0114064715776], [1436453568.0, 17620000.0, 0.011472515275452832], [1436455296.0, 17640000.0, 0.011538881869261823], [1436457024.0, 17660000.0, 0.011605572560452578], [1436458752.0, 17680000.0, 0.01167258855345357], [1436460480.0, 17700000.0, 0.011739931055700002], [1436462208.0, 17720000.0, 0.011807601277637634], [1436463936.0, 17740000.0, 0.011875600432726622], [1436465664.0, 17760000.0, 0.011943929737445376], [1436467392.0, 17780000.0, 0.012012590411294372], [1436469120.0, 17800000.0, 0.012081583676800001], [1436470848.0, 17820000.0, 0.012150910759518432], [1436472576.0, 17840000.0, 0.012220572888039427], [1436474304.0, 17860000.0, 0.012290571293990174], [1436476032.0, 17880000.0, 0.01236090721203917], [1436477760.0, 17900000.0, 0.012431581879899997], [1436479488.0, 17920000.0, 0.012502596538335234], [1436481216.0, 17940000.0, 0.012573952431160225], [1436482944.0, 17960000.0, 0.012645650805246976], [1436484672.0, 17980000.0, 0.012717692910527972], [1436486400.0, 18000000.0, 0.012790080000000004], [1436488128.0, 18020000.0, 0.01286281332972803], [1436489856.0, 18040000.0, 0.012935894158849026], [1436491584.0, 18060000.0, 0.013009323749575778], [1436493312.0, 18080000.0, 0.01308310336720077], [1436495040.0, 18100000.0, 0.013157234280100004], [1436496768.0, 18120000.0, 0.013231717759736836], [1436498496.0, 18140000.0, 0.013306555080665828], [1436500224.0, 18160000.0, 0.01338174752053658], [1436501952.0, 18180000.0, 0.01345729636009757], [1436503680.0, 18200000.0, 0.013533202883200006], [1436505408.0, 18220000.0, 0.013609468376801636], [1436507136.0, 18240000.0, 0.013686094130970628], [1436508864.0, 18260000.0, 0.013763081438889378], [1436510592.0, 18280000.0, 0.01384043159685837], [1436512320.0, 18300000.0, 0.013918145904300003], [1436514048.0, 18320000.0, 0.013996225663762435], [1436515776.0, 18340000.0, 0.014074672180923427], [1436517504.0, 18360000.0, 0.01415348676459418], [1436519232.0, 18380000.0, 0.01423267072672317], [1436520960.0, 18400000.0, 0.014312225382400004], [1436522688.0, 18420000.0, 0.014392152049859237], [1436524416.0, 18440000.0, 0.014472452050484226], [1436526144.0, 18460000.0, 0.014553126708810978], [1436527872.0, 18480000.0, 0.014634177352531972], [1436529600.0, 18500000.0, 0.014715605312500001], [1436531328.0, 18520000.0, 0.014797411922732038], [1436533056.0, 18540000.0, 0.014879598520413026], [1436534784.0, 18560000.0, 0.01496216644589978], [1436536512.0, 18580000.0, 0.015045117042724775], [1436538240.0, 18600000.0, 0.015128451657600005], [1436539968.0, 18620000.0, 0.01521217164042084], [1436541696.0, 18640000.0, 0.015296278344269828], [1436543424.0, 18660000.0, 0.015380773125420579], [1436545152.0, 18680000.0, 0.015465657343341575], [1436546880.0, 18700000.0, 0.015550932360700006], [1436548608.0, 18720000.0, 0.015636599543365635], [1436550336.0, 18740000.0, 0.01572266026041463], [1436552064.0, 18760000.0, 0.015809115884133373], [1436553792.0, 18780000.0, 0.015895967790022364], [1436555520.0, 18800000.0, 0.015983217356799993], [1436557248.0, 18820000.0, 0.016070865966406427], [1436558976.0, 18840000.0, 0.01615891500400742], [1436560704.0, 18860000.0, 0.016247365857998172], [1436562432.0, 18880000.0, 0.016336219920007163], [1436564160.0, 18900000.0, 0.0164254785849], [1436565888.0, 18920000.0, 0.016515143250783234], [1436567616.0, 18940000.0, 0.01660521531900822], [1436569344.0, 18960000.0, 0.01669569619417497], [1436571072.0, 18980000.0, 0.016786587284135963], [1436572800.0, 19000000.0, 0.016877889999999993], [1436574528.0, 19020000.0, 0.01696960575613603], [1436576256.0, 19040000.0, 0.01706173597017702], [1436577984.0, 19060000.0, 0.017154282063023774], [1436579712.0, 19080000.0, 0.017247245458848766], [1436581440.0, 19100000.0, 0.017340627585099997], [1436583168.0, 19120000.0, 0.01743442987250483], [1436584896.0, 19140000.0, 0.017528653755073825], [1436586624.0, 19160000.0, 0.017623300670104574], [1436588352.0, 19180000.0, 0.01771837205818556], [1436590080.0, 19200000.0, 0.017813869363199997], [1436591808.0, 19220000.0, 0.01790979403232963], [1436593536.0, 19240000.0, 0.018006147516058623], [1436595264.0, 19260000.0, 0.018102931268177372], [1436596992.0, 19280000.0, 0.018200146745786364], [1436598720.0, 19300000.0, 0.018297795409299995], [1436600448.0, 19320000.0, 0.018395878722450427], [1436602176.0, 19340000.0, 0.018494398152291425], [1436603904.0, 19360000.0, 0.018593355169202172], [1436605632.0, 19380000.0, 0.018692751246891164], [1436607360.0, 19400000.0, 0.018792587862399998], [1436609088.0, 19420000.0, 0.018892866496107233], [1436610816.0, 19440000.0, 0.01899358863173222], [1436612544.0, 19460000.0, 0.01909475575633898], [1436614272.0, 19480000.0, 0.019196369360339964], [1436616000.0, 19500000.0, 0.019298430937499996], [1436617728.0, 19520000.0, 0.019400941984940034], [1436619456.0, 19540000.0, 0.019503904003141025], [1436621184.0, 19560000.0, 0.019607318495947774], [1436622912.0, 19580000.0, 0.019711186970572767], [1436624640.0, 19600000.0, 0.0198155109376], [1436626368.0, 19620000.0, 0.019920291910988833], [1436628096.0, 19640000.0, 0.020025531408077824], [1436629824.0, 19660000.0, 0.020131230949588578], [1436631552.0, 19680000.0, 0.02023739205962957], [1436633280.0, 19700000.0, 0.020344016265699996], [1436635008.0, 19720000.0, 0.02045110509869363], [1436636736.0, 19740000.0, 0.020558660092902623], [1436638464.0, 19760000.0, 0.020666682786021375], [1436640192.0, 19780000.0, 0.02077517471915037], [1436641920.0, 19800000.0, 0.0208841374368], [1436643648.0, 19820000.0, 0.020993572486894433], [1436645376.0, 19840000.0, 0.021103481420775425], [1436647104.0, 19860000.0, 0.02121386579320618], [1436648832.0, 19880000.0, 0.021324727162375167], [1436650560.0, 19900000.0, 0.0214360670899], [1436652288.0, 19920000.0, 0.021547887140831234], [1436654016.0, 19940000.0, 0.02166018888365622], [1436655744.0, 19960000.0, 0.021772973890302975], [1436657472.0, 19980000.0, 0.02188624373614397], [1436659200.0, 20000000.0, 0.022], [1436660928.0, 20020000.0, 0.022114244264144017], [1436662656.0, 20040000.0, 0.022228978114305024], [1436664384.0, 20060000.0, 0.022344203139671767], [1436666112.0, 20080000.0, 0.022459920932896768], [1436667840.0, 20100000.0, 0.022576133090099988], [1436669568.0, 20120000.0, 0.022692841210872835], [1436671296.0, 20140000.0, 0.022810046898281814], [1436673024.0, 20160000.0, 0.022927751758872583], [1436674752.0, 20180000.0, 0.023045957402673553], [1436676480.0, 20200000.0, 0.023164665443200005], [1436678208.0, 20220000.0, 0.023283877497457618], [1436679936.0, 20240000.0, 0.023403595185946632], [1436681664.0, 20260000.0, 0.02352382013266536], [1436683392.0, 20280000.0, 0.02364455396511437], [1436685120.0, 20300000.0, 0.02376579831429999], [1436686848.0, 20320000.0, 0.02388755481473843], [1436688576.0, 20340000.0, 0.02400982510445941], [1436690304.0, 20360000.0, 0.024132610825010184], [1436692032.0, 20380000.0, 0.024255913621459155], [1436693760.0, 20400000.0, 0.0243797351424], [1436695488.0, 20420000.0, 0.02450407703995522], [1436697216.0, 20440000.0, 0.024628940969780223], [1436698944.0, 20460000.0, 0.024754328591066962], [1436700672.0, 20480000.0, 0.024880241566547966], [1436702400.0, 20500000.0, 0.025006681562499987], [1436704128.0, 20520000.0, 0.025133650248748033], [1436705856.0, 20540000.0, 0.02526114929866901], [1436707584.0, 20560000.0, 0.025389180389195777], [1436709312.0, 20580000.0, 0.025517745200820754], [1436711040.0, 20600000.0, 0.025646845417599998], [1436712768.0, 20620000.0, 0.02577648272715682], [1436714496.0, 20640000.0, 0.02590665882068583], [1436716224.0, 20660000.0, 0.026037375392956558], [1436717952.0, 20680000.0, 0.026168634142317574], [1436719680.0, 20700000.0, 0.02630043677069999], [1436721408.0, 20720000.0, 0.026432784983621636], [1436723136.0, 20740000.0, 0.026565680490190615], [1436724864.0, 20760000.0, 0.02669912500310938], [1436726592.0, 20780000.0, 0.02683312023867836], [1436728320.0, 20800000.0, 0.026967667916800005], [1436730048.0, 20820000.0, 0.027102769760982425], [1436731776.0, 20840000.0, 0.027238427498343428], [1436733504.0, 20860000.0, 0.027374642859614162], [1436735232.0, 20880000.0, 0.027511417579143178], [1436736960.0, 20900000.0, 0.027648753394899996], [1436738688.0, 20920000.0, 0.02778665204847924], [1436740416.0, 20940000.0, 0.02792511528510421], [1436742144.0, 20960000.0, 0.02806414485363098], [1436743872.0, 20980000.0, 0.028203742506551957], [1436745600.0, 21000000.0, 0.02834391000000001], [1436747328.0, 21020000.0, 0.028484649093752024], [1436749056.0, 21040000.0, 0.028625961551233033], [1436750784.0, 21060000.0, 0.02876784913951977], [1436752512.0, 21080000.0, 0.028910313629344774], [1436754240.0, 21100000.0, 0.029053356795099995], [1436755968.0, 21120000.0, 0.029196980414840836], [1436757696.0, 21140000.0, 0.029341186270289817], [1436759424.0, 21160000.0, 0.029485976146840582], [1436761152.0, 21180000.0, 0.02963135183356156], [1436762880.0, 21200000.0, 0.029777315123200008], [1436764608.0, 21220000.0, 0.02992386781218562], [1436766336.0, 21240000.0, 0.030071011700634632], [1436768064.0, 21260000.0, 0.03021874859235337], [1436769792.0, 21280000.0, 0.030367080294842374], [1436771520.0, 21300000.0, 0.030516008619299987], [1436773248.0, 21320000.0, 0.030665535380626437], [1436774976.0, 21340000.0, 0.030815662397427418], [1436776704.0, 21360000.0, 0.030966391492018183], [1436778432.0, 21380000.0, 0.031117724490427157], [1436780160.0, 21400000.0, 0.03126966322240001], [1436781888.0, 21420000.0, 0.031422209521403226], [1436783616.0, 21440000.0, 0.03157536522462823], [1436785344.0, 21460000.0, 0.03172913217299497], [1436787072.0, 21480000.0, 0.03188351221115598], [1436788800.0, 21500000.0, 0.032038507187499995], [1436790528.0, 21520000.0, 0.03219411895415605], [1436792256.0, 21540000.0, 0.03235034936699701], [1436793984.0, 21560000.0, 0.032507200285643786], [1436795712.0, 21580000.0, 0.032664673573468764], [1436797440.0, 21600000.0, 0.03282277109760001], [1436799168.0, 21620000.0, 0.03298149472892483], [1436800896.0, 21640000.0, 0.03314084634209384], [1436802624.0, 21660000.0, 0.03330082781552456], [1436804352.0, 21680000.0, 0.03346144103140559], [1436806080.0, 21700000.0, 0.0336226878757], [1436807808.0, 21720000.0, 0.03378457023814964], [1436809536.0, 21740000.0, 0.033947090012278615], [1436811264.0, 21760000.0, 0.034110249095397394], [1436812992.0, 21780000.0, 0.034274049388606356], [1436814720.0, 21800000.0, 0.03443849279680001], [1436816448.0, 21820000.0, 0.03460358122867043], [1436818176.0, 21840000.0, 0.03476931659671143], [1436819904.0, 21860000.0, 0.03493570081722217], [1436821632.0, 21880000.0, 0.03510273581031119], [1436823360.0, 21900000.0, 0.03527042349989999], [1436825088.0, 21920000.0, 0.03543876581372724], [1436826816.0, 21940000.0, 0.035607764683352215], [1436828544.0, 21960000.0, 0.035777422044158985], [1436830272.0, 21980000.0, 0.03594773983535996], [1436832000.0, 22000000.0, 0.03611872000000001], [1436833728.0, 22020000.0, 0.03629036448496003], [1436835456.0, 22040000.0, 0.03646267524096104], [1436837184.0, 22060000.0, 0.03663565422256777], [1436838912.0, 22080000.0, 0.036809303388192785], [1436840640.0, 22100000.0, 0.0369836247001], [1436842368.0, 22120000.0, 0.037158620124408855], [1436844096.0, 22140000.0, 0.03733429163109782], [1436845824.0, 22160000.0, 0.03751064119400859], [1436847552.0, 22180000.0, 0.037687670790849566], [1436849280.0, 22200000.0, 0.03786538240320002], [1436851008.0, 22220000.0, 0.03804377801651364], [1436852736.0, 22240000.0, 0.038222859620122646], [1436854464.0, 22260000.0, 0.038402629207241384], [1436856192.0, 22280000.0, 0.03858308877497039], [1436857920.0, 22300000.0, 0.038764240324299995], [1436859648.0, 22320000.0, 0.03894608586011445], [1436861376.0, 22340000.0, 0.03912862739119543], [1436863104.0, 22360000.0, 0.039311866930226196], [1436864832.0, 22380000.0, 0.03949580649379517], [1436866560.0, 22400000.0, 0.03968044810240001], [1436868288.0, 22420000.0, 0.03986579378045123], [1436870016.0, 22440000.0, 0.04005184555627624], [1436871744.0, 22460000.0, 0.04023860546212298], [1436873472.0, 22480000.0, 0.04042607553416398], [1436875200.0, 22500000.0, 0.0406142578125], [1436876928.0, 22520000.0, 0.040803154341164015], [1436878656.0, 22540000.0, 0.04099276716812502], [1436880384.0, 22560000.0, 0.041183098345291755], [1436882112.0, 22580000.0, 0.041374149928516776], [1436883840.0, 22600000.0, 0.04156592397759997], [1436885568.0, 22620000.0, 0.041758422556292835], [1436887296.0, 22640000.0, 0.041951647732301804], [1436889024.0, 22660000.0, 0.04214560157729257], [1436890752.0, 22680000.0, 0.04234028616689354], [1436892480.0, 22700000.0, 0.0425357035807], [1436894208.0, 22720000.0, 0.04273185590227761], [1436895936.0, 22740000.0, 0.04292874521916663], [1436897664.0, 22760000.0, 0.04312637362288535], [1436899392.0, 22780000.0, 0.04332474320893437], [1436901120.0, 22800000.0, 0.04352385607679998], [1436902848.0, 22820000.0, 0.04372371432995844], [1436904576.0, 22840000.0, 0.0439243200758794], [1436906304.0, 22860000.0, 0.04412567542603018], [1436908032.0, 22880000.0, 0.044327782495879146], [1436909760.0, 22900000.0, 0.0445306434049], [1436911488.0, 22920000.0, 0.04473426027657521], [1436913216.0, 22940000.0, 0.04493863523840023], [1436914944.0, 22960000.0, 0.045143770421886956], [1436916672.0, 22980000.0, 0.04534966796256798], [1436918400.0, 23000000.0, 0.04555632999999998], [1436920128.0, 23020000.0, 0.04576375867776803], [1436921856.0, 23040000.0, 0.04597195614348901], [1436923584.0, 23060000.0, 0.04618092454881578], [1436925312.0, 23080000.0, 0.04639066604944075], [1436927040.0, 23100000.0, 0.046601182805100005], [1436928768.0, 23120000.0, 0.04681247697957682], [1436930496.0, 23140000.0, 0.04702455074070583], [1436932224.0, 23160000.0, 0.047237406260376556], [1436933952.0, 23180000.0, 0.04745104571453756], [1436935680.0, 23200000.0, 0.04766547128319998], [1436937408.0, 23220000.0, 0.04788068515044164], [1436939136.0, 23240000.0, 0.04809668950441061], [1436940864.0, 23260000.0, 0.04831348653732938], [1436942592.0, 23280000.0, 0.04853107844549835], [1436944320.0, 23300000.0, 0.0487494674293], [1436946048.0, 23320000.0, 0.04896865569320241], [1436947776.0, 23340000.0, 0.049188645445763436], [1436949504.0, 23360000.0, 0.04940943889963416], [1436951232.0, 23380000.0, 0.04963103827156318], [1436952960.0, 23400000.0, 0.049853445782399974], [1436954688.0, 23420000.0, 0.050076663657099243], [1436956416.0, 23440000.0, 0.05030069412472422], [1436958144.0, 23460000.0, 0.05052553941845099], [1436959872.0, 23480000.0, 0.05075120177557196], [1436961600.0, 23500000.0, 0.050977683437500004], [1436963328.0, 23520000.0, 0.051204986649772015], [1436965056.0, 23540000.0, 0.05143311366205303], [1436966784.0, 23560000.0, 0.05166206672813977], [1436968512.0, 23580000.0, 0.051891848105964776], [1436970240.0, 23600000.0, 0.05212246005759999], [1436971968.0, 23620000.0, 0.05235390484926084], [1436973696.0, 23640000.0, 0.052586184751309814], [1436975424.0, 23660000.0, 0.05281930203826058], [1436977152.0, 23680000.0, 0.05305325898878155], [1436978880.0, 23700000.0, 0.05328805788570002], [1436980608.0, 23720000.0, 0.05352370101600562], [1436982336.0, 23740000.0, 0.05376019067085463], [1436984064.0, 23760000.0, 0.05399752914557336], [1436985792.0, 23780000.0, 0.054235718739662375], [1436987520.0, 23800000.0, 0.05447476175679998], [1436989248.0, 23820000.0, 0.054714660504846455], [1436990976.0, 23840000.0, 0.054955417295847415], [1436992704.0, 23860000.0, 0.05519703444603819], [1436994432.0, 23880000.0, 0.05543951427584715], [1436996160.0, 23900000.0, 0.05568285910990001], [1436997888.0, 23920000.0, 0.05592707127702323], [1436999616.0, 23940000.0, 0.05617215311024823], [1437001344.0, 23960000.0, 0.056418106946814955], [1437003072.0, 23980000.0, 0.05666493512817598], [1437004800.0, 24000000.0, 0.05691263999999998], [1437006528.0, 24020000.0, 0.05716122391217604], [1437008256.0, 24040000.0, 0.057410689218817014], [1437009984.0, 24060000.0, 0.0576610382782638], [1437011712.0, 24080000.0, 0.05791227345308876], [1437013440.0, 24100000.0, 0.05816439711010001], [1437015168.0, 24120000.0, 0.05841741162034482], [1437016896.0, 24140000.0, 0.05867131935911384], [1437018624.0, 24160000.0, 0.058926122705944564], [1437020352.0, 24180000.0, 0.05918182404462559], [1437022080.0, 24200000.0, 0.05943842576319999], [1437023808.0, 24220000.0, 0.05969593025396966], [1437025536.0, 24240000.0, 0.05995433991349861], [1437027264.0, 24260000.0, 0.06021365714261741], [1437028992.0, 24280000.0, 0.06047388434642636], [1437030720.0, 24300000.0, 0.060735023934300025], [1437032448.0, 24320000.0, 0.06099707831989044], [1437034176.0, 24340000.0, 0.06126004992113144], [1437035904.0, 24360000.0, 0.06152394116024218], [1437037632.0, 24380000.0, 0.06178875446373121], [1437039360.0, 24400000.0, 0.06205449226239999], [1437041088.0, 24420000.0, 0.06232115699134726], [1437042816.0, 24440000.0, 0.06258875108997222], [1437044544.0, 24460000.0, 0.062857277001979], [1437046272.0, 24480000.0, 0.06312673717537996], [1437048000.0, 24500000.0, 0.06339713406250003], [1437049728.0, 24520000.0, 0.06366847011998003], [1437051456.0, 24540000.0, 0.06394074780878106], [1437053184.0, 24560000.0, 0.06421396959418778], [1437054912.0, 24580000.0, 0.06448813794581279], [1437056640.0, 24600000.0, 0.06476325533759998], [1437058368.0, 24620000.0, 0.06503932424782885], [1437060096.0, 24640000.0, 0.06531634715911781], [1437061824.0, 24660000.0, 0.0655943265584286], [1437063552.0, 24680000.0, 0.06587326493706955], [1437065280.0, 24700000.0, 0.06615316479070003], [1437067008.0, 24720000.0, 0.06643402861933363], [1437068736.0, 24740000.0, 0.06671585892734265], [1437070464.0, 24760000.0, 0.06699865822346136], [1437072192.0, 24780000.0, 0.06728242902079039], [1437073920.0, 24800000.0, 0.0675671738368], [1437075648.0, 24820000.0, 0.06785289519333446], [1437077376.0, 24840000.0, 0.06813959561661542], [1437079104.0, 24860000.0, 0.06842727763724622], [1437080832.0, 24880000.0, 0.06871594379021516], [1437082560.0, 24900000.0, 0.06900559661490001], [1437084288.0, 24920000.0, 0.06929623865507123], [1437086016.0, 24940000.0, 0.06958787245889625], [1437087744.0, 24960000.0, 0.06988050057894296], [1437089472.0, 24980000.0, 0.070174125572184], [1437091200.0, 25000000.0, 0.07046875], [1437092928.0, 25020000.0, 0.07076437642818399], [1437094656.0, 25040000.0, 0.07106100742694503], [1437096384.0, 25060000.0, 0.07135864557091176], [1437098112.0, 25080000.0, 0.07165729343913677], [1437099840.0, 25100000.0, 0.07195695361509998], [1437101568.0, 25120000.0, 0.07225762868671283], [1437103296.0, 25140000.0, 0.07255932124632179], [1437105024.0, 25160000.0, 0.07286203389071258], [1437106752.0, 25180000.0, 0.07316576922111355], [1437108480.0, 25200000.0, 0.0734705298432], [1437110208.0, 25220000.0, 0.07377631836709761], [1437111936.0, 25240000.0, 0.07408313740738663], [1437113664.0, 25260000.0, 0.07439098958310533], [1437115392.0, 25280000.0, 0.07469987751775439], [1437117120.0, 25300000.0, 0.07500980383929998], [1437118848.0, 25320000.0, 0.07532077118017842], [1437120576.0, 25340000.0, 0.0756327821772994], [1437122304.0, 25360000.0, 0.07594583947205018], [1437124032.0, 25380000.0, 0.07625994571029912], [1437125760.0, 25400000.0, 0.0765751035424], [1437127488.0, 25420000.0, 0.07689131562319519], [1437129216.0, 25440000.0, 0.07720858461202024], [1437130944.0, 25460000.0, 0.07752691317270693], [1437132672.0, 25480000.0, 0.07784630397358798], [1437134400.0, 25500000.0, 0.07816675968749996], [1437136128.0, 25520000.0, 0.07848828299178803], [1437137856.0, 25540000.0, 0.078810876568309], [1437139584.0, 25560000.0, 0.07913454310343579], [1437141312.0, 25580000.0, 0.07945928528806073], [1437143040.0, 25600000.0, 0.07978510581760001], [1437144768.0, 25620000.0, 0.0801120073919968], [1437146496.0, 25640000.0, 0.08043999271572583], [1437148224.0, 25660000.0, 0.08076906449779656], [1437149952.0, 25680000.0, 0.08109922545175757], [1437151680.0, 25700000.0, 0.08143047829569997], [1437153408.0, 25720000.0, 0.08176282575226164], [1437155136.0, 25740000.0, 0.08209627054863061], [1437156864.0, 25760000.0, 0.08243081541654938], [1437158592.0, 25780000.0, 0.08276646309231835], [1437160320.0, 25800000.0, 0.0831032163168], [1437162048.0, 25820000.0, 0.0834410778354224], [1437163776.0, 25840000.0, 0.08378005039818345], [1437165504.0, 25860000.0, 0.08412013675965416], [1437167232.0, 25880000.0, 0.08446133967898319], [1437168960.0, 25900000.0, 0.08480366191989998], [1437170688.0, 25920000.0, 0.08514710625071926], [1437172416.0, 25940000.0, 0.08549167544434419], [1437174144.0, 25960000.0, 0.085837372278271], [1437175872.0, 25980000.0, 0.08618419953459194], [1437177600.0, 26000000.0, 0.08653216], [1437179328.0, 26020000.0, 0.08688125646579199], [1437181056.0, 26040000.0, 0.08723149172787303], [1437182784.0, 26060000.0, 0.08758286858675975], [1437184512.0, 26080000.0, 0.08793538984758478], [1437186240.0, 26100000.0, 0.08828905832009996], [1437187968.0, 26120000.0, 0.08864387681868084], [1437189696.0, 26140000.0, 0.08899984816232982], [1437191424.0, 26160000.0, 0.0893569751746806], [1437193152.0, 26180000.0, 0.08971526068400153], [1437194880.0, 26200000.0, 0.09007470752320001], [1437196608.0, 26220000.0, 0.09043531852982563], [1437198336.0, 26240000.0, 0.09079709654607464], [1437200064.0, 26260000.0, 0.09116004441879337], [1437201792.0, 26280000.0, 0.09152416499948239], [1437203520.0, 26300000.0, 0.09188946114429997], [1437205248.0, 26320000.0, 0.09225593571406646], [1437206976.0, 26340000.0, 0.0926235915742674], [1437208704.0, 26360000.0, 0.0929924315950582], [1437210432.0, 26380000.0, 0.09336245865126716], [1437212160.0, 26400000.0, 0.09373367562240002], [1437213888.0, 26420000.0, 0.09410608539264322], [1437215616.0, 26440000.0, 0.09447969085086827], [1437217344.0, 26460000.0, 0.09485449489063497], [1437219072.0, 26480000.0, 0.09523050041019598], [1437220800.0, 26500000.0, 0.09560771031249997], [1437222528.0, 26520000.0, 0.09598612750519606], [1437224256.0, 26540000.0, 0.09636575490063702], [1437225984.0, 26560000.0, 0.0967465954158838], [1437227712.0, 26580000.0, 0.09712865197270874], [1437229440.0, 26600000.0, 0.09751192749760004], [1437231168.0, 26620000.0, 0.09789642492176481], [1437232896.0, 26640000.0, 0.09828214718113387], [1437234624.0, 26660000.0, 0.09866909721636456], [1437236352.0, 26680000.0, 0.0990572779728456], [1437238080.0, 26700000.0, 0.09944669240069999], [1437239808.0, 26720000.0, 0.09983734345478966], [1437241536.0, 26740000.0, 0.10022923409471861], [1437243264.0, 26760000.0, 0.10062236728483741], [1437244992.0, 26780000.0, 0.10101674599424634], [1437246720.0, 26800000.0, 0.10141237319680003], [1437248448.0, 26820000.0, 0.10180925187111044], [1437250176.0, 26840000.0, 0.10220738500055146], [1437251904.0, 26860000.0, 0.10260677557326219], [1437253632.0, 26880000.0, 0.10300742658215119], [1437255360.0, 26900000.0, 0.1034093410249], [1437257088.0, 26920000.0, 0.10381252190396725], [1437258816.0, 26940000.0, 0.10421697222659221], [1437260544.0, 26960000.0, 0.104622695004799], [1437262272.0, 26980000.0, 0.10502969325539997], [1437264000.0, 27000000.0, 0.10543797000000005], [1437265728.0, 27020000.0, 0.105847528265], [1437267456.0, 27040000.0, 0.10625837108160104], [1437269184.0, 27060000.0, 0.10667050148580776], [1437270912.0, 27080000.0, 0.10708392251843282], [1437272640.0, 27100000.0, 0.10749863722509999], [1437274368.0, 27120000.0, 0.10791464865624889], [1437276096.0, 27140000.0, 0.10833195986713781], [1437277824.0, 27160000.0, 0.1087505739178486], [1437279552.0, 27180000.0, 0.10917049387328959], [1437281280.0, 27200000.0, 0.10959172280320002], [1437283008.0, 27220000.0, 0.11001426378215363], [1437284736.0, 27240000.0, 0.11043811988956269], [1437286464.0, 27260000.0, 0.11086329420968137], [1437288192.0, 27280000.0, 0.1112897898316104], [1437289920.0, 27300000.0, 0.11171760984929999], [1437291648.0, 27320000.0, 0.1121467573615545], [1437293376.0, 27340000.0, 0.11257723547203542], [1437295104.0, 27360000.0, 0.11300904728926624], [1437296832.0, 27380000.0, 0.11344219592663518], [1437298560.0, 27400000.0, 0.11387668450240006], [1437300288.0, 27420000.0, 0.11431251613969123], [1437302016.0, 27440000.0, 0.11474969396651627], [1437303744.0, 27460000.0, 0.11518822111576299], [1437305472.0, 27480000.0, 0.11562810072520402], [1437307200.0, 27500000.0, 0.1160693359375], [1437308928.0, 27520000.0, 0.11651192990020397], [1437310656.0, 27540000.0, 0.11695588576576504], [1437312384.0, 27560000.0, 0.11740120669153173], [1437314112.0, 27580000.0, 0.11784789583975677], [1437315840.0, 27600000.0, 0.11829595637759996], [1437317568.0, 27620000.0, 0.11874539147713283], [1437319296.0, 27640000.0, 0.1191962043153418], [1437321024.0, 27660000.0, 0.1196483980741326], [1437322752.0, 27680000.0, 0.12010197594033352], [1437324480.0, 27700000.0, 0.12055694110569999], [1437326208.0, 27720000.0, 0.12101329676691762], [1437327936.0, 27740000.0, 0.12147104612560664], [1437329664.0, 27760000.0, 0.12193019238832534], [1437331392.0, 27780000.0, 0.12239073876657439], [1437333120.0, 27800000.0, 0.12285268847679995], [1437334848.0, 27820000.0, 0.12331604474039844], [1437336576.0, 27840000.0, 0.12378081078371939], [1437338304.0, 27860000.0, 0.1242469898380702], [1437340032.0, 27880000.0, 0.12471458513971911], [1437341760.0, 27900000.0, 0.12518359992990002], [1437343488.0, 27920000.0, 0.12565403745481518], [1437345216.0, 27940000.0, 0.12612590096564022], [1437346944.0, 27960000.0, 0.12659919371852693], [1437348672.0, 27980000.0, 0.12707391897460796], [1437350400.0, 28000000.0, 0.12755007999999993], [1437352128.0, 28020000.0, 0.12802768006580803], [1437353856.0, 28040000.0, 0.12850672244812902], [1437355584.0, 28060000.0, 0.12898721042805578], [1437357312.0, 28080000.0, 0.12946914729168074], [1437359040.0, 28100000.0, 0.1299525363301], [1437360768.0, 28120000.0, 0.1304373808394168], [1437362496.0, 28140000.0, 0.13092368412074581], [1437364224.0, 28160000.0, 0.13141144948021652], [1437365952.0, 28180000.0, 0.13190068022897758], [1437367680.0, 28200000.0, 0.13239137968319994], [1437369408.0, 28220000.0, 0.13288355116408163], [1437371136.0, 28240000.0, 0.1333771979978506], [1437372864.0, 28260000.0, 0.1338723235157694], [1437374592.0, 28280000.0, 0.13436893105413833], [1437376320.0, 28300000.0, 0.1348670239543], [1437378048.0, 28320000.0, 0.1353666055626424], [1437379776.0, 28340000.0, 0.13586767923060344], [1437381504.0, 28360000.0, 0.13637024831467415], [1437383232.0, 28380000.0, 0.13687431617640317], [1437384960.0, 28400000.0, 0.1373798861824], [1437386688.0, 28420000.0, 0.13788696170433926], [1437388416.0, 28440000.0, 0.1383955461189642], [1437390144.0, 28460000.0, 0.138905642808091], [1437391872.0, 28480000.0, 0.13941725515861195], [1437393600.0, 28500000.0, 0.1399303865625], [1437395328.0, 28520000.0, 0.14044504041681202], [1437397056.0, 28540000.0, 0.14096122012369305], [1437398784.0, 28560000.0, 0.14147892909037976], [1437400512.0, 28580000.0, 0.14199817072920481], [1437402240.0, 28600000.0, 0.14251894845759996], [1437403968.0, 28620000.0, 0.14304126569810086], [1437405696.0, 28640000.0, 0.1435651258783498], [1437407424.0, 28660000.0, 0.14409053243110062], [1437409152.0, 28680000.0, 0.14461748879422154], [1437410880.0, 28700000.0, 0.14514599841070003], [1437412608.0, 28720000.0, 0.1456760647286456], [1437414336.0, 28740000.0, 0.14620769120129468], [1437416064.0, 28760000.0, 0.14674088128701337], [1437417792.0, 28780000.0, 0.1472756384493024], [1437419520.0, 28800000.0, 0.14781196615679998], [1437421248.0, 28820000.0, 0.1483498678832865], [1437422976.0, 28840000.0, 0.14888934710768736], [1437424704.0, 28860000.0, 0.14943040731407822], [1437426432.0, 28880000.0, 0.14997305199168712], [1437428160.0, 28900000.0, 0.15051728463490002], [1437429888.0, 28920000.0, 0.1510631087432632], [1437431616.0, 28940000.0, 0.15161052782148826], [1437433344.0, 28960000.0, 0.15215954537945492], [1437435072.0, 28980000.0, 0.15271016493221598], [1437436800.0, 29000000.0, 0.15326238999999997], [1437438528.0, 29020000.0, 0.15381622410821602], [1437440256.0, 29040000.0, 0.154371670787457], [1437441984.0, 29060000.0, 0.1549287335735038], [1437443712.0, 29080000.0, 0.15548741600732874], [1437445440.0, 29100000.0, 0.15604772163510003], [1437447168.0, 29120000.0, 0.1566096540081848], [1437448896.0, 29140000.0, 0.15717321668315384], [1437450624.0, 29160000.0, 0.15773841322178456], [1437452352.0, 29180000.0, 0.15830524719106565], [1437454080.0, 29200000.0, 0.1588737221632], [1437455808.0, 29220000.0, 0.15944384171560966], [1437457536.0, 29240000.0, 0.16001560943093862], [1437459264.0, 29260000.0, 0.16058902889705742], [1437460992.0, 29280000.0, 0.16116410370706635], [1437462720.0, 29300000.0, 0.16174083745930004], [1437464448.0, 29320000.0, 0.1623192337573304], [1437466176.0, 29340000.0, 0.16289929620997148], [1437467904.0, 29360000.0, 0.16348102843128218], [1437469632.0, 29380000.0, 0.16406443404057117], [1437471360.0, 29400000.0, 0.16464951666239996], [1437473088.0, 29420000.0, 0.16523627992658732], [1437474816.0, 29440000.0, 0.1658247274682122], [1437476544.0, 29460000.0, 0.166414862927619], [1437478272.0, 29480000.0, 0.16700668995041998], [1437480000.0, 29500000.0, 0.16760021218750007], [1437481728.0, 29520000.0, 0.16819543329502], [1437483456.0, 29540000.0, 0.1687923569344211], [1437485184.0, 29560000.0, 0.16939098677242775], [1437486912.0, 29580000.0, 0.16999132648105286], [1437488640.0, 29600000.0, 0.1705933797376], [1437490368.0, 29620000.0, 0.1711971502246689], [1437492096.0, 29640000.0, 0.17180264163015782], [1437493824.0, 29660000.0, 0.17240985764726863], [1437495552.0, 29680000.0, 0.17301880197450956], [1437497280.0, 29700000.0, 0.17362947831570005], [1437499008.0, 29720000.0, 0.17424189037997362], [1437500736.0, 29740000.0, 0.1748560418817827], [1437502464.0, 29760000.0, 0.1754719365409014], [1437504192.0, 29780000.0, 0.17608957808243045], [1437505920.0, 29800000.0, 0.17670897023679996], [1437507648.0, 29820000.0, 0.1773301167397745], [1437509376.0, 29840000.0, 0.17795302133245539], [1437511104.0, 29860000.0, 0.17857768776128624], [1437512832.0, 29880000.0, 0.17920411977805517], [1437514560.0, 29900000.0, 0.17983232113990005], [1437516288.0, 29920000.0, 0.1804622956093112], [1437518016.0, 29940000.0, 0.1810940469541363], [1437519744.0, 29960000.0, 0.18172757894758299], [1437521472.0, 29980000.0, 0.18236289536822403], [1437523200.0, 30000000.0, 0.183], [1437524928.0, 30020000.0, 0.183638896632224], [1437526656.0, 30040000.0, 0.18427958905958503], [1437528384.0, 30060000.0, 0.1849220810821517], [1437530112.0, 30080000.0, 0.18556637650537675], [1437531840.0, 30100000.0, 0.18621247914009992], [1437533568.0, 30120000.0, 0.18686039280255284], [1437535296.0, 30140000.0, 0.1875101213143618], [1437537024.0, 30160000.0, 0.18816166850255256], [1437538752.0, 30180000.0, 0.18881503819955348], [1437540480.0, 30200000.0, 0.18947023424320003], [1437542208.0, 30220000.0, 0.19012726047673756], [1437543936.0, 30240000.0, 0.19078612074882662], [1437545664.0, 30260000.0, 0.1914468189135453], [1437547392.0, 30280000.0, 0.1921093588303944], [1437549120.0, 30300000.0, 0.19277374436429992], [1437550848.0, 30320000.0, 0.19343997938561844], [1437552576.0, 30340000.0, 0.1941080677701393], [1437554304.0, 30360000.0, 0.19477801339909018], [1437556032.0, 30380000.0, 0.19544982015913914], [1437557760.0, 30400000.0, 0.19612349194240003], [1437559488.0, 30420000.0, 0.1967990326464352], [1437561216.0, 30440000.0, 0.19747644617426022], [1437562944.0, 30460000.0, 0.19815573643434692], [1437564672.0, 30480000.0, 0.19883690734062798], [1437566400.0, 30500000.0, 0.19951996281249995], [1437568128.0, 30520000.0, 0.20020490677482802], [1437569856.0, 30540000.0, 0.20089174315794897], [1437571584.0, 30560000.0, 0.2015804758976758], [1437573312.0, 30580000.0, 0.2022711089353007], [1437575040.0, 30600000.0, 0.20296364621760002], [1437576768.0, 30620000.0, 0.20365809169683677], [1437578496.0, 30640000.0, 0.20435444933076585], [1437580224.0, 30660000.0, 0.20505272308263653], [1437581952.0, 30680000.0, 0.2057529169211976], [1437583680.0, 30700000.0, 0.20645503482069993], [1437585408.0, 30720000.0, 0.20715908076090164], [1437587136.0, 30740000.0, 0.20786505872707062], [1437588864.0, 30760000.0, 0.20857297270998934], [1437590592.0, 30780000.0, 0.20928282670595835], [1437592320.0, 30800000.0, 0.2099946247168], [1437594048.0, 30820000.0, 0.21070837074986237], [1437595776.0, 30840000.0, 0.21142406881802348], [1437597504.0, 30860000.0, 0.21214172293969413], [1437599232.0, 30880000.0, 0.2128613371388232], [1437600960.0, 30900000.0, 0.21358291544489993], [1437602688.0, 30920000.0, 0.21430646189295927], [1437604416.0, 30940000.0, 0.21503198052358416], [1437606144.0, 30960000.0, 0.21575947538291101], [1437607872.0, 30980000.0, 0.21648895052263195], [1437609600.0, 31000000.0, 0.21722040999999997], [1437611328.0, 31020000.0, 0.217953857877832], [1437613056.0, 31040000.0, 0.21868929822451305], [1437614784.0, 31060000.0, 0.2194267351139997], [1437616512.0, 31080000.0, 0.22016617262582483], [1437618240.0, 31100000.0, 0.22090761484509994], [1437619968.0, 31120000.0, 0.22165106586252087], [1437621696.0, 31140000.0, 0.22239652977436977], [1437623424.0, 31160000.0, 0.22314401068252063], [1437625152.0, 31180000.0, 0.2238935126944415], [1437626880.0, 31200000.0, 0.22464503992320004], [1437628608.0, 31220000.0, 0.22539859648746563], [1437630336.0, 31240000.0, 0.22615418651151467], [1437632064.0, 31260000.0, 0.22691181412523334], [1437633792.0, 31280000.0, 0.22767148346412244], [1437635520.0, 31300000.0, 0.2284331986693], [1437637248.0, 31320000.0, 0.2291969638875065], [1437638976.0, 31340000.0, 0.22996278327110733], [1437640704.0, 31360000.0, 0.23073066097809822], [1437642432.0, 31380000.0, 0.23150060117210716], [1437644160.0, 31400000.0, 0.23227260802240005], [1437645888.0, 31420000.0, 0.23304668570388315], [1437647616.0, 31440000.0, 0.23382283839710827], [1437649344.0, 31460000.0, 0.23460107028827498], [1437651072.0, 31480000.0, 0.235381385569236], [1437652800.0, 31500000.0, 0.23616378843749997], [1437654528.0, 31520000.0, 0.23694828309623608], [1437656256.0, 31540000.0, 0.23773487375427704], [1437657984.0, 31560000.0, 0.23852356462612384], [1437659712.0, 31580000.0, 0.2393143599319487], [1437661440.0, 31600000.0, 0.2401072638976], [1437663168.0, 31620000.0, 0.24090228075460482], [1437664896.0, 31640000.0, 0.2416994147401739], [1437666624.0, 31660000.0, 0.24249867009720452], [1437668352.0, 31680000.0, 0.24330005107428565], [1437670080.0, 31700000.0, 0.24410356192569996], [1437671808.0, 31720000.0, 0.24490920691142967], [1437673536.0, 31740000.0, 0.2457169902971586], [1437675264.0, 31760000.0, 0.24652691635427743], [1437676992.0, 31780000.0, 0.24733898935988632], [1437678720.0, 31800000.0, 0.24815321359680007], [1437680448.0, 31820000.0, 0.2489695933535504], [1437682176.0, 31840000.0, 0.24978813292439148], [1437683904.0, 31860000.0, 0.25060883660930217], [1437685632.0, 31880000.0, 0.25143170871399123], [1437687360.0, 31900000.0, 0.25225675354989996], [1437689088.0, 31920000.0, 0.2530839754342073], [1437690816.0, 31940000.0, 0.25391337868983216], [1437692544.0, 31960000.0, 0.254744967645439], [1437694272.0, 31980000.0, 0.25557874663544], [1437696000.0, 32000000.0, 0.25641472000000004], [1437697728.0, 32020000.0, 0.25725289208504004], [1437699456.0, 32040000.0, 0.2580932672422411], [1437701184.0, 32060000.0, 0.25893584982904777], [1437702912.0, 32080000.0, 0.25978064420867286], [1437704640.0, 32100000.0, 0.26062765475009997], [1437706368.0, 32120000.0, 0.2614768858280889], [1437708096.0, 32140000.0, 0.2623283418231778], [1437709824.0, 32160000.0, 0.2631820271216887], [1437711552.0, 32180000.0, 0.2640379461157296], [1437713280.0, 32200000.0, 0.26489610320320006], [1437715008.0, 32220000.0, 0.2657565027877936], [1437716736.0, 32240000.0, 0.26661914927900265], [1437718464.0, 32260000.0, 0.2674840470921213], [1437720192.0, 32280000.0, 0.2683512006482504], [1437721920.0, 32300000.0, 0.2692206143743], [1437723648.0, 32320000.0, 0.27009229270299456], [1437725376.0, 32340000.0, 0.2709662400728754], [1437727104.0, 32360000.0, 0.2718424609283063], [1437728832.0, 32380000.0, 0.2727209597194752], [1437730560.0, 32400000.0, 0.2736017409024001], [1437732288.0, 32420000.0, 0.27448480893893124], [1437734016.0, 32440000.0, 0.2753701682967563], [1437735744.0, 32460000.0, 0.276257823449403], [1437737472.0, 32480000.0, 0.27714777887624403], [1437739200.0, 32500000.0, 0.2780400390625], [1437740928.0, 32520000.0, 0.27893460849924395], [1437742656.0, 32540000.0, 0.27983149168340504], [1437744384.0, 32560000.0, 0.28073069311777166], [1437746112.0, 32580000.0, 0.28163221731099675], [1437747840.0, 32600000.0, 0.28253606877759996], [1437749568.0, 32620000.0, 0.2834422520379728], [1437751296.0, 32640000.0, 0.28435077161838174], [1437753024.0, 32660000.0, 0.2852616320509726], [1437754752.0, 32680000.0, 0.2861748378737734], [1437756480.0, 32700000.0, 0.2870903936307], [1437758208.0, 32720000.0, 0.2880083038715575], [1437759936.0, 32740000.0, 0.2889285731520467], [1437761664.0, 32760000.0, 0.2898512060337653], [1437763392.0, 32780000.0, 0.29077620708421437], [1437765120.0, 32800000.0, 0.2917035808767999], [1437766848.0, 32820000.0, 0.29263333199083846], [1437768576.0, 32840000.0, 0.2935654650115594], [1437770304.0, 32860000.0, 0.29449998453011017], [1437772032.0, 32880000.0, 0.2954368951435591], [1437773760.0, 32900000.0, 0.29637620145490007], [1437775488.0, 32920000.0, 0.29731790807305514], [1437777216.0, 32940000.0, 0.29826201961288024], [1437778944.0, 32960000.0, 0.2992085406951669], [1437780672.0, 32980000.0, 0.300157475946648], [1437782400.0, 33000000.0, 0.30110882999999994], [1437784128.0, 33020000.0, 0.30206260749384806], [1437785856.0, 33040000.0, 0.3030188130727689], [1437787584.0, 33060000.0, 0.3039774513872958], [1437789312.0, 33080000.0, 0.30493852709392066], [1437791040.0, 33100000.0, 0.3059020448551], [1437792768.0, 33120000.0, 0.3068680093392568], [1437794496.0, 33140000.0, 0.30783642522078586], [1437796224.0, 33160000.0, 0.3088072971800565], [1437797952.0, 33180000.0, 0.3097806299034176], [1437799680.0, 33200000.0, 0.31075642808319986], [1437801408.0, 33220000.0, 0.31173469641772167], [1437803136.0, 33240000.0, 0.31271543961129056], [1437804864.0, 33260000.0, 0.3136986623742094], [1437806592.0, 33280000.0, 0.3146843694227783], [1437808320.0, 33300000.0, 0.31567256547930006], [1437810048.0, 33320000.0, 0.3166632552720824], [1437811776.0, 33340000.0, 0.3176564435354434], [1437813504.0, 33360000.0, 0.3186521350097141], [1437815232.0, 33380000.0, 0.3196503344412433], [1437816960.0, 33400000.0, 0.3206510465823999], [1437818688.0, 33420000.0, 0.32165427619157927], [1437820416.0, 33440000.0, 0.3226600280332042], [1437822144.0, 33460000.0, 0.323668306877731], [1437823872.0, 33480000.0, 0.3246791175016519], [1437825600.0, 33500000.0, 0.3256924646875], [1437827328.0, 33520000.0, 0.32670835322385194], [1437829056.0, 33540000.0, 0.3277267879053331], [1437830784.0, 33560000.0, 0.32874777353261964], [1437832512.0, 33580000.0, 0.32977131491244477], [1437834240.0, 33600000.0, 0.3307974168575999], [1437835968.0, 33620000.0, 0.33182608418694093], [1437837696.0, 33640000.0, 0.33285732172538973], [1437839424.0, 33660000.0, 0.33389113430394063], [1437841152.0, 33680000.0, 0.3349275267596615], [1437842880.0, 33700000.0, 0.3359665039357001], [1437844608.0, 33720000.0, 0.3370080706812856], [1437846336.0, 33740000.0, 0.33805223185173466], [1437848064.0, 33760000.0, 0.33909899230845325], [1437849792.0, 33780000.0, 0.3401483569189424], [1437851520.0, 33800000.0, 0.34120033055679994], [1437853248.0, 33820000.0, 0.3422549181017265], [1437854976.0, 33840000.0, 0.3433121244395274], [1437856704.0, 33860000.0, 0.34437195446211827], [1437858432.0, 33880000.0, 0.34543441306752715], [1437860160.0, 33900000.0, 0.3464995051599], [1437861888.0, 33920000.0, 0.3475672356495031], [1437863616.0, 33940000.0, 0.3486376094527283], [1437865344.0, 33960000.0, 0.3497106314920949], [1437867072.0, 33980000.0, 0.35078630669625604], [1437868800.0, 34000000.0, 0.35186463999999995], [1437870528.0, 34020000.0, 0.35294563634425613], [1437872256.0, 34040000.0, 0.3540293006760969], [1437873984.0, 34060000.0, 0.35511563794874385], [1437875712.0, 34080000.0, 0.35620465312156874], [1437877440.0, 34100000.0, 0.3572963511601], [1437879168.0, 34120000.0, 0.35839073703602475], [1437880896.0, 34140000.0, 0.3594878157271939], [1437882624.0, 34160000.0, 0.3605875922176245], [1437884352.0, 34180000.0, 0.36169007149750565], [1437886080.0, 34200000.0, 0.3627952585632], [1437887808.0, 34220000.0, 0.36390315841724974], [1437889536.0, 34240000.0, 0.36501377606837854], [1437891264.0, 34260000.0, 0.36612711653149743], [1437892992.0, 34280000.0, 0.36724318482770635], [1437894720.0, 34300000.0, 0.36836198598430014], [1437896448.0, 34320000.0, 0.3694835250347705], [1437898176.0, 34340000.0, 0.3706078070188116], [1437899904.0, 34360000.0, 0.3717348369823221], [1437901632.0, 34380000.0, 0.3728646199774112], [1437903360.0, 34400000.0, 0.3739971610624], [1437905088.0, 34420000.0, 0.3751324653018273], [1437906816.0, 34440000.0, 0.37627053776645225], [1437908544.0, 34460000.0, 0.3774113835332591], [1437910272.0, 34480000.0, 0.37855500768545997], [1437912000.0, 34500000.0, 0.3797014153125001], [1437913728.0, 34520000.0, 0.38085061151006], [1437915456.0, 34540000.0, 0.38200260138006115], [1437917184.0, 34560000.0, 0.38315739003066773], [1437918912.0, 34580000.0, 0.3843149825762929], [1437920640.0, 34600000.0, 0.3854753841375999], [1437922368.0, 34620000.0, 0.38663859984150895], [1437924096.0, 34640000.0, 0.38780463482119776], [1437925824.0, 34660000.0, 0.3889734942161087], [1437927552.0, 34680000.0, 0.39014518317194957], [1437929280.0, 34700000.0, 0.3913197068407001], [1437931008.0, 34720000.0, 0.3924970703806136], [1437932736.0, 34740000.0, 0.3936772789562228], [1437934464.0, 34760000.0, 0.39486033773834134], [1437936192.0, 34780000.0, 0.39604625190407056], [1437937920.0, 34800000.0, 0.39723502663679994], [1437939648.0, 34820000.0, 0.3984266671262146], [1437941376.0, 34840000.0, 0.3996211785682954], [1437943104.0, 34860000.0, 0.40081856616532635], [1437944832.0, 34880000.0, 0.4020188351258952], [1437946560.0, 34900000.0, 0.4032219906649002], [1437948288.0, 34920000.0, 0.4044280380035512], [1437950016.0, 34940000.0, 0.40563698236937634], [1437951744.0, 34960000.0, 0.40684882899622293], [1437953472.0, 34980000.0, 0.4080635831242641], [1437955200.0, 35000000.0, 0.40928125], [1437956928.0, 35020000.0, 0.4105018348762639], [1437958656.0, 35040000.0, 0.411725343012225], [1437960384.0, 35060000.0, 0.41295177967339164], [1437962112.0, 35080000.0, 0.41418115013161666], [1437963840.0, 35100000.0, 0.41541345966509974], [1437965568.0, 35120000.0, 0.41664871355839284], [1437967296.0, 35140000.0, 0.41788691710240183], [1437969024.0, 35160000.0, 0.4191280755943926], [1437970752.0, 35180000.0, 0.4203721943379934], [1437972480.0, 35200000.0, 0.4216192786431999], [1437974208.0, 35220000.0, 0.4228693338263774], [1437975936.0, 35240000.0, 0.4241223652102666], [1437977664.0, 35260000.0, 0.4253783781239852], [1437979392.0, 35280000.0, 0.42663737790303446], [1437981120.0, 35300000.0, 0.4278993698892999], [1437982848.0, 35320000.0, 0.42916435943105846], [1437984576.0, 35340000.0, 0.4304323518829794], [1437986304.0, 35360000.0, 0.43170335260613024], [1437988032.0, 35380000.0, 0.43297736696797906], [1437989760.0, 35400000.0, 0.4342544003424], [1437991488.0, 35420000.0, 0.4355344581096751], [1437993216.0, 35440000.0, 0.4368175456565002], [1437994944.0, 35460000.0, 0.4381036683759868], [1437996672.0, 35480000.0, 0.43939283166766796], [1437998400.0, 35500000.0, 0.44068504093749994], [1438000128.0, 35520000.0, 0.441980301597868], [1438001856.0, 35540000.0, 0.44327861906758886], [1438003584.0, 35560000.0, 0.44457999877191584], [1438005312.0, 35580000.0, 0.44588444614254064], [1438007040.0, 35600000.0, 0.4471919666176001], [1438008768.0, 35620000.0, 0.4485025656416768], [1438010496.0, 35640000.0, 0.4498162486658059], [1438012224.0, 35660000.0, 0.45113302114747644], [1438013952.0, 35680000.0, 0.45245288855063764], [1438015680.0, 35700000.0, 0.45377585634569995], [1438017408.0, 35720000.0, 0.4551019300095417], [1438019136.0, 35740000.0, 0.4564311150255105], [1438020864.0, 35760000.0, 0.4577634168834294], [1438022592.0, 35780000.0, 0.45909884107959836], [1438024320.0, 35800000.0, 0.46043739311680004], [1438026048.0, 35820000.0, 0.4617790785043023], [1438027776.0, 35840000.0, 0.46312390275786347], [1438029504.0, 35860000.0, 0.46447187139973406], [1438031232.0, 35880000.0, 0.4658229899586632], [1438032960.0, 35900000.0, 0.46717726396989984], [1438034688.0, 35920000.0, 0.4685346989751993], [1438036416.0, 35940000.0, 0.4698953005228242], [1438038144.0, 35960000.0, 0.4712590741675511], [1438039872.0, 35980000.0, 0.47262602547067195], [1438041600.0, 36000000.0, 0.47399616000000017], [1438043328.0, 36020000.0, 0.47536948332987194], [1438045056.0, 36040000.0, 0.47674600104115306], [1438046784.0, 36060000.0, 0.4781257187212396], [1438048512.0, 36080000.0, 0.4795086419640648], [1438050240.0, 36100000.0, 0.4808947763700999], [1438051968.0, 36120000.0, 0.482284127546361], [1438053696.0, 36140000.0, 0.48367670110640976], [1438055424.0, 36160000.0, 0.4850725026703607], [1438057152.0, 36180000.0, 0.48647153786488145], [1438058880.0, 36200000.0, 0.48787381232320015], [1438060608.0, 36220000.0, 0.4892793316851056], [1438062336.0, 36240000.0, 0.49068810159695475], [1438064064.0, 36260000.0, 0.4921001277116733], [1438065792.0, 36280000.0, 0.49351541568876245], [1438067520.0, 36300000.0, 0.49493397119429994], [1438069248.0, 36320000.0, 0.4963557999009466], [1438070976.0, 36340000.0, 0.49778090748794734], [1438072704.0, 36360000.0, 0.4992092996411383], [1438074432.0, 36380000.0, 0.5006409820529469], [1438076160.0, 36400000.0, 0.5020759604224001], [1438077888.0, 36420000.0, 0.5035142404551232], [1438079616.0, 36440000.0, 0.5049558278633482], [1438081344.0, 36460000.0, 0.506400728365915], [1438083072.0, 36480000.0, 0.5078489476882762], [1438084800.0, 36500000.0, 0.5093004915624999], [1438086528.0, 36520000.0, 0.5107553657272762], [1438088256.0, 36540000.0, 0.5122135759279169], [1438089984.0, 36560000.0, 0.5136751279163638], [1438091712.0, 36580000.0, 0.5151400274511888], [1438093440.0, 36600000.0, 0.5166082802976001], [1438095168.0, 36620000.0, 0.5180798922274447], [1438096896.0, 36640000.0, 0.5195548690192139], [1438098624.0, 36660000.0, 0.5210332164580446], [1438100352.0, 36680000.0, 0.5225149403357258], [1438102080.0, 36700000.0, 0.5240000464507], [1438103808.0, 36720000.0, 0.5254885406080698], [1438105536.0, 36740000.0, 0.5269804286195985], [1438107264.0, 36760000.0, 0.5284757163037176], [1438108992.0, 36780000.0, 0.5299744094855264], [1438110720.0, 36800000.0, 0.5314765139968], [1438112448.0, 36820000.0, 0.5329820356759903], [1438114176.0, 36840000.0, 0.5344909803682315], [1438115904.0, 36860000.0, 0.5360033539253423], [1438117632.0, 36880000.0, 0.5375191622058312], [1438119360.0, 36900000.0, 0.5390384110749], [1438121088.0, 36920000.0, 0.5405611064044474], [1438122816.0, 36940000.0, 0.5420872540730721], [1438124544.0, 36960000.0, 0.5436168599660791], [1438126272.0, 36980000.0, 0.54514992997548], [1438128000.0, 37000000.0, 0.5466864700000001], [1438129728.0, 37020000.0, 0.5482264859450799], [1438131456.0, 37040000.0, 0.5497699837228812], [1438133184.0, 37060000.0, 0.5513169692522879], [1438134912.0, 37080000.0, 0.5528674484589128], [1438136640.0, 37100000.0, 0.5544214272751], [1438138368.0, 37120000.0, 0.555978911639929], [1438140096.0, 37140000.0, 0.5575399074992179], [1438141824.0, 37160000.0, 0.5591044208055287], [1438143552.0, 37180000.0, 0.5606724575181696], [1438145280.0, 37200000.0, 0.5622440236032001], [1438147008.0, 37220000.0, 0.5638191250334336], [1438148736.0, 37240000.0, 0.565397767788443], [1438150464.0, 37260000.0, 0.5669799578545613], [1438152192.0, 37280000.0, 0.5685657012248905], [1438153920.0, 37300000.0, 0.5701550038993], [1438155648.0, 37320000.0, 0.5717478718844345], [1438157376.0, 37340000.0, 0.5733443111937155], [1438159104.0, 37360000.0, 0.5749443278473463], [1438160832.0, 37380000.0, 0.5765479278723153], [1438162560.0, 37400000.0, 0.5781551173024001], [1438164288.0, 37420000.0, 0.5797659021781713], [1438166016.0, 37440000.0, 0.5813802885469964], [1438167744.0, 37460000.0, 0.582998282463043], [1438169472.0, 37480000.0, 0.5846198899872843], [1438171200.0, 37500000.0, 0.5862451171875], [1438172928.0, 37520000.0, 0.5878739701382838], [1438174656.0, 37540000.0, 0.589506454921045], [1438176384.0, 37560000.0, 0.5911425776240116], [1438178112.0, 37580000.0, 0.5927823443422368], [1438179840.0, 37600000.0, 0.5944257611775997], [1438181568.0, 37620000.0, 0.5960728342388126], [1438183296.0, 37640000.0, 0.5977235696414217], [1438185024.0, 37660000.0, 0.5993779735078124], [1438186752.0, 37680000.0, 0.6010360519672134], [1438188480.0, 37700000.0, 0.6026978111557001], [1438190208.0, 37720000.0, 0.6043632572161975], [1438191936.0, 37740000.0, 0.6060323962984866], [1438193664.0, 37760000.0, 0.6077052345592051], [1438195392.0, 37780000.0, 0.6093817781618545], [1438197120.0, 37800000.0, 0.6110620332767998], [1438198848.0, 37820000.0, 0.6127460060812786], [1438200576.0, 37840000.0, 0.6144337027593992], [1438202304.0, 37860000.0, 0.6161251295021501], [1438204032.0, 37880000.0, 0.617820292507399], [1438205760.0, 37900000.0, 0.6195191979799], [1438207488.0, 37920000.0, 0.621221852131295], [1438209216.0, 37940000.0, 0.6229282611801201], [1438210944.0, 37960000.0, 0.6246384313518067], [1438212672.0, 37980000.0, 0.626352368878688], [1438214400.0, 38000000.0, 0.6280700799999996], [1438216128.0, 38020000.0, 0.6297915709618882], [1438217856.0, 38040000.0, 0.6315168480174089], [1438219584.0, 38060000.0, 0.6332459174265358], [1438221312.0, 38080000.0, 0.6349787854561606], [1438223040.0, 38100000.0, 0.6367154583800999], [1438224768.0, 38120000.0, 0.6384559424790968], [1438226496.0, 38140000.0, 0.6402002440408259], [1438228224.0, 38160000.0, 0.6419483693598964], [1438229952.0, 38180000.0, 0.6437003247378577], [1438231680.0, 38200000.0, 0.6454561164831999], [1438233408.0, 38220000.0, 0.6472157509113617], [1438235136.0, 38240000.0, 0.6489792343447305], [1438236864.0, 38260000.0, 0.6507465731126494], [1438238592.0, 38280000.0, 0.6525177735514183], [1438240320.0, 38300000.0, 0.6542928420043], [1438242048.0, 38320000.0, 0.6560717848215223], [1438243776.0, 38340000.0, 0.6578546083602833], [1438245504.0, 38360000.0, 0.659641318984754], [1438247232.0, 38380000.0, 0.6614319230660832], [1438248960.0, 38400000.0, 0.6632264269824], [1438250688.0, 38420000.0, 0.6650248371188194], [1438252416.0, 38440000.0, 0.6668271598674441], [1438254144.0, 38460000.0, 0.6686334016273712], [1438255872.0, 38480000.0, 0.6704435688046918], [1438257600.0, 38500000.0, 0.6722576678125002], [1438259328.0, 38520000.0, 0.6740757050708919], [1438261056.0, 38540000.0, 0.6758976870069732], [1438262784.0, 38560000.0, 0.6777236200548596], [1438264512.0, 38580000.0, 0.6795535106556848], [1438266240.0, 38600000.0, 0.6813873652576], [1438267968.0, 38620000.0, 0.6832251903157809], [1438269696.0, 38640000.0, 0.6850669922924298], [1438271424.0, 38660000.0, 0.6869127776567806], [1438273152.0, 38680000.0, 0.6887625528851015], [1438274880.0, 38700000.0, 0.6906163244607001], [1438276608.0, 38720000.0, 0.6924740988739255], [1438278336.0, 38740000.0, 0.6943358826221748], [1438280064.0, 38760000.0, 0.6962016822098932], [1438281792.0, 38780000.0, 0.6980715041485823], [1438283520.0, 38800000.0, 0.6999453549568], [1438285248.0, 38820000.0, 0.7018232411601664], [1438286976.0, 38840000.0, 0.7037051692913674], [1438288704.0, 38860000.0, 0.7055911458901583], [1438290432.0, 38880000.0, 0.7074811775033671], [1438292160.0, 38900000.0, 0.7093752706849001], [1438293888.0, 38920000.0, 0.7112734319957433], [1438295616.0, 38940000.0, 0.7131756680039685], [1438297344.0, 38960000.0, 0.7150819852847349], [1438299072.0, 38980000.0, 0.7169923904202962], [1438300800.0, 39000000.0, 0.7189068899999999], [1438302528.0, 39020000.0, 0.7208254906202961], [1438304256.0, 39040000.0, 0.7227481988847368], [1438305984.0, 39060000.0, 0.7246750214039839], [1438307712.0, 39080000.0, 0.7266059647958087], [1438309440.0, 39100000.0, 0.7285410356851002], [1438311168.0, 39120000.0, 0.7304802407038646], [1438312896.0, 39140000.0, 0.7324235864912338], [1438314624.0, 39160000.0, 0.7343710796934646], [1438316352.0, 39180000.0, 0.7363227269639456], [1438318080.0, 39200000.0, 0.7382785349631998], [1438319808.0, 39220000.0, 0.7402385103588898], [1438321536.0, 39240000.0, 0.7422026598258185], [1438323264.0, 39260000.0, 0.7441709900459378], [1438324992.0, 39280000.0, 0.7461435077083463], [1438326720.0, 39300000.0, 0.7481202195093001], [1438328448.0, 39320000.0, 0.7501011321522103], [1438330176.0, 39340000.0, 0.7520862523476516], [1438331904.0, 39360000.0, 0.7540755868133622], [1438333632.0, 39380000.0, 0.7560691422742515], [1438335360.0, 39400000.0, 0.7580669254624], [1438337088.0, 39420000.0, 0.7600689431170674], [1438338816.0, 39440000.0, 0.762075201984692], [1438340544.0, 39460000.0, 0.7640857088188991], [1438342272.0, 39480000.0, 0.7661004703804998], [1438344000.0, 39500000.0, 0.7681194934375002], [1438345728.0, 39520000.0, 0.7701427847650999], [1438347456.0, 39540000.0, 0.7721703511457011], [1438349184.0, 39560000.0, 0.7742021993689077], [1438350912.0, 39580000.0, 0.7762383362315329], [1438352640.0, 39600000.0, 0.7782787685376], [1438354368.0, 39620000.0, 0.780323503098349], [1438356096.0, 39640000.0, 0.7823725467322379], [1438357824.0, 39660000.0, 0.7844259062649488], [1438359552.0, 39680000.0, 0.7864835885293895], [1438361280.0, 39700000.0, 0.7885456003657003], [1438363008.0, 39720000.0, 0.7906119486212535], [1438364736.0, 39740000.0, 0.7926826401506629], [1438366464.0, 39760000.0, 0.7947576818157813], [1438368192.0, 39780000.0, 0.7968370804857107], [1438369920.0, 39800000.0, 0.7989208430368], [1438371648.0, 39820000.0, 0.8010089763526547], [1438373376.0, 39840000.0, 0.8031014873241354], [1438375104.0, 39860000.0, 0.8051983828493663], [1438376832.0, 39880000.0, 0.8072996698337352], [1438378560.0, 39900000.0, 0.8094053551899002], [1438380288.0, 39920000.0, 0.8115154458377912], [1438382016.0, 39940000.0, 0.8136299487046165], [1438383744.0, 39960000.0, 0.8157488707248629], [1438385472.0, 39980000.0, 0.8178722188403041], [1438387200.0, 40000000.0, 0.82], [1438388928.0, 40020000.0, 0.8221322211603037], [1438390656.0, 40040000.0, 0.8242688892848645], [1438392384.0, 40060000.0, 0.826410011344632], [1438394112.0, 40080000.0, 0.8285555943178566], [1438395840.0, 40100000.0, 0.8307056451900998], [1438397568.0, 40120000.0, 0.8328601709542325], [1438399296.0, 40140000.0, 0.8350191786104422], [1438401024.0, 40160000.0, 0.8371826751662326], [1438402752.0, 40180000.0, 0.8393506676364333], [1438404480.0, 40200000.0, 0.8415231630431995], [1438406208.0, 40220000.0, 0.8437001684160178], [1438407936.0, 40240000.0, 0.8458816907917065], [1438409664.0, 40260000.0, 0.8480677372144253], [1438411392.0, 40280000.0, 0.8502583147356739], [1438413120.0, 40300000.0, 0.8524534304143002], [1438414848.0, 40320000.0, 0.8546530913164985], [1438416576.0, 40340000.0, 0.8568573045158192], [1438418304.0, 40360000.0, 0.8590660770931696], [1438420032.0, 40380000.0, 0.8612794161368195], [1438421760.0, 40400000.0, 0.8634973287424001], [1438423488.0, 40420000.0, 0.865719822012915], [1438425216.0, 40440000.0, 0.8679469030587398], [1438426944.0, 40460000.0, 0.8701785789976273], [1438428672.0, 40480000.0, 0.8724148569547082], [1438430400.0, 40500000.0, 0.8746557440624997], [1438432128.0, 40520000.0, 0.8769012474609075], [1438433856.0, 40540000.0, 0.8791513742972291], [1438435584.0, 40560000.0, 0.881406131726156], [1438437312.0, 40580000.0, 0.8836655269097805], [1438439040.0, 40600000.0, 0.8859295670175994], [1438440768.0, 40620000.0, 0.8881982592265171], [1438442496.0, 40640000.0, 0.890471610720846], [1438444224.0, 40660000.0, 0.8927496286923162], [1438445952.0, 40680000.0, 0.8950323203400771], [1438447680.0, 40700000.0, 0.8973196928707005], [1438449408.0, 40720000.0, 0.8996117534981818], [1438451136.0, 40740000.0, 0.9019085094439503], [1438452864.0, 40760000.0, 0.9042099679368688], [1438454592.0, 40780000.0, 0.9065161362132388], [1438456320.0, 40800000.0, 0.9088270215168002], [1438458048.0, 40820000.0, 0.9111426310987423], [1438459776.0, 40840000.0, 0.9134629722177029], [1438461504.0, 40860000.0, 0.9157880521397744], [1438463232.0, 40880000.0, 0.9181178781385031], [1438464960.0, 40900000.0, 0.9204524574948998], [1438466688.0, 40920000.0, 0.9227917974974387], [1438468416.0, 40940000.0, 0.9251359054420647], [1438470144.0, 40960000.0, 0.9274847886321911], [1438471872.0, 40980000.0, 0.9298384543787117], [1438473600.0, 41000000.0, 0.9321969099999996], [1438475328.0, 41020000.0, 0.9345601628219126], [1438477056.0, 41040000.0, 0.9369282201777932], [1438478784.0, 41060000.0, 0.9393010894084796], [1438480512.0, 41080000.0, 0.9416787778623043], [1438482240.0, 41100000.0, 0.9440612928951003], [1438483968.0, 41120000.0, 0.946448641870201], [1438485696.0, 41140000.0, 0.9488408321584496], [1438487424.0, 41160000.0, 0.9512378711382], [1438489152.0, 41180000.0, 0.953639766195322], [1438490880.0, 41200000.0, 0.9560465247232001], [1438492608.0, 41220000.0, 0.9584581541227454], [1438494336.0, 41240000.0, 0.9608746618023941], [1438496064.0, 41260000.0, 0.9632960551781138], [1438497792.0, 41280000.0, 0.9657223416734027], [1438499520.0, 41300000.0, 0.9681535287192997], [1438501248.0, 41320000.0, 0.9705896237543858], [1438502976.0, 41340000.0, 0.973030634224788], [1438504704.0, 41360000.0, 0.9754765675841783], [1438506432.0, 41380000.0, 0.9779274312937871], [1438508160.0, 41400000.0, 0.9803832328223996], [1438509888.0, 41420000.0, 0.9828439796463637], [1438511616.0, 41440000.0, 0.9853096792495883], [1438513344.0, 41460000.0, 0.9877803391235548], [1438515072.0, 41480000.0, 0.9902559667673156], [1438516800.0, 41500000.0, 0.9927365696875005], [1438518528.0, 41520000.0, 0.9952221553983162], [1438520256.0, 41540000.0, 0.997712731421557], [1438521984.0, 41560000.0, 1.0002083052866035], [1438523712.0, 41580000.0, 1.002708884530429], [1438525440.0, 41600000.0, 1.0052144766976001], [1438527168.0, 41620000.0, 1.007725089340285], [1438528896.0, 41640000.0, 1.0102407300182537], [1438530624.0, 41660000.0, 1.012761406298885], [1438532352.0, 41680000.0, 1.0152871257571656], [1438534080.0, 41700000.0, 1.0178178959756998], [1438535808.0, 41720000.0, 1.0203537245447092], [1438537536.0, 41740000.0, 1.0228946190620392], [1438539264.0, 41760000.0, 1.0254405871331576], [1438540992.0, 41780000.0, 1.0279916363711665], [1438542720.0, 41800000.0, 1.0305477743967997], [1438544448.0, 41820000.0, 1.033109008838431], [1438546176.0, 41840000.0, 1.0356753473320717], [1438547904.0, 41860000.0, 1.0382467975213823], [1438549632.0, 41880000.0, 1.0408233670576708], [1438551360.0, 41900000.0, 1.0434050635999006], [1438553088.0, 41920000.0, 1.0459918948146874], [1438554816.0, 41940000.0, 1.0485838683763122], [1438556544.0, 41960000.0, 1.0511809919667185], [1438558272.0, 41980000.0, 1.0537832732755208], [1438560000.0, 42000000.0, 1.0563907200000002], [1438561728.0, 42020000.0, 1.0590033398451202], [1438563456.0, 42040000.0, 1.0616211405235205], [1438565184.0, 42060000.0, 1.064244129755528], [1438566912.0, 42080000.0, 1.0668723152691535], [1438568640.0, 42100000.0, 1.0695057048001], [1438570368.0, 42120000.0, 1.0721443060917686], [1438572096.0, 42140000.0, 1.0747881268952582], [1438573824.0, 42160000.0, 1.0774371749693687], [1438575552.0, 42180000.0, 1.0800914580806098], [1438577280.0, 42200000.0, 1.0827509840032], [1438579008.0, 42220000.0, 1.0854157605190742], [1438580736.0, 42240000.0, 1.0880857954178826], [1438582464.0, 42260000.0, 1.0907610964970016], [1438584192.0, 42280000.0, 1.0934416715615303], [1438585920.0, 42300000.0, 1.0961275284243004], [1438587648.0, 42320000.0, 1.0988186749058746], [1438589376.0, 42340000.0, 1.1015151188345553], [1438591104.0, 42360000.0, 1.1042168680463857], [1438592832.0, 42380000.0, 1.106923930385156], [1438594560.0, 42400000.0, 1.1096363137024001], [1438596288.0, 42420000.0, 1.112354025857411], [1438598016.0, 42440000.0, 1.1150770747172358], [1438599744.0, 42460000.0, 1.1178054681566836], [1438601472.0, 42480000.0, 1.1205392140583244], [1438603200.0, 42500000.0, 1.1232783203125], [1438604928.0, 42520000.0, 1.1260227948173236], [1438606656.0, 42540000.0, 1.1287726454786842], [1438608384.0, 42560000.0, 1.131527880210252], [1438610112.0, 42580000.0, 1.1342885069334767], [1438611840.0, 42600000.0, 1.1370545335775997], [1438613568.0, 42620000.0, 1.1398259680796523], [1438615296.0, 42640000.0, 1.1426028183844619], [1438617024.0, 42660000.0, 1.1453850924446527], [1438618752.0, 42680000.0, 1.1481727982206535], [1438620480.0, 42700000.0, 1.1509659436806996], [1438622208.0, 42720000.0, 1.1537645368008378], [1438623936.0, 42740000.0, 1.1565685855649261], [1438625664.0, 42760000.0, 1.1593780979646453], [1438627392.0, 42780000.0, 1.162193081999494], [1438629120.0, 42800000.0, 1.1650135456768], [1438630848.0, 42820000.0, 1.1678394970117183], [1438632576.0, 42840000.0, 1.1706709440272394], [1438634304.0, 42860000.0, 1.17350789475419], [1438636032.0, 42880000.0, 1.1763503572312393], [1438637760.0, 42900000.0, 1.1791983395049002], [1438639488.0, 42920000.0, 1.182051849629535], [1438641216.0, 42940000.0, 1.18491089566736], [1438642944.0, 42960000.0, 1.1877754856884473], [1438644672.0, 42980000.0, 1.190645627770728], [1438646400.0, 43000000.0, 1.1935213299999996], [1438648128.0, 43020000.0, 1.1964026004699273], [1438649856.0, 43040000.0, 1.1992894472820494], [1438651584.0, 43060000.0, 1.202181878545776], [1438653312.0, 43080000.0, 1.2050799023784005], [1438655040.0, 43100000.0, 1.2079835269050996], [1438656768.0, 43120000.0, 1.210892760258937], [1438658496.0, 43140000.0, 1.213807610580866], [1438660224.0, 43160000.0, 1.2167280860197363], [1438661952.0, 43180000.0, 1.2196541947322972], [1438663680.0, 43200000.0, 1.2225859448832004], [1438665408.0, 43220000.0, 1.2255233446450016], [1438667136.0, 43240000.0, 1.2284664021981706], [1438668864.0, 43260000.0, 1.2314151257310888], [1438670592.0, 43280000.0, 1.234369523440059], [1438672320.0, 43300000.0, 1.2373296035293002], [1438674048.0, 43320000.0, 1.2402953742109624], [1438675776.0, 43340000.0, 1.2432668437051229], [1438677504.0, 43360000.0, 1.2462440202397946], [1438679232.0, 43380000.0, 1.2492269120509232], [1438680960.0, 43400000.0, 1.2522155273823998], [1438682688.0, 43420000.0, 1.255209874486059], [1438684416.0, 43440000.0, 1.2582099616216846], [1438686144.0, 43460000.0, 1.261215797057011], [1438687872.0, 43480000.0, 1.2642273890677318], [1438689600.0, 43500000.0, 1.2672447459374996], [1438691328.0, 43520000.0, 1.2702678759579327], [1438693056.0, 43540000.0, 1.2732967874286132], [1438694784.0, 43560000.0, 1.2763314886570998], [1438696512.0, 43580000.0, 1.2793719879589243], [1438698240.0, 43600000.0, 1.2824182936576], [1438699968.0, 43620000.0, 1.2854704140846211], [1438701696.0, 43640000.0, 1.28852835757947], [1438703424.0, 43660000.0, 1.2915921324896198], [1438705152.0, 43680000.0, 1.294661747170542], [1438706880.0, 43700000.0, 1.2977372099857003], [1438708608.0, 43720000.0, 1.3008185293065655], [1438710336.0, 43740000.0, 1.3039057135126142], [1438712064.0, 43760000.0, 1.3069987709913338], [1438713792.0, 43780000.0, 1.3100977101382227], [1438715520.0, 43800000.0, 1.3132025393567999], [1438717248.0, 43820000.0, 1.316313267058606], [1438718976.0, 43840000.0, 1.3194299016632078], [1438720704.0, 43860000.0, 1.3225524515981983], [1438722432.0, 43880000.0, 1.325680925299207], [1438724160.0, 43900000.0, 1.3288153312098996], [1438725888.0, 43920000.0, 1.3319556777819839], [1438727616.0, 43940000.0, 1.3351019734752085], [1438729344.0, 43960000.0, 1.338254226757375], [1438731072.0, 43980000.0, 1.3414124461043357], [1438732800.0, 44000000.0, 1.3445766400000008], [1438734528.0, 44020000.0, 1.3477468169363362], [1438736256.0, 44040000.0, 1.350922985413377], [1438737984.0, 44060000.0, 1.3541051539392233], [1438739712.0, 44080000.0, 1.3572933310300492], [1438741440.0, 44100000.0, 1.3604875252101003], [1438743168.0, 44120000.0, 1.3636877450117046], [1438744896.0, 44140000.0, 1.3668939989752733], [1438746624.0, 44160000.0, 1.370106295649305], [1438748352.0, 44180000.0, 1.3733246435903856], [1438750080.0, 44200000.0, 1.3765490513632], [1438751808.0, 44220000.0, 1.3797795275405291], [1438753536.0, 44240000.0, 1.3830160807032592], [1438755264.0, 44260000.0, 1.3862587194403773], [1438756992.0, 44280000.0, 1.3895074523489863], [1438758720.0, 44300000.0, 1.3927622880342994], [1438760448.0, 44320000.0, 1.396023235109651], [1438762176.0, 44340000.0, 1.3992903021964918], [1438763904.0, 44360000.0, 1.402563497924402], [1438765632.0, 44380000.0, 1.4058428309310906], [1438767360.0, 44400000.0, 1.4091283098624006], [1438769088.0, 44420000.0, 1.4124199433723077], [1438770816.0, 44440000.0, 1.4157177401229322], [1438772544.0, 44460000.0, 1.4190217087845385], [1438774272.0, 44480000.0, 1.4223318580355409], [1438776000.0, 44500000.0, 1.4256481965625003], [1438777728.0, 44520000.0, 1.42897073306014], [1438779456.0, 44540000.0, 1.4322994762313406], [1438781184.0, 44560000.0, 1.4356344347871484], [1438782912.0, 44580000.0, 1.4389756174467734], [1438784640.0, 44600000.0, 1.4423230329376002], [1438786368.0, 44620000.0, 1.4456766899951885], [1438788096.0, 44640000.0, 1.4490365973632786], [1438789824.0, 44660000.0, 1.4524027637937889], [1438791552.0, 44680000.0, 1.4557751980468296], [1438793280.0, 44700000.0, 1.4591539088906995], [1438795008.0, 44720000.0, 1.4625389051018944], [1438796736.0, 44740000.0, 1.4659301954651027], [1438798464.0, 44760000.0, 1.4693277887732215], [1438800192.0, 44780000.0, 1.47273169382735], [1438801920.0, 44800000.0, 1.4761419194368006], [1438803648.0, 44820000.0, 1.4795584744190946], [1438805376.0, 44840000.0, 1.4829813675999752], [1438807104.0, 44860000.0, 1.486410607813406], [1438808832.0, 44880000.0, 1.489846203901576], [1438810560.0, 44900000.0, 1.4932881647149003], [1438812288.0, 44920000.0, 1.496736499112031], [1438814016.0, 44940000.0, 1.5001912159598558], [1438815744.0, 44960000.0, 1.503652324133504], [1438817472.0, 44980000.0, 1.5071198325163446], [1438819200.0, 45000000.0, 1.51059375], [1438820928.0, 45020000.0, 1.5140740854843437], [1438822656.0, 45040000.0, 1.5175608478775042], [1438824384.0, 45060000.0, 1.5210540460958724], [1438826112.0, 45080000.0, 1.5245536890640967], [1438827840.0, 45100000.0, 1.5280597857150997], [1438829568.0, 45120000.0, 1.531572344990072], [1438831296.0, 45140000.0, 1.5350913758384823], [1438833024.0, 45160000.0, 1.5386168872180728], [1438834752.0, 45180000.0, 1.5421488880948735], [1438836480.0, 45200000.0, 1.5456873874431991], [1438838208.0, 45220000.0, 1.5492323942456578], [1438839936.0, 45240000.0, 1.5527839174931464], [1438841664.0, 45260000.0, 1.556341966184865], [1438843392.0, 45280000.0, 1.5599065493283135], [1438845120.0, 45300000.0, 1.5634776759393005], [1438846848.0, 45320000.0, 1.5670553550419386], [1438848576.0, 45340000.0, 1.5706395956686592], [1438850304.0, 45360000.0, 1.5742304068602095], [1438852032.0, 45380000.0, 1.5778277976656596], [1438853760.0, 45400000.0, 1.5814317771424], [1438855488.0, 45420000.0, 1.5850423543561547], [1438857216.0, 45440000.0, 1.5886595383809794], [1438858944.0, 45460000.0, 1.5922833382992676], [1438860672.0, 45480000.0, 1.5959137632017477], [1438862400.0, 45500000.0, 1.5995508221874997], [1438864128.0, 45520000.0, 1.6031945243639472], [1438865856.0, 45540000.0, 1.6068448788468697], [1438867584.0, 45560000.0, 1.610501894760396], [1438869312.0, 45580000.0, 1.6141655812370204], [1438871040.0, 45600000.0, 1.6178359474175992], [1438872768.0, 45620000.0, 1.621513002451357], [1438874496.0, 45640000.0, 1.6251967554958862], [1438876224.0, 45660000.0, 1.6288872157171563], [1438877952.0, 45680000.0, 1.6325843922895167], [1438879680.0, 45700000.0, 1.6362882943957007], [1438881408.0, 45720000.0, 1.6399989312268217], [1438883136.0, 45740000.0, 1.6437163119823903], [1438884864.0, 45760000.0, 1.6474404458703087], [1438886592.0, 45780000.0, 1.6511713421068788], [1438888320.0, 45800000.0, 1.6549090099168002], [1438890048.0, 45820000.0, 1.6586534585331822], [1438891776.0, 45840000.0, 1.6624046971975428], [1438893504.0, 45860000.0, 1.6661627351598145], [1438895232.0, 45880000.0, 1.6699275816783434], [1438896960.0, 45900000.0, 1.6736992460198996], [1438898688.0, 45920000.0, 1.6774777374596788], [1438900416.0, 45940000.0, 1.681263065281305], [1438902144.0, 45960000.0, 1.6850552387768314], [1438903872.0, 45980000.0, 1.688854267246752], [1438905600.0, 46000000.0, 1.6926601599999995], [1438907328.0, 46020000.0, 1.696472926353953], [1438909056.0, 46040000.0, 1.7002925756344334], [1438910784.0, 46060000.0, 1.7041191171757195], [1438912512.0, 46080000.0, 1.707952560320544], [1438914240.0, 46100000.0, 1.7117929144201007], [1438915968.0, 46120000.0, 1.7156401888340413], [1438917696.0, 46140000.0, 1.7194943929304896], [1438919424.0, 46160000.0, 1.7233555360860398], [1438921152.0, 46180000.0, 1.727223627685762], [1438922880.0, 46200000.0, 1.7310986771232002], [1438924608.0, 46220000.0, 1.7349806938003853], [1438926336.0, 46240000.0, 1.738869687127834], [1438928064.0, 46260000.0, 1.7427656665245541], [1438929792.0, 46280000.0, 1.7466686414180426], [1438931520.0, 46300000.0, 1.7505786212443], [1438933248.0, 46320000.0, 1.7544956154478257], [1438934976.0, 46340000.0, 1.758419633481628], [1438936704.0, 46360000.0, 1.7623506848072181], [1438938432.0, 46380000.0, 1.7662887788946269], [1438940160.0, 46400000.0, 1.770233925222399], [1438941888.0, 46420000.0, 1.7741861332776039], [1438943616.0, 46440000.0, 1.7781454125558285], [1438945344.0, 46460000.0, 1.7821117725611948], [1438947072.0, 46480000.0, 1.7860852228063555], [1438948800.0, 46500000.0, 1.7900657728125007], [1438950528.0, 46520000.0, 1.7940534321093562], [1438952256.0, 46540000.0, 1.798048210235197], [1438953984.0, 46560000.0, 1.8020501167368432], [1438955712.0, 46580000.0, 1.8060591611696692], [1438957440.0, 46600000.0, 1.8100753530976001], [1438959168.0, 46620000.0, 1.8140987020931247], [1438960896.0, 46640000.0, 1.8181292177372932], [1438962624.0, 46660000.0, 1.8221669096197253], [1438964352.0, 46680000.0, 1.8262117873386055], [1438966080.0, 46700000.0, 1.8302638605006998], [1438967808.0, 46720000.0, 1.8343231387213492], [1438969536.0, 46740000.0, 1.8383896316244792], [1438971264.0, 46760000.0, 1.8424633488425977], [1438972992.0, 46780000.0, 1.8465443000168063], [1438974720.0, 46800000.0, 1.8506324947967994], [1438976448.0, 46820000.0, 1.8547279428408712], [1438978176.0, 46840000.0, 1.858830653815912], [1438979904.0, 46860000.0, 1.862940637397422], [1438981632.0, 46880000.0, 1.867057903269511], [1438983360.0, 46900000.0, 1.8711824611249008], [1438985088.0, 46920000.0, 1.8753143206649276], [1438986816.0, 46940000.0, 1.8794534915995518], [1438988544.0, 46960000.0, 1.8835999836473585], [1438990272.0, 46980000.0, 1.8877538065355606], [1438992000.0, 47000000.0, 1.8919149700000004], [1438993728.0, 47020000.0, 1.8960834837851601], [1438995456.0, 47040000.0, 1.9002593576441604], [1438997184.0, 47060000.0, 1.9044426013387685], [1438998912.0, 47080000.0, 1.9086332246393931], [1439000640.0, 47100000.0, 1.9128312373251], [1439002368.0, 47120000.0, 1.9170366491836084], [1439004096.0, 47140000.0, 1.9212494700112985], [1439005824.0, 47160000.0, 1.9254697096132087], [1439007552.0, 47180000.0, 1.9296973778030495], [1439009280.0, 47200000.0, 1.9339324844031998], [1439011008.0, 47220000.0, 1.9381750392447146], [1439012736.0, 47240000.0, 1.9424250521673232], [1439014464.0, 47260000.0, 1.9466825330194413], [1439016192.0, 47280000.0, 1.9509474916581702], [1439017920.0, 47300000.0, 1.955219937949301], [1439019648.0, 47320000.0, 1.9594998817673148], [1439021376.0, 47340000.0, 1.9637873329953954], [1439023104.0, 47360000.0, 1.9680823015254256], [1439024832.0, 47380000.0, 1.9723847972579962], [1439026560.0, 47400000.0, 1.9766948301024005], [1439028288.0, 47420000.0, 1.9810124099766508], [1439030016.0, 47440000.0, 1.9853375468074757], [1439031744.0, 47460000.0, 1.9896702505303236], [1439033472.0, 47480000.0, 1.9940105310893643], [1439035200.0, 47500000.0, 1.9983583984375], [1439036928.0, 47520000.0, 2.0027138625363636], [1439038656.0, 47540000.0, 2.0070769333563243], [1439040384.0, 47560000.0, 2.0114476208764924], [1439042112.0, 47580000.0, 2.0158259350847167], [1439043840.0, 47600000.0, 2.020211885977599], [1439045568.0, 47620000.0, 2.024605483560492], [1439047296.0, 47640000.0, 2.0290067378475025], [1439049024.0, 47660000.0, 2.0334156588614927], [1439050752.0, 47680000.0, 2.0378322566340934], [1439052480.0, 47700000.0, 2.0422565412056994], [1439054208.0, 47720000.0, 2.046688522625478], [1439055936.0, 47740000.0, 2.0511282109513664], [1439057664.0, 47760000.0, 2.055575616250085], [1439059392.0, 47780000.0, 2.0600307485971334], [1439061120.0, 47800000.0, 2.064493618076801], [1439062848.0, 47820000.0, 2.0689642347821593], [1439064576.0, 47840000.0, 2.073442608815079], [1439066304.0, 47860000.0, 2.0779287502862296], [1439068032.0, 47880000.0, 2.08242266931508], [1439069760.0, 47900000.0, 2.0869243760298994], [1439071488.0, 47920000.0, 2.091433880567775], [1439073216.0, 47940000.0, 2.0959511930745993], [1439074944.0, 47960000.0, 2.1004763237050876], [1439076672.0, 47980000.0, 2.1050092826227678], [1439078400.0, 48000000.0, 2.1095500799999996], [1439080128.0, 48020000.0, 2.1140987260179673], [1439081856.0, 48040000.0, 2.1186552308666897], [1439083584.0, 48060000.0, 2.123219604745016], [1439085312.0, 48080000.0, 2.1277918578606405], [1439087040.0, 48100000.0, 2.132372000430099], [1439088768.0, 48120000.0, 2.136960042678778], [1439090496.0, 48140000.0, 2.1415559948409064], [1439092224.0, 48160000.0, 2.1461598671595756], [1439093952.0, 48180000.0, 2.1507716698867365], [1439095680.0, 48200000.0, 2.155391413283201], [1439097408.0, 48220000.0, 2.1600191076186426], [1439099136.0, 48240000.0, 2.1646547631716104], [1439100864.0, 48260000.0, 2.1692983902295286], [1439102592.0, 48280000.0, 2.173949999088699], [1439104320.0, 48300000.0, 2.1786096000543], [1439106048.0, 48320000.0, 2.1832772034404018], [1439107776.0, 48340000.0, 2.1879528195699622], [1439109504.0, 48360000.0, 2.1926364587748344], [1439111232.0, 48380000.0, 2.1973281313957638], [1439112960.0, 48400000.0, 2.2020278477823996], [1439114688.0, 48420000.0, 2.206735618293299], [1439116416.0, 48440000.0, 2.211451453295925], [1439118144.0, 48460000.0, 2.216175363166651], [1439119872.0, 48480000.0, 2.2209073582907717], [1439121600.0, 48500000.0, 2.2256474490624987], [1439123328.0, 48520000.0, 2.2303956458849723], [1439125056.0, 48540000.0, 2.235151959170253], [1439126784.0, 48560000.0, 2.23991639933934], [1439128512.0, 48580000.0, 2.244688976822164], [1439130240.0, 48600000.0, 2.249469702057601], [1439131968.0, 48620000.0, 2.2542585854934614], [1439133696.0, 48640000.0, 2.25905563758651], [1439135424.0, 48660000.0, 2.2638608688024595], [1439137152.0, 48680000.0, 2.268674289615982], [1439138880.0, 48700000.0, 2.2734959105107007], [1439140608.0, 48720000.0, 2.278325741979206], [1439142336.0, 48740000.0, 2.2831637945230536], [1439144064.0, 48760000.0, 2.2880100786527744], [1439145792.0, 48780000.0, 2.2928646048878627], [1439147520.0, 48800000.0, 2.2977273837568], [1439149248.0, 48820000.0, 2.3025984257970458], [1439150976.0, 48840000.0, 2.3074777415550485], [1439152704.0, 48860000.0, 2.3123653415862386], [1439154432.0, 48880000.0, 2.317261236455047], [1439156160.0, 48900000.0, 2.3221654367348994], [1439157888.0, 48920000.0, 2.3270779530082235], [1439159616.0, 48940000.0, 2.3319987958664488], [1439161344.0, 48960000.0, 2.3369279759100148], [1439163072.0, 48980000.0, 2.3418655037483753], [1439164800.0, 49000000.0, 2.346811390000001], [1439166528.0, 49020000.0, 2.3517656452923767], [1439168256.0, 49040000.0, 2.356728280262017], [1439169984.0, 49060000.0, 2.3616993055544633], [1439171712.0, 49080000.0, 2.3666787318242895], [1439173440.0, 49100000.0, 2.3716665697351], [1439175168.0, 49120000.0, 2.376662829959545], [1439176896.0, 49140000.0, 2.381667523179314], [1439178624.0, 49160000.0, 2.386680660085146], [1439180352.0, 49180000.0, 2.391702251376826], [1439182080.0, 49200000.0, 2.3967323077632], [1439183808.0, 49220000.0, 2.4017708399621687], [1439185536.0, 49240000.0, 2.406817858700699], [1439187264.0, 49260000.0, 2.411873374714818], [1439188992.0, 49280000.0, 2.416937398749626], [1439190720.0, 49300000.0, 2.4220099415592986], [1439192448.0, 49320000.0, 2.427091013907091], [1439194176.0, 49340000.0, 2.4321806265653323], [1439195904.0, 49360000.0, 2.437278790315442], [1439197632.0, 49380000.0, 2.442385515947931], [1439199360.0, 49400000.0, 2.447500814262401], [1439201088.0, 49420000.0, 2.4526246960675477], [1439202816.0, 49440000.0, 2.4577571721811724], [1439204544.0, 49460000.0, 2.462898253430178], [1439206272.0, 49480000.0, 2.468047950650581], [1439208000.0, 49500000.0, 2.4732062746875], [1439209728.0, 49520000.0, 2.47837323639518], [1439211456.0, 49540000.0, 2.4835488466369804], [1439213184.0, 49560000.0, 2.4887331162853887], [1439214912.0, 49580000.0, 2.4939260562220134], [1439216640.0, 49600000.0, 2.4991276773376], [1439218368.0, 49620000.0, 2.5043379905320284], [1439220096.0, 49640000.0, 2.5095570067143194], [1439221824.0, 49660000.0, 2.5147847368026293], [1439223552.0, 49680000.0, 2.520021191724269], [1439225280.0, 49700000.0, 2.5252663824156993], [1439227008.0, 49720000.0, 2.530520319822535], [1439228736.0, 49740000.0, 2.5357830148995437], [1439230464.0, 49760000.0, 2.5410544786106617], [1439232192.0, 49780000.0, 2.54633472192899], [1439233920.0, 49800000.0, 2.5516237558368013], [1439235648.0, 49820000.0, 2.556921591325535], [1439237376.0, 49840000.0, 2.562228239395816], [1439239104.0, 49860000.0, 2.5675437110574455], [1439240832.0, 49880000.0, 2.5728680173294154], [1439242560.0, 49900000.0, 2.5782011692399003], [1439244288.0, 49920000.0, 2.583543177826271], [1439246016.0, 49940000.0, 2.588894054135096], [1439247744.0, 49960000.0, 2.594253809222144], [1439249472.0, 49980000.0, 2.5996224541523842], [1439251200.0, 50000000.0, 2.605], [1439252928.0, 50020000.0, 2.6103864578483833], [1439254656.0, 50040000.0, 2.6157818387901433], [1439256384.0, 50060000.0, 2.621186153927112], [1439258112.0, 50080000.0, 2.626599414370336], [1439259840.0, 50100000.0, 2.6320216312400997], [1439261568.0, 50120000.0, 2.6374528156659123], [1439263296.0, 50140000.0, 2.6428929787865227], [1439265024.0, 50160000.0, 2.6483421317499123], [1439266752.0, 50180000.0, 2.6538002857133134], [1439268480.0, 50200000.0, 2.6592674518431987], [1439270208.0, 50220000.0, 2.6647436413152987], [1439271936.0, 50240000.0, 2.670228865314586], [1439273664.0, 50260000.0, 2.675723135035305], [1439275392.0, 50280000.0, 2.681226461680953], [1439277120.0, 50300000.0, 2.6867388564643004], [1439278848.0, 50320000.0, 2.692260330607379], [1439280576.0, 50340000.0, 2.697790895341499], [1439282304.0, 50360000.0, 2.703330561907249], [1439284032.0, 50380000.0, 2.7088793415545003], [1439285760.0, 50400000.0, 2.7144372455424], [1439287488.0, 50420000.0, 2.7200042851393946], [1439289216.0, 50440000.0, 2.725580471623219], [1439290944.0, 50460000.0, 2.7311658162809076], [1439292672.0, 50480000.0, 2.7367603304087873], [1439294400.0, 50500000.0, 2.7423640253124995], [1439296128.0, 50520000.0, 2.747976912306987], [1439297856.0, 50540000.0, 2.75359900271651], [1439299584.0, 50560000.0, 2.7592303078746356], [1439301312.0, 50580000.0, 2.7648708391242605], [1439303040.0, 50600000.0, 2.770520607817599], [1439304768.0, 50620000.0, 2.776179625316197], [1439306496.0, 50640000.0, 2.781847902990926], [1439308224.0, 50660000.0, 2.787525452221996], [1439309952.0, 50680000.0, 2.793212284398957], [1439311680.0, 50700000.0, 2.7989084109207005], [1439313408.0, 50720000.0, 2.8046138431954617], [1439315136.0, 50740000.0, 2.8103285926408303], [1439316864.0, 50760000.0, 2.816052670683748], [1439318592.0, 50780000.0, 2.8217860887605197], [1439320320.0, 50800000.0, 2.8275288583168], [1439322048.0, 50820000.0, 2.8332809908076215], [1439323776.0, 50840000.0, 2.839042497697382], [1439325504.0, 50860000.0, 2.8448133904598545], [1439327232.0, 50880000.0, 2.8505936805781835], [1439328960.0, 50900000.0, 2.8563833795449], [1439330688.0, 50920000.0, 2.862182498861918], [1439332416.0, 50940000.0, 2.867991050040545], [1439334144.0, 50960000.0, 2.8738090446014715], [1439335872.0, 50980000.0, 2.879636494074792], [1439337600.0, 51000000.0, 2.8854734099999986], [1439339328.0, 51020000.0, 2.8913198039259926], [1439341056.0, 51040000.0, 2.8971756874110732], [1439342784.0, 51060000.0, 2.9030410720229596], [1439344512.0, 51080000.0, 2.9089159693387843], [1439346240.0, 51100000.0, 2.9148003909451012], [1439347968.0, 51120000.0, 2.9206943484378813], [1439349696.0, 51140000.0, 2.9265978534225296], [1439351424.0, 51160000.0, 2.9325109175138793], [1439353152.0, 51180000.0, 2.938433552336202], [1439354880.0, 51200000.0, 2.944365769523201], [1439356608.0, 51220000.0, 2.9503075807180252], [1439358336.0, 51240000.0, 2.9562589975732734], [1439360064.0, 51260000.0, 2.962220031750994], [1439361792.0, 51280000.0, 2.9681906949226824], [1439363520.0, 51300000.0, 2.9741709987693], [1439365248.0, 51320000.0, 2.980160954981266], [1439366976.0, 51340000.0, 2.9861605752584683], [1439368704.0, 51360000.0, 2.9921698713102587], [1439370432.0, 51380000.0, 2.9981888548554667], [1439372160.0, 51400000.0, 3.0042175376223987], [1439373888.0, 51420000.0, 3.010255931348844], [1439375616.0, 51440000.0, 3.0163040477820684], [1439377344.0, 51460000.0, 3.0223618986788345], [1439379072.0, 51480000.0, 3.028429495805395], [1439380800.0, 51500000.0, 3.034506850937501], [1439382528.0, 51520000.0, 3.040593975860397], [1439384256.0, 51540000.0, 3.046690882368837], [1439385984.0, 51560000.0, 3.052797582267083], [1439387712.0, 51580000.0, 3.05891408736891], [1439389440.0, 51600000.0, 3.0650404094976], [1439391168.0, 51620000.0, 3.071176560485964], [1439392896.0, 51640000.0, 3.0773225521763323], [1439394624.0, 51660000.0, 3.083478396420566], [1439396352.0, 51680000.0, 3.0896441050800463], [1439398080.0, 51700000.0, 3.0958196900256993], [1439399808.0, 51720000.0, 3.102005163137989], [1439401536.0, 51740000.0, 3.10820053630692], [1439403264.0, 51760000.0, 3.114405821432038], [1439404992.0, 51780000.0, 3.1206210304224467], [1439406720.0, 51800000.0, 3.1268461751967993], [1439408448.0, 51820000.0, 3.1330812676833113], [1439410176.0, 51840000.0, 3.1393263198197525], [1439411904.0, 51860000.0, 3.1455813435534625], [1439413632.0, 51880000.0, 3.1518463508413506], [1439415360.0, 51900000.0, 3.1581213536499013], [1439417088.0, 51920000.0, 3.164406363955168], [1439418816.0, 51940000.0, 3.170701393742792], [1439420544.0, 51960000.0, 3.1770064550079984], [1439422272.0, 51980000.0, 3.183321559755601], [1439424000.0, 52000000.0, 3.1896467200000007], [1439425728.0, 52020000.0, 3.1959819477652], [1439427456.0, 52040000.0, 3.2023272550848], [1439429184.0, 52060000.0, 3.2086826540020095], [1439430912.0, 52080000.0, 3.2150481565696336], [1439432640.0, 52100000.0, 3.2214237748501002], [1439434368.0, 52120000.0, 3.2278095209154483], [1439436096.0, 52140000.0, 3.234205406847339], [1439437824.0, 52160000.0, 3.2406114447370493], [1439439552.0, 52180000.0, 3.2470276466854893], [1439441280.0, 52200000.0, 3.253454024803199], [1439443008.0, 52220000.0, 3.259890591210355], [1439444736.0, 52240000.0, 3.2663373580367634], [1439446464.0, 52260000.0, 3.2727943374218817], [1439448192.0, 52280000.0, 3.27926154151481], [1439449920.0, 52300000.0, 3.2857389824743017], [1439451648.0, 52320000.0, 3.292226672468755], [1439453376.0, 52340000.0, 3.298724623676235], [1439455104.0, 52360000.0, 3.305232848284465], [1439456832.0, 52380000.0, 3.3117513584908367], [1439458560.0, 52400000.0, 3.3182801665024004], [1439460288.0, 52420000.0, 3.324819284535892], [1439462016.0, 52440000.0, 3.3313687248177155], [1439463744.0, 52460000.0, 3.337928499583964], [1439465472.0, 52480000.0, 3.344498621080405], [1439467200.0, 52500000.0, 3.3510791015625], [1439468928.0, 52520000.0, 3.357669953295403], [1439470656.0, 52540000.0, 3.3642711885539636], [1439472384.0, 52560000.0, 3.3708828196227323], [1439474112.0, 52580000.0, 3.377504858795956], [1439475840.0, 52600000.0, 3.384137318377599], [1439477568.0, 52620000.0, 3.390780210681332], [1439479296.0, 52640000.0, 3.3974335480305426], [1439481024.0, 52660000.0, 3.4040973427583325], [1439482752.0, 52680000.0, 3.410771607207533], [1439484480.0, 52700000.0, 3.4174563537306986], [1439486208.0, 52720000.0, 3.4241515946901186], [1439487936.0, 52740000.0, 3.4308573424578066], [1439489664.0, 52760000.0, 3.4375736094155247], [1439491392.0, 52780000.0, 3.4443004079547728], [1439493120.0, 52800000.0, 3.451037750476801], [1439494848.0, 52820000.0, 3.4577856493925987], [1439496576.0, 52840000.0, 3.464544117122919], [1439498304.0, 52860000.0, 3.471313166098269], [1439500032.0, 52880000.0, 3.4780928087589205], [1439501760.0, 52900000.0, 3.4848830575548995], [1439503488.0, 52920000.0, 3.491683924946015], [1439505216.0, 52940000.0, 3.498495423401838], [1439506944.0, 52960000.0, 3.5053175654017275], [1439508672.0, 52980000.0, 3.512150363434808], [1439510400.0, 53000000.0, 3.518993829999999], [1439512128.0, 53020000.0, 3.5258479776060065], [1439513856.0, 53040000.0, 3.5327128187713295], [1439515584.0, 53060000.0, 3.5395883660242564], [1439517312.0, 53080000.0, 3.546474631902881], [1439519040.0, 53100000.0, 3.553371628955099], [1439520768.0, 53120000.0, 3.5602793697386175], [1439522496.0, 53140000.0, 3.5671978668209454], [1439524224.0, 53160000.0, 3.5741271327794157], [1439525952.0, 53180000.0, 3.5810671802011766], [1439527680.0, 53200000.0, 3.5880180216832014], [1439529408.0, 53220000.0, 3.5949796698322816], [1439531136.0, 53240000.0, 3.6019521372650503], [1439532864.0, 53260000.0, 3.6089354366079673], [1439534592.0, 53280000.0, 3.6159295804973395], [1439536320.0, 53300000.0, 3.6229345815793], [1439538048.0, 53320000.0, 3.6299504525098416], [1439539776.0, 53340000.0, 3.6369772059548025], [1439541504.0, 53360000.0, 3.6440148545898747], [1439543232.0, 53380000.0, 3.6510634111006035], [1439544960.0, 53400000.0, 3.658122888182399], [1439546688.0, 53420000.0, 3.6651932985405384], [1439548416.0, 53440000.0, 3.6722746548901655], [1439550144.0, 53460000.0, 3.6793669699562908], [1439551872.0, 53480000.0, 3.6864702564738114], [1439553600.0, 53500000.0, 3.6935845271874985], [1439555328.0, 53520000.0, 3.7007097948520133], [1439557056.0, 53540000.0, 3.7078460722318933], [1439558784.0, 53560000.0, 3.714993372101579], [1439560512.0, 53580000.0, 3.722151707245403], [1439562240.0, 53600000.0, 3.7293210904576006], [1439563968.0, 53620000.0, 3.736501534542301], [1439565696.0, 53640000.0, 3.7436930523135494], [1439567424.0, 53660000.0, 3.750895656595299], [1439569152.0, 53680000.0, 3.758109360221423], [1439570880.0, 53700000.0, 3.7653341760357013], [1439572608.0, 53720000.0, 3.772570116891845], [1439574336.0, 53740000.0, 3.7798171956534934], [1439576064.0, 53760000.0, 3.7870754251942143], [1439577792.0, 53780000.0, 3.7943448183975024], [1439579520.0, 53800000.0, 3.8016253881568], [1439581248.0, 53820000.0, 3.8089171473754853], [1439582976.0, 53840000.0, 3.8162201089668883], [1439584704.0, 53860000.0, 3.823534285854279], [1439586432.0, 53880000.0, 3.830859690970886], [1439588160.0, 53900000.0, 3.838196337259899], [1439589888.0, 53920000.0, 3.845544237674464], [1439591616.0, 53940000.0, 3.852903405177688], [1439593344.0, 53960000.0, 3.8602738527426554], [1439595072.0, 53980000.0, 3.8676555933524153], [1439596800.0, 54000000.0, 3.875048640000002], [1439598528.0, 54020000.0, 3.882453005688417], [1439600256.0, 54040000.0, 3.8898687034306563], [1439601984.0, 54060000.0, 3.8972957462497035], [1439603712.0, 54080000.0, 3.9047341471785297], [1439605440.0, 54100000.0, 3.9121839192601007], [1439607168.0, 54120000.0, 3.919645075547384], [1439608896.0, 54140000.0, 3.9271176291033534], [1439610624.0, 54160000.0, 3.9346015930009868], [1439612352.0, 54180000.0, 3.942096980323266], [1439614080.0, 54200000.0, 3.9496038041632], [1439615808.0, 54220000.0, 3.9571220776238087], [1439617536.0, 54240000.0, 3.96465181381814], [1439619264.0, 54260000.0, 3.9721930258692577], [1439620992.0, 54280000.0, 3.979745726910266], [1439622720.0, 54300000.0, 3.9873099300842987], [1439624448.0, 54320000.0, 3.994885648544532], [1439626176.0, 54340000.0, 4.002472895454172], [1439627904.0, 54360000.0, 4.0100716839864825], [1439629632.0, 54380000.0, 4.01768202732477], [1439631360.0, 54400000.0, 4.025303938662401], [1439633088.0, 54420000.0, 4.032937431202788], [1439634816.0, 54440000.0, 4.040582518159413], [1439636544.0, 54460000.0, 4.048239212755818], [1439638272.0, 54480000.0, 4.055907528225622], [1439640000.0, 54500000.0, 4.063587477812501], [1439641728.0, 54520000.0, 4.07127907477022], [1439643456.0, 54540000.0, 4.078982332362621], [1439645184.0, 54560000.0, 4.08669726386363], [1439646912.0, 54580000.0, 4.094423882557253], [1439648640.0, 54600000.0, 4.1021622017376], [1439650368.0, 54620000.0, 4.109912234708869], [1439652096.0, 54640000.0, 4.117673994785361], [1439653824.0, 54660000.0, 4.1254474952914695], [1439655552.0, 54680000.0, 4.133232749561709], [1439657280.0, 54700000.0, 4.1410297709406985], [1439659008.0, 54720000.0, 4.148838572783175], [1439660736.0, 54740000.0, 4.156659168453984], [1439662464.0, 54760000.0, 4.1644915713281], [1439664192.0, 54780000.0, 4.172335794790629], [1439665920.0, 54800000.0, 4.180191852236802], [1439667648.0, 54820000.0, 4.188059757071975], [1439669376.0, 54840000.0, 4.195939522711655], [1439671104.0, 54860000.0, 4.203831162581485], [1439672832.0, 54880000.0, 4.2117346901172565], [1439674560.0, 54900000.0, 4.219650118764901], [1439676288.0, 54920000.0, 4.227577461980512], [1439678016.0, 54940000.0, 4.235516733230336], [1439679744.0, 54960000.0, 4.243467945990784], [1439681472.0, 54980000.0, 4.251431113748425], [1439683200.0, 55000000.0, 4.25940625], [1439684928.0, 55020000.0, 4.2673933682524225], [1439686656.0, 55040000.0, 4.275392482022783], [1439688384.0, 55060000.0, 4.283403604838353], [1439690112.0, 55080000.0, 4.291426750236577], [1439691840.0, 55100000.0, 4.2994619317651], [1439693568.0, 55120000.0, 4.30750916298175], [1439695296.0, 55140000.0, 4.315568457454563], [1439697024.0, 55160000.0, 4.3236398287617535], [1439698752.0, 55180000.0, 4.331723290491753], [1439700480.0, 55200000.0, 4.339818856243199], [1439702208.0, 55220000.0, 4.347926539624939], [1439703936.0, 55240000.0, 4.356046354256027], [1439705664.0, 55260000.0, 4.364178313765745], [1439707392.0, 55280000.0, 4.3723224317935925], [1439709120.0, 55300000.0, 4.380478721989301], [1439710848.0, 55320000.0, 4.388647198012818], [1439712576.0, 55340000.0, 4.396827873534338], [1439714304.0, 55360000.0, 4.405020762234288], [1439716032.0, 55380000.0, 4.413225877803339], [1439717760.0, 55400000.0, 4.4214432339424], [1439719488.0, 55420000.0, 4.429672844362635], [1439721216.0, 55440000.0, 4.437914722785459], [1439722944.0, 55460000.0, 4.4461688829425485], [1439724672.0, 55480000.0, 4.454435338575829], [1439726400.0, 55500000.0, 4.4627141034374995], [1439728128.0, 55520000.0, 4.471005191290027], [1439729856.0, 55540000.0, 4.479308615906151], [1439731584.0, 55560000.0, 4.487624391068875], [1439733312.0, 55580000.0, 4.4959525305715], [1439735040.0, 55600000.0, 4.5042930482175985], [1439736768.0, 55620000.0, 4.512645957821038], [1439738496.0, 55640000.0, 4.521011273205966], [1439740224.0, 55660000.0, 4.529389008206835], [1439741952.0, 55680000.0, 4.537779176668397], [1439743680.0, 55700000.0, 4.546181792445701], [1439745408.0, 55720000.0, 4.554596869404102], [1439747136.0, 55740000.0, 4.563024421419271], [1439748864.0, 55760000.0, 4.571464462377187], [1439750592.0, 55780000.0, 4.57991700617416], [1439752320.0, 55800000.0, 4.588382066716799], [1439754048.0, 55820000.0, 4.596859657922062], [1439755776.0, 55840000.0, 4.60534979371722], [1439757504.0, 55860000.0, 4.613852488039895], [1439759232.0, 55880000.0, 4.622367754838023], [1439760960.0, 55900000.0, 4.630895608069899], [1439762688.0, 55920000.0, 4.639436061704156], [1439764416.0, 55940000.0, 4.647989129719786], [1439766144.0, 55960000.0, 4.6565548261061105], [1439767872.0, 55980000.0, 4.665133164862832], [1439769600.0, 56000000.0, 4.673724159999999], [1439771328.0, 56020000.0, 4.682327825538033], [1439773056.0, 56040000.0, 4.690944175507713], [1439774784.0, 56060000.0, 4.699573223950199], [1439776512.0, 56080000.0, 4.708214984917023], [1439778240.0, 56100000.0, 4.716869472470102], [1439779968.0, 56120000.0, 4.725536700681721], [1439781696.0, 56140000.0, 4.7342166836345685], [1439783424.0, 56160000.0, 4.742909435421718], [1439785152.0, 56180000.0, 4.751614970146644], [1439786880.0, 56200000.0, 4.760333301923201], [1439788608.0, 56220000.0, 4.769064444875665], [1439790336.0, 56240000.0, 4.777808413138713], [1439792064.0, 56260000.0, 4.786565220857435], [1439793792.0, 56280000.0, 4.795334882187323], [1439795520.0, 56300000.0, 4.8041174112943], [1439797248.0, 56320000.0, 4.812912822354705], [1439798976.0, 56340000.0, 4.821721129555309], [1439800704.0, 56360000.0, 4.8305423470933], [1439802432.0, 56380000.0, 4.839376489176306], [1439804160.0, 56400000.0, 4.848223570022398], [1439805888.0, 56420000.0, 4.857083603860085], [1439807616.0, 56440000.0, 4.865956604928308], [1439809344.0, 56460000.0, 4.874842587476475], [1439811072.0, 56480000.0, 4.883741565764436], [1439812800.0, 56500000.0, 4.892653554062501], [1439814528.0, 56520000.0, 4.901578566651437], [1439816256.0, 56540000.0, 4.910516617822477], [1439817984.0, 56560000.0, 4.919467721877322], [1439819712.0, 56580000.0, 4.928431893128152], [1439821440.0, 56600000.0, 4.937409145897601], [1439823168.0, 56620000.0, 4.946399494518805], [1439824896.0, 56640000.0, 4.955402953335373], [1439826624.0, 56660000.0, 4.964419536701406], [1439828352.0, 56680000.0, 4.973449258981486], [1439830080.0, 56700000.0, 4.982492134550699], [1439831808.0, 56720000.0, 4.991548177794629], [1439833536.0, 56740000.0, 5.000617403109359], [1439835264.0, 56760000.0, 5.009699824901478], [1439836992.0, 56780000.0, 5.0187954575880855], [1439838720.0, 56800000.0, 5.027904315596799], [1439840448.0, 56820000.0, 5.037026413365752], [1439842176.0, 56840000.0, 5.046161765343592], [1439843904.0, 56860000.0, 5.055310385989502], [1439845632.0, 56880000.0, 5.06447228977319], [1439847360.0, 56900000.0, 5.0736474911749], [1439849088.0, 56920000.0, 5.082836004685409], [1439850816.0, 56940000.0, 5.092037844806032], [1439852544.0, 56960000.0, 5.101253026048638], [1439854272.0, 56980000.0, 5.110481562935641], [1439856000.0, 57000000.0, 5.119723470000001], [1439857728.0, 57020000.0, 5.12897876178524], [1439859456.0, 57040000.0, 5.138247452845439], [1439861184.0, 57060000.0, 5.147529557745249], [1439862912.0, 57080000.0, 5.156825091059874], [1439864640.0, 57100000.0, 5.1661340673751], [1439866368.0, 57120000.0, 5.175456501287288], [1439868096.0, 57140000.0, 5.18479240740338], [1439869824.0, 57160000.0, 5.19414180034089], [1439871552.0, 57180000.0, 5.20350469472793], [1439873280.0, 57200000.0, 5.2128811052031985], [1439875008.0, 57220000.0, 5.222271046415996], [1439876736.0, 57240000.0, 5.231674533026204], [1439878464.0, 57260000.0, 5.241091579704321], [1439880192.0, 57280000.0, 5.250522201131449], [1439881920.0, 57300000.0, 5.2599664119993], [1439883648.0, 57320000.0, 5.2694242270101945], [1439885376.0, 57340000.0, 5.278895660877075], [1439887104.0, 57360000.0, 5.288380728323505], [1439888832.0, 57380000.0, 5.297879444083677], [1439890560.0, 57400000.0, 5.3073918229024], [1439892288.0, 57420000.0, 5.316917879535131], [1439894016.0, 57440000.0, 5.326457628747955], [1439895744.0, 57460000.0, 5.336011085317605], [1439897472.0, 57480000.0, 5.345578264031444], [1439899200.0, 57500000.0, 5.3551591796875], [1439900928.0, 57520000.0, 5.364753847094444], [1439902656.0, 57540000.0, 5.374362281071603], [1439904384.0, 57560000.0, 5.383984496448974], [1439906112.0, 57580000.0, 5.393620508067196], [1439907840.0, 57600000.0, 5.4032703307776], [1439909568.0, 57620000.0, 5.412933979442172], [1439911296.0, 57640000.0, 5.422611468933583], [1439913024.0, 57660000.0, 5.432302814135173], [1439914752.0, 57680000.0, 5.442008029940973], [1439916480.0, 57700000.0, 5.451727131255698], [1439918208.0, 57720000.0, 5.461460132994759], [1439919936.0, 57740000.0, 5.471207050084247], [1439921664.0, 57760000.0, 5.480967897460964], [1439923392.0, 57780000.0, 5.490742690072413], [1439925120.0, 57800000.0, 5.500531442876801], [1439926848.0, 57820000.0, 5.510334170843039], [1439928576.0, 57840000.0, 5.5201508889507584], [1439930304.0, 57860000.0, 5.529981612190308], [1439932032.0, 57880000.0, 5.53982635556276], [1439933760.0, 57900000.0, 5.5496851340799], [1439935488.0, 57920000.0, 5.559557962764255], [1439937216.0, 57940000.0, 5.569444856649079], [1439938944.0, 57960000.0, 5.579345830778369], [1439940672.0, 57980000.0, 5.589260900206848], [1439942400.0, 58000000.0, 5.59919008], [1439944128.0, 58020000.0, 5.6091333852340455], [1439945856.0, 58040000.0, 5.619090830995971], [1439947584.0, 58060000.0, 5.629062432383496], [1439949312.0, 58080000.0, 5.63904820450512], [1439951040.0, 58100000.0, 5.649048162480098], [1439952768.0, 58120000.0, 5.659062321438458], [1439954496.0, 58140000.0, 5.669090696520986], [1439956224.0, 58160000.0, 5.679133302879255], [1439957952.0, 58180000.0, 5.689190155675615], [1439959680.0, 58200000.0, 5.6992612700832], [1439961408.0, 58220000.0, 5.709346661285922], [1439963136.0, 58240000.0, 5.719446344478491], [1439964864.0, 58260000.0, 5.729560334866408], [1439966592.0, 58280000.0, 5.739688647665981], [1439968320.0, 58300000.0, 5.7498312981043], [1439970048.0, 58320000.0, 5.759988301419282], [1439971776.0, 58340000.0, 5.770159672859641], [1439973504.0, 58360000.0, 5.780345427684916], [1439975232.0, 58380000.0, 5.790545581165444], [1439976960.0, 58400000.0, 5.800760148582401], [1439978688.0, 58420000.0, 5.810989145227776], [1439980416.0, 58440000.0, 5.821232586404405], [1439982144.0, 58460000.0, 5.831490487425932], [1439983872.0, 58480000.0, 5.84176286361685], [1439985600.0, 58500000.0, 5.8520497303124985], [1439987328.0, 58520000.0, 5.862351102859053], [1439989056.0, 58540000.0, 5.8726669966135345], [1439990784.0, 58560000.0, 5.882997426943818], [1439992512.0, 58580000.0, 5.8933424092286435], [1439994240.0, 58600000.0, 5.903701958857601], [1439995968.0, 58620000.0, 5.9140760912311405], [1439997696.0, 58640000.0, 5.924464821760588], [1439999424.0, 58660000.0, 5.934868165868139], [1440001152.0, 58680000.0, 5.945286138986864], [1440002880.0, 58700000.0, 5.9557187565607], [1440004608.0, 58720000.0, 5.966166034044484], [1440006336.0, 58740000.0, 5.976627986903933], [1440008064.0, 58760000.0, 5.987104630615655], [1440009792.0, 58780000.0, 5.997595980667143], [1440011520.0, 58800000.0, 6.008102052556799], [1440013248.0, 58820000.0, 6.018622861793925], [1440014976.0, 58840000.0, 6.02915842389873], [1440016704.0, 58860000.0, 6.0397087544023185], [1440018432.0, 58880000.0, 6.050273868846727], [1440020160.0, 58900000.0, 6.060853782784898], [1440021888.0, 58920000.0, 6.071448511780704], [1440023616.0, 58940000.0, 6.082058071408929], [1440025344.0, 58960000.0, 6.092682477255295], [1440027072.0, 58980000.0, 6.103321744916454], [1440028800.0, 59000000.0, 6.113975890000002], [1440030528.0, 59020000.0, 6.124644928124456], [1440032256.0, 59040000.0, 6.1353288749192965], [1440033984.0, 59060000.0, 6.1460277460249415], [1440035712.0, 59080000.0, 6.15674155709277], [1440037440.0, 59100000.0, 6.1674703237851], [1440039168.0, 59120000.0, 6.178214061775225], [1440040896.0, 59140000.0, 6.188972786747392], [1440042624.0, 59160000.0, 6.199746514396828], [1440044352.0, 59180000.0, 6.2105352604297055], [1440046080.0, 59200000.0, 6.221339040563199], [1440047808.0, 59220000.0, 6.232157870525447], [1440049536.0, 59240000.0, 6.242991766055581], [1440051264.0, 59260000.0, 6.253840742903698], [1440052992.0, 59280000.0, 6.264704816830906], [1440054720.0, 59300000.0, 6.275584003609299], [1440056448.0, 59320000.0, 6.286478319021972], [1440058176.0, 59340000.0, 6.297387778863012], [1440059904.0, 59360000.0, 6.308312398937522], [1440061632.0, 59380000.0, 6.319252195061609], [1440063360.0, 59400000.0, 6.330207183062402], [1440065088.0, 59420000.0, 6.341177378778029], [1440066816.0, 59440000.0, 6.352162798057651], [1440068544.0, 59460000.0, 6.363163456761457], [1440070272.0, 59480000.0, 6.374179370760662], [1440072000.0, 59500000.0, 6.385210555937501], [1440073728.0, 59520000.0, 6.39625702818526], [1440075456.0, 59540000.0, 6.40731880340826], [1440077184.0, 59560000.0, 6.4183958975218705], [1440078912.0, 59580000.0, 6.4294883264524945], [1440080640.0, 59600000.0, 6.440596106137599], [1440082368.0, 59620000.0, 6.451719252525708], [1440084096.0, 59640000.0, 6.462857781576401], [1440085824.0, 59660000.0, 6.474011709260309], [1440087552.0, 59680000.0, 6.485181051559149], [1440089280.0, 59700000.0, 6.496365824465699], [1440091008.0, 59720000.0, 6.507566043983815], [1440092736.0, 59740000.0, 6.518781726128424], [1440094464.0, 59760000.0, 6.530012886925541], [1440096192.0, 59780000.0, 6.54125954241227], [1440097920.0, 59800000.0, 6.552521708636802], [1440099648.0, 59820000.0, 6.563799401658415], [1440101376.0, 59840000.0, 6.575092637547495], [1440103104.0, 59860000.0, 6.586401432385524], [1440104832.0, 59880000.0, 6.5977258022650975], [1440106560.0, 59900000.0, 6.6090657632899], [1440108288.0, 59920000.0, 6.620421331574752], [1440110016.0, 59940000.0, 6.631792523245575], [1440111744.0, 59960000.0, 6.643179354439425], [1440113472.0, 59980000.0, 6.6545818413044655], [1440115200.0, 60000000.0, 6.666], [1440116928.0, 60020000.0, 6.677433846696464], [1440118656.0, 60040000.0, 6.688883397575423], [1440120384.0, 60060000.0, 6.7003486688295935], [1440122112.0, 60080000.0, 6.711829676662816], [1440123840.0, 60100000.0, 6.723326437290099], [1440125568.0, 60120000.0, 6.73483896693759], [1440127296.0, 60140000.0, 6.746367281842604], [1440129024.0, 60160000.0, 6.757911398253592], [1440130752.0, 60180000.0, 6.769471332430193], [1440132480.0, 60200000.0, 6.781047100643198], [1440134208.0, 60220000.0, 6.792638719174579], [1440135936.0, 60240000.0, 6.804246204317467], [1440137664.0, 60260000.0, 6.815869572376185], [1440139392.0, 60280000.0, 6.8275088396662325], [1440141120.0, 60300000.0, 6.839164022514301], [1440142848.0, 60320000.0, 6.850835137258258], [1440144576.0, 60340000.0, 6.862522200247178], [1440146304.0, 60360000.0, 6.874225227841327], [1440148032.0, 60380000.0, 6.885944236412181], [1440149760.0, 60400000.0, 6.8976792423424], [1440151488.0, 60420000.0, 6.909430262025874], [1440153216.0, 60440000.0, 6.921197311867698], [1440154944.0, 60460000.0, 6.932980408284188], [1440156672.0, 60480000.0, 6.944779567702868], [1440158400.0, 60500000.0, 6.956594806562499], [1440160128.0, 60520000.0, 6.968426141313065], [1440161856.0, 60540000.0, 6.980273588415791], [1440163584.0, 60560000.0, 6.992137164343116], [1440165312.0, 60580000.0, 7.004016885578739], [1440167040.0, 60600000.0, 7.015912768617598], [1440168768.0, 60620000.0, 7.027824829965878], [1440170496.0, 60640000.0, 7.0397530861410065], [1440172224.0, 60660000.0, 7.0516975536716755], [1440173952.0, 60680000.0, 7.063658249097834], [1440175680.0, 60700000.0, 7.075635188970702], [1440177408.0, 60720000.0, 7.087628389852742], [1440179136.0, 60740000.0, 7.099637868317709], [1440180864.0, 60760000.0, 7.111663640950627], [1440182592.0, 60780000.0, 7.1237057243478], [1440184320.0, 60800000.0, 7.1357641351168], [1440186048.0, 60820000.0, 7.147838889876502], [1440187776.0, 60840000.0, 7.159930005257061], [1440189504.0, 60860000.0, 7.172037497899936], [1440191232.0, 60880000.0, 7.184161384457863], [1440192960.0, 60900000.0, 7.1963016815949], [1440194688.0, 60920000.0, 7.2084584059863985], [1440196416.0, 60940000.0, 7.220631574319027], [1440198144.0, 60960000.0, 7.232821203290752], [1440199872.0, 60980000.0, 7.2450273096108715], [1440201600.0, 61000000.0, 7.257249909999998], [1440203328.0, 61020000.0, 7.269489021190074], [1440205056.0, 61040000.0, 7.281744659924354], [1440206784.0, 61060000.0, 7.294016842957438], [1440208512.0, 61080000.0, 7.306305587055263], [1440210240.0, 61100000.0, 7.318610908995103], [1440211968.0, 61120000.0, 7.330932825565561], [1440213696.0, 61140000.0, 7.343271353566609], [1440215424.0, 61160000.0, 7.355626509809558], [1440217152.0, 61180000.0, 7.367998311117085], [1440218880.0, 61200000.0, 7.380386774323202], [1440220608.0, 61220000.0, 7.392791916273306], [1440222336.0, 61240000.0, 7.405213753824152], [1440224064.0, 61260000.0, 7.417652303843877], [1440225792.0, 61280000.0, 7.430107583211963], [1440227520.0, 61300000.0, 7.442579608819299], [1440229248.0, 61320000.0, 7.455068397568144], [1440230976.0, 61340000.0, 7.467573966372151], [1440232704.0, 61360000.0, 7.4800963321563385], [1440234432.0, 61380000.0, 7.492635511857147], [1440236160.0, 61400000.0, 7.505191522422399], [1440237888.0, 61420000.0, 7.517764380811325], [1440239616.0, 61440000.0, 7.530354103994549], [1440241344.0, 61460000.0, 7.542960708954115], [1440243072.0, 61480000.0, 7.555584212683475], [1440244800.0, 61500000.0, 7.568224632187502], [1440246528.0, 61520000.0, 7.580881984482476], [1440248256.0, 61540000.0, 7.593556286596116], [1440249984.0, 61560000.0, 7.606247555567562], [1440251712.0, 61580000.0, 7.618955808447392], [1440253440.0, 61600000.0, 7.6316810622976], [1440255168.0, 61620000.0, 7.644423334191643], [1440256896.0, 61640000.0, 7.657182641214412], [1440258624.0, 61660000.0, 7.669959000462247], [1440260352.0, 61680000.0, 7.682752429042926], [1440262080.0, 61700000.0, 7.695562944075699], [1440263808.0, 61720000.0, 7.708390562691267], [1440265536.0, 61740000.0, 7.721235302031801], [1440267264.0, 61760000.0, 7.734097179250919], [1440268992.0, 61780000.0, 7.746976211513726], [1440270720.0, 61800000.0, 7.7598724159967984], [1440272448.0, 61820000.0, 7.772785809888194], [1440274176.0, 61840000.0, 7.785716410387433], [1440275904.0, 61860000.0, 7.798664234705542], [1440277632.0, 61880000.0, 7.81162930006503], [1440279360.0, 61900000.0, 7.8246116236999015], [1440281088.0, 61920000.0, 7.8376112228556485], [1440282816.0, 61940000.0, 7.850628114789272], [1440284544.0, 61960000.0, 7.863662316769277], [1440286272.0, 61980000.0, 7.876713846075683], [1440288000.0, 62000000.0, 7.889782720000001], [1440289728.0, 62020000.0, 7.902868955845279], [1440291456.0, 62040000.0, 7.915972570926079], [1440293184.0, 62060000.0, 7.929093582568491], [1440294912.0, 62080000.0, 7.942232008110112], [1440296640.0, 62100000.0, 7.955387864900101], [1440298368.0, 62120000.0, 7.968561170299126], [1440300096.0, 62140000.0, 7.981751941679421], [1440301824.0, 62160000.0, 7.9949601964247305], [1440303552.0, 62180000.0, 8.00818595193037], [1440305280.0, 62200000.0, 8.021429225603198], [1440307008.0, 62220000.0, 8.034690034861637], [1440308736.0, 62240000.0, 8.047968397135644], [1440310464.0, 62260000.0, 8.061264329866761], [1440312192.0, 62280000.0, 8.074577850508089], [1440313920.0, 62300000.0, 8.087908976524302], [1440315648.0, 62320000.0, 8.101257725391635], [1440317376.0, 62340000.0, 8.114624114597914], [1440319104.0, 62360000.0, 8.128008161642544], [1440320832.0, 62380000.0, 8.141409884036518], [1440322560.0, 62400000.0, 8.154829299302401], [1440324288.0, 62420000.0, 8.168266424974371], [1440326016.0, 62440000.0, 8.181721278598195], [1440327744.0, 62460000.0, 8.195193877731246], [1440329472.0, 62480000.0, 8.208684239942485], [1440331200.0, 62500000.0, 8.2221923828125], [1440332928.0, 62520000.0, 8.235718323933485], [1440334656.0, 62540000.0, 8.249262080909244], [1440336384.0, 62560000.0, 8.262823671355212], [1440338112.0, 62580000.0, 8.276403112898437], [1440339840.0, 62600000.0, 8.2900004231776], [1440341568.0, 62620000.0, 8.303615619843011], [1440343296.0, 62640000.0, 8.317248720556623], [1440345024.0, 62660000.0, 8.330899742992013], [1440346752.0, 62680000.0, 8.344568704834412], [1440348480.0, 62700000.0, 8.358255623780696], [1440350208.0, 62720000.0, 8.371960517539401], [1440351936.0, 62740000.0, 8.385683403830686], [1440353664.0, 62760000.0, 8.399424300386405], [1440355392.0, 62780000.0, 8.413183224950052], [1440357120.0, 62800000.0, 8.4269601952768], [1440358848.0, 62820000.0, 8.440755229133476], [1440360576.0, 62840000.0, 8.454568344298599], [1440362304.0, 62860000.0, 8.468399558562348], [1440364032.0, 62880000.0, 8.482248889726602], [1440365760.0, 62900000.0, 8.4961163556049], [1440367488.0, 62920000.0, 8.510001974022492], [1440369216.0, 62940000.0, 8.523905762816318], [1440370944.0, 62960000.0, 8.53782773983501], [1440372672.0, 62980000.0, 8.55176792293889], [1440374400.0, 63000000.0, 8.565726329999997], [1440376128.0, 63020000.0, 8.579702978902086], [1440377856.0, 63040000.0, 8.593697887540609], [1440379584.0, 63060000.0, 8.607711073822738], [1440381312.0, 63080000.0, 8.621742555667359], [1440383040.0, 63100000.0, 8.635792351005097], [1440384768.0, 63120000.0, 8.649860477778299], [1440386496.0, 63140000.0, 8.663946953941027], [1440388224.0, 63160000.0, 8.678051797459096], [1440389952.0, 63180000.0, 8.692175026310055], [1440391680.0, 63200000.0, 8.706316658483201], [1440393408.0, 63220000.0, 8.720476711979563], [1440395136.0, 63240000.0, 8.734655204811931], [1440396864.0, 63260000.0, 8.748852155004844], [1440398592.0, 63280000.0, 8.76306758059462], [1440400320.0, 63300000.0, 8.777301499629301], [1440402048.0, 63320000.0, 8.791553930168723], [1440403776.0, 63340000.0, 8.805824890284482], [1440405504.0, 63360000.0, 8.820114398059957], [1440407232.0, 63380000.0, 8.834422471590283], [1440408960.0, 63400000.0, 8.848749128982401], [1440410688.0, 63420000.0, 8.863094388355016], [1440412416.0, 63440000.0, 8.877458267838644], [1440414144.0, 63460000.0, 8.891840785575573], [1440415872.0, 63480000.0, 8.90624195971989], [1440417600.0, 63500000.0, 8.9206618084375], [1440419328.0, 63520000.0, 8.935100349906094], [1440421056.0, 63540000.0, 8.949557602315172], [1440422784.0, 63560000.0, 8.96403358386606], [1440424512.0, 63580000.0, 8.978528312771884], [1440426240.0, 63600000.0, 8.993041807257603], [1440427968.0, 63620000.0, 9.00757408555998], [1440429696.0, 63640000.0, 9.02212516592763], [1440431424.0, 63660000.0, 9.036695066620979], [1440433152.0, 63680000.0, 9.051283805912304], [1440434880.0, 63700000.0, 9.0658914020857], [1440436608.0, 63720000.0, 9.080517873437124], [1440438336.0, 63740000.0, 9.095163238274372], [1440440064.0, 63760000.0, 9.109827514917095], [1440441792.0, 63780000.0, 9.124510721696783], [1440443520.0, 63800000.0, 9.139212876956798], [1440445248.0, 63820000.0, 9.153933999052365], [1440446976.0, 63840000.0, 9.168674106350569], [1440448704.0, 63860000.0, 9.18343321723036], [1440450432.0, 63880000.0, 9.19821135008257], [1440452160.0, 63900000.0, 9.213008523309899], [1440453888.0, 63920000.0, 9.227824755326948], [1440455616.0, 63940000.0, 9.24266006456017], [1440457344.0, 63960000.0, 9.257514469447935], [1440459072.0, 63980000.0, 9.272387988440492], [1440460800.0, 64000000.0, 9.287280640000002], [1440462528.0, 64020000.0, 9.302192442600496], [1440464256.0, 64040000.0, 9.317123414727936], [1440465984.0, 64060000.0, 9.332073574880182], [1440467712.0, 64080000.0, 9.34704294156701], [1440469440.0, 64100000.0, 9.3620315333101], [1440471168.0, 64120000.0, 9.377039368643063], [1440472896.0, 64140000.0, 9.39206646611143], [1440474624.0, 64160000.0, 9.407112844272666], [1440476352.0, 64180000.0, 9.422178521696145], [1440478080.0, 64200000.0, 9.437263516963199], [1440479808.0, 64220000.0, 9.45236784866709], [1440481536.0, 64240000.0, 9.467491535413023], [1440483264.0, 64260000.0, 9.482634595818135], [1440484992.0, 64280000.0, 9.497797048511545], [1440486720.0, 64300000.0, 9.5129789121343], [1440488448.0, 64320000.0, 9.528180205339416], [1440490176.0, 64340000.0, 9.543400946791854], [1440491904.0, 64360000.0, 9.558641155168562], [1440493632.0, 64380000.0, 9.573900849158449], [1440495360.0, 64400000.0, 9.589180047462403], [1440497088.0, 64420000.0, 9.604478768793268], [1440498816.0, 64440000.0, 9.619797031875892], [1440500544.0, 64460000.0, 9.635134855447095], [1440502272.0, 64480000.0, 9.650492258255703], [1440504000.0, 64500000.0, 9.665869259062502], [1440505728.0, 64520000.0, 9.681265876640298], [1440507456.0, 64540000.0, 9.6966821297739], [1440509184.0, 64560000.0, 9.71211803726011], [1440510912.0, 64580000.0, 9.727573617907733], [1440512640.0, 64600000.0, 9.7430488905376], [1440514368.0, 64620000.0, 9.758543873982546], [1440516096.0, 64640000.0, 9.77405858708744], [1440517824.0, 64660000.0, 9.789593048709152], [1440519552.0, 64680000.0, 9.80514727771659], [1440521280.0, 64700000.0, 9.820721292990699], [1440523008.0, 64720000.0, 9.836315113424456], [1440524736.0, 64740000.0, 9.851928757922865], [1440526464.0, 64760000.0, 9.867562245402981], [1440528192.0, 64780000.0, 9.883215594793908], [1440529920.0, 64800000.0, 9.898888825036801], [1440531648.0, 64820000.0, 9.914581955084858], [1440533376.0, 64840000.0, 9.930295003903336], [1440535104.0, 64860000.0, 9.946027990469563], [1440536832.0, 64880000.0, 9.961780933772937], [1440538560.0, 64900000.0, 9.977553852814902], [1440540288.0, 64920000.0, 9.99334676660899], [1440542016.0, 64940000.0, 10.009159694180815], [1440543744.0, 64960000.0, 10.024992654568065], [1440545472.0, 64980000.0, 10.040845666820505], [1440547200.0, 65000000.0, 10.05671875], [1440548928.0, 65020000.0, 10.072611923180503], [1440550656.0, 65040000.0, 10.088525205448065], [1440552384.0, 65060000.0, 10.10445861590083], [1440554112.0, 65080000.0, 10.120412173649056], [1440555840.0, 65100000.0, 10.136385897815098], [1440557568.0, 65120000.0, 10.15237980753343], [1440559296.0, 65140000.0, 10.168393921950642], [1440561024.0, 65160000.0, 10.184428260225433], [1440562752.0, 65180000.0, 10.200482841528634], [1440564480.0, 65200000.0, 10.216557685043199], [1440566208.0, 65220000.0, 10.23265280996422], [1440567936.0, 65240000.0, 10.248768235498906], [1440569664.0, 65260000.0, 10.264903980866624], [1440571392.0, 65280000.0, 10.281060065298872], [1440573120.0, 65300000.0, 10.297236508039303], [1440574848.0, 65320000.0, 10.313433328343699], [1440576576.0, 65340000.0, 10.32965054548002], [1440578304.0, 65360000.0, 10.345888178728368], [1440580032.0, 65380000.0, 10.362146247381023], [1440581760.0, 65400000.0, 10.378424770742402], [1440583488.0, 65420000.0, 10.394723768129113], [1440585216.0, 65440000.0, 10.411043258869935], [1440586944.0, 65460000.0, 10.42738326230583], [1440588672.0, 65480000.0, 10.44374379778991], [1440590400.0, 65500000.0, 10.460124884687497], [1440592128.0, 65520000.0, 10.476526542376105], [1440593856.0, 65540000.0, 10.492948790245432], [1440595584.0, 65560000.0, 10.509391647697358], [1440597312.0, 65580000.0, 10.525855134145981], [1440599040.0, 65600000.0, 10.542339269017596], [1440600768.0, 65620000.0, 10.55884407175072], [1440602496.0, 65640000.0, 10.575369561796046], [1440604224.0, 65660000.0, 10.591915758616517], [1440605952.0, 65680000.0, 10.608482681687274], [1440607680.0, 65700000.0, 10.625070350495703], [1440609408.0, 65720000.0, 10.641678784541382], [1440611136.0, 65740000.0, 10.658308003336149], [1440612864.0, 65760000.0, 10.674958026404067], [1440614592.0, 65780000.0, 10.691628873281442], [1440616320.0, 65800000.0, 10.708320563516802], [1440618048.0, 65820000.0, 10.725033116670941], [1440619776.0, 65840000.0, 10.741766552316903], [1440621504.0, 65860000.0, 10.758520890039977], [1440623232.0, 65880000.0, 10.775296149437704], [1440624960.0, 65900000.0, 10.7920923501199], [1440626688.0, 65920000.0, 10.808909511708638], [1440628416.0, 65940000.0, 10.825747653838265], [1440630144.0, 65960000.0, 10.84260679615539], [1440631872.0, 65980000.0, 10.85948695831891], [1440633600.0, 66000000.0, 10.876388159999998], [1440635328.0, 66020000.0, 10.893310420882116], [1440637056.0, 66040000.0, 10.910253760660991], [1440638784.0, 66060000.0, 10.927218199044678], [1440640512.0, 66080000.0, 10.944203755753502], [1440642240.0, 66100000.0, 10.961210450520104], [1440643968.0, 66120000.0, 10.978238303089404], [1440645696.0, 66140000.0, 10.995287333218648], [1440647424.0, 66160000.0, 11.012357560677398], [1440649152.0, 66180000.0, 11.029449005247525], [1440650880.0, 66200000.0, 11.046561686723201], [1440652608.0, 66220000.0, 11.063695624910945], [1440654336.0, 66240000.0, 11.08085083962959], [1440656064.0, 66260000.0, 11.098027350710314], [1440657792.0, 66280000.0, 11.115225177996605], [1440659520.0, 66300000.0, 11.132444341344298], [1440661248.0, 66320000.0, 11.149684860621585], [1440662976.0, 66340000.0, 11.16694675570899], [1440664704.0, 66360000.0, 11.18423004649938], [1440666432.0, 66380000.0, 11.201534752897988], [1440668160.0, 66400000.0, 11.218860894822397], [1440669888.0, 66420000.0, 11.236208492202566], [1440671616.0, 66440000.0, 11.253577564980791], [1440673344.0, 66460000.0, 11.270968133111754], [1440675072.0, 66480000.0, 11.288380216562514], [1440676800.0, 66500000.0, 11.305813835312502], [1440678528.0, 66520000.0, 11.323269009353517], [1440680256.0, 66540000.0, 11.340745758689758], [1440681984.0, 66560000.0, 11.358244103337803], [1440683712.0, 66580000.0, 11.375764063326631], [1440685440.0, 66600000.0, 11.393305658697601], [1440687168.0, 66620000.0, 11.410868909504483], [1440688896.0, 66640000.0, 11.428453835813452], [1440690624.0, 66660000.0, 11.446060457703087], [1440692352.0, 66680000.0, 11.463688795264366], [1440694080.0, 66700000.0, 11.481338868600698], [1440695808.0, 66720000.0, 11.499010697827908], [1440697536.0, 66740000.0, 11.51670430307424], [1440699264.0, 66760000.0, 11.534419704480358], [1440700992.0, 66780000.0, 11.552156922199366], [1440702720.0, 66800000.0, 11.569915976396798], [1440704448.0, 66820000.0, 11.587696887250635], [1440706176.0, 66840000.0, 11.605499674951272], [1440707904.0, 66860000.0, 11.623324359701583], [1440709632.0, 66880000.0, 11.64117096171687], [1440711360.0, 66900000.0, 11.659039501224905], [1440713088.0, 66920000.0, 11.676929998465887], [1440714816.0, 66940000.0, 11.694842473692512], [1440716544.0, 66960000.0, 11.712776947169917], [1440718272.0, 66980000.0, 11.730733439175722], [1440720000.0, 67000000.0, 11.748711970000004], [1440721728.0, 67020000.0, 11.766712559945319], [1440723456.0, 67040000.0, 11.784735229326719], [1440725184.0, 67060000.0, 11.802779998471733], [1440726912.0, 67080000.0, 11.820846887720355], [1440728640.0, 67100000.0, 11.838935917425099], [1440730368.0, 67120000.0, 11.857047107950965], [1440732096.0, 67140000.0, 11.875180479675462], [1440733824.0, 67160000.0, 11.89333605298857], [1440735552.0, 67180000.0, 11.91151384829281], [1440737280.0, 67200000.0, 11.929713886003197], [1440739008.0, 67220000.0, 11.947936186547278], [1440740736.0, 67240000.0, 11.966180770365083], [1440742464.0, 67260000.0, 11.984447657909202], [1440744192.0, 67280000.0, 12.002736869644728], [1440745920.0, 67300000.0, 12.021048426049305], [1440747648.0, 67320000.0, 12.039382347613076], [1440749376.0, 67340000.0, 12.057738654838753], [1440751104.0, 67360000.0, 12.076117368241585], [1440752832.0, 67380000.0, 12.09451850834936], [1440754560.0, 67400000.0, 12.1129420957024], [1440756288.0, 67420000.0, 12.13138815085361], [1440758016.0, 67440000.0, 12.149856694368435], [1440759744.0, 67460000.0, 12.168347746824887], [1440761472.0, 67480000.0, 12.186861328813526], [1440763200.0, 67500000.0, 12.2053974609375], [1440764928.0, 67520000.0, 12.223956163812524], [1440766656.0, 67540000.0, 12.24253745806688], [1440768384.0, 67560000.0, 12.261141364341455], [1440770112.0, 67580000.0, 12.279767903289676], [1440771840.0, 67600000.0, 12.2984170955776], [1440773568.0, 67620000.0, 12.31708896188385], [1440775296.0, 67640000.0, 12.335783522899664], [1440777024.0, 67660000.0, 12.354500799328854], [1440778752.0, 67680000.0, 12.373240811887852], [1440780480.0, 67700000.0, 12.392003581305696], [1440782208.0, 67720000.0, 12.41078912832404], [1440783936.0, 67740000.0, 12.429597473697125], [1440785664.0, 67760000.0, 12.448428638191844], [1440787392.0, 67780000.0, 12.467282642587692], [1440789120.0, 67800000.0, 12.486159507676803], [1440790848.0, 67820000.0, 12.505059254263918], [1440792576.0, 67840000.0, 12.523981903166439], [1440794304.0, 67860000.0, 12.542927475214386], [1440796032.0, 67880000.0, 12.561895991250442], [1440797760.0, 67900000.0, 12.5808874721299], [1440799488.0, 67920000.0, 12.599901938720734], [1440801216.0, 67940000.0, 12.618939411903558], [1440802944.0, 67960000.0, 12.63799991257165], [1440804672.0, 67980000.0, 12.657083461630927], [1440806400.0, 68000000.0, 12.676190079999998], [1440808128.0, 68020000.0, 12.695319788610124], [1440809856.0, 68040000.0, 12.71447260840525], [1440811584.0, 68060000.0, 12.733648560341974], [1440813312.0, 68080000.0, 12.752847665389602], [1440815040.0, 68100000.0, 12.772069944530097], [1440816768.0, 68120000.0, 12.791315418758138], [1440818496.0, 68140000.0, 12.810584109081066], [1440820224.0, 68160000.0, 12.829876036518938], [1440821952.0, 68180000.0, 12.849191222104492], [1440823680.0, 68200000.0, 12.868529686883202], [1440825408.0, 68220000.0, 12.887891451913205], [1440827136.0, 68240000.0, 12.907276538265371], [1440828864.0, 68260000.0, 12.926684967023286], [1440830592.0, 68280000.0, 12.946116759283258], [1440832320.0, 68300000.0, 12.965571936154301], [1440834048.0, 68320000.0, 12.985050518758161], [1440835776.0, 68340000.0, 13.00455252822932], [1440837504.0, 68360000.0, 13.024077985714998], [1440839232.0, 68380000.0, 13.043626912375123], [1440840960.0, 68400000.0, 13.0631993293824], [1440842688.0, 68420000.0, 13.082795257922255], [1440844416.0, 68440000.0, 13.102414719192888], [1440846144.0, 68460000.0, 13.12205773440521], [1440847872.0, 68480000.0, 13.141724324782931], [1440849600.0, 68500000.0, 13.161414511562496], [1440851328.0, 68520000.0, 13.181128315993137], [1440853056.0, 68540000.0, 13.200865759336812], [1440854784.0, 68560000.0, 13.220626862868299], [1440856512.0, 68580000.0, 13.240411647875122], [1440858240.0, 68600000.0, 13.260220135657605], [1440859968.0, 68620000.0, 13.280052347528823], [1440861696.0, 68640000.0, 13.29990830481467], [1440863424.0, 68660000.0, 13.319788028853818], [1440865152.0, 68680000.0, 13.339691540997745], [1440866880.0, 68700000.0, 13.359618862610702], [1440868608.0, 68720000.0, 13.379570015069765], [1440870336.0, 68740000.0, 13.39954501976481], [1440872064.0, 68760000.0, 13.419543898098537], [1440873792.0, 68780000.0, 13.439566671486425], [1440875520.0, 68800000.0, 13.459613361356798], [1440877248.0, 68820000.0, 13.4796839891508], [1440878976.0, 68840000.0, 13.499778576322411], [1440880704.0, 68860000.0, 13.519897144338398], [1440882432.0, 68880000.0, 13.540039714678409], [1440884160.0, 68900000.0, 13.560206308834895], [1440885888.0, 68920000.0, 13.580396948313187], [1440887616.0, 68940000.0, 13.60061165463141], [1440889344.0, 68960000.0, 13.620850449320574], [1440891072.0, 68980000.0, 13.641113353924531], [1440892800.0, 69000000.0, 13.661400390000003], [1440894528.0, 69020000.0, 13.681711579116538], [1440896256.0, 69040000.0, 13.702046942856578], [1440897984.0, 69060000.0, 13.722406502815423], [1440899712.0, 69080000.0, 13.742790280601252], [1440901440.0, 69100000.0, 13.763198297835102], [1440903168.0, 69120000.0, 13.783630576150903], [1440904896.0, 69140000.0, 13.804087137195472], [1440906624.0, 69160000.0, 13.824568002628508], [1440908352.0, 69180000.0, 13.845073194122588], [1440910080.0, 69200000.0, 13.865602733363199], [1440911808.0, 69220000.0, 13.886156642048729], [1440913536.0, 69240000.0, 13.906734941890461], [1440915264.0, 69260000.0, 13.927337654612579], [1440916992.0, 69280000.0, 13.947964801952185], [1440918720.0, 69300000.0, 13.968616405659295], [1440920448.0, 69320000.0, 13.989292487496854], [1440922176.0, 69340000.0, 14.009993069240693], [1440923904.0, 69360000.0, 14.0307181726796], [1440925632.0, 69380000.0, 14.051467819615288], [1440927360.0, 69400000.0, 14.072242031862405], [1440929088.0, 69420000.0, 14.093040831248508], [1440930816.0, 69440000.0, 14.11386423961413], [1440932544.0, 69460000.0, 14.134712278812737], [1440934272.0, 69480000.0, 14.155584970710745], [1440936000.0, 69500000.0, 14.176482337187505], [1440937728.0, 69520000.0, 14.197404400135337], [1440939456.0, 69540000.0, 14.218351181459537], [1440941184.0, 69560000.0, 14.239322703078352], [1440942912.0, 69580000.0, 14.260318986922973], [1440944640.0, 69600000.0, 14.281340054937598], [1440946368.0, 69620000.0, 14.302385929079387], [1440948096.0, 69640000.0, 14.323456631318482], [1440949824.0, 69660000.0, 14.34455218363799], [1440951552.0, 69680000.0, 14.365672608034027], [1440953280.0, 69700000.0, 14.386817926515693], [1440955008.0, 69720000.0, 14.407988161105099], [1440956736.0, 69740000.0, 14.429183333837305], [1440958464.0, 69760000.0, 14.450403466760422], [1440960192.0, 69780000.0, 14.471648581935549], [1440961920.0, 69800000.0, 14.492918701436803], [1440963648.0, 69820000.0, 14.514213847351296], [1440965376.0, 69840000.0, 14.535534041779176], [1440967104.0, 69860000.0, 14.556879306833608], [1440968832.0, 69880000.0, 14.578249664640778], [1440970560.0, 69900000.0, 14.599645137339904], [1440972288.0, 69920000.0, 14.621065747083232], [1440974016.0, 69940000.0, 14.642511516036055], [1440975744.0, 69960000.0, 14.663982466376707], [1440977472.0, 69980000.0, 14.685478620296546], [1440979200.0, 70000000.0, 14.707], [1440980928.0, 70020000.0, 14.72854662770454], [1440982656.0, 70040000.0, 14.750118525640701], [1440984384.0, 70060000.0, 14.771715716052075], [1440986112.0, 70080000.0, 14.793338221195295], [1440987840.0, 70100000.0, 14.814986063340095], [1440989568.0, 70120000.0, 14.836659264769269], [1440991296.0, 70140000.0, 14.85835784777868], [1440993024.0, 70160000.0, 14.88008183467727], [1440994752.0, 70180000.0, 14.90183124778707], [1440996480.0, 70200000.0, 14.923606109443195], [1440998208.0, 70220000.0, 14.94540644199386], [1440999936.0, 70240000.0, 14.967232267800346], [1441001664.0, 70260000.0, 14.989083609237063], [1441003392.0, 70280000.0, 15.010960488691511], [1441005120.0, 70300000.0, 15.032862928564308], [1441006848.0, 70320000.0, 15.054790951269139], [1441008576.0, 70340000.0, 15.076744579232859], [1441010304.0, 70360000.0, 15.098723834895408], [1441012032.0, 70380000.0, 15.120728740709863], [1441013760.0, 70400000.0, 15.142759319142398], [1441015488.0, 70420000.0, 15.164815592672355], [1441017216.0, 70440000.0, 15.186897583792174], [1441018944.0, 70460000.0, 15.209005315007472], [1441020672.0, 70480000.0, 15.231138808836947], [1441022400.0, 70500000.0, 15.253298087812498], [1441024128.0, 70520000.0, 15.275483174479142], [1441025856.0, 70540000.0, 15.297694091395073], [1441027584.0, 70560000.0, 15.319930861131596], [1441029312.0, 70580000.0, 15.342193506273219], [1441031040.0, 70600000.0, 15.364482049417594], [1441032768.0, 70620000.0, 15.38679651317556], [1441034496.0, 70640000.0, 15.40913692017109], [1441036224.0, 70660000.0, 15.431503293041352], [1441037952.0, 70680000.0, 15.453895654436714], [1441039680.0, 70700000.0, 15.476314027020706], [1441041408.0, 70720000.0, 15.498758433470025], [1441043136.0, 70740000.0, 15.521228896474588], [1441044864.0, 70760000.0, 15.543725438737503], [1441046592.0, 70780000.0, 15.566248082975081], [1441048320.0, 70800000.0, 15.5887968519168], [1441050048.0, 70820000.0, 15.611371768305382], [1441051776.0, 70840000.0, 15.633972854896744], [1441053504.0, 70860000.0, 15.656600134460016], [1441055232.0, 70880000.0, 15.679253629777543], [1441056960.0, 70900000.0, 15.7019333636449], [1441058688.0, 70920000.0, 15.724639358870874], [1441060416.0, 70940000.0, 15.747371638277507], [1441062144.0, 70960000.0, 15.770130224700031], [1441063872.0, 70980000.0, 15.792915140986953], [1441065600.0, 71000000.0, 15.815726409999998], [1441067328.0, 71020000.0, 15.838564054614157], [1441069056.0, 71040000.0, 15.861428097717633], [1441070784.0, 71060000.0, 15.884318562211918], [1441072512.0, 71080000.0, 15.907235471011742], [1441074240.0, 71100000.0, 15.930178847045104], [1441075968.0, 71120000.0, 15.953148713253242], [1441077696.0, 71140000.0, 15.97614509259069], [1441079424.0, 71160000.0, 15.999168008025235], [1441081152.0, 71180000.0, 16.022217482537965], [1441082880.0, 71200000.0, 16.045293539123204], [1441084608.0, 71220000.0, 16.06839620078858], [1441086336.0, 71240000.0, 16.091525490555032], [1441088064.0, 71260000.0, 16.11468143145676], [1441089792.0, 71280000.0, 16.137864046541246], [1441091520.0, 71300000.0, 16.1610733588693], [1441093248.0, 71320000.0, 16.184309391515026], [1441094976.0, 71340000.0, 16.20757216756583], [1441096704.0, 71360000.0, 16.230861710122422], [1441098432.0, 71380000.0, 16.254178042298825], [1441100160.0, 71400000.0, 16.277521187222398], [1441101888.0, 71420000.0, 16.300891168033807], [1441103616.0, 71440000.0, 16.32428800788703], [1441105344.0, 71460000.0, 16.347711729949395], [1441107072.0, 71480000.0, 16.371162357401552], [1441108800.0, 71500000.0, 16.394639913437505], [1441110528.0, 71520000.0, 16.418144421264554], [1441112256.0, 71540000.0, 16.441675904103395], [1441113984.0, 71560000.0, 16.46523438518804], [1441115712.0, 71580000.0, 16.48881988776587], [1441117440.0, 71600000.0, 16.5124324350976], [1441119168.0, 71620000.0, 16.53607205045732], [1441120896.0, 71640000.0, 16.559738757132486], [1441122624.0, 71660000.0, 16.58343257842393], [1441124352.0, 71680000.0, 16.607153537645807], [1441126080.0, 71700000.0, 16.630901658125698], [1441127808.0, 71720000.0, 16.654676963204547], [1441129536.0, 71740000.0, 16.678479476236685], [1441131264.0, 71760000.0, 16.702309220589797], [1441132992.0, 71780000.0, 16.726166219645005], [1441134720.0, 71800000.0, 16.750050496796792], [1441136448.0, 71820000.0, 16.773962075453074], [1441138176.0, 71840000.0, 16.797900979035116], [1441139904.0, 71860000.0, 16.821867230977624], [1441141632.0, 71880000.0, 16.84586085472871], [1441143360.0, 71900000.0, 16.869881873749904], [1441145088.0, 71920000.0, 16.89393031151613], [1441146816.0, 71940000.0, 16.91800619151575], [1441148544.0, 71960000.0, 16.94210953725056], [1441150272.0, 71980000.0, 16.96624037223576], [1441152000.0, 72000000.0, 16.99039872], [1441153728.0, 72020000.0, 17.014584604085357], [1441155456.0, 72040000.0, 17.038798048047365], [1441157184.0, 72060000.0, 17.06303907545497], [1441158912.0, 72080000.0, 17.08730770989059], [1441160640.0, 72100000.0, 17.111603974950096], [1441162368.0, 72120000.0, 17.135927894242805], [1441164096.0, 72140000.0, 17.160279491391503], [1441165824.0, 72160000.0, 17.184658790032408], [1441167552.0, 72180000.0, 17.209065813815247], [1441169280.0, 72200000.0, 17.233500586403196], [1441171008.0, 72220000.0, 17.25796313147292], [1441172736.0, 72240000.0, 17.282453472714526], [1441174464.0, 72260000.0, 17.30697163383164], [1441176192.0, 72280000.0, 17.331517638541364], [1441177920.0, 72300000.0, 17.356091510574306], [1441179648.0, 72320000.0, 17.380693273674517], [1441181376.0, 72340000.0, 17.405322951599594], [1441183104.0, 72360000.0, 17.429980568120623], [1441184832.0, 72380000.0, 17.454666147022206], [1441186560.0, 72400000.0, 17.479379712102403], [1441188288.0, 72420000.0, 17.504121287172847], [1441190016.0, 72440000.0, 17.52889089605867], [1441191744.0, 72460000.0, 17.55368856259853], [1441193472.0, 72480000.0, 17.578514310644568], [1441195200.0, 72500000.0, 17.6033681640625], [1441196928.0, 72520000.0, 17.62825014673156], [1441198656.0, 72540000.0, 17.653160282544523], [1441200384.0, 72560000.0, 17.678098595407693], [1441202112.0, 72580000.0, 17.70306510924092], [1441203840.0, 72600000.0, 17.728059847977594], [1441205568.0, 72620000.0, 17.753082835564683], [1441207296.0, 72640000.0, 17.77813409596271], [1441209024.0, 72660000.0, 17.803213653145693], [1441210752.0, 72680000.0, 17.82832153110129], [1441212480.0, 72700000.0, 17.853457753830696], [1441214208.0, 72720000.0, 17.87862234534868], [1441215936.0, 72740000.0, 17.903815329683567], [1441217664.0, 72760000.0, 17.929036730877282], [1441219392.0, 72780000.0, 17.95428657298533], [1441221120.0, 72800000.0, 17.979564880076804], [1441222848.0, 72820000.0, 18.00487167623436], [1441224576.0, 72840000.0, 18.030206985554276], [1441226304.0, 72860000.0, 18.055570832146426], [1441228032.0, 72880000.0, 18.08096324013428], [1441229760.0, 72900000.0, 18.1063842336549], [1441231488.0, 72920000.0, 18.131833836858977], [1441233216.0, 72940000.0, 18.1573120739108], [1441234944.0, 72960000.0, 18.182818968988286], [1441236672.0, 72980000.0, 18.208354546282965], [1441238400.0, 73000000.0, 18.23391883], [1441240128.0, 73020000.0, 18.259511844358162], [1441241856.0, 73040000.0, 18.28513361358989], [1441243584.0, 73060000.0, 18.310784161941214], [1441245312.0, 73080000.0, 18.336463513671838], [1441247040.0, 73100000.0, 18.362171693055096], [1441248768.0, 73120000.0, 18.38790872437798], [1441250496.0, 73140000.0, 18.413674631941102], [1441252224.0, 73160000.0, 18.439469440058776], [1441253952.0, 73180000.0, 18.465293173058935], [1441255680.0, 73200000.0, 18.491145855283204], [1441257408.0, 73220000.0, 18.517027511086837], [1441259136.0, 73240000.0, 18.54293816483881], [1441260864.0, 73260000.0, 18.568877840921722], [1441262592.0, 73280000.0, 18.594846563731902], [1441264320.0, 73300000.0, 18.620844357679307], [1441266048.0, 73320000.0, 18.646871247187597], [1441267776.0, 73340000.0, 18.672927256694155], [1441269504.0, 73360000.0, 18.69901241065004], [1441271232.0, 73380000.0, 18.725126733519964], [1441272960.0, 73400000.0, 18.7512702497824], [1441274688.0, 73420000.0, 18.777442983929493], [1441276416.0, 73440000.0, 18.803644960467132], [1441278144.0, 73460000.0, 18.829876203914857], [1441279872.0, 73480000.0, 18.856136738805972], [1441281600.0, 73500000.0, 18.882426589687494], [1441283328.0, 73520000.0, 18.908745781120174], [1441285056.0, 73540000.0, 18.935094337678454], [1441286784.0, 73560000.0, 18.96147228395054], [1441288512.0, 73580000.0, 18.987879644538356], [1441290240.0, 73600000.0, 19.014316444057602], [1441291968.0, 73620000.0, 19.040782707137662], [1441293696.0, 73640000.0, 19.067278458421708], [1441295424.0, 73660000.0, 19.093803722566655], [1441297152.0, 73680000.0, 19.120358524243187], [1441298880.0, 73700000.0, 19.1469428881357], [1441300608.0, 73720000.0, 19.1735568389424], [1441302336.0, 73740000.0, 19.200200401375252], [1441304064.0, 73760000.0, 19.22687360015998], [1441305792.0, 73780000.0, 19.253576460036065], [1441307520.0, 73800000.0, 19.2803090057568], [1441309248.0, 73820000.0, 19.30707126208925], [1441310976.0, 73840000.0, 19.33386325381425], [1441312704.0, 73860000.0, 19.36068500572644], [1441314432.0, 73880000.0, 19.387536542634244], [1441316160.0, 73900000.0, 19.4144178893599], [1441317888.0, 73920000.0, 19.441329070739428], [1441319616.0, 73940000.0, 19.468270111622648], [1441321344.0, 73960000.0, 19.495241036873217], [1441323072.0, 73980000.0, 19.52224187136857], [1441324800.0, 74000000.0, 19.54927264], [1441326528.0, 74020000.0, 19.576333367672575], [1441328256.0, 74040000.0, 19.603424079305213], [1441329984.0, 74060000.0, 19.63054479983066], [1441331712.0, 74080000.0, 19.65769555419549], [1441333440.0, 74100000.0, 19.684876367360097], [1441335168.0, 74120000.0, 19.71208726429875], [1441336896.0, 74140000.0, 19.73932826999951], [1441338624.0, 74160000.0, 19.766599409464348], [1441340352.0, 74180000.0, 19.793900707709028], [1441342080.0, 74200000.0, 19.8212321897632], [1441343808.0, 74220000.0, 19.848593880670368], [1441345536.0, 74240000.0, 19.875985805487907], [1441347264.0, 74260000.0, 19.903407989287015], [1441348992.0, 74280000.0, 19.930860457152825], [1441350720.0, 74300000.0, 19.958343234184294], [1441352448.0, 74320000.0, 19.985856345494295], [1441354176.0, 74340000.0, 20.01339981620954], [1441355904.0, 74360000.0, 20.040973671470645], [1441357632.0, 74380000.0, 20.068577936432124], [1441359360.0, 74400000.0, 20.096212636262408], [1441361088.0, 74420000.0, 20.12387779614375], [1441362816.0, 74440000.0, 20.151573441272372], [1441364544.0, 74460000.0, 20.179299596858375], [1441366272.0, 74480000.0, 20.207056288125788], [1441368000.0, 74500000.0, 20.234843540312504], [1441369728.0, 74520000.0, 20.262661378670384], [1441371456.0, 74540000.0, 20.29050982846518], [1441373184.0, 74560000.0, 20.31838891497659], [1441374912.0, 74580000.0, 20.346298663498214], [1441376640.0, 74600000.0, 20.374239099337597], [1441378368.0, 74620000.0, 20.402210247816225], [1441380096.0, 74640000.0, 20.43021213426952], [1441381824.0, 74660000.0, 20.45824478404683], [1441383552.0, 74680000.0, 20.486308222511468], [1441385280.0, 74700000.0, 20.514402475040697], [1441387008.0, 74720000.0, 20.542527567025736], [1441388736.0, 74740000.0, 20.570683523871747], [1441390464.0, 74760000.0, 20.59887037099786], [1441392192.0, 74780000.0, 20.627088133837187], [1441393920.0, 74800000.0, 20.655336837836803], [1441395648.0, 74820000.0, 20.683616508457735], [1441397376.0, 74840000.0, 20.711927171175017], [1441399104.0, 74860000.0, 20.740268851477637], [1441400832.0, 74880000.0, 20.76864157486862], [1441402560.0, 74900000.0, 20.797045366864907], [1441404288.0, 74920000.0, 20.82548025299747], [1441406016.0, 74940000.0, 20.853946258811288], [1441407744.0, 74960000.0, 20.88244340986535], [1441409472.0, 74980000.0, 20.910971731732587], [1441411200.0, 75000000.0, 20.93953125], [1441412928.0, 75020000.0, 20.968121990268582], [1441414656.0, 75040000.0, 20.996743978153344], [1441416384.0, 75060000.0, 21.02539723928331], [1441418112.0, 75080000.0, 21.054081799301542], [1441419840.0, 75100000.0, 21.0827976838651], [1441421568.0, 75120000.0, 21.111544918645105], [1441423296.0, 75140000.0, 21.140323529326725], [1441425024.0, 75160000.0, 21.16913354160911], [1441426752.0, 75180000.0, 21.197974981205512], [1441428480.0, 75200000.0, 21.226847873843194], [1441430208.0, 75220000.0, 21.2557522452635], [1441431936.0, 75240000.0, 21.284688121221787], [1441433664.0, 75260000.0, 21.313655527487505], [1441435392.0, 75280000.0, 21.342654489844147], [1441437120.0, 75300000.0, 21.371685034089303], [1441438848.0, 75320000.0, 21.400747186034575], [1441440576.0, 75340000.0, 21.429840971505694], [1441442304.0, 75360000.0, 21.458966416342445], [1441444032.0, 75380000.0, 21.488123546398707], [1441445760.0, 75400000.0, 21.5173123875424], [1441447488.0, 75420000.0, 21.54653296565559], [1441449216.0, 75440000.0, 21.57578530663442], [1441450944.0, 75460000.0, 21.605069436389112], [1441452672.0, 75480000.0, 21.634385380843987], [1441454400.0, 75500000.0, 21.663733165937497], [1441456128.0, 75520000.0, 21.69311281762218], [1441457856.0, 75540000.0, 21.722524361864718], [1441459584.0, 75560000.0, 21.75196782464584], [1441461312.0, 75580000.0, 21.78144323196046], [1441463040.0, 75600000.0, 21.810950609817592], [1441464768.0, 75620000.0, 21.840489984240406], [1441466496.0, 75640000.0, 21.870061381266126], [1441468224.0, 75660000.0, 21.899664826946196], [1441469952.0, 75680000.0, 21.92930034734615], [1441471680.0, 75700000.0, 21.958967968545704], [1441473408.0, 75720000.0, 21.988667716638666], [1441475136.0, 75740000.0, 22.01839961773303], [1441476864.0, 75760000.0, 22.048163697950944], [1441478592.0, 75780000.0, 22.077959983428723], [1441480320.0, 75800000.0, 22.1077885003168], [1441482048.0, 75820000.0, 22.13764927477982], [1441483776.0, 75840000.0, 22.16754233299658], [1441485504.0, 75860000.0, 22.197467701160054], [1441487232.0, 75880000.0, 22.22742540547738], [1441488960.0, 75900000.0, 22.2574154721699], [1441490688.0, 75920000.0, 22.287437927473114], [1441492416.0, 75940000.0, 22.317492797636746], [1441494144.0, 75960000.0, 22.347580108924674], [1441495872.0, 75980000.0, 22.37769988761499], [1441497600.0, 76000000.0, 22.40785215999999], [1441499328.0, 76020000.0, 22.438036952386195], [1441501056.0, 76040000.0, 22.468254291094276], [1441502784.0, 76060000.0, 22.49850420245916], [1441504512.0, 76080000.0, 22.52878671282998], [1441506240.0, 76100000.0, 22.559101848570105], [1441507968.0, 76120000.0, 22.589449636057086], [1441509696.0, 76140000.0, 22.619830101682723], [1441511424.0, 76160000.0, 22.65024327185308], [1441513152.0, 76180000.0, 22.680689172988405], [1441514880.0, 76200000.0, 22.7111678315232], [1441516608.0, 76220000.0, 22.741679273906225], [1441518336.0, 76240000.0, 22.77222352660047], [1441520064.0, 76260000.0, 22.802800616083196], [1441521792.0, 76280000.0, 22.83341056884589], [1441523520.0, 76300000.0, 22.8640534113943], [1441525248.0, 76320000.0, 22.89472917024846], [1441526976.0, 76340000.0, 22.925437871942666], [1441528704.0, 76360000.0, 22.956179543025456], [1441530432.0, 76380000.0, 22.98695421005966], [1441532160.0, 76400000.0, 23.017761899622393], [1441533888.0, 76420000.0, 23.04860263830505], [1441535616.0, 76440000.0, 23.079476452713273], [1441537344.0, 76460000.0, 23.110383369467034], [1441539072.0, 76480000.0, 23.141323415200592], [1441540800.0, 76500000.0, 23.172296616562505], [1441542528.0, 76520000.0, 23.203303000215598], [1441544256.0, 76540000.0, 23.234342592837034], [1441545984.0, 76560000.0, 23.26541542111828], [1441547712.0, 76580000.0, 23.296521511765118], [1441549440.0, 76600000.0, 23.3276608914976], [1441551168.0, 76620000.0, 23.358833587050164], [1441552896.0, 76640000.0, 23.390039625171532], [1441554624.0, 76660000.0, 23.42127903262477], [1441556352.0, 76680000.0, 23.452551836187254], [1441558080.0, 76700000.0, 23.483858062650697], [1441559808.0, 76720000.0, 23.515197738821183], [1441561536.0, 76740000.0, 23.546570891519124], [1441563264.0, 76760000.0, 23.57797754757924], [1441564992.0, 76780000.0, 23.609417733850645], [1441566720.0, 76800000.0, 23.640891477196792], [1441568448.0, 76820000.0, 23.67239880449552], [1441570176.0, 76840000.0, 23.70393974263896], [1441571904.0, 76860000.0, 23.735514318533667], [1441573632.0, 76880000.0, 23.767122559100542], [1441575360.0, 76900000.0, 23.798764491274905], [1441577088.0, 76920000.0, 23.83044014200637], [1441578816.0, 76940000.0, 23.86214953825899], [1441580544.0, 76960000.0, 23.893892707011194], [1441582272.0, 76980000.0, 23.9256696752558], [1441584000.0, 77000000.0, 23.957480470000004], [1441585728.0, 77020000.0, 23.989325118265402], [1441587456.0, 77040000.0, 24.021203647087997], [1441589184.0, 77060000.0, 24.053116083518212], [1441590912.0, 77080000.0, 24.085062454620836], [1441592640.0, 77100000.0, 24.117042787475096], [1441594368.0, 77120000.0, 24.149057109174638], [1441596096.0, 77140000.0, 24.181105446827544], [1441597824.0, 77160000.0, 24.213187827556254], [1441599552.0, 77180000.0, 24.24530427849769], [1441601280.0, 77200000.0, 24.277454826803197], [1441603008.0, 77220000.0, 24.309639499638564], [1441604736.0, 77240000.0, 24.341858324183963], [1441606464.0, 77260000.0, 24.37411132763408], [1441608192.0, 77280000.0, 24.406398537198005], [1441609920.0, 77300000.0, 24.438719980099307], [1441611648.0, 77320000.0, 24.47107568357596], [1441613376.0, 77340000.0, 24.503465674880438], [1441615104.0, 77360000.0, 24.535889981279663], [1441616832.0, 77380000.0, 24.56834863005504], [1441618560.0, 77400000.0, 24.600841648502406], [1441620288.0, 77420000.0, 24.63336906393209], [1441622016.0, 77440000.0, 24.66593090366891], [1441623744.0, 77460000.0, 24.69852719505217], [1441625472.0, 77480000.0, 24.731157965435607], [1441627200.0, 77500000.0, 24.7638232421875], [1441628928.0, 77520000.0, 24.7965230526906], [1441630656.0, 77540000.0, 24.829257424342156], [1441632384.0, 77560000.0, 24.86202638455394], [1441634112.0, 77580000.0, 24.89482996075216], [1441635840.0, 77600000.0, 24.927668180377594], [1441637568.0, 77620000.0, 24.960541070885522], [1441639296.0, 77640000.0, 24.993448659745745], [1441641024.0, 77660000.0, 25.026390974442535], [1441642752.0, 77680000.0, 25.059368042474734], [1441644480.0, 77700000.0, 25.092379891355694], [1441646208.0, 77720000.0, 25.12542654861332], [1441647936.0, 77740000.0, 25.158508041790004], [1441649664.0, 77760000.0, 25.191624398442723], [1441651392.0, 77780000.0, 25.224775646142966], [1441653120.0, 77800000.0, 25.2579618124768], [1441654848.0, 77820000.0, 25.2911829250448], [1441656576.0, 77840000.0, 25.324439011462115], [1441658304.0, 77860000.0, 25.357730099358466], [1441660032.0, 77880000.0, 25.39105621637812], [1441661760.0, 77900000.0, 25.424417390179904], [1441663488.0, 77920000.0, 25.457813648437217], [1441665216.0, 77940000.0, 25.491245018838036], [1441666944.0, 77960000.0, 25.524711529084932], [1441668672.0, 77980000.0, 25.558213206895005], [1441670400.0, 78000000.0, 25.591750079999994], [1441672128.0, 78020000.0, 25.625322176146202], [1441673856.0, 78040000.0, 25.658929523094532], [1441675584.0, 78060000.0, 25.692572148620457], [1441677312.0, 78080000.0, 25.726250080514077], [1441679040.0, 78100000.0, 25.75996334658009], [1441680768.0, 78120000.0, 25.793711974637827], [1441682496.0, 78140000.0, 25.827495992521147], [1441684224.0, 78160000.0, 25.861315428078612], [1441685952.0, 78180000.0, 25.89517030917337], [1441687680.0, 78200000.0, 25.92906066368321], [1441689408.0, 78220000.0, 25.962986519500483], [1441691136.0, 78240000.0, 25.99694790453225], [1441692864.0, 78260000.0, 26.03094484670016], [1441694592.0, 78280000.0, 26.064977373940543], [1441696320.0, 78300000.0, 26.099045514204303], [1441698048.0, 78320000.0, 26.133149295457038], [1441699776.0, 78340000.0, 26.167288745679], [1441701504.0, 78360000.0, 26.20146389286508], [1441703232.0, 78380000.0, 26.235674765024804], [1441704960.0, 78400000.0, 26.2699213901824], [1441706688.0, 78420000.0, 26.304203796376733], [1441708416.0, 78440000.0, 26.33852201166137], [1441710144.0, 78460000.0, 26.372876064104492], [1441711872.0, 78480000.0, 26.407265981789013], [1441713600.0, 78500000.0, 26.441691792812488], [1441715328.0, 78520000.0, 26.476153525287216], [1441717056.0, 78540000.0, 26.510651207340096], [1441718784.0, 78560000.0, 26.54518486711278], [1441720512.0, 78580000.0, 26.579754532761594], [1441722240.0, 78600000.0, 26.614360232457603], [1441723968.0, 78620000.0, 26.649001994386506], [1441725696.0, 78640000.0, 26.68367984674875], [1441727424.0, 78660000.0, 26.718393817759498], [1441729152.0, 78680000.0, 26.753143935648627], [1441730880.0, 78700000.0, 26.7879302286607], [1441732608.0, 78720000.0, 26.822752725055043], [1441734336.0, 78740000.0, 26.857611453105687], [1441736064.0, 78760000.0, 26.89250644110142], [1441737792.0, 78780000.0, 26.927437717345708], [1441739520.0, 78800000.0, 26.9624053101568], [1441741248.0, 78820000.0, 26.99740924786768], [1441742976.0, 78840000.0, 27.03244955882609], [1441744704.0, 78860000.0, 27.067526271394478], [1441746432.0, 78880000.0, 27.102639413950083], [1441748160.0, 78900000.0, 27.13778901488489], [1441749888.0, 78920000.0, 27.172975102605673], [1441751616.0, 78940000.0, 27.208197705533895], [1441753344.0, 78960000.0, 27.24345685210585], [1441755072.0, 78980000.0, 27.278752570772614], [1441756800.0, 79000000.0, 27.314084890000007], [1441758528.0, 79020000.0, 27.34945383826862], [1441760256.0, 79040000.0, 27.384859444073857], [1441761984.0, 79060000.0, 27.420301735925896], [1441763712.0, 79080000.0, 27.45578074234973], [1441765440.0, 79100000.0, 27.491296491885098], [1441767168.0, 79120000.0, 27.526849013086583], [1441768896.0, 79140000.0, 27.562438334523552], [1441770624.0, 79160000.0, 27.59806448478019], [1441772352.0, 79180000.0, 27.63372749245547], [1441774080.0, 79200000.0, 27.669427386163196], [1441775808.0, 79220000.0, 27.705164194532], [1441777536.0, 79240000.0, 27.740937946205342], [1441779264.0, 79260000.0, 27.776748669841457], [1441780992.0, 79280000.0, 27.812596394113466], [1441782720.0, 79300000.0, 27.848481147709293], [1441784448.0, 79320000.0, 27.884402959331734], [1441786176.0, 79340000.0, 27.92036185769837], [1441787904.0, 79360000.0, 27.956357871541684], [1441789632.0, 79380000.0, 27.992391029608967], [1441791360.0, 79400000.0, 28.028461360662405], [1441793088.0, 79420000.0, 28.064568893478988], [1441794816.0, 79440000.0, 28.100713656850612], [1441796544.0, 79460000.0, 28.136895679584015], [1441798272.0, 79480000.0, 28.173114990500824], [1441800000.0, 79500000.0, 28.209371618437505], [1441801728.0, 79520000.0, 28.24566559224542], [1441803456.0, 79540000.0, 28.28199694079082], [1441805184.0, 79560000.0, 28.31836569295484], [1441806912.0, 79580000.0, 28.354771877633457], [1441808640.0, 79600000.0, 28.3912155237376], [1441810368.0, 79620000.0, 28.42769666019306], [1441812096.0, 79640000.0, 28.464215315940564], [1441813824.0, 79660000.0, 28.50077151993567], [1441815552.0, 79680000.0, 28.53736530114891], [1441817280.0, 79700000.0, 28.573996688565696], [1441819008.0, 79720000.0, 28.610665711186382], [1441820736.0, 79740000.0, 28.647372398026185], [1441822464.0, 79760000.0, 28.6841167781153], [1441824192.0, 79780000.0, 28.720898880498826], [1441825920.0, 79800000.0, 28.757718734236803], [1441827648.0, 79820000.0, 28.79457636840418], [1441829376.0, 79840000.0, 28.83147181209085], [1441831104.0, 79860000.0, 28.868405094401684], [1441832832.0, 79880000.0, 28.905376244456463], [1441834560.0, 79900000.0, 28.942385291389908], [1441836288.0, 79920000.0, 28.97943226435171], [1441838016.0, 79940000.0, 29.01651719250653], [1441839744.0, 79960000.0, 29.05364010503399], [1441841472.0, 79980000.0, 29.09080103112863], [1441843200.0, 80000000.0, 29.128], [1441844928.0, 80020000.0, 29.165237040872643], [1441846656.0, 80040000.0, 29.20251218298597], [1441848384.0, 80060000.0, 29.23982545559456], [1441850112.0, 80080000.0, 29.27717688796776], [1441851840.0, 80100000.0, 29.31456650939009], [1441853568.0, 80120000.0, 29.35199434916096], [1441855296.0, 80140000.0, 29.389460436594753], [1441857024.0, 80160000.0, 29.42696480102095], [1441858752.0, 80180000.0, 29.464507471783968], [1441860480.0, 80200000.0, 29.5020884782432], [1441862208.0, 80220000.0, 29.53970784977314], [1441863936.0, 80240000.0, 29.577365615763213], [1441865664.0, 80260000.0, 29.615061805617945], [1441867392.0, 80280000.0, 29.652796448756806], [1441869120.0, 80300000.0, 29.690569574614287], [1441870848.0, 80320000.0, 29.728381212640016], [1441872576.0, 80340000.0, 29.766231392298558], [1441874304.0, 80360000.0, 29.804120143069483], [1441876032.0, 80380000.0, 29.84204749444754], [1441877760.0, 80400000.0, 29.880013475942384], [1441879488.0, 80420000.0, 29.91801811707883], [1441881216.0, 80440000.0, 29.95606144739667], [1441882944.0, 80460000.0, 29.994143496450732], [1441884672.0, 80480000.0, 30.032264293811025], [1441886400.0, 80500000.0, 30.070423869062505], [1441888128.0, 80520000.0, 30.108622251805222], [1441889856.0, 80540000.0, 30.146859471654356], [1441891584.0, 80560000.0, 30.185135558240066], [1441893312.0, 80580000.0, 30.2234505412077], [1441895040.0, 80600000.0, 30.261804450217614], [1441896768.0, 80620000.0, 30.300197314945223], [1441898496.0, 80640000.0, 30.33862916508117], [1441900224.0, 80660000.0, 30.37710003033105], [1441901952.0, 80680000.0, 30.415609940415585], [1441903680.0, 80700000.0, 30.454158925070704], [1441905408.0, 80720000.0, 30.492747014047282], [1441907136.0, 80740000.0, 30.53137423711147], [1441908864.0, 80760000.0, 30.5700406240444], [1441910592.0, 80780000.0, 30.608746204642348], [1441912320.0, 80800000.0, 30.647491008716806], [1441914048.0, 80820000.0, 30.68627506609427], [1441915776.0, 80840000.0, 30.725098406616414], [1441917504.0, 80860000.0, 30.7639610601401], [1441919232.0, 80880000.0, 30.802863056537205], [1441920960.0, 80900000.0, 30.841804425694892], [1441922688.0, 80920000.0, 30.88078519751537], [1441924416.0, 80940000.0, 30.919805401915976], [1441926144.0, 80960000.0, 30.95886506882932], [1441927872.0, 80980000.0, 30.99796422820305], [1441929600.0, 81000000.0, 31.03710290999999], [1441931328.0, 81020000.0, 31.07628114419824], [1441933056.0, 81040000.0, 31.115498960790898], [1441934784.0, 81060000.0, 31.154756389786403], [1441936512.0, 81080000.0, 31.19405346120823], [1441938240.0, 81100000.0, 31.233390205095088], [1441939968.0, 81120000.0, 31.27276665150093], [1441941696.0, 81140000.0, 31.312182830494784], [1441943424.0, 81160000.0, 31.351638772160914], [1441945152.0, 81180000.0, 31.39113450659884], [1441946880.0, 81200000.0, 31.430670063923184], [1441948608.0, 81220000.0, 31.47024547426386], [1441950336.0, 81240000.0, 31.509860767765925], [1441952064.0, 81260000.0, 31.549515974589625], [1441953792.0, 81280000.0, 31.589211124910527], [1441955520.0, 81300000.0, 31.62894624891931], [1441957248.0, 81320000.0, 31.6687213768219], [1441958976.0, 81340000.0, 31.708536538839514], [1441960704.0, 81360000.0, 31.74839176520848], [1441962432.0, 81380000.0, 31.788287086180503], [1441964160.0, 81400000.0, 31.82822253202241], [1441965888.0, 81420000.0, 31.868198133016275], [1441967616.0, 81440000.0, 31.908213919459516], [1441969344.0, 81460000.0, 31.94826992166469], [1441971072.0, 81480000.0, 31.988366169959626], [1441972800.0, 81500000.0, 32.0285026946875], [1441974528.0, 81520000.0, 32.068679526206616], [1441976256.0, 81540000.0, 32.10889669489068], [1441977984.0, 81560000.0, 32.149154231128534], [1441979712.0, 81580000.0, 32.18945216532434], [1441981440.0, 81600000.0, 32.229790527897606], [1441983168.0, 81620000.0, 32.27016934928302], [1441984896.0, 81640000.0, 32.31058865993057], [1441986624.0, 81660000.0, 32.35104849030561], [1441988352.0, 81680000.0, 32.39154887088867], [1441990080.0, 81700000.0, 32.43208983217569], [1441991808.0, 81720000.0, 32.47267140467783], [1441993536.0, 81740000.0, 32.513293618921544], [1441995264.0, 81760000.0, 32.553956505448674], [1441996992.0, 81780000.0, 32.594660094816305], [1441998720.0, 81800000.0, 32.635404417596796], [1442000448.0, 81820000.0, 32.67618950437796], [1442002176.0, 81840000.0, 32.71701538576277], [1442003904.0, 81860000.0, 32.7578820923697], [1442005632.0, 81880000.0, 32.79878965483241], [1442007360.0, 81900000.0, 32.8397381037999], [1442009088.0, 81920000.0, 32.88072746993661], [1442010816.0, 81940000.0, 32.92175778392225], [1442012544.0, 81960000.0, 32.96282907645183], [1442014272.0, 81980000.0, 33.00394137823584], [1442016000.0, 82000000.0, 33.04509471999999], [1442017728.0, 82020000.0, 33.08628913248543], [1442019456.0, 82040000.0, 33.127524646448656], [1442021184.0, 82060000.0, 33.16880129266144], [1442022912.0, 82080000.0, 33.21011910191107], [1442024640.0, 82100000.0, 33.25147810500012], [1442026368.0, 82120000.0, 33.292878332746476], [1442028096.0, 82140000.0, 33.334319815983584], [1442029824.0, 82160000.0, 33.37580258556008], [1442031552.0, 82180000.0, 33.41732667234013], [1442033280.0, 82200000.0, 33.45889210720322], [1442035008.0, 82220000.0, 33.50049892104418], [1442036736.0, 82240000.0, 33.542147144773416], [1442038464.0, 82260000.0, 33.583836809316544], [1442040192.0, 82280000.0, 33.62556794561465], [1442041920.0, 82300000.0, 33.667340584624306], [1442043648.0, 82320000.0, 33.70915475731738], [1442045376.0, 82340000.0, 33.75101049468128], [1442047104.0, 82360000.0, 33.79290782771872], [1442048832.0, 82380000.0, 33.834846787447866], [1442050560.0, 82400000.0, 33.87682740490241], [1442052288.0, 82420000.0, 33.91884971113135], [1442054016.0, 82440000.0, 33.96091373719914], [1442055744.0, 82460000.0, 34.003019514185816], [1442057472.0, 82480000.0, 34.04516707318663], [1442059200.0, 82500000.0, 34.0873564453125], [1442060928.0, 82520000.0, 34.12958766168966], [1442062656.0, 82540000.0, 34.1718607534598], [1442064384.0, 82560000.0, 34.21417575178018], [1442066112.0, 82580000.0, 34.25653268782338], [1442067840.0, 82600000.0, 34.2989315927776], [1442069568.0, 82620000.0, 34.34137249784638], [1442071296.0, 82640000.0, 34.38385543424877], [1442073024.0, 82660000.0, 34.42638043321937], [1442074752.0, 82680000.0, 34.468947526008186], [1442076480.0, 82700000.0, 34.51155674388069], [1442078208.0, 82720000.0, 34.55420811811796], [1442079936.0, 82740000.0, 34.59690168001642], [1442081664.0, 82760000.0, 34.63963746088816], [1442083392.0, 82780000.0, 34.68241549206061], [1442085120.0, 82800000.0, 34.72523580487678], [1442086848.0, 82820000.0, 34.76809843069524], [1442088576.0, 82840000.0, 34.81100340088997], [1442090304.0, 82860000.0, 34.8539507468505], [1442092032.0, 82880000.0, 34.896940499981966], [1442093760.0, 82900000.0, 34.93997269170488], [1442095488.0, 82920000.0, 34.98304735345545], [1442097216.0, 82940000.0, 35.026164516685284], [1442098944.0, 82960000.0, 35.06932421286155], [1442100672.0, 82980000.0, 35.11252647346706], [1442102400.0, 83000000.0, 35.155771330000015], [1442104128.0, 83020000.0, 35.19905881397425], [1442105856.0, 83040000.0, 35.24238895691917], [1442107584.0, 83060000.0, 35.28576179037968], [1442109312.0, 83080000.0, 35.329177345916314], [1442111040.0, 83100000.0, 35.3726356551051], [1442112768.0, 83120000.0, 35.41613674953764], [1442114496.0, 83140000.0, 35.459680660821185], [1442116224.0, 83160000.0, 35.503267420578474], [1442117952.0, 83180000.0, 35.54689706044782], [1442119680.0, 83200000.0, 35.59056961208321], [1442121408.0, 83220000.0, 35.6342851071541], [1442123136.0, 83240000.0, 35.67804357734568], [1442124864.0, 83260000.0, 35.721845054358624], [1442126592.0, 83280000.0, 35.76568956990917], [1442128320.0, 83300000.0, 35.80957715572931], [1442130048.0, 83320000.0, 35.8535078435665], [1442131776.0, 83340000.0, 35.89748166518384], [1442133504.0, 83360000.0, 35.941498652360124], [1442135232.0, 83380000.0, 35.98555883688963], [1442136960.0, 83400000.0, 36.02966225058239], [1442138688.0, 83420000.0, 36.07380892526398], [1442140416.0, 83440000.0, 36.11799889277558], [1442142144.0, 83460000.0, 36.16223218497413], [1442143872.0, 83480000.0, 36.20650883373207], [1442145600.0, 83500000.0, 36.25082887093748], [1442147328.0, 83520000.0, 36.29519232849427], [1442149056.0, 83540000.0, 36.33959923832171], [1442150784.0, 83560000.0, 36.38404963235501], [1442152512.0, 83580000.0, 36.42854354254486], [1442154240.0, 83600000.0, 36.47308100085758], [1442155968.0, 83620000.0, 36.517662039275336], [1442157696.0, 83640000.0, 36.56228668979581], [1442159424.0, 83660000.0, 36.60695498443234], [1442161152.0, 83680000.0, 36.651666955214075], [1442162880.0, 83700000.0, 36.69642263418569], [1442164608.0, 83720000.0, 36.74122205340768], [1442166336.0, 83740000.0, 36.786065244956156], [1442168064.0, 83760000.0, 36.83095224092284], [1442169792.0, 83780000.0, 36.87588307341534], [1442171520.0, 83800000.0, 36.920857774556815], [1442173248.0, 83820000.0, 36.96587637648612], [1442174976.0, 83840000.0, 37.01093891135794], [1442176704.0, 83860000.0, 37.056045411342495], [1442178432.0, 83880000.0, 37.101195908625925], [1442180160.0, 83900000.0, 37.14639043540991], [1442181888.0, 83920000.0, 37.19162902391189], [1442183616.0, 83940000.0, 37.23691170636513], [1442185344.0, 83960000.0, 37.28223851501851], [1442187072.0, 83980000.0, 37.32760948213665], [1442188800.0, 84000000.0, 37.37302464000001], [1442190528.0, 84020000.0, 37.418484020904636], [1442192256.0, 84040000.0, 37.46398765716249], [1442193984.0, 84060000.0, 37.509535581101154], [1442195712.0, 84080000.0, 37.555127825063956], [1442197440.0, 84100000.0, 37.60076442141011], [1442199168.0, 84120000.0, 37.64644540251444], [1442200896.0, 84140000.0, 37.692170800767585], [1442202624.0, 84160000.0, 37.73794064857603], [1442204352.0, 84180000.0, 37.78375497836189], [1442206080.0, 84200000.0, 37.829613822563196], [1442207808.0, 84220000.0, 37.875517213633664], [1442209536.0, 84240000.0, 37.92146518404277], [1442211264.0, 84260000.0, 37.967457766275906], [1442212992.0, 84280000.0, 38.01349499283413], [1442214720.0, 84300000.0, 38.05957689623429], [1442216448.0, 84320000.0, 38.10570350900918], [1442218176.0, 84340000.0, 38.1518748637072], [1442219904.0, 84360000.0, 38.19809099289273], [1442221632.0, 84380000.0, 38.24435192914582], [1442223360.0, 84400000.0, 38.29065770506239], [1442225088.0, 84420000.0, 38.33700835325423], [1442226816.0, 84440000.0, 38.383403906348875], [1442228544.0, 84460000.0, 38.42984439698965], [1442230272.0, 84480000.0, 38.476329857835864], [1442232000.0, 84500000.0, 38.52286032156248], [1442233728.0, 84520000.0, 38.569435820860456], [1442235456.0, 84540000.0, 38.616056388436476], [1442237184.0, 84560000.0, 38.662722057013056], [1442238912.0, 84580000.0, 38.7094328593287], [1442240640.0, 84600000.0, 38.75618882813761], [1442242368.0, 84620000.0, 38.8029899962099], [1442244096.0, 84640000.0, 38.84983639633161], [1442245824.0, 84660000.0, 38.89672806130449], [1442247552.0, 84680000.0, 38.94366502394635], [1442249280.0, 84700000.0, 38.990647317090726], [1442251008.0, 84720000.0, 39.037674973587], [1442252736.0, 84740000.0, 39.08474802630062], [1442254464.0, 84760000.0, 39.131866508112765], [1442256192.0, 84780000.0, 39.179030451920475], [1442257920.0, 84800000.0, 39.22623989063681], [1442259648.0, 84820000.0, 39.273494857190606], [1442261376.0, 84840000.0, 39.32079538452668], [1442263104.0, 84860000.0, 39.36814150560573], [1442264832.0, 84880000.0, 39.415533253404284], [1442266560.0, 84900000.0, 39.462970660914905], [1442268288.0, 84920000.0, 39.510453761145975], [1442270016.0, 84940000.0, 39.55798258712177], [1442271744.0, 84960000.0, 39.60555717188263], [1442273472.0, 84980000.0, 39.65317754848465], [1442275200.0, 85000000.0, 39.70084375], [1442276928.0, 85020000.0, 39.74855580951668], [1442278656.0, 85040000.0, 39.79631376013862], [1442280384.0, 85060000.0, 39.84411763498579], [1442282112.0, 85080000.0, 39.89196746719399], [1442283840.0, 85100000.0, 39.939863289915095], [1442285568.0, 85120000.0, 39.9878051363168], [1442287296.0, 85140000.0, 40.03579303958279], [1442289024.0, 85160000.0, 40.0838270329128], [1442290752.0, 85180000.0, 40.13190714952241], [1442292480.0, 85200000.0, 40.18003342264318], [1442294208.0, 85220000.0, 40.22820588552278], [1442295936.0, 85240000.0, 40.27642457142464], [1442297664.0, 85260000.0, 40.32468951362838], [1442299392.0, 85280000.0, 40.37300074542944], [1442301120.0, 85300000.0, 40.42135830013928], [1442302848.0, 85320000.0, 40.46976221108546], [1442304576.0, 85340000.0, 40.518212511611395], [1442306304.0, 85360000.0, 40.566709235076516], [1442308032.0, 85380000.0, 40.615252414856386], [1442309760.0, 85400000.0, 40.663842084342384], [1442311488.0, 85420000.0, 40.71247827694208], [1442313216.0, 85440000.0, 40.76116102607891], [1442314944.0, 85460000.0, 40.809890365192366], [1442316672.0, 85480000.0, 40.85866632773807], [1442318400.0, 85500000.0, 40.907488947187524], [1442320128.0, 85520000.0, 40.95635825702827], [1442321856.0, 85540000.0, 41.00527429076399], [1442323584.0, 85560000.0, 41.054237081914295], [1442325312.0, 85580000.0, 41.10324666401494], [1442327040.0, 85600000.0, 41.152303070617606], [1442328768.0, 85620000.0, 41.20140633529006], [1442330496.0, 85640000.0, 41.2505564916162], [1442332224.0, 85660000.0, 41.2997535731959], [1442333952.0, 85680000.0, 41.34899761364503], [1442335680.0, 85700000.0, 41.3982886465957], [1442337408.0, 85720000.0, 41.447626705695924], [1442339136.0, 85740000.0, 41.49701182460991], [1442340864.0, 85760000.0, 41.54644403701784], [1442342592.0, 85780000.0, 41.59592337661598], [1442344320.0, 85800000.0, 41.6454498771168], [1442346048.0, 85820000.0, 41.69502357224873], [1442347776.0, 85840000.0, 41.74464449575625], [1442349504.0, 85860000.0, 41.79431268140015], [1442351232.0, 85880000.0, 41.84402816295704], [1442352960.0, 85900000.0, 41.89379097421989], [1442354688.0, 85920000.0, 41.943601148997615], [1442356416.0, 85940000.0, 41.99345872111521], [1442358144.0, 85960000.0, 42.04336372441395], [1442359872.0, 85980000.0, 42.09331619275109], [1442361600.0, 86000000.0, 42.14331615999999], [1442363328.0, 86020000.0, 42.19336366005029], [1442365056.0, 86040000.0, 42.24345872680753], [1442366784.0, 86060000.0, 42.29360139419362], [1442368512.0, 86080000.0, 42.343791696146475], [1442370240.0, 86100000.0, 42.394029666620085], [1442371968.0, 86120000.0, 42.44431533958476], [1442373696.0, 86140000.0, 42.49464874902684], [1442375424.0, 86160000.0, 42.54502992894874], [1442377152.0, 86180000.0, 42.59545891336929], [1442378880.0, 86200000.0, 42.64593573632318], [1442380608.0, 86220000.0, 42.6964604318615], [1442382336.0, 86240000.0, 42.74703303405137], [1442384064.0, 86260000.0, 42.79765357697606], [1442385792.0, 86280000.0, 42.84832209473516], [1442387520.0, 86300000.0, 42.89903862144431], [1442389248.0, 86320000.0, 42.94980319123534], [1442390976.0, 86340000.0, 43.00061583825635], [1442392704.0, 86360000.0, 43.05147659667151], [1442394432.0, 86380000.0, 43.10238550066134], [1442396160.0, 86400000.0, 43.15334258442242], [1442397888.0, 86420000.0, 43.20434788216751], [1442399616.0, 86440000.0, 43.25540142812575], [1442401344.0, 86460000.0, 43.306503256542335], [1442403072.0, 86480000.0, 43.357653401678675], [1442404800.0, 86500000.0, 43.408851897812504], [1442406528.0, 86520000.0, 43.46009877923766], [1442408256.0, 86540000.0, 43.51139408026432], [1442409984.0, 86560000.0, 43.56273783521879], [1442411712.0, 86580000.0, 43.61413007844357], [1442413440.0, 86600000.0, 43.665570844297605], [1442415168.0, 86620000.0, 43.71706016715587], [1442416896.0, 86640000.0, 43.7685980814096], [1442418624.0, 86660000.0, 43.820184621466446], [1442420352.0, 86680000.0, 43.87181982175011], [1442422080.0, 86700000.0, 43.923503716700694], [1442423808.0, 86720000.0, 43.97523634077449], [1442425536.0, 86740000.0, 44.027017728443994], [1442427264.0, 86760000.0, 44.07884791419812], [1442428992.0, 86780000.0, 44.130726932541954], [1442430720.0, 86800000.0, 44.182654817996784], [1442432448.0, 86820000.0, 44.234631605100404], [1442434176.0, 86840000.0, 44.28665732840662], [1442435904.0, 86860000.0, 44.33873202248574], [1442437632.0, 86880000.0, 44.39085572192425], [1442439360.0, 86900000.0, 44.443028461324886], [1442441088.0, 86920000.0, 44.49525027530685], [1442442816.0, 86940000.0, 44.54752119850549], [1442444544.0, 86960000.0, 44.59984126557247], [1442446272.0, 86980000.0, 44.65221051117589], [1442448000.0, 87000000.0, 44.704628969999966], [1442449728.0, 87020000.0, 44.757096676745476], [1442451456.0, 87040000.0, 44.8096136661293], [1442453184.0, 87060000.0, 44.862179972884675], [1442454912.0, 87080000.0, 44.914795631761315], [1442456640.0, 87100000.0, 44.967460677525125], [1442458368.0, 87120000.0, 45.020175144958316], [1442460096.0, 87140000.0, 45.07293906885963], [1442461824.0, 87160000.0, 45.125752484043915], [1442463552.0, 87180000.0, 45.17861542534257], [1442465280.0, 87200000.0, 45.23152792760322], [1442467008.0, 87220000.0, 45.28449002568983], [1442468736.0, 87240000.0, 45.337501754482844], [1442470464.0, 87260000.0, 45.39056314887899], [1442472192.0, 87280000.0, 45.44367424379129], [1442473920.0, 87300000.0, 45.49683507414932], [1442475648.0, 87320000.0, 45.55004567489881], [1442477376.0, 87340000.0, 45.60330608100211], [1442479104.0, 87360000.0, 45.65661632743777], [1442480832.0, 87380000.0, 45.7099764492007], [1442482560.0, 87400000.0, 45.763386481302405], [1442484288.0, 87420000.0, 45.81684645877059], [1442486016.0, 87440000.0, 45.870356416649386], [1442487744.0, 87460000.0, 45.92391638999946], [1442489472.0, 87480000.0, 45.977526413897664], [1442491200.0, 87500000.0, 46.0311865234375], [1442492928.0, 87520000.0, 46.08489675372871], [1442494656.0, 87540000.0, 46.13865713989744], [1442496384.0, 87560000.0, 46.192467717086416], [1442498112.0, 87580000.0, 46.24632852045461], [1442499840.0, 87600000.0, 46.30023958517759], [1442501568.0, 87620000.0, 46.354200946447236], [1442503296.0, 87640000.0, 46.4082126394718], [1442505024.0, 87660000.0, 46.46227469947622], [1442506752.0, 87680000.0, 46.51638716170162], [1442508480.0, 87700000.0, 46.57055006140569], [1442510208.0, 87720000.0, 46.624763433862604], [1442511936.0, 87740000.0, 46.679027314362855], [1442513664.0, 87760000.0, 46.733341738213596], [1442515392.0, 87780000.0, 46.787706740738265], [1442517120.0, 87800000.0, 46.842122357276786], [1442518848.0, 87820000.0, 46.89658862318568], [1442520576.0, 87840000.0, 46.95110557383782], [1442522304.0, 87860000.0, 47.00567324462254], [1442524032.0, 87880000.0, 47.0602916709458], [1442525760.0, 87900000.0, 47.11496088822988], [1442527488.0, 87920000.0, 47.16968093191369], [1442529216.0, 87940000.0, 47.22445183745254], [1442530944.0, 87960000.0, 47.279273640318195], [1442532672.0, 87980000.0, 47.3341463759991], [1442534400.0, 88000000.0, 47.38907008000002], [1442536128.0, 88020000.0, 47.44404478784228], [1442537856.0, 88040000.0, 47.49907053506381], [1442539584.0, 88060000.0, 47.554147357218916], [1442541312.0, 88080000.0, 47.609275289878546], [1442543040.0, 88100000.0, 47.66445436863011], [1442544768.0, 88120000.0, 47.71968462907748], [1442546496.0, 88140000.0, 47.77496610684123], [1442548224.0, 88160000.0, 47.830298837558324], [1442549952.0, 88180000.0, 47.88568285688224], [1442551680.0, 88200000.0, 47.9411182004832], [1442553408.0, 88220000.0, 47.996604904047736], [1442555136.0, 88240000.0, 48.052143003279134], [1442556864.0, 88260000.0, 48.107732533897064], [1442558592.0, 88280000.0, 48.16337353163781], [1442560320.0, 88300000.0, 48.2190660322543], [1442562048.0, 88320000.0, 48.27481007151595], [1442563776.0, 88340000.0, 48.33060568520867], [1442565504.0, 88360000.0, 48.38645290913516], [1442567232.0, 88380000.0, 48.44235177911445], [1442568960.0, 88400000.0, 48.49830233098239], [1442570688.0, 88420000.0, 48.55430460059123], [1442572416.0, 88440000.0, 48.61035862380983], [1442574144.0, 88460000.0, 48.66646443652377], [1442575872.0, 88480000.0, 48.722622074635105], [1442577600.0, 88500000.0, 48.77883157406248], [1442579328.0, 88520000.0, 48.8350929707413], [1442581056.0, 88540000.0, 48.891406300623345], [1442582784.0, 88560000.0, 48.94777159967725], [1442584512.0, 88580000.0, 49.00418890388811], [1442586240.0, 88600000.0, 49.060658249257585], [1442587968.0, 88620000.0, 49.11717967180419], [1442589696.0, 88640000.0, 49.173753207562854], [1442591424.0, 88660000.0, 49.23037889258518], [1442593152.0, 88680000.0, 49.28705676293951], [1442594880.0, 88700000.0, 49.343786854710686], [1442596608.0, 88720000.0, 49.40056920400032], [1442598336.0, 88740000.0, 49.457403846926596], [1442600064.0, 88760000.0, 49.51429081962427], [1442601792.0, 88780000.0, 49.57123015824498], [1442603520.0, 88800000.0, 49.62822189895683], [1442605248.0, 88820000.0, 49.68526607794455], [1442606976.0, 88840000.0, 49.74236273140978], [1442608704.0, 88860000.0, 49.79951189557053], [1442610432.0, 88880000.0, 49.85671360666177], [1442612160.0, 88900000.0, 49.91396790093492], [1442613888.0, 88920000.0, 49.97127481465812], [1442615616.0, 88940000.0, 50.028634384116366], [1442617344.0, 88960000.0, 50.08604664561116], [1442619072.0, 88980000.0, 50.1435116354607], [1442620800.0, 89000000.0, 50.20102939000001], [1442622528.0, 89020000.0, 50.25859994558068], [1442624256.0, 89040000.0, 50.316223338571135], [1442625984.0, 89060000.0, 50.37389960535641], [1442627712.0, 89080000.0, 50.431628782338194], [1442629440.0, 89100000.0, 50.48941090593512], [1442631168.0, 89120000.0, 50.547246012582285], [1442632896.0, 89140000.0, 50.60513413873163], [1442634624.0, 89160000.0, 50.663075320851874], [1442636352.0, 89180000.0, 50.72106959542833], [1442638080.0, 89200000.0, 50.7791169989632], [1442639808.0, 89220000.0, 50.83721756797531], [1442641536.0, 89240000.0, 50.8953713390002], [1442643264.0, 89260000.0, 50.95357834859034], [1442644992.0, 89280000.0, 51.011838633314774], [1442646720.0, 89300000.0, 51.070152229759294], [1442648448.0, 89320000.0, 51.12851917452662], [1442650176.0, 89340000.0, 51.18693950423602], [1442651904.0, 89360000.0, 51.245413255523765], [1442653632.0, 89380000.0, 51.30394046504267], [1442655360.0, 89400000.0, 51.36252116946239], [1442657088.0, 89420000.0, 51.42115540546947], [1442658816.0, 89440000.0, 51.479843209767125], [1442660544.0, 89460000.0, 51.538584619075294], [1442662272.0, 89480000.0, 51.59737967013091], [1442664000.0, 89500000.0, 51.65622839968748], [1442665728.0, 89520000.0, 51.71513084451549], [1442667456.0, 89540000.0, 51.77408704140211], [1442669184.0, 89560000.0, 51.83309702715129], [1442670912.0, 89580000.0, 51.89216083858394], [1442672640.0, 89600000.0, 51.95127851253762], [1442674368.0, 89620000.0, 52.01045008586674], [1442676096.0, 89640000.0, 52.06967559544265], [1442677824.0, 89660000.0, 52.128955078153325], [1442679552.0, 89680000.0, 52.188288570903794], [1442681280.0, 89700000.0, 52.24767611061572], [1442683008.0, 89720000.0, 52.307117734227646], [1442684736.0, 89740000.0, 52.36661347869507], [1442686464.0, 89760000.0, 52.42616338099021], [1442688192.0, 89780000.0, 52.485767478102105], [1442689920.0, 89800000.0, 52.545425807036814], [1442691648.0, 89820000.0, 52.605138404817026], [1442693376.0, 89840000.0, 52.66490530848254], [1442695104.0, 89860000.0, 52.72472655508978], [1442696832.0, 89880000.0, 52.784602181712124], [1442698560.0, 89900000.0, 52.844532225439906], [1442700288.0, 89920000.0, 52.90451672338022], [1442702016.0, 89940000.0, 52.964555712657], [1442703744.0, 89960000.0, 53.02464923041128], [1442705472.0, 89980000.0, 53.084797313800685], [1442707200.0, 90000000.0, 53.145], [1442708928.0, 90020000.0, 53.20525732620073], [1442710656.0, 90040000.0, 53.26556932961126], [1442712384.0, 90060000.0, 53.32593604745704], [1442714112.0, 90080000.0, 53.38635751698023], [1442715840.0, 90100000.0, 53.44683377544009], [1442717568.0, 90120000.0, 53.50736486011265], [1442719296.0, 90140000.0, 53.567950808290824], [1442721024.0, 90160000.0, 53.62859165728463], [1442722752.0, 90180000.0, 53.689287444420856], [1442724480.0, 90200000.0, 53.75003820704318], [1442726208.0, 90220000.0, 53.810843982512424], [1442727936.0, 90240000.0, 53.87170480820607], [1442729664.0, 90260000.0, 53.932620721518816], [1442731392.0, 90280000.0, 53.993591759862085], [1442733120.0, 90300000.0, 54.05461796066428], [1442734848.0, 90320000.0, 54.1156993613709], [1442736576.0, 90340000.0, 54.17683599944424], [1442738304.0, 90360000.0, 54.238027912363556], [1442740032.0, 90380000.0, 54.29927513762523], [1442741760.0, 90400000.0, 54.360577712742376], [1442743488.0, 90420000.0, 54.42193567524531], [1442745216.0, 90440000.0, 54.48334906268116], [1442746944.0, 90460000.0, 54.54481791261401], [1442748672.0, 90480000.0, 54.60634226262511], [1442750400.0, 90500000.0, 54.66792215031252], [1442752128.0, 90520000.0, 54.7295576132913], [1442753856.0, 90540000.0, 54.79124868919364], [1442755584.0, 90560000.0, 54.85299541566853], [1442757312.0, 90580000.0, 54.91479783038217], [1442759040.0, 90600000.0, 54.976655971017614], [1442760768.0, 90620000.0, 55.0385698752749], [1442762496.0, 90640000.0, 55.10053958087125], [1442764224.0, 90660000.0, 55.16256512554074], [1442765952.0, 90680000.0, 55.22464654703445], [1442767680.0, 90700000.0, 55.286783883120705], [1442769408.0, 90720000.0, 55.34897717158455], [1442771136.0, 90740000.0, 55.41122645022835], [1442772864.0, 90760000.0, 55.473531756871296], [1442774592.0, 90780000.0, 55.53589312934962], [1442776320.0, 90800000.0, 55.59831060551681], [1442778048.0, 90820000.0, 55.66078422324317], [1442779776.0, 90840000.0, 55.7233140204161], [1442781504.0, 90860000.0, 55.785900034940184], [1442783232.0, 90880000.0, 55.84854230473688], [1442784960.0, 90900000.0, 55.911240867744894], [1442786688.0, 90920000.0, 55.97399576191985], [1442788416.0, 90940000.0, 56.03680702523444], [1442790144.0, 90960000.0, 56.09967469567859], [1442791872.0, 90980000.0, 56.16259881125913], [1442793600.0, 91000000.0, 56.22557941], [1442795328.0, 91020000.0, 56.288616529942324], [1442797056.0, 91040000.0, 56.35171020914418], [1442798784.0, 91060000.0, 56.414860485680876], [1442800512.0, 91080000.0, 56.47806739764472], [1442802240.0, 91100000.0, 56.54133098314507], [1442803968.0, 91120000.0, 56.6046512803086], [1442805696.0, 91140000.0, 56.66802832727888], [1442807424.0, 91160000.0, 56.731462162216594], [1442809152.0, 91180000.0, 56.79495282329973], [1442810880.0, 91200000.0, 56.858500348723176], [1442812608.0, 91220000.0, 56.92210477669916], [1442814336.0, 91240000.0, 56.985766145456815], [1442816064.0, 91260000.0, 57.04948449324248], [1442817792.0, 91280000.0, 57.11325985831981], [1442819520.0, 91300000.0, 57.177092278969326], [1442821248.0, 91320000.0, 57.24098179348877], [1442822976.0, 91340000.0, 57.3049284401932], [1442824704.0, 91360000.0, 57.36893225741455], [1442826432.0, 91380000.0, 57.432993283502185], [1442828160.0, 91400000.0, 57.49711155682242], [1442829888.0, 91420000.0, 57.56128711575875], [1442831616.0, 91440000.0, 57.625519998711994], [1442833344.0, 91460000.0, 57.68981024409998], [1442835072.0, 91480000.0, 57.75415789035771], [1442836800.0, 91500000.0, 57.81856297593752], [1442838528.0, 91520000.0, 57.8830255393087], [1442840256.0, 91540000.0, 57.94754561895795], [1442841984.0, 91560000.0, 58.01212325338902], [1442843712.0, 91580000.0, 58.076758481122816], [1442845440.0, 91600000.0, 58.14145134069762], [1442847168.0, 91620000.0, 58.20620187066871], [1442848896.0, 91640000.0, 58.27101010960864], [1442850624.0, 91660000.0, 58.33587609610729], [1442852352.0, 91680000.0, 58.40079986877154], [1442854080.0, 91700000.0, 58.46578146622569], [1442855808.0, 91720000.0, 58.53082092711113], [1442857536.0, 91740000.0, 58.595918290086416], [1442859264.0, 91760000.0, 58.66107359382757], [1442860992.0, 91780000.0, 58.72628687702759], [1442862720.0, 91800000.0, 58.791558178396784], [1442864448.0, 91820000.0, 58.85688753666284], [1442866176.0, 91840000.0, 58.92227499057045], [1442867904.0, 91860000.0, 58.98772057888177], [1442869632.0, 91880000.0, 59.0532243403761], [1442871360.0, 91900000.0, 59.11878631384989], [1442873088.0, 91920000.0, 59.1844065381171], [1442874816.0, 91940000.0, 59.25008505200874], [1442876544.0, 91960000.0, 59.315821894373116], [1442878272.0, 91980000.0, 59.38161710407592], [1442880000.0, 92000000.0, 59.447470719999984], [1442881728.0, 92020000.0, 59.51338278104552], [1442883456.0, 92040000.0, 59.57935332612994], [1442885184.0, 92060000.0, 59.64538239418791], [1442886912.0, 92080000.0, 59.71147002417157], [1442888640.0, 92100000.0, 59.77761625505013], [1442890368.0, 92120000.0, 59.84382112581016], [1442892096.0, 92140000.0, 59.91008467545567], [1442893824.0, 92160000.0, 59.97640694300775], [1442895552.0, 92180000.0, 60.04278796750501], [1442897280.0, 92200000.0, 60.109227788003224], [1442899008.0, 92220000.0, 60.17572644357546], [1442900736.0, 92240000.0, 60.24228397331229], [1442902464.0, 92260000.0, 60.308900416321436], [1442904192.0, 92280000.0, 60.37557581172793], [1442905920.0, 92300000.0, 60.44231019867432], [1442907648.0, 92320000.0, 60.50910361632025], [1442909376.0, 92340000.0, 60.57595610384296], [1442911104.0, 92360000.0, 60.6428677004368], [1442912832.0, 92380000.0, 60.70983844531354], [1442914560.0, 92400000.0, 60.7768683777024], [1442916288.0, 92420000.0, 60.84395753684984], [1442918016.0, 92440000.0, 60.911105962019626], [1442919744.0, 92460000.0, 60.9783136924931], [1442921472.0, 92480000.0, 61.04558076756871], [1442923200.0, 92500000.0, 61.1129072265625], [1442924928.0, 92520000.0, 61.18029310880775], [1442926656.0, 92540000.0, 61.247738453655074], [1442928384.0, 92560000.0, 61.315243300472666], [1442930112.0, 92580000.0, 61.38280768864584], [1442931840.0, 92600000.0, 61.45043165757759], [1442933568.0, 92620000.0, 61.51811524668808], [1442935296.0, 92640000.0, 61.58585849541484], [1442937024.0, 92660000.0, 61.65366144321305], [1442938752.0, 92680000.0, 61.72152412955507], [1442940480.0, 92700000.0, 61.789446593930684], [1442942208.0, 92720000.0, 61.85742887584724], [1442943936.0, 92740000.0, 61.92547101482929], [1442945664.0, 92760000.0, 61.99357305041903], [1442947392.0, 92780000.0, 62.06173502217591], [1442949120.0, 92800000.0, 62.12995696967677], [1442950848.0, 92820000.0, 62.19823893251611], [1442952576.0, 92840000.0, 62.26658095030566], [1442954304.0, 92860000.0, 62.33498306267457], [1442956032.0, 92880000.0, 62.40344530926964], [1442957760.0, 92900000.0, 62.47196772975487], [1442959488.0, 92920000.0, 62.540550363811924], [1442961216.0, 92940000.0, 62.609193251139786], [1442962944.0, 92960000.0, 62.67789643145483], [1442964672.0, 92980000.0, 62.746659944491135], [1442966400.0, 93000000.0, 62.815483830000026], [1442968128.0, 93020000.0, 62.88436812775032], [1442969856.0, 93040000.0, 62.95331287752845], [1442971584.0, 93060000.0, 63.02231811913814], [1442973312.0, 93080000.0, 63.09138389240079], [1442975040.0, 93100000.0, 63.16051023715511], [1442976768.0, 93120000.0, 63.229697193257316], [1442978496.0, 93140000.0, 63.29894480058127], [1442980224.0, 93160000.0, 63.36825309901816], [1442981952.0, 93180000.0, 63.43762212847669], [1442983680.0, 93200000.0, 63.5070519288832], [1442985408.0, 93220000.0, 63.57654254018137], [1442987136.0, 93240000.0, 63.646094002332575], [1442988864.0, 93260000.0, 63.71570635531551], [1442990592.0, 93280000.0, 63.78537963912643], [1442992320.0, 93300000.0, 63.85511389377929], [1442994048.0, 93320000.0, 63.92490915930538], [1442995776.0, 93340000.0, 63.99476547575352], [1442997504.0, 93360000.0, 64.0646828831902], [1442999232.0, 93380000.0, 64.13466142169929], [1443000960.0, 93400000.0, 64.2047011313824], [1443002688.0, 93420000.0, 64.27480205235847], [1443004416.0, 93440000.0, 64.34496422476406], [1443006144.0, 93460000.0, 64.41518768875342], [1443007872.0, 93480000.0, 64.48547248449816], [1443009600.0, 93500000.0, 64.55581865218748], [1443011328.0, 93520000.0, 64.62622623202834], [1443013056.0, 93540000.0, 64.696695264245], [1443014784.0, 93560000.0, 64.76722578907949], [1443016512.0, 93580000.0, 64.83781784679135], [1443018240.0, 93600000.0, 64.90847147765757], [1443019968.0, 93620000.0, 64.97918672197302], [1443021696.0, 93640000.0, 65.0499636200499], [1443023424.0, 93660000.0, 65.12080221221801], [1443025152.0, 93680000.0, 65.19170253882496], [1443026880.0, 93700000.0, 65.26266464023568], [1443028608.0, 93720000.0, 65.33368855683295], [1443030336.0, 93740000.0, 65.40477432901704], [1443032064.0, 93760000.0, 65.4759219972057], [1443033792.0, 93780000.0, 65.54713160183462], [1443035520.0, 93800000.0, 65.61840318335685], [1443037248.0, 93820000.0, 65.68973678224299], [1443038976.0, 93840000.0, 65.76113243898162], [1443040704.0, 93860000.0, 65.83259019407856], [1443042432.0, 93880000.0, 65.9041100880576], [1443044160.0, 93900000.0, 65.97569216145993], [1443045888.0, 93920000.0, 66.04733645484438], [1443047616.0, 93940000.0, 66.11904300878761], [1443049344.0, 93960000.0, 66.1908118638838], [1443051072.0, 93980000.0, 66.26264306074472], [1443052800.0, 94000000.0, 66.33453664000001], [1443054528.0, 94020000.0, 66.40649264229671], [1443056256.0, 94040000.0, 66.47851110829977], [1443057984.0, 94060000.0, 66.55059207869164], [1443059712.0, 94080000.0, 66.62273559417243], [1443061440.0, 94100000.0, 66.6949416954601], [1443063168.0, 94120000.0, 66.76721042329014], [1443064896.0, 94140000.0, 66.83954181841567], [1443066624.0, 94160000.0, 66.91193592160771], [1443068352.0, 94180000.0, 66.98439277365476], [1443070080.0, 94200000.0, 67.0569124153632], [1443071808.0, 94220000.0, 67.12949488755696], [1443073536.0, 94240000.0, 67.20214023107765], [1443075264.0, 94260000.0, 67.27484848678479], [1443076992.0, 94280000.0, 67.34761969555541], [1443078720.0, 94300000.0, 67.4204538982843], [1443080448.0, 94320000.0, 67.49335113588407], [1443082176.0, 94340000.0, 67.56631144928485], [1443083904.0, 94360000.0, 67.63933487943478], [1443085632.0, 94380000.0, 67.71242146729952], [1443087360.0, 94400000.0, 67.78557125386239], [1443089088.0, 94420000.0, 67.85878428012471], [1443090816.0, 94440000.0, 67.93206058710537], [1443092544.0, 94460000.0, 68.00540021584092], [1443094272.0, 94480000.0, 68.07880320738596], [1443096000.0, 94500000.0, 68.15226960281247], [1443097728.0, 94520000.0, 68.22579944321053], [1443099456.0, 94540000.0, 68.29939276968776], [1443101184.0, 94560000.0, 68.37304962336952], [1443102912.0, 94580000.0, 68.44677004539918], [1443104640.0, 94600000.0, 68.52055407693766], [1443106368.0, 94620000.0, 68.59440175916356], [1443108096.0, 94640000.0, 68.6683131332737], [1443109824.0, 94660000.0, 68.74228824048215], [1443111552.0, 94680000.0, 68.81632712202124], [1443113280.0, 94700000.0, 68.89042981914072], [1443115008.0, 94720000.0, 68.96459637310828], [1443116736.0, 94740000.0, 69.03882682520951], [1443118464.0, 94760000.0, 69.11312121674766], [1443120192.0, 94780000.0, 69.18747958904373], [1443121920.0, 94800000.0, 69.26190198343683], [1443123648.0, 94820000.0, 69.33638844128346], [1443125376.0, 94840000.0, 69.41093900395836], [1443127104.0, 94860000.0, 69.48555371285383], [1443128832.0, 94880000.0, 69.56023260937995], [1443130560.0, 94900000.0, 69.63497573496491], [1443132288.0, 94920000.0, 69.70978313105445], [1443134016.0, 94940000.0, 69.78465483911226], [1443135744.0, 94960000.0, 69.8595909006199], [1443137472.0, 94980000.0, 69.93459135707671], [1443139200.0, 95000000.0, 70.00965625], [1443140928.0, 95020000.0, 70.08478562092476], [1443142656.0, 95040000.0, 70.15997951140389], [1443144384.0, 95060000.0, 70.23523796300827], [1443146112.0, 95080000.0, 70.31056101732648], [1443147840.0, 95100000.0, 70.38594871596507], [1443149568.0, 95120000.0, 70.4614011005485], [1443151296.0, 95140000.0, 70.53691821271886], [1443153024.0, 95160000.0, 70.61250009413648], [1443154752.0, 95180000.0, 70.6881467864793], [1443156480.0, 95200000.0, 70.76385833144319], [1443158208.0, 95220000.0, 70.83963477074207], [1443159936.0, 95240000.0, 70.91547614610752], [1443161664.0, 95260000.0, 70.99138249928924], [1443163392.0, 95280000.0, 71.06735387205475], [1443165120.0, 95300000.0, 71.14339030618926], [1443166848.0, 95320000.0, 71.21949184349634], [1443168576.0, 95340000.0, 71.29565852579707], [1443170304.0, 95360000.0, 71.3718903949306], [1443172032.0, 95380000.0, 71.44818749275406], [1443173760.0, 95400000.0, 71.52454986114236], [1443175488.0, 95420000.0, 71.60097754198856], [1443177216.0, 95440000.0, 71.6774705772034], [1443178944.0, 95460000.0, 71.75402900871565], [1443180672.0, 95480000.0, 71.83065287847214], [1443182400.0, 95500000.0, 71.90734222843754], [1443184128.0, 95520000.0, 71.98409710059433], [1443185856.0, 95540000.0, 72.0609175369433], [1443187584.0, 95560000.0, 72.13780357950277], [1443189312.0, 95580000.0, 72.21475527030941], [1443191040.0, 95600000.0, 72.2917726514176], [1443192768.0, 95620000.0, 72.36885576489973], [1443194496.0, 95640000.0, 72.44600465284628], [1443196224.0, 95660000.0, 72.52321935736559], [1443197952.0, 95680000.0, 72.60049992058391], [1443199680.0, 95700000.0, 72.67784638464572], [1443201408.0, 95720000.0, 72.75525879171319], [1443203136.0, 95740000.0, 72.83273718396677], [1443204864.0, 95760000.0, 72.91028160360473], [1443206592.0, 95780000.0, 72.98789209284324], [1443208320.0, 95800000.0, 73.06556869391679], [1443210048.0, 95820000.0, 73.14331144907761], [1443211776.0, 95840000.0, 73.22112040059592], [1443213504.0, 95860000.0, 73.29899559076021], [1443215232.0, 95880000.0, 73.37693706187672], [1443216960.0, 95900000.0, 73.45494485626989], [1443218688.0, 95920000.0, 73.5330190162821], [1443220416.0, 95940000.0, 73.61115958427368], [1443222144.0, 95960000.0, 73.68936660262324], [1443223872.0, 95980000.0, 73.7676401137272], [1443225600.0, 96000000.0, 73.84598016], [1443227328.0, 96020000.0, 73.92438678387435], [1443229056.0, 96040000.0, 74.0028600278008], [1443230784.0, 96060000.0, 74.08139993424811], [1443232512.0, 96080000.0, 74.16000654570294], [1443234240.0, 96100000.0, 74.23867990467008], [1443235968.0, 96120000.0, 74.31742005367245], [1443237696.0, 96140000.0, 74.39622703525092], [1443239424.0, 96160000.0, 74.47510089196442], [1443241152.0, 96180000.0, 74.55404166639018], [1443242880.0, 96200000.0, 74.63304940112316], [1443244608.0, 96220000.0, 74.71212413877679], [1443246336.0, 96240000.0, 74.79126592198227], [1443248064.0, 96260000.0, 74.87047479338894], [1443249792.0, 96280000.0, 74.94975079566444], [1443251520.0, 96300000.0, 75.02909397149433], [1443253248.0, 96320000.0, 75.10850436358221], [1443254976.0, 96340000.0, 75.18798201465006], [1443256704.0, 96360000.0, 75.26752696743758], [1443258432.0, 96380000.0, 75.34713926470303], [1443260160.0, 96400000.0, 75.42681894922242], [1443261888.0, 96420000.0, 75.50656606379], [1443263616.0, 96440000.0, 75.58638065121825], [1443265344.0, 96460000.0, 75.6662627543376], [1443267072.0, 96480000.0, 75.74621241599674], [1443268800.0, 96500000.0, 75.82622967906251], [1443270528.0, 96520000.0, 75.90631458641973], [1443272256.0, 96540000.0, 75.98646718097157], [1443273984.0, 96560000.0, 76.06668750563928], [1443275712.0, 96580000.0, 76.14697560336204], [1443277440.0, 96600000.0, 76.22733151709761], [1443279168.0, 96620000.0, 76.30775528982154], [1443280896.0, 96640000.0, 76.38824696452768], [1443282624.0, 96660000.0, 76.46880658422813], [1443284352.0, 96680000.0, 76.54943419195297], [1443286080.0, 96700000.0, 76.63012983075068], [1443287808.0, 96720000.0, 76.71089354368777], [1443289536.0, 96740000.0, 76.79172537384885], [1443291264.0, 96760000.0, 76.872625364337], [1443292992.0, 96780000.0, 76.95359355827324], [1443294720.0, 96800000.0, 77.03462999879677], [1443296448.0, 96820000.0, 77.11573472906528], [1443298176.0, 96840000.0, 77.19690779225428], [1443299904.0, 96860000.0, 77.27814923155782], [1443301632.0, 96880000.0, 77.35945909018793], [1443303360.0, 96900000.0, 77.44083741137487], [1443305088.0, 96920000.0, 77.52228423836735], [1443306816.0, 96940000.0, 77.60379961443199], [1443308544.0, 96960000.0, 77.68538358285376], [1443310272.0, 96980000.0, 77.76703618693598], [1443312000.0, 97000000.0, 77.84875746999995], [1443313728.0, 97020000.0, 77.93054747538557], [1443315456.0, 97040000.0, 78.01240624645058], [1443317184.0, 97060000.0, 78.09433382657114], [1443318912.0, 97080000.0, 78.17633025914179], [1443320640.0, 97100000.0, 78.25839558757514], [1443322368.0, 97120000.0, 78.340529855302], [1443324096.0, 97140000.0, 78.42273310577173], [1443325824.0, 97160000.0, 78.50500538245159], [1443327552.0, 97180000.0, 78.58734672882744], [1443329280.0, 97200000.0, 78.66975718840322], [1443331008.0, 97220000.0, 78.75223680470108], [1443332736.0, 97240000.0, 78.83478562126173], [1443334464.0, 97260000.0, 78.91740368164386], [1443336192.0, 97280000.0, 79.00009102942457], [1443337920.0, 97300000.0, 79.08284770819932], [1443339648.0, 97320000.0, 79.16567376158169], [1443341376.0, 97340000.0, 79.24856923320378], [1443343104.0, 97360000.0, 79.33153416671585], [1443344832.0, 97380000.0, 79.41456860578639], [1443346560.0, 97400000.0, 79.49767259410241], [1443348288.0, 97420000.0, 79.58084617536908], [1443350016.0, 97440000.0, 79.66408939330988], [1443351744.0, 97460000.0, 79.74740229166673], [1443353472.0, 97480000.0, 79.83078491419974], [1443355200.0, 97500000.0, 79.9142373046875], [1443356928.0, 97520000.0, 79.99775950692678], [1443358656.0, 97540000.0, 80.0813515647327], [1443360384.0, 97560000.0, 80.16501352193889], [1443362112.0, 97580000.0, 80.24874542239708], [1443363840.0, 97600000.0, 80.33254730997758], [1443365568.0, 97620000.0, 80.41641922856893], [1443367296.0, 97640000.0, 80.50036122207786], [1443369024.0, 97660000.0, 80.58437333442988], [1443370752.0, 97680000.0, 80.66845560956853], [1443372480.0, 97700000.0, 80.75260809145568], [1443374208.0, 97720000.0, 80.8368308240719], [1443375936.0, 97740000.0, 80.92112385141574], [1443377664.0, 97760000.0, 81.00548721750447], [1443379392.0, 97780000.0, 81.08992096637355], [1443381120.0, 97800000.0, 81.17442514207677], [1443382848.0, 97820000.0, 81.25899978868658], [1443384576.0, 97840000.0, 81.34364495029351], [1443386304.0, 97860000.0, 81.4283606710066], [1443388032.0, 97880000.0, 81.5131469949535], [1443389760.0, 97900000.0, 81.59800396627985], [1443391488.0, 97920000.0, 81.68293162915018], [1443393216.0, 97940000.0, 81.76793002774701], [1443394944.0, 97960000.0, 81.85299920627146], [1443396672.0, 97980000.0, 81.93813920894317], [1443398400.0, 98000000.0, 82.02335008000004], [1443400128.0, 98020000.0, 82.10863186369835], [1443401856.0, 98040000.0, 82.19398460431312], [1443403584.0, 98060000.0, 82.27940834613739], [1443405312.0, 98080000.0, 82.36490313348305], [1443407040.0, 98100000.0, 82.45046901068011], [1443408768.0, 98120000.0, 82.53610602207716], [1443410496.0, 98140000.0, 82.62181421204131], [1443412224.0, 98160000.0, 82.70759362495802], [1443413952.0, 98180000.0, 82.79344430523112], [1443415680.0, 98200000.0, 82.87936629728321], [1443417408.0, 98220000.0, 82.965359645555], [1443419136.0, 98240000.0, 83.05142439450599], [1443420864.0, 98260000.0, 83.13756058861397], [1443422592.0, 98280000.0, 83.22376827237508], [1443424320.0, 98300000.0, 83.31004749030431], [1443426048.0, 98320000.0, 83.39639828693484], [1443427776.0, 98340000.0, 83.48282070681836], [1443429504.0, 98360000.0, 83.56931479452525], [1443431232.0, 98380000.0, 83.65588059464415], [1443432960.0, 98400000.0, 83.74251815178239], [1443434688.0, 98420000.0, 83.82922751056573], [1443436416.0, 98440000.0, 83.9160087156383], [1443438144.0, 98460000.0, 84.00286181166307], [1443439872.0, 98480000.0, 84.0897868433212], [1443441600.0, 98500000.0, 84.17678385531248], [1443443328.0, 98520000.0, 84.26385289235539], [1443445056.0, 98540000.0, 84.35099399918663], [1443446784.0, 98560000.0, 84.43820722056174], [1443448512.0, 98580000.0, 84.52549260125457], [1443450240.0, 98600000.0, 84.61285018605757], [1443451968.0, 98620000.0, 84.70028001978186], [1443453696.0, 98640000.0, 84.78778214725693], [1443455424.0, 98660000.0, 84.87535661333084], [1443457152.0, 98680000.0, 84.96300346287039], [1443458880.0, 98700000.0, 85.05072274076068], [1443460608.0, 98720000.0, 85.1385144919056], [1443462336.0, 98740000.0, 85.22637876122747], [1443464064.0, 98760000.0, 85.31431559366716], [1443465792.0, 98780000.0, 85.40232503418424], [1443467520.0, 98800000.0, 85.49040712775682], [1443469248.0, 98820000.0, 85.57856191938143], [1443470976.0, 98840000.0, 85.66678945407348], [1443472704.0, 98860000.0, 85.75508977686658], [1443474432.0, 98880000.0, 85.84346293281345], [1443476160.0, 98900000.0, 85.93190896698493], [1443477888.0, 98920000.0, 86.02042792447061], [1443479616.0, 98940000.0, 86.10901985037886], [1443481344.0, 98960000.0, 86.19768478983644], [1443483072.0, 98980000.0, 86.28642278798876], [1443484800.0, 99000000.0, 86.37523389000002], [1443486528.0, 99020000.0, 86.46411814105275], [1443488256.0, 99040000.0, 86.55307558634841], [1443489984.0, 99060000.0, 86.6421062711069], [1443491712.0, 99080000.0, 86.73121024056665], [1443493440.0, 99100000.0, 86.8203875399851], [1443495168.0, 99120000.0, 86.90963821463798], [1443496896.0, 99140000.0, 86.9989623098197], [1443498624.0, 99160000.0, 87.08835987084358], [1443500352.0, 99180000.0, 87.17783094304119], [1443502080.0, 99200000.0, 87.26737557176318], [1443503808.0, 99220000.0, 87.3569938023786], [1443505536.0, 99240000.0, 87.44668568027507], [1443507264.0, 99260000.0, 87.53645125085924], [1443508992.0, 99280000.0, 87.62629055955605], [1443510720.0, 99300000.0, 87.71620365180928], [1443512448.0, 99320000.0, 87.80619057308152], [1443514176.0, 99340000.0, 87.89625136885368], [1443515904.0, 99360000.0, 87.98638608462585], [1443517632.0, 99380000.0, 88.07659476591635], [1443519360.0, 99400000.0, 88.16687745826239], [1443521088.0, 99420000.0, 88.25723420721994], [1443522816.0, 99440000.0, 88.3476650583636], [1443524544.0, 99460000.0, 88.43817005728657], [1443526272.0, 99480000.0, 88.52874924960099], [1443528000.0, 99500000.0, 88.61940268093747], [1443529728.0, 99520000.0, 88.71013039694557], [1443531456.0, 99540000.0, 88.80093244329339], [1443533184.0, 99560000.0, 88.89180886566778], [1443534912.0, 99580000.0, 88.98275970977441], [1443536640.0, 99600000.0, 89.07378502133766], [1443538368.0, 99620000.0, 89.16488484610042], [1443540096.0, 99640000.0, 89.25605922982476], [1443541824.0, 99660000.0, 89.34730821829099], [1443543552.0, 99680000.0, 89.43863185729866], [1443545280.0, 99700000.0, 89.53003019266575], [1443547008.0, 99720000.0, 89.6215032702289], [1443548736.0, 99740000.0, 89.71305113584395], [1443550464.0, 99760000.0, 89.8046738353851], [1443552192.0, 99780000.0, 89.89637141474539], [1443553920.0, 99800000.0, 89.98814391983682], [1443555648.0, 99820000.0, 90.07999139658989], [1443557376.0, 99840000.0, 90.17191389095422], [1443559104.0, 99860000.0, 90.2639114488979], [1443560832.0, 99880000.0, 90.3559841164078], [1443562560.0, 99900000.0, 90.44813193948993], [1443564288.0, 99920000.0, 90.54035496416871], [1443566016.0, 99940000.0, 90.6326532364875], [1443567744.0, 99960000.0, 90.72502680250857], [1443569472.0, 99980000.0, 90.81747570831276]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/app/demo/data/runs.json b/tensorflow/tensorboard/app/demo/data/runs.json new file mode 100644 index 0000000000..3ee46d9ef1 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/runs.json @@ -0,0 +1,542 @@ +{ + "cubic_function_with_a_very_long_name_how_will_it_truncate": { + "images": [], + "histograms": [], + "scalars": [ + "electric/raihu", + "electric/voltorb", + "fire/arcanine", + "fire/charmander", + "fire/magmar", + "grass/bulbasaur", + "grass/ivysaur", + "grass/venasaur", + "ground/diglet", + "psychic/abra", + "psychic/mew", + "psychic/mewtwo", + "water/goldeen", + "water/lapras", + "water/psychic/starmie", + "water/squirtle", + "water/tentacool" + ] + }, + "sin": { + "graph": true, + "images": [], + "histograms": [], + "scalars": [ + "electric/pikachu", + "electric/voltorb", + "fire/arcanine", + "fire/charmander", + "fire/flying/charizard/except/made/really/long/to/check/truncation/characteristics", + "fire/flying/moltres", + "fire/vulpix", + "grass/ivysaur", + "grass/venasaur", + "ground/dugtrio", + "psychic/abra", + "psychic/mewtwo", + "water/goldeen", + "water/lapras", + "water/psychic/starmie", + "water/squirtle", + "water/tentacool" + ] + }, + "poly5": { + "graph": true, + "images": [], + "histograms": [], + "scalars": [ + "electric/pikachu", + "electric/raihu", + "electric/voltorb", + "fire/charmander", + "fire/flying/charizard", + "fire/flying/moltres", + "fire/magmar", + "fire/vulpix", + "grass/bulbasaur", + "grass/venasaur", + "ground/diglet", + "psychic/abra", + "psychic/mewtwo", + "water/lapras", + "water/psychic/starmie", + "water/squirtle", + "water/tentacool" + ] + }, + "cos": { + "images": [], + "histograms": [], + "scalars": [ + "electric/pikachu", + "electric/raihu", + "electric/voltorb", + "fire/arcanine", + "fire/charmander", + "fire/flying/moltres", + "fire/vulpix", + "grass/bulbasaur", + "grass/venasaur", + "ground/diglet", + "psychic/abra", + "psychic/mew", + "psychic/mewtwo", + "water/goldeen", + "water/psychic/starmie", + "water/squirtle", + "water/tentacool" + ] + }, + "sq": { + "images": [], + "histograms": [], + "scalars": [ + "electric/pikachu", + "electric/voltorb", + "fire/arcanine", + "fire/flying/charizard", + "fire/flying/moltres", + "fire/vulpix", + "grass/bulbasaur", + "grass/venasaur", + "ground/diglet", + "ground/dugtrio", + "psychic/abra", + "psychic/mew", + "psychic/mewtwo", + "water/goldeen", + "water/lapras", + "water/psychic/starmie", + "water/squirtle" + ] + }, + "linear_function_can_get_a_long_name_too!": { + "images": [], + "histograms": [], + "scalars": [ + "electric/pikachu", + "electric/raihu", + "electric/voltorb", + "fire/arcanine", + "fire/charmander", + "fire/flying/moltres", + "fire/magmar", + "fire/vulpix", + "grass/bulbasaur", + "grass/ivysaur", + "grass/venasaur", + "psychic/abra", + "psychic/mew", + "water/lapras", + "water/psychic/starmie", + "water/squirtle", + "water/tentacool" + ] + }, + "z_hidden+0": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+1": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+2": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+3": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+4": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+5": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+6": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+7": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+8": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+9": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+10": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+11": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+12": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+13": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+14": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+15": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+16": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+17": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+18": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+19": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+20": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+21": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+22": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+23": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+24": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+25": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+26": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+27": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+28": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+29": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+30": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+31": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+32": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+33": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+34": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+35": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+36": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+37": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+38": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+39": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+40": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+41": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+42": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+43": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+44": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+45": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+46": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+47": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+48": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+49": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+50": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+51": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+52": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+53": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+54": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+55": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+56": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+57": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+58": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+59": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+60": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+61": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+62": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+63": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+64": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+65": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+66": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+67": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+68": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+69": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+70": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+71": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+72": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+73": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+74": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+75": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+76": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+77": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+78": { + "images": [], + "histograms": [], + "scalars": [] + }, + "z_hidden+79": { + "images": [], + "histograms": [], + "scalars": [] + } +} diff --git a/tensorflow/tensorboard/app/demo/data/sin-graph.pbtxt b/tensorflow/tensorboard/app/demo/data/sin-graph.pbtxt new file mode 100644 index 0000000000..319ec1c4bd --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/sin-graph.pbtxt @@ -0,0 +1,14 @@ +node { + name: "Q" + op: "Input" +} +node { + name: "W" + op: "Input" +} +node { + name: "X" + op: "MatMul" + input: "Q" + input: "W" +} diff --git a/tensorflow/tensorboard/app/demo/data/sin.json b/tensorflow/tensorboard/app/demo/data/sin.json new file mode 100644 index 0000000000..a91fe63d54 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/sin.json @@ -0,0 +1 @@ +[[1434931200.0, 0.0, 0.0], [1434932928.0, 20000.0, 0.012566039883352607], [1434934656.0, 40000.0, 0.02513009544333748], [1434936384.0, 60000.0, 0.03769018266993454], [1434938112.0, 80000.0, 0.050244318179769556], [1434939840.0, 100000.0, 0.06279051952931337], [1434941568.0, 120000.0, 0.07532680552793272], [1434943296.0, 140000.0, 0.08785119655074317], [1434945024.0, 160000.0, 0.1003617148512149], [1434946752.0, 180000.0, 0.11285638487348167], [1434948480.0, 200000.0, 0.12533323356430426], [1434950208.0, 220000.0, 0.13779029068463805], [1434951936.0, 240000.0, 0.15022558912075706], [1434953664.0, 260000.0, 0.16263716519488358], [1434955392.0, 280000.0, 0.17502305897527604], [1434957120.0, 300000.0, 0.1873813145857246], [1434958848.0, 320000.0, 0.19970998051440703], [1434960576.0, 340000.0, 0.21200710992205463], [1434962304.0, 360000.0, 0.22427076094938114], [1434964032.0, 380000.0, 0.23649899702372468], [1434965760.0, 400000.0, 0.2486898871648548], [1434967488.0, 420000.0, 0.26084150628989694], [1434969216.0, 440000.0, 0.27295193551732516], [1434970944.0, 460000.0, 0.2850192624699761], [1434972672.0, 480000.0, 0.2970415815770349], [1434974400.0, 500000.0, 0.3090169943749474], [1434976128.0, 520000.0, 0.3209436098072095], [1434977856.0, 540000.0, 0.3328195445229866], [1434979584.0, 560000.0, 0.34464292317451706], [1434981312.0, 580000.0, 0.35641187871325075], [1434983040.0, 600000.0, 0.3681245526846779], [1434984768.0, 620000.0, 0.37977909552180106], [1434986496.0, 640000.0, 0.3913736668372024], [1434988224.0, 660000.0, 0.40290643571366264], [1434989952.0, 680000.0, 0.41437558099328414], [1434991680.0, 700000.0, 0.4257792915650727], [1434993408.0, 720000.0, 0.4371157666509328], [1434995136.0, 740000.0, 0.44838321609003223], [1434996864.0, 760000.0, 0.4595798606214878], [1434998592.0, 780000.0, 0.4707039321653325], [1435000320.0, 800000.0, 0.4817536741017153], [1435002048.0, 820000.0, 0.49272734154829156], [1435003776.0, 840000.0, 0.5036232016357608], [1435005504.0, 860000.0, 0.5144395337815064], [1435007232.0, 880000.0, 0.5251746299612956], [1435008960.0, 900000.0, 0.5358267949789967], [1435010688.0, 920000.0, 0.5463943467342691], [1435012416.0, 940000.0, 0.556875616488188], [1435014144.0, 960000.0, 0.5672689491267565], [1435015872.0, 980000.0, 0.5775727034222676], [1435017600.0, 1000000.0, 0.5877852522924731], [1435019328.0, 1020000.0, 0.5979049830575188], [1435021056.0, 1040000.0, 0.6079302976946054], [1435022784.0, 1060000.0, 0.6178596130903343], [1435024512.0, 1080000.0, 0.6276913612907005], [1435026240.0, 1100000.0, 0.6374239897486896], [1435027968.0, 1120000.0, 0.6470559615694442], [1435029696.0, 1140000.0, 0.6565857557529565], [1435031424.0, 1160000.0, 0.6660118674342517], [1435033152.0, 1180000.0, 0.6753328081210244], [1435034880.0, 1200000.0, 0.6845471059286886], [1435036608.0, 1220000.0, 0.6936533058128049], [1435038336.0, 1240000.0, 0.7026499697988492], [1435040064.0, 1260000.0, 0.7115356772092853], [1435041792.0, 1280000.0, 0.7203090248879069], [1435043520.0, 1300000.0, 0.7289686274214116], [1435045248.0, 1320000.0, 0.7375131173581739], [1435046976.0, 1340000.0, 0.7459411454241821], [1435048704.0, 1360000.0, 0.7542513807361038], [1435050432.0, 1380000.0, 0.7624425110114479], [1435052160.0, 1400000.0, 0.7705132427757893], [1435053888.0, 1420000.0, 0.7784623015670233], [1435055616.0, 1440000.0, 0.7862884321366188], [1435057344.0, 1460000.0, 0.7939903986478353], [1435059072.0, 1480000.0, 0.8015669848708765], [1435060800.0, 1500000.0, 0.8090169943749475], [1435062528.0, 1520000.0, 0.8163392507171839], [1435064256.0, 1540000.0, 0.8235325976284275], [1435065984.0, 1560000.0, 0.8305958991958126], [1435067712.0, 1580000.0, 0.8375280400421417], [1435069440.0, 1600000.0, 0.8443279255020151], [1435071168.0, 1620000.0, 0.8509944817946918], [1435072896.0, 1640000.0, 0.8575266561936523], [1435074624.0, 1660000.0, 0.8639234171928353], [1435076352.0, 1680000.0, 0.8701837546695257], [1435078080.0, 1700000.0, 0.8763066800438637], [1435079808.0, 1720000.0, 0.8822912264349532], [1435081536.0, 1740000.0, 0.8881364488135445], [1435083264.0, 1760000.0, 0.8938414241512637], [1435084992.0, 1780000.0, 0.899405251566371], [1435086720.0, 1800000.0, 0.9048270524660196], [1435088448.0, 1820000.0, 0.9101059706849957], [1435090176.0, 1840000.0, 0.9152411726209175], [1435091904.0, 1860000.0, 0.9202318473658703], [1435093632.0, 1880000.0, 0.925077206834458], [1435095360.0, 1900000.0, 0.9297764858882513], [1435097088.0, 1920000.0, 0.934328942456612], [1435098816.0, 1940000.0, 0.9387338576538741], [1435100544.0, 1960000.0, 0.9429905358928644], [1435102272.0, 1980000.0, 0.9470983049947443], [1435104000.0, 2000000.0, 0.9510565162951535], [1435105728.0, 2020000.0, 0.954864544746643], [1435107456.0, 2040000.0, 0.9585217890173758], [1435109184.0, 2060000.0, 0.9620276715860858], [1435110912.0, 2080000.0, 0.9653816388332739], [1435112640.0, 2100000.0, 0.9685831611286311], [1435114368.0, 2120000.0, 0.9716317329146739], [1435116096.0, 2140000.0, 0.9745268727865771], [1435117824.0, 2160000.0, 0.9772681235681935], [1435119552.0, 2180000.0, 0.9798550523842469], [1435121280.0, 2200000.0, 0.9822872507286886], [1435123008.0, 2220000.0, 0.9845643345292053], [1435124736.0, 2240000.0, 0.986685944207868], [1435126464.0, 2260000.0, 0.9886517447379141], [1435128192.0, 2280000.0, 0.9904614256966512], [1435129920.0, 2300000.0, 0.9921147013144779], [1435131648.0, 2320000.0, 0.9936113105200084], [1435133376.0, 2340000.0, 0.9949510169813002], [1435135104.0, 2360000.0, 0.9961336091431725], [1435136832.0, 2380000.0, 0.9971589002606139], [1435138560.0, 2400000.0, 0.9980267284282716], [1435140288.0, 2420000.0, 0.9987369566060175], [1435142016.0, 2440000.0, 0.9992894726405892], [1435143744.0, 2460000.0, 0.9996841892832999], [1435145472.0, 2480000.0, 0.9999210442038161], [1435147200.0, 2500000.0, 1.0], [1435148928.0, 2520000.0, 0.9999210442038161], [1435150656.0, 2540000.0, 0.9996841892832999], [1435152384.0, 2560000.0, 0.9992894726405892], [1435154112.0, 2580000.0, 0.9987369566060175], [1435155840.0, 2600000.0, 0.9980267284282716], [1435157568.0, 2620000.0, 0.9971589002606139], [1435159296.0, 2640000.0, 0.9961336091431725], [1435161024.0, 2660000.0, 0.9949510169813002], [1435162752.0, 2680000.0, 0.9936113105200084], [1435164480.0, 2700000.0, 0.9921147013144778], [1435166208.0, 2720000.0, 0.9904614256966512], [1435167936.0, 2740000.0, 0.988651744737914], [1435169664.0, 2760000.0, 0.986685944207868], [1435171392.0, 2780000.0, 0.9845643345292053], [1435173120.0, 2800000.0, 0.9822872507286886], [1435174848.0, 2820000.0, 0.9798550523842469], [1435176576.0, 2840000.0, 0.9772681235681935], [1435178304.0, 2860000.0, 0.9745268727865772], [1435180032.0, 2880000.0, 0.971631732914674], [1435181760.0, 2900000.0, 0.9685831611286312], [1435183488.0, 2920000.0, 0.965381638833274], [1435185216.0, 2940000.0, 0.9620276715860859], [1435186944.0, 2960000.0, 0.958521789017376], [1435188672.0, 2980000.0, 0.9548645447466431], [1435190400.0, 3000000.0, 0.9510565162951536], [1435192128.0, 3020000.0, 0.9470983049947443], [1435193856.0, 3040000.0, 0.9429905358928645], [1435195584.0, 3060000.0, 0.9387338576538742], [1435197312.0, 3080000.0, 0.9343289424566121], [1435199040.0, 3100000.0, 0.9297764858882513], [1435200768.0, 3120000.0, 0.925077206834458], [1435202496.0, 3140000.0, 0.9202318473658704], [1435204224.0, 3160000.0, 0.9152411726209176], [1435205952.0, 3180000.0, 0.9101059706849957], [1435207680.0, 3200000.0, 0.9048270524660195], [1435209408.0, 3220000.0, 0.8994052515663712], [1435211136.0, 3240000.0, 0.8938414241512639], [1435212864.0, 3260000.0, 0.8881364488135446], [1435214592.0, 3280000.0, 0.8822912264349533], [1435216320.0, 3300000.0, 0.8763066800438635], [1435218048.0, 3320000.0, 0.8701837546695257], [1435219776.0, 3340000.0, 0.8639234171928354], [1435221504.0, 3360000.0, 0.8575266561936522], [1435223232.0, 3380000.0, 0.8509944817946917], [1435224960.0, 3400000.0, 0.844327925502015], [1435226688.0, 3420000.0, 0.8375280400421418], [1435228416.0, 3440000.0, 0.8305958991958129], [1435230144.0, 3460000.0, 0.8235325976284276], [1435231872.0, 3480000.0, 0.816339250717184], [1435233600.0, 3500000.0, 0.8090169943749475], [1435235328.0, 3520000.0, 0.8015669848708769], [1435237056.0, 3540000.0, 0.7939903986478355], [1435238784.0, 3560000.0, 0.786288432136619], [1435240512.0, 3580000.0, 0.7784623015670235], [1435242240.0, 3600000.0, 0.7705132427757893], [1435243968.0, 3620000.0, 0.7624425110114481], [1435245696.0, 3640000.0, 0.754251380736104], [1435247424.0, 3660000.0, 0.7459411454241822], [1435249152.0, 3680000.0, 0.7375131173581739], [1435250880.0, 3700000.0, 0.7289686274214114], [1435252608.0, 3720000.0, 0.720309024887907], [1435254336.0, 3740000.0, 0.7115356772092855], [1435256064.0, 3760000.0, 0.7026499697988492], [1435257792.0, 3780000.0, 0.6936533058128049], [1435259520.0, 3800000.0, 0.6845471059286888], [1435261248.0, 3820000.0, 0.6753328081210246], [1435262976.0, 3840000.0, 0.6660118674342517], [1435264704.0, 3860000.0, 0.6565857557529564], [1435266432.0, 3880000.0, 0.6470559615694442], [1435268160.0, 3900000.0, 0.6374239897486899], [1435269888.0, 3920000.0, 0.6276913612907006], [1435271616.0, 3940000.0, 0.6178596130903343], [1435273344.0, 3960000.0, 0.6079302976946053], [1435275072.0, 3980000.0, 0.5979049830575187], [1435276800.0, 4000000.0, 0.5877852522924732], [1435278528.0, 4020000.0, 0.5775727034222676], [1435280256.0, 4040000.0, 0.5672689491267564], [1435281984.0, 4060000.0, 0.5568756164881878], [1435283712.0, 4080000.0, 0.5463943467342692], [1435285440.0, 4100000.0, 0.535826794978997], [1435287168.0, 4120000.0, 0.525174629961296], [1435288896.0, 4140000.0, 0.5144395337815066], [1435290624.0, 4160000.0, 0.5036232016357609], [1435292352.0, 4180000.0, 0.4927273415482916], [1435294080.0, 4200000.0, 0.4817536741017156], [1435295808.0, 4220000.0, 0.4707039321653328], [1435297536.0, 4240000.0, 0.459579860621488], [1435299264.0, 4260000.0, 0.4483832160900323], [1435300992.0, 4280000.0, 0.4371157666509329], [1435302720.0, 4300000.0, 0.4257792915650729], [1435304448.0, 4320000.0, 0.4143755809932843], [1435306176.0, 4340000.0, 0.40290643571366275], [1435307904.0, 4360000.0, 0.39137366683720237], [1435309632.0, 4380000.0, 0.3797790955218014], [1435311360.0, 4400000.0, 0.36812455268467814], [1435313088.0, 4420000.0, 0.3564118787132508], [1435314816.0, 4440000.0, 0.34464292317451706], [1435316544.0, 4460000.0, 0.3328195445229865], [1435318272.0, 4480000.0, 0.3209436098072097], [1435320000.0, 4500000.0, 0.3090169943749475], [1435321728.0, 4520000.0, 0.2970415815770349], [1435323456.0, 4540000.0, 0.28501926246997605], [1435325184.0, 4560000.0, 0.27295193551732505], [1435326912.0, 4580000.0, 0.26084150628989705], [1435328640.0, 4600000.0, 0.24868988716485482], [1435330368.0, 4620000.0, 0.2364989970237246], [1435332096.0, 4640000.0, 0.224270760949381], [1435333824.0, 4660000.0, 0.2120071099220548], [1435335552.0, 4680000.0, 0.19970998051440705], [1435337280.0, 4700000.0, 0.18738131458572502], [1435339008.0, 4720000.0, 0.1750230589752763], [1435340736.0, 4740000.0, 0.16263716519488378], [1435342464.0, 4760000.0, 0.15022558912075712], [1435344192.0, 4780000.0, 0.13779029068463847], [1435345920.0, 4800000.0, 0.12533323356430454], [1435347648.0, 4820000.0, 0.11285638487348187], [1435349376.0, 4840000.0, 0.10036171485121498], [1435351104.0, 4860000.0, 0.08785119655074315], [1435352832.0, 4880000.0, 0.07532680552793304], [1435354560.0, 4900000.0, 0.06279051952931358], [1435356288.0, 4920000.0, 0.05024431817976966], [1435358016.0, 4940000.0, 0.037690182669934534], [1435359744.0, 4960000.0, 0.025130095443337813], [1435361472.0, 4980000.0, 0.012566039883352836], [1435363200.0, 5000000.0, 1.2246467991473532e-16], [1435364928.0, 5020000.0, -0.012566039883352592], [1435366656.0, 5040000.0, -0.02513009544333757], [1435368384.0, 5060000.0, -0.03769018266993429], [1435370112.0, 5080000.0, -0.05024431817976942], [1435371840.0, 5100000.0, -0.06279051952931335], [1435373568.0, 5120000.0, -0.07532680552793279], [1435375296.0, 5140000.0, -0.0878511965507429], [1435377024.0, 5160000.0, -0.10036171485121473], [1435378752.0, 5180000.0, -0.11285638487348164], [1435380480.0, 5200000.0, -0.12533323356430429], [1435382208.0, 5220000.0, -0.13779029068463822], [1435383936.0, 5240000.0, -0.15022558912075687], [1435385664.0, 5260000.0, -0.16263716519488353], [1435387392.0, 5280000.0, -0.1750230589752761], [1435389120.0, 5300000.0, -0.18738131458572477], [1435390848.0, 5320000.0, -0.19970998051440725], [1435392576.0, 5340000.0, -0.21200710992205454], [1435394304.0, 5360000.0, -0.2242707609493812], [1435396032.0, 5380000.0, -0.2364989970237248], [1435397760.0, 5400000.0, -0.24868988716485502], [1435399488.0, 5420000.0, -0.26084150628989683], [1435401216.0, 5440000.0, -0.2729519355173252], [1435402944.0, 5460000.0, -0.2850192624699762], [1435404672.0, 5480000.0, -0.2970415815770351], [1435406400.0, 5500000.0, -0.30901699437494773], [1435408128.0, 5520000.0, -0.3209436098072095], [1435409856.0, 5540000.0, -0.33281954452298673], [1435411584.0, 5560000.0, -0.3446429231745172], [1435413312.0, 5580000.0, -0.356411878713251], [1435415040.0, 5600000.0, -0.3681245526846783], [1435416768.0, 5620000.0, -0.37977909552180117], [1435418496.0, 5640000.0, -0.39137366683720215], [1435420224.0, 5660000.0, -0.4029064357136621], [1435421952.0, 5680000.0, -0.41437558099328364], [1435423680.0, 5700000.0, -0.42577929156507227], [1435425408.0, 5720000.0, -0.43711576665093266], [1435427136.0, 5740000.0, -0.4483832160900317], [1435428864.0, 5760000.0, -0.45957986062148737], [1435430592.0, 5780000.0, -0.4707039321653322], [1435432320.0, 5800000.0, -0.481753674101715], [1435434048.0, 5820000.0, -0.4927273415482914], [1435435776.0, 5840000.0, -0.5036232016357604], [1435437504.0, 5860000.0, -0.5144395337815061], [1435439232.0, 5880000.0, -0.5251746299612954], [1435440960.0, 5900000.0, -0.5358267949789964], [1435442688.0, 5920000.0, -0.546394346734269], [1435444416.0, 5940000.0, -0.5568756164881876], [1435446144.0, 5960000.0, -0.5672689491267562], [1435447872.0, 5980000.0, -0.5775727034222674], [1435449600.0, 6000000.0, -0.587785252292473], [1435451328.0, 6020000.0, -0.5979049830575185], [1435453056.0, 6040000.0, -0.607930297694605], [1435454784.0, 6060000.0, -0.6178596130903341], [1435456512.0, 6080000.0, -0.6276913612907004], [1435458240.0, 6100000.0, -0.6374239897486896], [1435459968.0, 6120000.0, -0.647055961569444], [1435461696.0, 6140000.0, -0.6565857557529562], [1435463424.0, 6160000.0, -0.6660118674342514], [1435465152.0, 6180000.0, -0.6753328081210244], [1435466880.0, 6200000.0, -0.6845471059286887], [1435468608.0, 6220000.0, -0.6936533058128047], [1435470336.0, 6240000.0, -0.7026499697988491], [1435472064.0, 6260000.0, -0.7115356772092852], [1435473792.0, 6280000.0, -0.7203090248879069], [1435475520.0, 6300000.0, -0.7289686274214113], [1435477248.0, 6320000.0, -0.7375131173581737], [1435478976.0, 6340000.0, -0.7459411454241821], [1435480704.0, 6360000.0, -0.7542513807361038], [1435482432.0, 6380000.0, -0.7624425110114479], [1435484160.0, 6400000.0, -0.7705132427757894], [1435485888.0, 6420000.0, -0.7784623015670236], [1435487616.0, 6440000.0, -0.7862884321366186], [1435489344.0, 6460000.0, -0.793990398647835], [1435491072.0, 6480000.0, -0.8015669848708764], [1435492800.0, 6500000.0, -0.8090169943749473], [1435494528.0, 6520000.0, -0.8163392507171839], [1435496256.0, 6540000.0, -0.8235325976284275], [1435497984.0, 6560000.0, -0.8305958991958128], [1435499712.0, 6580000.0, -0.8375280400421419], [1435501440.0, 6600000.0, -0.8443279255020153], [1435503168.0, 6620000.0, -0.8509944817946921], [1435504896.0, 6640000.0, -0.8575266561936521], [1435506624.0, 6660000.0, -0.8639234171928352], [1435508352.0, 6680000.0, -0.8701837546695256], [1435510080.0, 6700000.0, -0.8763066800438636], [1435511808.0, 6720000.0, -0.8822912264349534], [1435513536.0, 6740000.0, -0.8881364488135446], [1435515264.0, 6760000.0, -0.8938414241512639], [1435516992.0, 6780000.0, -0.8994052515663712], [1435518720.0, 6800000.0, -0.9048270524660198], [1435520448.0, 6820000.0, -0.9101059706849955], [1435522176.0, 6840000.0, -0.9152411726209175], [1435523904.0, 6860000.0, -0.9202318473658704], [1435525632.0, 6880000.0, -0.9250772068344577], [1435527360.0, 6900000.0, -0.9297764858882511], [1435529088.0, 6920000.0, -0.9343289424566118], [1435530816.0, 6940000.0, -0.938733857653874], [1435532544.0, 6960000.0, -0.9429905358928643], [1435534272.0, 6980000.0, -0.9470983049947442], [1435536000.0, 7000000.0, -0.9510565162951535], [1435537728.0, 7020000.0, -0.954864544746643], [1435539456.0, 7040000.0, -0.9585217890173756], [1435541184.0, 7060000.0, -0.9620276715860857], [1435542912.0, 7080000.0, -0.9653816388332738], [1435544640.0, 7100000.0, -0.968583161128631], [1435546368.0, 7120000.0, -0.9716317329146739], [1435548096.0, 7140000.0, -0.9745268727865771], [1435549824.0, 7160000.0, -0.9772681235681934], [1435551552.0, 7180000.0, -0.9798550523842469], [1435553280.0, 7200000.0, -0.9822872507286887], [1435555008.0, 7220000.0, -0.9845643345292054], [1435556736.0, 7240000.0, -0.9866859442078679], [1435558464.0, 7260000.0, -0.988651744737914], [1435560192.0, 7280000.0, -0.9904614256966512], [1435561920.0, 7300000.0, -0.9921147013144778], [1435563648.0, 7320000.0, -0.9936113105200084], [1435565376.0, 7340000.0, -0.9949510169813002], [1435567104.0, 7360000.0, -0.9961336091431725], [1435568832.0, 7380000.0, -0.9971589002606139], [1435570560.0, 7400000.0, -0.9980267284282716], [1435572288.0, 7420000.0, -0.9987369566060175], [1435574016.0, 7440000.0, -0.9992894726405892], [1435575744.0, 7460000.0, -0.9996841892832999], [1435577472.0, 7480000.0, -0.9999210442038161], [1435579200.0, 7500000.0, -1.0], [1435580928.0, 7520000.0, -0.9999210442038161], [1435582656.0, 7540000.0, -0.9996841892832999], [1435584384.0, 7560000.0, -0.9992894726405892], [1435586112.0, 7580000.0, -0.9987369566060175], [1435587840.0, 7600000.0, -0.9980267284282716], [1435589568.0, 7620000.0, -0.9971589002606139], [1435591296.0, 7640000.0, -0.9961336091431725], [1435593024.0, 7660000.0, -0.9949510169813002], [1435594752.0, 7680000.0, -0.9936113105200084], [1435596480.0, 7700000.0, -0.9921147013144779], [1435598208.0, 7720000.0, -0.9904614256966512], [1435599936.0, 7740000.0, -0.988651744737914], [1435601664.0, 7760000.0, -0.986685944207868], [1435603392.0, 7780000.0, -0.9845643345292054], [1435605120.0, 7800000.0, -0.9822872507286887], [1435606848.0, 7820000.0, -0.979855052384247], [1435608576.0, 7840000.0, -0.9772681235681935], [1435610304.0, 7860000.0, -0.9745268727865771], [1435612032.0, 7880000.0, -0.971631732914674], [1435613760.0, 7900000.0, -0.9685831611286311], [1435615488.0, 7920000.0, -0.9653816388332738], [1435617216.0, 7940000.0, -0.9620276715860858], [1435618944.0, 7960000.0, -0.9585217890173757], [1435620672.0, 7980000.0, -0.9548645447466431], [1435622400.0, 8000000.0, -0.9510565162951536], [1435624128.0, 8020000.0, -0.9470983049947443], [1435625856.0, 8040000.0, -0.9429905358928644], [1435627584.0, 8060000.0, -0.9387338576538741], [1435629312.0, 8080000.0, -0.934328942456612], [1435631040.0, 8100000.0, -0.9297764858882512], [1435632768.0, 8120000.0, -0.9250772068344579], [1435634496.0, 8140000.0, -0.9202318473658705], [1435636224.0, 8160000.0, -0.9152411726209176], [1435637952.0, 8180000.0, -0.9101059706849958], [1435639680.0, 8200000.0, -0.9048270524660199], [1435641408.0, 8220000.0, -0.8994052515663714], [1435643136.0, 8240000.0, -0.8938414241512641], [1435644864.0, 8260000.0, -0.8881364488135448], [1435646592.0, 8280000.0, -0.8822912264349535], [1435648320.0, 8300000.0, -0.8763066800438638], [1435650048.0, 8320000.0, -0.8701837546695258], [1435651776.0, 8340000.0, -0.8639234171928354], [1435653504.0, 8360000.0, -0.8575266561936523], [1435655232.0, 8380000.0, -0.8509944817946923], [1435656960.0, 8400000.0, -0.8443279255020155], [1435658688.0, 8420000.0, -0.8375280400421421], [1435660416.0, 8440000.0, -0.8305958991958129], [1435662144.0, 8460000.0, -0.8235325976284277], [1435663872.0, 8480000.0, -0.8163392507171842], [1435665600.0, 8500000.0, -0.8090169943749476], [1435667328.0, 8520000.0, -0.8015669848708766], [1435669056.0, 8540000.0, -0.7939903986478353], [1435670784.0, 8560000.0, -0.7862884321366188], [1435672512.0, 8580000.0, -0.7784623015670239], [1435674240.0, 8600000.0, -0.7705132427757896], [1435675968.0, 8620000.0, -0.7624425110114481], [1435677696.0, 8640000.0, -0.7542513807361041], [1435679424.0, 8660000.0, -0.7459411454241823], [1435681152.0, 8680000.0, -0.737513117358174], [1435682880.0, 8700000.0, -0.7289686274214116], [1435684608.0, 8720000.0, -0.7203090248879068], [1435686336.0, 8740000.0, -0.7115356772092852], [1435688064.0, 8760000.0, -0.7026499697988496], [1435689792.0, 8780000.0, -0.6936533058128054], [1435691520.0, 8800000.0, -0.684547105928689], [1435693248.0, 8820000.0, -0.6753328081210247], [1435694976.0, 8840000.0, -0.6660118674342518], [1435696704.0, 8860000.0, -0.6565857557529565], [1435698432.0, 8880000.0, -0.6470559615694443], [1435700160.0, 8900000.0, -0.6374239897486896], [1435701888.0, 8920000.0, -0.6276913612907002], [1435703616.0, 8940000.0, -0.6178596130903348], [1435705344.0, 8960000.0, -0.6079302976946057], [1435707072.0, 8980000.0, -0.5979049830575192], [1435708800.0, 9000000.0, -0.5877852522924734], [1435710528.0, 9020000.0, -0.5775727034222677], [1435712256.0, 9040000.0, -0.5672689491267565], [1435713984.0, 9060000.0, -0.556875616488188], [1435715712.0, 9080000.0, -0.5463943467342689], [1435717440.0, 9100000.0, -0.5358267949789963], [1435719168.0, 9120000.0, -0.5251746299612954], [1435720896.0, 9140000.0, -0.5144395337815068], [1435722624.0, 9160000.0, -0.503623201635761], [1435724352.0, 9180000.0, -0.4927273415482917], [1435726080.0, 9200000.0, -0.4817536741017153], [1435727808.0, 9220000.0, -0.4707039321653325], [1435729536.0, 9240000.0, -0.4595798606214877], [1435731264.0, 9260000.0, -0.448383216090032], [1435732992.0, 9280000.0, -0.43711576665093255], [1435734720.0, 9300000.0, -0.4257792915650722], [1435736448.0, 9320000.0, -0.4143755809932844], [1435738176.0, 9340000.0, -0.40290643571366286], [1435739904.0, 9360000.0, -0.3913736668372025], [1435741632.0, 9380000.0, -0.3797790955218019], [1435743360.0, 9400000.0, -0.3681245526846787], [1435745088.0, 9420000.0, -0.3564118787132513], [1435746816.0, 9440000.0, -0.34464292317451756], [1435748544.0, 9460000.0, -0.33281954452298707], [1435750272.0, 9480000.0, -0.3209436098072098], [1435752000.0, 9500000.0, -0.3090169943749476], [1435753728.0, 9520000.0, -0.29704158157703503], [1435755456.0, 9540000.0, -0.285019262469977], [1435757184.0, 9560000.0, -0.272951935517326], [1435758912.0, 9580000.0, -0.2608415062898976], [1435760640.0, 9600000.0, -0.24868988716485535], [1435762368.0, 9620000.0, -0.23649899702372515], [1435764096.0, 9640000.0, -0.22427076094938156], [1435765824.0, 9660000.0, -0.2120071099220549], [1435767552.0, 9680000.0, -0.1997099805144072], [1435769280.0, 9700000.0, -0.18738131458572468], [1435771008.0, 9720000.0, -0.175023058975276], [1435772736.0, 9740000.0, -0.16263716519488433], [1435774464.0, 9760000.0, -0.15022558912075767], [1435776192.0, 9780000.0, -0.13779029068463858], [1435777920.0, 9800000.0, -0.12533323356430465], [1435779648.0, 9820000.0, -0.112856384873482], [1435781376.0, 9840000.0, -0.10036171485121509], [1435783104.0, 9860000.0, -0.08785119655074328], [1435784832.0, 9880000.0, -0.07532680552793272], [1435786560.0, 9900000.0, -0.06279051952931326], [1435788288.0, 9920000.0, -0.05024431817977022], [1435790016.0, 9940000.0, -0.0376901826699351], [1435791744.0, 9960000.0, -0.025130095443337937], [1435793472.0, 9980000.0, -0.01256603988335296], [1435795200.0, 10000000.0, -2.4492935982947064e-16], [1435796928.0, 10020000.0, 0.012566039883352469], [1435798656.0, 10040000.0, 0.025130095443337445], [1435800384.0, 10060000.0, 0.03769018266993461], [1435802112.0, 10080000.0, 0.05024431817976974], [1435803840.0, 10100000.0, 0.06279051952931278], [1435805568.0, 10120000.0, 0.07532680552793222], [1435807296.0, 10140000.0, 0.08785119655074279], [1435809024.0, 10160000.0, 0.1003617148512146], [1435810752.0, 10180000.0, 0.11285638487348151], [1435812480.0, 10200000.0, 0.12533323356430418], [1435814208.0, 10220000.0, 0.1377902906846381], [1435815936.0, 10240000.0, 0.1502255891207572], [1435817664.0, 10260000.0, 0.16263716519488383], [1435819392.0, 10280000.0, 0.1750230589752755], [1435821120.0, 10300000.0, 0.1873813145857242], [1435822848.0, 10320000.0, 0.1997099805144067], [1435824576.0, 10340000.0, 0.21200710992205443], [1435826304.0, 10360000.0, 0.2242707609493811], [1435828032.0, 10380000.0, 0.23649899702372468], [1435829760.0, 10400000.0, 0.24868988716485488], [1435831488.0, 10420000.0, 0.2608415062898971], [1435833216.0, 10440000.0, 0.27295193551732555], [1435834944.0, 10460000.0, 0.28501926246997655], [1435836672.0, 10480000.0, 0.2970415815770346], [1435838400.0, 10500000.0, 0.3090169943749472], [1435840128.0, 10520000.0, 0.3209436098072094], [1435841856.0, 10540000.0, 0.3328195445229866], [1435843584.0, 10560000.0, 0.3446429231745171], [1435845312.0, 10580000.0, 0.35641187871325086], [1435847040.0, 10600000.0, 0.3681245526846782], [1435848768.0, 10620000.0, 0.37977909552180145], [1435850496.0, 10640000.0, 0.39137366683720287], [1435852224.0, 10660000.0, 0.4029064357136624], [1435853952.0, 10680000.0, 0.414375580993284], [1435855680.0, 10700000.0, 0.42577929156507255], [1435857408.0, 10720000.0, 0.43711576665093294], [1435859136.0, 10740000.0, 0.44838321609003234], [1435860864.0, 10760000.0, 0.4595798606214881], [1435862592.0, 10780000.0, 0.47070393216533285], [1435864320.0, 10800000.0, 0.48175367410171566], [1435866048.0, 10820000.0, 0.49272734154829206], [1435867776.0, 10840000.0, 0.5036232016357607], [1435869504.0, 10860000.0, 0.5144395337815063], [1435871232.0, 10880000.0, 0.5251746299612957], [1435872960.0, 10900000.0, 0.5358267949789967], [1435874688.0, 10920000.0, 0.5463943467342692], [1435876416.0, 10940000.0, 0.5568756164881883], [1435878144.0, 10960000.0, 0.5672689491267568], [1435879872.0, 10980000.0, 0.577572703422268], [1435881600.0, 11000000.0, 0.5877852522924736], [1435883328.0, 11020000.0, 0.5979049830575195], [1435885056.0, 11040000.0, 0.6079302976946054], [1435886784.0, 11060000.0, 0.6178596130903344], [1435888512.0, 11080000.0, 0.6276913612907006], [1435890240.0, 11100000.0, 0.6374239897486899], [1435891968.0, 11120000.0, 0.6470559615694446], [1435893696.0, 11140000.0, 0.6565857557529567], [1435895424.0, 11160000.0, 0.666011867434252], [1435897152.0, 11180000.0, 0.6753328081210249], [1435898880.0, 11200000.0, 0.6845471059286893], [1435900608.0, 11220000.0, 0.6936533058128049], [1435902336.0, 11240000.0, 0.7026499697988493], [1435904064.0, 11260000.0, 0.7115356772092849], [1435905792.0, 11280000.0, 0.7203090248879065], [1435907520.0, 11300000.0, 0.7289686274214106], [1435909248.0, 11320000.0, 0.737513117358173], [1435910976.0, 11340000.0, 0.7459411454241814], [1435912704.0, 11360000.0, 0.7542513807361031], [1435914432.0, 11380000.0, 0.7624425110114472], [1435916160.0, 11400000.0, 0.7705132427757887], [1435917888.0, 11420000.0, 0.778462301567023], [1435919616.0, 11440000.0, 0.7862884321366185], [1435921344.0, 11460000.0, 0.793990398647835], [1435923072.0, 11480000.0, 0.8015669848708759], [1435924800.0, 11500000.0, 0.8090169943749468], [1435926528.0, 11520000.0, 0.8163392507171834], [1435928256.0, 11540000.0, 0.8235325976284269], [1435929984.0, 11560000.0, 0.8305958991958121], [1435931712.0, 11580000.0, 0.8375280400421413], [1435933440.0, 11600000.0, 0.8443279255020147], [1435935168.0, 11620000.0, 0.8509944817946916], [1435936896.0, 11640000.0, 0.8575266561936521], [1435938624.0, 11660000.0, 0.8639234171928352], [1435940352.0, 11680000.0, 0.8701837546695251], [1435942080.0, 11700000.0, 0.8763066800438631], [1435943808.0, 11720000.0, 0.8822912264349528], [1435945536.0, 11740000.0, 0.8881364488135441], [1435947264.0, 11760000.0, 0.8938414241512634], [1435948992.0, 11780000.0, 0.8994052515663707], [1435950720.0, 11800000.0, 0.9048270524660194], [1435952448.0, 11820000.0, 0.9101059706849955], [1435954176.0, 11840000.0, 0.9152411726209174], [1435955904.0, 11860000.0, 0.9202318473658699], [1435957632.0, 11880000.0, 0.9250772068344577], [1435959360.0, 11900000.0, 0.9297764858882511], [1435961088.0, 11920000.0, 0.9343289424566118], [1435962816.0, 11940000.0, 0.9387338576538738], [1435964544.0, 11960000.0, 0.9429905358928643], [1435966272.0, 11980000.0, 0.9470983049947441], [1435968000.0, 12000000.0, 0.9510565162951535], [1435969728.0, 12020000.0, 0.954864544746643], [1435971456.0, 12040000.0, 0.9585217890173756], [1435973184.0, 12060000.0, 0.9620276715860857], [1435974912.0, 12080000.0, 0.9653816388332737], [1435976640.0, 12100000.0, 0.968583161128631], [1435978368.0, 12120000.0, 0.9716317329146738], [1435980096.0, 12140000.0, 0.974526872786577], [1435981824.0, 12160000.0, 0.9772681235681934], [1435983552.0, 12180000.0, 0.9798550523842469], [1435985280.0, 12200000.0, 0.9822872507286886], [1435987008.0, 12220000.0, 0.9845643345292053], [1435988736.0, 12240000.0, 0.9866859442078679], [1435990464.0, 12260000.0, 0.988651744737914], [1435992192.0, 12280000.0, 0.9904614256966512], [1435993920.0, 12300000.0, 0.9921147013144778], [1435995648.0, 12320000.0, 0.9936113105200084], [1435997376.0, 12340000.0, 0.9949510169813002], [1435999104.0, 12360000.0, 0.9961336091431725], [1436000832.0, 12380000.0, 0.9971589002606139], [1436002560.0, 12400000.0, 0.9980267284282716], [1436004288.0, 12420000.0, 0.9987369566060175], [1436006016.0, 12440000.0, 0.9992894726405892], [1436007744.0, 12460000.0, 0.9996841892832999], [1436009472.0, 12480000.0, 0.9999210442038161], [1436011200.0, 12500000.0, 1.0], [1436012928.0, 12520000.0, 0.9999210442038161], [1436014656.0, 12540000.0, 0.9996841892832999], [1436016384.0, 12560000.0, 0.9992894726405892], [1436018112.0, 12580000.0, 0.9987369566060175], [1436019840.0, 12600000.0, 0.9980267284282716], [1436021568.0, 12620000.0, 0.9971589002606139], [1436023296.0, 12640000.0, 0.9961336091431725], [1436025024.0, 12660000.0, 0.9949510169813002], [1436026752.0, 12680000.0, 0.9936113105200084], [1436028480.0, 12700000.0, 0.9921147013144779], [1436030208.0, 12720000.0, 0.9904614256966512], [1436031936.0, 12740000.0, 0.9886517447379142], [1436033664.0, 12760000.0, 0.986685944207868], [1436035392.0, 12780000.0, 0.9845643345292054], [1436037120.0, 12800000.0, 0.9822872507286886], [1436038848.0, 12820000.0, 0.979855052384247], [1436040576.0, 12840000.0, 0.9772681235681934], [1436042304.0, 12860000.0, 0.9745268727865772], [1436044032.0, 12880000.0, 0.9716317329146742], [1436045760.0, 12900000.0, 0.9685831611286311], [1436047488.0, 12920000.0, 0.9653816388332741], [1436049216.0, 12940000.0, 0.9620276715860858], [1436050944.0, 12960000.0, 0.9585217890173761], [1436052672.0, 12980000.0, 0.9548645447466428], [1436054400.0, 13000000.0, 0.9510565162951536], [1436056128.0, 13020000.0, 0.947098304994744], [1436057856.0, 13040000.0, 0.9429905358928645], [1436059584.0, 13060000.0, 0.9387338576538744], [1436061312.0, 13080000.0, 0.934328942456612], [1436063040.0, 13100000.0, 0.9297764858882517], [1436064768.0, 13120000.0, 0.9250772068344579], [1436066496.0, 13140000.0, 0.9202318473658705], [1436068224.0, 13160000.0, 0.9152411726209173], [1436069952.0, 13180000.0, 0.9101059706849958], [1436071680.0, 13200000.0, 0.9048270524660192], [1436073408.0, 13220000.0, 0.8994052515663711], [1436075136.0, 13240000.0, 0.8938414241512633], [1436076864.0, 13260000.0, 0.8881364488135445], [1436078592.0, 13280000.0, 0.8822912264349536], [1436080320.0, 13300000.0, 0.8763066800438634], [1436082048.0, 13320000.0, 0.8701837546695259], [1436083776.0, 13340000.0, 0.863923417192835], [1436085504.0, 13360000.0, 0.8575266561936523], [1436087232.0, 13380000.0, 0.8509944817946914], [1436088960.0, 13400000.0, 0.8443279255020151], [1436090688.0, 13420000.0, 0.8375280400421411], [1436092416.0, 13440000.0, 0.8305958991958126], [1436094144.0, 13460000.0, 0.8235325976284278], [1436095872.0, 13480000.0, 0.8163392507171837], [1436097600.0, 13500000.0, 0.8090169943749477], [1436099328.0, 13520000.0, 0.8015669848708762], [1436101056.0, 13540000.0, 0.7939903986478354], [1436102784.0, 13560000.0, 0.7862884321366184], [1436104512.0, 13580000.0, 0.7784623015670233], [1436106240.0, 13600000.0, 0.7705132427757886], [1436107968.0, 13620000.0, 0.7624425110114477], [1436109696.0, 13640000.0, 0.7542513807361041], [1436111424.0, 13660000.0, 0.7459411454241818], [1436113152.0, 13680000.0, 0.737513117358174], [1436114880.0, 13700000.0, 0.728968627421411], [1436116608.0, 13720000.0, 0.7203090248879069], [1436118336.0, 13740000.0, 0.7115356772092847], [1436120064.0, 13760000.0, 0.7026499697988503], [1436121792.0, 13780000.0, 0.6936533058128054], [1436123520.0, 13800000.0, 0.6845471059286897], [1436125248.0, 13820000.0, 0.6753328081210247], [1436126976.0, 13840000.0, 0.6660118674342526], [1436128704.0, 13860000.0, 0.6565857557529566], [1436130432.0, 13880000.0, 0.6470559615694451], [1436132160.0, 13900000.0, 0.6374239897486911], [1436133888.0, 13920000.0, 0.627691361290701], [1436135616.0, 13940000.0, 0.6178596130903355], [1436137344.0, 13960000.0, 0.6079302976946058], [1436139072.0, 13980000.0, 0.5979049830575199], [1436140800.0, 14000000.0, 0.5877852522924734], [1436142528.0, 14020000.0, 0.5775727034222685], [1436144256.0, 14040000.0, 0.5672689491267566], [1436145984.0, 14060000.0, 0.5568756164881887], [1436147712.0, 14080000.0, 0.5463943467342705], [1436149440.0, 14100000.0, 0.5358267949789972], [1436151168.0, 14120000.0, 0.5251746299612969], [1436152896.0, 14140000.0, 0.5144395337815069], [1436154624.0, 14160000.0, 0.5036232016357619], [1436156352.0, 14180000.0, 0.4927273415482918], [1436158080.0, 14200000.0, 0.4817536741017162], [1436159808.0, 14220000.0, 0.47070393216533263], [1436161536.0, 14240000.0, 0.4595798606214886], [1436163264.0, 14260000.0, 0.44838321609003373], [1436164992.0, 14280000.0, 0.4371157666509335], [1436166720.0, 14300000.0, 0.42577929156507394], [1436168448.0, 14320000.0, 0.41437558099328453], [1436170176.0, 14340000.0, 0.40290643571366375], [1436171904.0, 14360000.0, 0.3913736668372026], [1436173632.0, 14380000.0, 0.379779095521802], [1436175360.0, 14400000.0, 0.368124552684678], [1436177088.0, 14420000.0, 0.3564118787132514], [1436178816.0, 14440000.0, 0.34464292317451684], [1436180544.0, 14460000.0, 0.3328195445229872], [1436182272.0, 14480000.0, 0.32094360980721076], [1436184000.0, 14500000.0, 0.3090169943749478], [1436185728.0, 14520000.0, 0.297041581577036], [1436187456.0, 14540000.0, 0.2850192624699763], [1436189184.0, 14560000.0, 0.2729519355173261], [1436190912.0, 14580000.0, 0.2608415062898969], [1436192640.0, 14600000.0, 0.2486898871648555], [1436194368.0, 14620000.0, 0.2364989970237244], [1436196096.0, 14640000.0, 0.22427076094938167], [1436197824.0, 14660000.0, 0.2120071099220559], [1436199552.0, 14680000.0, 0.1997099805144073], [1436201280.0, 14700000.0, 0.18738131458572568], [1436203008.0, 14720000.0, 0.17502305897527612], [1436204736.0, 14740000.0, 0.16263716519488444], [1436206464.0, 14760000.0, 0.15022558912075692], [1436208192.0, 14780000.0, 0.13779029068463872], [1436209920.0, 14800000.0, 0.1253332335643039], [1436211648.0, 14820000.0, 0.11285638487348212], [1436213376.0, 14840000.0, 0.1003617148512161], [1436215104.0, 14860000.0, 0.0878511965507434], [1436216832.0, 14880000.0, 0.07532680552793372], [1436218560.0, 14900000.0, 0.06279051952931339], [1436220288.0, 14920000.0, 0.05024431817977035], [1436222016.0, 14940000.0, 0.03769018266993433], [1436223744.0, 14960000.0, 0.02513009544333806], [1436225472.0, 14980000.0, 0.012566039883352193], [1436227200.0, 15000000.0, 3.6739403974420594e-16], [1436228928.0, 15020000.0, -0.012566039883351459], [1436230656.0, 15040000.0, -0.025130095443337323], [1436232384.0, 15060000.0, -0.037690182669933604], [1436234112.0, 15080000.0, -0.05024431817976961], [1436235840.0, 15100000.0, -0.06279051952931265], [1436237568.0, 15120000.0, -0.07532680552793299], [1436239296.0, 15140000.0, -0.08785119655074267], [1436241024.0, 15160000.0, -0.10036171485121537], [1436242752.0, 15180000.0, -0.11285638487348139], [1436244480.0, 15200000.0, -0.12533323356430318], [1436246208.0, 15220000.0, -0.13779029068463797], [1436247936.0, 15240000.0, -0.1502255891207562], [1436249664.0, 15260000.0, -0.16263716519488372], [1436251392.0, 15280000.0, -0.1750230589752754], [1436253120.0, 15300000.0, -0.18738131458572496], [1436254848.0, 15320000.0, -0.19970998051440658], [1436256576.0, 15340000.0, -0.21200710992205518], [1436258304.0, 15360000.0, -0.22427076094938095], [1436260032.0, 15380000.0, -0.2364989970237237], [1436261760.0, 15400000.0, -0.24868988716485477], [1436263488.0, 15420000.0, -0.26084150628989616], [1436265216.0, 15440000.0, -0.27295193551732544], [1436266944.0, 15460000.0, -0.28501926246997555], [1436268672.0, 15480000.0, -0.2970415815770353], [1436270400.0, 15500000.0, -0.30901699437494706], [1436272128.0, 15520000.0, -0.3209436098072101], [1436273856.0, 15540000.0, -0.3328195445229865], [1436275584.0, 15560000.0, -0.34464292317451617], [1436277312.0, 15580000.0, -0.35641187871325075], [1436279040.0, 15600000.0, -0.36812455268467725], [1436280768.0, 15620000.0, -0.37977909552180134], [1436282496.0, 15640000.0, -0.39137366683720193], [1436284224.0, 15660000.0, -0.4029064357136631], [1436285952.0, 15680000.0, -0.41437558099328387], [1436287680.0, 15700000.0, -0.42577929156507327], [1436289408.0, 15720000.0, -0.4371157666509328], [1436291136.0, 15740000.0, -0.44838321609003307], [1436292864.0, 15760000.0, -0.459579860621488], [1436294592.0, 15780000.0, -0.47070393216533196], [1436296320.0, 15800000.0, -0.48175367410171555], [1436298048.0, 15820000.0, -0.4927273415482912], [1436299776.0, 15840000.0, -0.5036232016357614], [1436301504.0, 15860000.0, -0.5144395337815062], [1436303232.0, 15880000.0, -0.5251746299612964], [1436304960.0, 15900000.0, -0.5358267949789965], [1436306688.0, 15920000.0, -0.5463943467342699], [1436308416.0, 15940000.0, -0.5568756164881882], [1436310144.0, 15960000.0, -0.567268949126756], [1436311872.0, 15980000.0, -0.577572703422268], [1436313600.0, 16000000.0, -0.5877852522924728], [1436315328.0, 16020000.0, -0.5979049830575194], [1436317056.0, 16040000.0, -0.6079302976946053], [1436318784.0, 16060000.0, -0.617859613090335], [1436320512.0, 16080000.0, -0.6276913612907005], [1436322240.0, 16100000.0, -0.6374239897486905], [1436323968.0, 16120000.0, -0.6470559615694444], [1436325696.0, 16140000.0, -0.6565857557529561], [1436327424.0, 16160000.0, -0.666011867434252], [1436329152.0, 16180000.0, -0.6753328081210243], [1436330880.0, 16200000.0, -0.6845471059286892], [1436332608.0, 16220000.0, -0.6936533058128049], [1436334336.0, 16240000.0, -0.7026499697988499], [1436336064.0, 16260000.0, -0.7115356772092841], [1436337792.0, 16280000.0, -0.7203090248879064], [1436339520.0, 16300000.0, -0.7289686274214106], [1436341248.0, 16320000.0, -0.7375131173581736], [1436342976.0, 16340000.0, -0.7459411454241813], [1436344704.0, 16360000.0, -0.7542513807361036], [1436346432.0, 16380000.0, -0.7624425110114472], [1436348160.0, 16400000.0, -0.770513242775788], [1436349888.0, 16420000.0, -0.7784623015670229], [1436351616.0, 16440000.0, -0.7862884321366179], [1436353344.0, 16460000.0, -0.7939903986478349], [1436355072.0, 16480000.0, -0.8015669848708757], [1436356800.0, 16500000.0, -0.8090169943749472], [1436358528.0, 16520000.0, -0.8163392507171833], [1436360256.0, 16540000.0, -0.8235325976284273], [1436361984.0, 16560000.0, -0.8305958991958121], [1436363712.0, 16580000.0, -0.8375280400421408], [1436365440.0, 16600000.0, -0.8443279255020146], [1436367168.0, 16620000.0, -0.8509944817946911], [1436368896.0, 16640000.0, -0.857526656193652], [1436370624.0, 16660000.0, -0.8639234171928346], [1436372352.0, 16680000.0, -0.8701837546695255], [1436374080.0, 16700000.0, -0.876306680043863], [1436375808.0, 16720000.0, -0.8822912264349532], [1436377536.0, 16740000.0, -0.8881364488135441], [1436379264.0, 16760000.0, -0.893841424151263], [1436380992.0, 16780000.0, -0.8994052515663707], [1436382720.0, 16800000.0, -0.9048270524660189], [1436384448.0, 16820000.0, -0.9101059706849954], [1436386176.0, 16840000.0, -0.9152411726209171], [1436387904.0, 16860000.0, -0.9202318473658703], [1436389632.0, 16880000.0, -0.9250772068344576], [1436391360.0, 16900000.0, -0.9297764858882513], [1436393088.0, 16920000.0, -0.9343289424566118], [1436394816.0, 16940000.0, -0.9387338576538742], [1436396544.0, 16960000.0, -0.9429905358928643], [1436398272.0, 16980000.0, -0.9470983049947438], [1436400000.0, 17000000.0, -0.9510565162951534], [1436401728.0, 17020000.0, -0.9548645447466426], [1436403456.0, 17040000.0, -0.9585217890173758], [1436405184.0, 17060000.0, -0.9620276715860856], [1436406912.0, 17080000.0, -0.9653816388332739], [1436408640.0, 17100000.0, -0.968583161128631], [1436410368.0, 17120000.0, -0.971631732914674], [1436412096.0, 17140000.0, -0.974526872786577], [1436413824.0, 17160000.0, -0.9772681235681931], [1436415552.0, 17180000.0, -0.9798550523842467], [1436417280.0, 17200000.0, -0.9822872507286885], [1436419008.0, 17220000.0, -0.9845643345292053], [1436420736.0, 17240000.0, -0.9866859442078679], [1436422464.0, 17260000.0, -0.9886517447379141], [1436424192.0, 17280000.0, -0.9904614256966511], [1436425920.0, 17300000.0, -0.9921147013144779], [1436427648.0, 17320000.0, -0.9936113105200084], [1436429376.0, 17340000.0, -0.9949510169813001], [1436431104.0, 17360000.0, -0.9961336091431724], [1436432832.0, 17380000.0, -0.9971589002606138], [1436434560.0, 17400000.0, -0.9980267284282716], [1436436288.0, 17420000.0, -0.9987369566060175], [1436438016.0, 17440000.0, -0.9992894726405892], [1436439744.0, 17460000.0, -0.9996841892832999], [1436441472.0, 17480000.0, -0.9999210442038161], [1436443200.0, 17500000.0, -1.0], [1436444928.0, 17520000.0, -0.9999210442038161], [1436446656.0, 17540000.0, -0.9996841892832999], [1436448384.0, 17560000.0, -0.9992894726405893], [1436450112.0, 17580000.0, -0.9987369566060175], [1436451840.0, 17600000.0, -0.9980267284282716], [1436453568.0, 17620000.0, -0.9971589002606139], [1436455296.0, 17640000.0, -0.9961336091431725], [1436457024.0, 17660000.0, -0.9949510169813001], [1436458752.0, 17680000.0, -0.9936113105200084], [1436460480.0, 17700000.0, -0.992114701314478], [1436462208.0, 17720000.0, -0.9904614256966512], [1436463936.0, 17740000.0, -0.9886517447379142], [1436465664.0, 17760000.0, -0.986685944207868], [1436467392.0, 17780000.0, -0.9845643345292056], [1436469120.0, 17800000.0, -0.9822872507286886], [1436470848.0, 17820000.0, -0.979855052384247], [1436472576.0, 17840000.0, -0.9772681235681934], [1436474304.0, 17860000.0, -0.9745268727865772], [1436476032.0, 17880000.0, -0.9716317329146742], [1436477760.0, 17900000.0, -0.9685831611286312], [1436479488.0, 17920000.0, -0.9653816388332741], [1436481216.0, 17940000.0, -0.9620276715860858], [1436482944.0, 17960000.0, -0.9585217890173761], [1436484672.0, 17980000.0, -0.9548645447466428], [1436486400.0, 18000000.0, -0.9510565162951538], [1436488128.0, 18020000.0, -0.9470983049947441], [1436489856.0, 18040000.0, -0.9429905358928645], [1436491584.0, 18060000.0, -0.9387338576538744], [1436493312.0, 18080000.0, -0.934328942456612], [1436495040.0, 18100000.0, -0.9297764858882517], [1436496768.0, 18120000.0, -0.9250772068344579], [1436498496.0, 18140000.0, -0.9202318473658706], [1436500224.0, 18160000.0, -0.9152411726209174], [1436501952.0, 18180000.0, -0.9101059706849959], [1436503680.0, 18200000.0, -0.9048270524660192], [1436505408.0, 18220000.0, -0.8994052515663711], [1436507136.0, 18240000.0, -0.8938414241512634], [1436508864.0, 18260000.0, -0.8881364488135445], [1436510592.0, 18280000.0, -0.8822912264349536], [1436512320.0, 18300000.0, -0.8763066800438635], [1436514048.0, 18320000.0, -0.8701837546695259], [1436515776.0, 18340000.0, -0.863923417192835], [1436517504.0, 18360000.0, -0.8575266561936524], [1436519232.0, 18380000.0, -0.8509944817946915], [1436520960.0, 18400000.0, -0.8443279255020151], [1436522688.0, 18420000.0, -0.8375280400421412], [1436524416.0, 18440000.0, -0.8305958991958126], [1436526144.0, 18460000.0, -0.8235325976284278], [1436527872.0, 18480000.0, -0.8163392507171837], [1436529600.0, 18500000.0, -0.8090169943749477], [1436531328.0, 18520000.0, -0.8015669848708763], [1436533056.0, 18540000.0, -0.7939903986478355], [1436534784.0, 18560000.0, -0.7862884321366185], [1436536512.0, 18580000.0, -0.7784623015670235], [1436538240.0, 18600000.0, -0.7705132427757886], [1436539968.0, 18620000.0, -0.7624425110114478], [1436541696.0, 18640000.0, -0.7542513807361042], [1436543424.0, 18660000.0, -0.7459411454241819], [1436545152.0, 18680000.0, -0.7375131173581742], [1436546880.0, 18700000.0, -0.7289686274214111], [1436548608.0, 18720000.0, -0.720309024887907], [1436550336.0, 18740000.0, -0.7115356772092848], [1436552064.0, 18760000.0, -0.7026499697988504], [1436553792.0, 18780000.0, -0.6936533058128055], [1436555520.0, 18800000.0, -0.6845471059286898], [1436557248.0, 18820000.0, -0.6753328081210248], [1436558976.0, 18840000.0, -0.6660118674342526], [1436560704.0, 18860000.0, -0.6565857557529566], [1436562432.0, 18880000.0, -0.6470559615694451], [1436564160.0, 18900000.0, -0.6374239897486912], [1436565888.0, 18920000.0, -0.6276913612907011], [1436567616.0, 18940000.0, -0.6178596130903357], [1436569344.0, 18960000.0, -0.6079302976946059], [1436571072.0, 18980000.0, -0.59790498305752], [1436572800.0, 19000000.0, -0.5877852522924735], [1436574528.0, 19020000.0, -0.5775727034222686], [1436576256.0, 19040000.0, -0.5672689491267567], [1436577984.0, 19060000.0, -0.5568756164881888], [1436579712.0, 19080000.0, -0.5463943467342706], [1436581440.0, 19100000.0, -0.5358267949789973], [1436583168.0, 19120000.0, -0.525174629961297], [1436584896.0, 19140000.0, -0.514439533781507], [1436586624.0, 19160000.0, -0.503623201635762], [1436588352.0, 19180000.0, -0.4927273415482919], [1436590080.0, 19200000.0, -0.4817536741017163], [1436591808.0, 19220000.0, -0.47070393216533274], [1436593536.0, 19240000.0, -0.4595798606214887], [1436595264.0, 19260000.0, -0.44838321609003384], [1436596992.0, 19280000.0, -0.4371157666509336], [1436598720.0, 19300000.0, -0.42577929156507405], [1436600448.0, 19320000.0, -0.41437558099328464], [1436602176.0, 19340000.0, -0.40290643571366386], [1436603904.0, 19360000.0, -0.3913736668372027], [1436605632.0, 19380000.0, -0.3797790955218021], [1436607360.0, 19400000.0, -0.3681245526846781], [1436609088.0, 19420000.0, -0.35641187871325153], [1436610816.0, 19440000.0, -0.34464292317451695], [1436612544.0, 19460000.0, -0.3328195445229873], [1436614272.0, 19480000.0, -0.3209436098072109], [1436616000.0, 19500000.0, -0.3090169943749479], [1436617728.0, 19520000.0, -0.29704158157703614], [1436619456.0, 19540000.0, -0.2850192624699764], [1436621184.0, 19560000.0, -0.2729519355173262], [1436622912.0, 19580000.0, -0.260841506289897], [1436624640.0, 19600000.0, -0.2486898871648556], [1436626368.0, 19620000.0, -0.23649899702372454], [1436628096.0, 19640000.0, -0.22427076094938178], [1436629824.0, 19660000.0, -0.21200710992205601], [1436631552.0, 19680000.0, -0.19970998051440741], [1436633280.0, 19700000.0, -0.1873813145857258], [1436635008.0, 19720000.0, -0.17502305897527623], [1436636736.0, 19740000.0, -0.16263716519488458], [1436638464.0, 19760000.0, -0.15022558912075704], [1436640192.0, 19780000.0, -0.13779029068463883], [1436641920.0, 19800000.0, -0.125333233564304], [1436643648.0, 19820000.0, -0.11285638487348224], [1436645376.0, 19840000.0, -0.10036171485121623], [1436647104.0, 19860000.0, -0.08785119655074351], [1436648832.0, 19880000.0, -0.07532680552793385], [1436650560.0, 19900000.0, -0.06279051952931351], [1436652288.0, 19920000.0, -0.05024431817977047], [1436654016.0, 19940000.0, -0.03769018266993446], [1436655744.0, 19960000.0, -0.02513009544333818], [1436657472.0, 19980000.0, -0.012566039883352316], [1436659200.0, 20000000.0, -4.898587196589413e-16], [1436660928.0, 20020000.0, 0.012566039883351336], [1436662656.0, 20040000.0, 0.025130095443337202], [1436664384.0, 20060000.0, 0.03769018266993348], [1436666112.0, 20080000.0, 0.050244318179769494], [1436667840.0, 20100000.0, 0.06279051952931075], [1436669568.0, 20120000.0, 0.07532680552793287], [1436671296.0, 20140000.0, 0.08785119655074078], [1436673024.0, 20160000.0, 0.10036171485121524], [1436674752.0, 20180000.0, 0.1128563848734795], [1436676480.0, 20200000.0, 0.12533323356430304], [1436678208.0, 20220000.0, 0.1377902906846361], [1436679936.0, 20240000.0, 0.15022558912075606], [1436681664.0, 20260000.0, 0.16263716519488186], [1436683392.0, 20280000.0, 0.1750230589752753], [1436685120.0, 20300000.0, 0.1873813145857231], [1436686848.0, 20320000.0, 0.19970998051440647], [1436688576.0, 20340000.0, 0.21200710992205332], [1436690304.0, 20360000.0, 0.22427076094938084], [1436692032.0, 20380000.0, 0.23649899702372357], [1436693760.0, 20400000.0, 0.24868988716485466], [1436695488.0, 20420000.0, 0.26084150628989605], [1436697216.0, 20440000.0, 0.2729519355173253], [1436698944.0, 20460000.0, 0.2850192624699737], [1436700672.0, 20480000.0, 0.2970415815770352], [1436702400.0, 20500000.0, 0.30901699437494523], [1436704128.0, 20520000.0, 0.32094360980720993], [1436705856.0, 20540000.0, 0.3328195445229847], [1436707584.0, 20560000.0, 0.34464292317451606], [1436709312.0, 20580000.0, 0.356411878713249], [1436711040.0, 20600000.0, 0.36812455268467714], [1436712768.0, 20620000.0, 0.3797790955217996], [1436714496.0, 20640000.0, 0.3913736668372018], [1436716224.0, 20660000.0, 0.40290643571366136], [1436717952.0, 20680000.0, 0.41437558099328375], [1436719680.0, 20700000.0, 0.42577929156507155], [1436721408.0, 20720000.0, 0.4371157666509327], [1436723136.0, 20740000.0, 0.44838321609003134], [1436724864.0, 20760000.0, 0.45957986062148787], [1436726592.0, 20780000.0, 0.47070393216533185], [1436728320.0, 20800000.0, 0.48175367410171543], [1436730048.0, 20820000.0, 0.49272734154829106], [1436731776.0, 20840000.0, 0.5036232016357612], [1436733504.0, 20860000.0, 0.5144395337815046], [1436735232.0, 20880000.0, 0.5251746299612963], [1436736960.0, 20900000.0, 0.535826794978995], [1436738688.0, 20920000.0, 0.5463943467342698], [1436740416.0, 20940000.0, 0.5568756164881866], [1436742144.0, 20960000.0, 0.5672689491267559], [1436743872.0, 20980000.0, 0.5775727034222664], [1436745600.0, 21000000.0, 0.5877852522924727], [1436747328.0, 21020000.0, 0.5979049830575178], [1436749056.0, 21040000.0, 0.6079302976946052], [1436750784.0, 21060000.0, 0.6178596130903335], [1436752512.0, 21080000.0, 0.6276913612907004], [1436754240.0, 21100000.0, 0.6374239897486891], [1436755968.0, 21120000.0, 0.6470559615694444], [1436757696.0, 21140000.0, 0.656585755752956], [1436759424.0, 21160000.0, 0.6660118674342519], [1436761152.0, 21180000.0, 0.6753328081210241], [1436762880.0, 21200000.0, 0.6845471059286891], [1436764608.0, 21220000.0, 0.6936533058128035], [1436766336.0, 21240000.0, 0.7026499697988497], [1436768064.0, 21260000.0, 0.7115356772092841], [1436769792.0, 21280000.0, 0.7203090248879076], [1436771520.0, 21300000.0, 0.7289686274214104], [1436773248.0, 21320000.0, 0.7375131173581735], [1436774976.0, 21340000.0, 0.7459411454241812], [1436776704.0, 21360000.0, 0.7542513807361035], [1436778432.0, 21380000.0, 0.7624425110114471], [1436780160.0, 21400000.0, 0.7705132427757891], [1436781888.0, 21420000.0, 0.7784623015670228], [1436783616.0, 21440000.0, 0.7862884321366189], [1436785344.0, 21460000.0, 0.7939903986478348], [1436787072.0, 21480000.0, 0.8015669848708767], [1436788800.0, 21500000.0, 0.8090169943749471], [1436790528.0, 21520000.0, 0.8163392507171843], [1436792256.0, 21540000.0, 0.8235325976284272], [1436793984.0, 21560000.0, 0.830595899195813], [1436795712.0, 21580000.0, 0.8375280400421407], [1436797440.0, 21600000.0, 0.8443279255020155], [1436799168.0, 21620000.0, 0.850994481794691], [1436800896.0, 21640000.0, 0.8575266561936529], [1436802624.0, 21660000.0, 0.8639234171928346], [1436804352.0, 21680000.0, 0.8701837546695255], [1436806080.0, 21700000.0, 0.876306680043863], [1436807808.0, 21720000.0, 0.8822912264349532], [1436809536.0, 21740000.0, 0.888136448813544], [1436811264.0, 21760000.0, 0.8938414241512638], [1436812992.0, 21780000.0, 0.8994052515663706], [1436814720.0, 21800000.0, 0.9048270524660196], [1436816448.0, 21820000.0, 0.9101059706849954], [1436818176.0, 21840000.0, 0.9152411726209178], [1436819904.0, 21860000.0, 0.9202318473658702], [1436821632.0, 21880000.0, 0.9250772068344583], [1436823360.0, 21900000.0, 0.9297764858882513], [1436825088.0, 21920000.0, 0.9343289424566124], [1436826816.0, 21940000.0, 0.9387338576538741], [1436828544.0, 21960000.0, 0.9429905358928649], [1436830272.0, 21980000.0, 0.9470983049947438], [1436832000.0, 22000000.0, 0.951056516295154], [1436833728.0, 22020000.0, 0.9548645447466426], [1436835456.0, 22040000.0, 0.9585217890173763], [1436837184.0, 22060000.0, 0.9620276715860856], [1436838912.0, 22080000.0, 0.9653816388332739], [1436840640.0, 22100000.0, 0.9685831611286309], [1436842368.0, 22120000.0, 0.971631732914674], [1436844096.0, 22140000.0, 0.974526872786577], [1436845824.0, 22160000.0, 0.9772681235681935], [1436847552.0, 22180000.0, 0.9798550523842467], [1436849280.0, 22200000.0, 0.9822872507286888], [1436851008.0, 22220000.0, 0.9845643345292053], [1436852736.0, 22240000.0, 0.9866859442078681], [1436854464.0, 22260000.0, 0.988651744737914], [1436856192.0, 22280000.0, 0.9904614256966513], [1436857920.0, 22300000.0, 0.9921147013144779], [1436859648.0, 22320000.0, 0.9936113105200085], [1436861376.0, 22340000.0, 0.9949510169813001], [1436863104.0, 22360000.0, 0.9961336091431726], [1436864832.0, 22380000.0, 0.9971589002606138], [1436866560.0, 22400000.0, 0.9980267284282717], [1436868288.0, 22420000.0, 0.9987369566060175], [1436870016.0, 22440000.0, 0.9992894726405892], [1436871744.0, 22460000.0, 0.9996841892832999], [1436873472.0, 22480000.0, 0.9999210442038161], [1436875200.0, 22500000.0, 1.0], [1436876928.0, 22520000.0, 0.9999210442038161], [1436878656.0, 22540000.0, 0.9996841892832999], [1436880384.0, 22560000.0, 0.9992894726405893], [1436882112.0, 22580000.0, 0.9987369566060175], [1436883840.0, 22600000.0, 0.9980267284282718], [1436885568.0, 22620000.0, 0.9971589002606139], [1436887296.0, 22640000.0, 0.9961336091431727], [1436889024.0, 22660000.0, 0.9949510169813002], [1436890752.0, 22680000.0, 0.9936113105200086], [1436892480.0, 22700000.0, 0.992114701314478], [1436894208.0, 22720000.0, 0.9904614256966515], [1436895936.0, 22740000.0, 0.9886517447379142], [1436897664.0, 22760000.0, 0.9866859442078684], [1436899392.0, 22780000.0, 0.9845643345292056], [1436901120.0, 22800000.0, 0.9822872507286889], [1436902848.0, 22820000.0, 0.979855052384247], [1436904576.0, 22840000.0, 0.9772681235681938], [1436906304.0, 22860000.0, 0.9745268727865772], [1436908032.0, 22880000.0, 0.9716317329146742], [1436909760.0, 22900000.0, 0.9685831611286312], [1436911488.0, 22920000.0, 0.9653816388332741], [1436913216.0, 22940000.0, 0.9620276715860859], [1436914944.0, 22960000.0, 0.9585217890173766], [1436916672.0, 22980000.0, 0.9548645447466428], [1436918400.0, 23000000.0, 0.9510565162951543], [1436920128.0, 23020000.0, 0.9470983049947441], [1436921856.0, 23040000.0, 0.9429905358928652], [1436923584.0, 23060000.0, 0.9387338576538745], [1436925312.0, 23080000.0, 0.9343289424566127], [1436927040.0, 23100000.0, 0.9297764858882518], [1436928768.0, 23120000.0, 0.9250772068344587], [1436930496.0, 23140000.0, 0.9202318473658706], [1436932224.0, 23160000.0, 0.9152411726209182], [1436933952.0, 23180000.0, 0.9101059706849959], [1436935680.0, 23200000.0, 0.90482705246602], [1436937408.0, 23220000.0, 0.8994052515663712], [1436939136.0, 23240000.0, 0.8938414241512642], [1436940864.0, 23260000.0, 0.8881364488135446], [1436942592.0, 23280000.0, 0.8822912264349537], [1436944320.0, 23300000.0, 0.8763066800438635], [1436946048.0, 23320000.0, 0.870183754669526], [1436947776.0, 23340000.0, 0.8639234171928352], [1436949504.0, 23360000.0, 0.8575266561936534], [1436951232.0, 23380000.0, 0.8509944817946915], [1436952960.0, 23400000.0, 0.8443279255020162], [1436954688.0, 23420000.0, 0.8375280400421413], [1436956416.0, 23440000.0, 0.8305958991958137], [1436958144.0, 23460000.0, 0.8235325976284279], [1436959872.0, 23480000.0, 0.8163392507171848], [1436961600.0, 23500000.0, 0.8090169943749478], [1436963328.0, 23520000.0, 0.8015669848708774], [1436965056.0, 23540000.0, 0.7939903986478356], [1436966784.0, 23560000.0, 0.7862884321366196], [1436968512.0, 23580000.0, 0.7784623015670236], [1436970240.0, 23600000.0, 0.7705132427757898], [1436971968.0, 23620000.0, 0.7624425110114478], [1436973696.0, 23640000.0, 0.7542513807361043], [1436975424.0, 23660000.0, 0.745941145424182], [1436977152.0, 23680000.0, 0.7375131173581743], [1436978880.0, 23700000.0, 0.7289686274214112], [1436980608.0, 23720000.0, 0.7203090248879084], [1436982336.0, 23740000.0, 0.7115356772092849], [1436984064.0, 23760000.0, 0.7026499697988505], [1436985792.0, 23780000.0, 0.6936533058128043], [1436987520.0, 23800000.0, 0.6845471059286898], [1436989248.0, 23820000.0, 0.6753328081210249], [1436990976.0, 23840000.0, 0.6660118674342527], [1436992704.0, 23860000.0, 0.6565857557529567], [1436994432.0, 23880000.0, 0.6470559615694452], [1436996160.0, 23900000.0, 0.6374239897486899], [1436997888.0, 23920000.0, 0.6276913612907012], [1436999616.0, 23940000.0, 0.6178596130903343], [1437001344.0, 23960000.0, 0.607930297694606], [1437003072.0, 23980000.0, 0.5979049830575187], [1437004800.0, 24000000.0, 0.5877852522924736], [1437006528.0, 24020000.0, 0.5775727034222673], [1437008256.0, 24040000.0, 0.5672689491267568], [1437009984.0, 24060000.0, 0.5568756164881875], [1437011712.0, 24080000.0, 0.5463943467342707], [1437013440.0, 24100000.0, 0.5358267949789959], [1437015168.0, 24120000.0, 0.5251746299612972], [1437016896.0, 24140000.0, 0.5144395337815055], [1437018624.0, 24160000.0, 0.5036232016357621], [1437020352.0, 24180000.0, 0.492727341548292], [1437022080.0, 24200000.0, 0.48175367410171643], [1437023808.0, 24220000.0, 0.47070393216533285], [1437025536.0, 24240000.0, 0.4595798606214888], [1437027264.0, 24260000.0, 0.44838321609003234], [1437028992.0, 24280000.0, 0.4371157666509337], [1437030720.0, 24300000.0, 0.42577929156507255], [1437032448.0, 24320000.0, 0.41437558099328475], [1437034176.0, 24340000.0, 0.40290643571366236], [1437035904.0, 24360000.0, 0.3913736668372028], [1437037632.0, 24380000.0, 0.3797790955218006], [1437039360.0, 24400000.0, 0.3681245526846782], [1437041088.0, 24420000.0, 0.35641187871325003], [1437042816.0, 24440000.0, 0.3446429231745171], [1437044544.0, 24460000.0, 0.33281954452298573], [1437046272.0, 24480000.0, 0.320943609807211], [1437048000.0, 24500000.0, 0.3090169943749463], [1437049728.0, 24520000.0, 0.29704158157703625], [1437051456.0, 24540000.0, 0.2850192624699748], [1437053184.0, 24560000.0, 0.2729519355173264], [1437054912.0, 24580000.0, 0.2608415062898971], [1437056640.0, 24600000.0, 0.2486898871648557], [1437058368.0, 24620000.0, 0.23649899702372465], [1437060096.0, 24640000.0, 0.22427076094938192], [1437061824.0, 24660000.0, 0.2120071099220544], [1437063552.0, 24680000.0, 0.19970998051440755], [1437065280.0, 24700000.0, 0.18738131458572418], [1437067008.0, 24720000.0, 0.17502305897527637], [1437068736.0, 24740000.0, 0.16263716519488294], [1437070464.0, 24760000.0, 0.15022558912075717], [1437072192.0, 24780000.0, 0.1377902906846372], [1437073920.0, 24800000.0, 0.12533323356430415], [1437075648.0, 24820000.0, 0.1128563848734806], [1437077376.0, 24840000.0, 0.10036171485121634], [1437079104.0, 24860000.0, 0.08785119655074188], [1437080832.0, 24880000.0, 0.07532680552793397], [1437082560.0, 24900000.0, 0.06279051952931186], [1437084288.0, 24920000.0, 0.05024431817977059], [1437086016.0, 24940000.0, 0.03769018266993458], [1437087744.0, 24960000.0, 0.0251300954433383], [1437089472.0, 24980000.0, 0.012566039883352437], [1437091200.0, 25000000.0, 6.123233995736766e-16], [1437092928.0, 25020000.0, -0.012566039883351214], [1437094656.0, 25040000.0, -0.02513009544333708], [1437096384.0, 25060000.0, -0.037690182669933354], [1437098112.0, 25080000.0, -0.05024431817976937], [1437099840.0, 25100000.0, -0.06279051952931064], [1437101568.0, 25120000.0, -0.07532680552793275], [1437103296.0, 25140000.0, -0.08785119655074065], [1437105024.0, 25160000.0, -0.10036171485121513], [1437106752.0, 25180000.0, -0.11285638487347938], [1437108480.0, 25200000.0, -0.12533323356430293], [1437110208.0, 25220000.0, -0.13779029068463597], [1437111936.0, 25240000.0, -0.15022558912075595], [1437113664.0, 25260000.0, -0.16263716519488172], [1437115392.0, 25280000.0, -0.17502305897527515], [1437117120.0, 25300000.0, -0.18738131458572296], [1437118848.0, 25320000.0, -0.19970998051440633], [1437120576.0, 25340000.0, -0.2120071099220532], [1437122304.0, 25360000.0, -0.22427076094938073], [1437124032.0, 25380000.0, -0.23649899702372346], [1437125760.0, 25400000.0, -0.24868988716485452], [1437127488.0, 25420000.0, -0.26084150628989594], [1437129216.0, 25440000.0, -0.27295193551732516], [1437130944.0, 25460000.0, -0.2850192624699736], [1437132672.0, 25480000.0, -0.29704158157703336], [1437134400.0, 25500000.0, -0.3090169943749451], [1437136128.0, 25520000.0, -0.3209436098072098], [1437137856.0, 25540000.0, -0.33281954452298623], [1437139584.0, 25560000.0, -0.34464292317451595], [1437141312.0, 25580000.0, -0.35641187871324886], [1437143040.0, 25600000.0, -0.3681245526846787], [1437144768.0, 25620000.0, -0.3797790955218011], [1437146496.0, 25640000.0, -0.3913736668372017], [1437148224.0, 25660000.0, -0.40290643571366125], [1437149952.0, 25680000.0, -0.41437558099328525], [1437151680.0, 25700000.0, -0.42577929156506983], [1437153408.0, 25720000.0, -0.4371157666509326], [1437155136.0, 25740000.0, -0.44838321609003123], [1437156864.0, 25760000.0, -0.45957986062148615], [1437158592.0, 25780000.0, -0.4707039321653302], [1437160320.0, 25800000.0, -0.4817536741017153], [1437162048.0, 25820000.0, -0.49272734154829095], [1437163776.0, 25840000.0, -0.5036232016357596], [1437165504.0, 25860000.0, -0.5144395337815045], [1437167232.0, 25880000.0, -0.5251746299612962], [1437168960.0, 25900000.0, -0.5358267949789964], [1437170688.0, 25920000.0, -0.5463943467342682], [1437172416.0, 25940000.0, -0.5568756164881865], [1437174144.0, 25960000.0, -0.5672689491267573], [1437175872.0, 25980000.0, -0.5775727034222677], [1437177600.0, 26000000.0, -0.5877852522924726], [1437179328.0, 26020000.0, -0.5979049830575177], [1437181056.0, 26040000.0, -0.6079302976946065], [1437182784.0, 26060000.0, -0.617859613090332], [1437184512.0, 26080000.0, -0.6276913612907004], [1437186240.0, 26100000.0, -0.637423989748689], [1437187968.0, 26120000.0, -0.647055961569443], [1437189696.0, 26140000.0, -0.6565857557529545], [1437191424.0, 26160000.0, -0.6660118674342518], [1437193152.0, 26180000.0, -0.675332808121024], [1437194880.0, 26200000.0, -0.6845471059286877], [1437196608.0, 26220000.0, -0.6936533058128034], [1437198336.0, 26240000.0, -0.7026499697988496], [1437200064.0, 26260000.0, -0.7115356772092852], [1437201792.0, 26280000.0, -0.7203090248879063], [1437203520.0, 26300000.0, -0.7289686274214103], [1437205248.0, 26320000.0, -0.7375131173581746], [1437206976.0, 26340000.0, -0.7459411454241823], [1437208704.0, 26360000.0, -0.7542513807361034], [1437210432.0, 26380000.0, -0.762442511011447], [1437212160.0, 26400000.0, -0.7705132427757901], [1437213888.0, 26420000.0, -0.7784623015670217], [1437215616.0, 26440000.0, -0.7862884321366188], [1437217344.0, 26460000.0, -0.7939903986478348], [1437219072.0, 26480000.0, -0.8015669848708777], [1437220800.0, 26500000.0, -0.809016994374946], [1437222528.0, 26520000.0, -0.8163392507171842], [1437224256.0, 26540000.0, -0.8235325976284272], [1437225984.0, 26560000.0, -0.830595899195812], [1437227712.0, 26580000.0, -0.8375280400421407], [1437229440.0, 26600000.0, -0.8443279255020155], [1437231168.0, 26620000.0, -0.8509944817946918], [1437232896.0, 26640000.0, -0.8575266561936519], [1437234624.0, 26660000.0, -0.8639234171928345], [1437236352.0, 26680000.0, -0.8701837546695262], [1437238080.0, 26700000.0, -0.8763066800438638], [1437239808.0, 26720000.0, -0.8822912264349531], [1437241536.0, 26740000.0, -0.888136448813544], [1437243264.0, 26760000.0, -0.8938414241512646], [1437244992.0, 26780000.0, -0.8994052515663699], [1437246720.0, 26800000.0, -0.9048270524660196], [1437248448.0, 26820000.0, -0.9101059706849953], [1437250176.0, 26840000.0, -0.9152411726209184], [1437251904.0, 26860000.0, -0.9202318473658695], [1437253632.0, 26880000.0, -0.9250772068344583], [1437255360.0, 26900000.0, -0.9297764858882513], [1437257088.0, 26920000.0, -0.9343289424566117], [1437258816.0, 26940000.0, -0.9387338576538734], [1437260544.0, 26960000.0, -0.9429905358928647], [1437262272.0, 26980000.0, -0.9470983049947443], [1437264000.0, 27000000.0, -0.9510565162951534], [1437265728.0, 27020000.0, -0.9548645447466425], [1437267456.0, 27040000.0, -0.9585217890173763], [1437269184.0, 27060000.0, -0.962027671586086], [1437270912.0, 27080000.0, -0.9653816388332738], [1437272640.0, 27100000.0, -0.9685831611286309], [1437274368.0, 27120000.0, -0.9716317329146743], [1437276096.0, 27140000.0, -0.9745268727865766], [1437277824.0, 27160000.0, -0.9772681235681935], [1437279552.0, 27180000.0, -0.9798550523842467], [1437281280.0, 27200000.0, -0.982287250728689], [1437283008.0, 27220000.0, -0.984564334529205], [1437284736.0, 27240000.0, -0.9866859442078681], [1437286464.0, 27260000.0, -0.988651744737914], [1437288192.0, 27280000.0, -0.9904614256966511], [1437289920.0, 27300000.0, -0.9921147013144777], [1437291648.0, 27320000.0, -0.9936113105200085], [1437293376.0, 27340000.0, -0.9949510169813002], [1437295104.0, 27360000.0, -0.9961336091431724], [1437296832.0, 27380000.0, -0.9971589002606138], [1437298560.0, 27400000.0, -0.9980267284282717], [1437300288.0, 27420000.0, -0.9987369566060176], [1437302016.0, 27440000.0, -0.9992894726405892], [1437303744.0, 27460000.0, -0.9996841892832999], [1437305472.0, 27480000.0, -0.9999210442038161], [1437307200.0, 27500000.0, -1.0], [1437308928.0, 27520000.0, -0.9999210442038161], [1437310656.0, 27540000.0, -0.9996841892832999], [1437312384.0, 27560000.0, -0.9992894726405893], [1437314112.0, 27580000.0, -0.9987369566060176], [1437315840.0, 27600000.0, -0.9980267284282718], [1437317568.0, 27620000.0, -0.9971589002606139], [1437319296.0, 27640000.0, -0.9961336091431725], [1437321024.0, 27660000.0, -0.9949510169813003], [1437322752.0, 27680000.0, -0.9936113105200087], [1437324480.0, 27700000.0, -0.9921147013144778], [1437326208.0, 27720000.0, -0.9904614256966513], [1437327936.0, 27740000.0, -0.9886517447379142], [1437329664.0, 27760000.0, -0.9866859442078684], [1437331392.0, 27780000.0, -0.9845643345292052], [1437333120.0, 27800000.0, -0.9822872507286894], [1437334848.0, 27820000.0, -0.979855052384247], [1437336576.0, 27840000.0, -0.9772681235681938], [1437338304.0, 27860000.0, -0.9745268727865769], [1437340032.0, 27880000.0, -0.9716317329146746], [1437341760.0, 27900000.0, -0.9685831611286312], [1437343488.0, 27920000.0, -0.9653816388332742], [1437345216.0, 27940000.0, -0.9620276715860864], [1437346944.0, 27960000.0, -0.9585217890173766], [1437348672.0, 27980000.0, -0.954864544746643], [1437350400.0, 28000000.0, -0.9510565162951538], [1437352128.0, 28020000.0, -0.9470983049947448], [1437353856.0, 28040000.0, -0.9429905358928652], [1437355584.0, 28060000.0, -0.938733857653874], [1437357312.0, 28080000.0, -0.9343289424566121], [1437359040.0, 28100000.0, -0.9297764858882518], [1437360768.0, 28120000.0, -0.9250772068344587], [1437362496.0, 28140000.0, -0.9202318473658699], [1437364224.0, 28160000.0, -0.915241172620919], [1437365952.0, 28180000.0, -0.910105970684996], [1437367680.0, 28200000.0, -0.9048270524660201], [1437369408.0, 28220000.0, -0.8994052515663704], [1437371136.0, 28240000.0, -0.8938414241512651], [1437372864.0, 28260000.0, -0.8881364488135446], [1437374592.0, 28280000.0, -0.8822912264349537], [1437376320.0, 28300000.0, -0.8763066800438645], [1437378048.0, 28320000.0, -0.8701837546695269], [1437379776.0, 28340000.0, -0.8639234171928352], [1437381504.0, 28360000.0, -0.8575266561936525], [1437383232.0, 28380000.0, -0.8509944817946925], [1437384960.0, 28400000.0, -0.8443279255020162], [1437386688.0, 28420000.0, -0.8375280400421413], [1437388416.0, 28440000.0, -0.8305958991958127], [1437390144.0, 28460000.0, -0.8235325976284279], [1437391872.0, 28480000.0, -0.8163392507171849], [1437393600.0, 28500000.0, -0.8090169943749468], [1437395328.0, 28520000.0, -0.8015669848708785], [1437397056.0, 28540000.0, -0.7939903986478356], [1437398784.0, 28560000.0, -0.7862884321366197], [1437400512.0, 28580000.0, -0.7784623015670225], [1437402240.0, 28600000.0, -0.770513242775791], [1437403968.0, 28620000.0, -0.7624425110114479], [1437405696.0, 28640000.0, -0.7542513807361043], [1437407424.0, 28660000.0, -0.7459411454241832], [1437409152.0, 28680000.0, -0.7375131173581755], [1437410880.0, 28700000.0, -0.7289686274214112], [1437412608.0, 28720000.0, -0.7203090248879072], [1437414336.0, 28740000.0, -0.7115356772092862], [1437416064.0, 28760000.0, -0.7026499697988506], [1437417792.0, 28780000.0, -0.6936533058128044], [1437419520.0, 28800000.0, -0.6845471059286886], [1437421248.0, 28820000.0, -0.675332808121025], [1437422976.0, 28840000.0, -0.6660118674342528], [1437424704.0, 28860000.0, -0.6565857557529555], [1437426432.0, 28880000.0, -0.647055961569444], [1437428160.0, 28900000.0, -0.63742398974869], [1437429888.0, 28920000.0, -0.6276913612907014], [1437431616.0, 28940000.0, -0.6178596130903331], [1437433344.0, 28960000.0, -0.6079302976946075], [1437435072.0, 28980000.0, -0.5979049830575188], [1437436800.0, 29000000.0, -0.5877852522924737], [1437438528.0, 29020000.0, -0.5775727034222689], [1437440256.0, 29040000.0, -0.5672689491267584], [1437441984.0, 29060000.0, -0.5568756164881876], [1437443712.0, 29080000.0, -0.5463943467342693], [1437445440.0, 29100000.0, -0.5358267949789975], [1437447168.0, 29120000.0, -0.5251746299612973], [1437448896.0, 29140000.0, -0.5144395337815056], [1437450624.0, 29160000.0, -0.5036232016357607], [1437452352.0, 29180000.0, -0.4927273415482921], [1437454080.0, 29200000.0, -0.48175367410171654], [1437455808.0, 29220000.0, -0.47070393216533135], [1437457536.0, 29240000.0, -0.45957986062148737], [1437459264.0, 29260000.0, -0.44838321609003245], [1437460992.0, 29280000.0, -0.4371157666509338], [1437462720.0, 29300000.0, -0.42577929156507105], [1437464448.0, 29320000.0, -0.4143755809932865], [1437466176.0, 29340000.0, -0.40290643571366247], [1437467904.0, 29360000.0, -0.3913736668372029], [1437469632.0, 29380000.0, -0.3797790955218024], [1437471360.0, 29400000.0, -0.36812455268468], [1437473088.0, 29420000.0, -0.35641187871325014], [1437474816.0, 29440000.0, -0.3446429231745172], [1437476544.0, 29460000.0, -0.3328195445229875], [1437478272.0, 29480000.0, -0.3209436098072111], [1437480000.0, 29500000.0, -0.3090169943749464], [1437481728.0, 29520000.0, -0.29704158157703464], [1437483456.0, 29540000.0, -0.2850192624699766], [1437485184.0, 29560000.0, -0.2729519355173265], [1437486912.0, 29580000.0, -0.2608415062898955], [1437488640.0, 29600000.0, -0.2486898871648541], [1437490368.0, 29620000.0, -0.23649899702372476], [1437492096.0, 29640000.0, -0.22427076094938203], [1437493824.0, 29660000.0, -0.2120071099220528], [1437495552.0, 29680000.0, -0.1997099805144094], [1437497280.0, 29700000.0, -0.1873813145857243], [1437499008.0, 29720000.0, -0.17502305897527648], [1437500736.0, 29740000.0, -0.1626371651948848], [1437502464.0, 29760000.0, -0.15022558912075903], [1437504192.0, 29780000.0, -0.1377902906846373], [1437505920.0, 29800000.0, -0.12533323356430426], [1437507648.0, 29820000.0, -0.11285638487348248], [1437509376.0, 29840000.0, -0.10036171485121646], [1437511104.0, 29860000.0, -0.087851196550742], [1437512832.0, 29880000.0, -0.07532680552793232], [1437514560.0, 29900000.0, -0.06279051952931375], [1437516288.0, 29920000.0, -0.050244318179770715], [1437518016.0, 29940000.0, -0.03769018266993293], [1437519744.0, 29960000.0, -0.02513009544333665], [1437521472.0, 29980000.0, -0.01256603988335256], [1437523200.0, 30000000.0, -7.347880794884119e-16], [1437524928.0, 30020000.0, 0.012566039883351091], [1437526656.0, 30040000.0, 0.02513009544333518], [1437528384.0, 30060000.0, 0.03769018266993146], [1437530112.0, 30080000.0, 0.050244318179769244], [1437531840.0, 30100000.0, 0.06279051952931229], [1437533568.0, 30120000.0, 0.07532680552793085], [1437535296.0, 30140000.0, 0.08785119655074053], [1437537024.0, 30160000.0, 0.100361714851215], [1437538752.0, 30180000.0, 0.11285638487348103], [1437540480.0, 30200000.0, 0.12533323356430282], [1437542208.0, 30220000.0, 0.13779029068463586], [1437543936.0, 30240000.0, 0.1502255891207576], [1437545664.0, 30260000.0, 0.16263716519488336], [1437547392.0, 30280000.0, 0.17502305897527504], [1437549120.0, 30300000.0, 0.18738131458572285], [1437550848.0, 30320000.0, 0.19970998051440797], [1437552576.0, 30340000.0, 0.21200710992205135], [1437554304.0, 30360000.0, 0.2242707609493806], [1437556032.0, 30380000.0, 0.23649899702372335], [1437557760.0, 30400000.0, 0.24868988716485269], [1437559488.0, 30420000.0, 0.2608415062898941], [1437561216.0, 30440000.0, 0.27295193551732505], [1437562944.0, 30460000.0, 0.2850192624699752], [1437564672.0, 30480000.0, 0.29704158157703325], [1437566400.0, 30500000.0, 0.309016994374945], [1437568128.0, 30520000.0, 0.3209436098072097], [1437569856.0, 30540000.0, 0.3328195445229861], [1437571584.0, 30560000.0, 0.34464292317451584], [1437573312.0, 30580000.0, 0.35641187871324875], [1437575040.0, 30600000.0, 0.3681245526846786], [1437576768.0, 30620000.0, 0.379779095521801], [1437578496.0, 30640000.0, 0.3913736668372016], [1437580224.0, 30660000.0, 0.40290643571366114], [1437581952.0, 30680000.0, 0.41437558099328514], [1437583680.0, 30700000.0, 0.4257792915650697], [1437585408.0, 30720000.0, 0.4371157666509325], [1437587136.0, 30740000.0, 0.4483832160900311], [1437588864.0, 30760000.0, 0.45957986062148604], [1437590592.0, 30780000.0, 0.4707039321653301], [1437592320.0, 30800000.0, 0.4817536741017152], [1437594048.0, 30820000.0, 0.49272734154829084], [1437595776.0, 30840000.0, 0.5036232016357595], [1437597504.0, 30860000.0, 0.5144395337815044], [1437599232.0, 30880000.0, 0.525174629961296], [1437600960.0, 30900000.0, 0.5358267949789963], [1437602688.0, 30920000.0, 0.5463943467342681], [1437604416.0, 30940000.0, 0.5568756164881864], [1437606144.0, 30960000.0, 0.5672689491267572], [1437607872.0, 30980000.0, 0.5775727034222676], [1437609600.0, 31000000.0, 0.5877852522924725], [1437611328.0, 31020000.0, 0.5979049830575176], [1437613056.0, 31040000.0, 0.6079302976946064], [1437614784.0, 31060000.0, 0.6178596130903319], [1437616512.0, 31080000.0, 0.6276913612907002], [1437618240.0, 31100000.0, 0.6374239897486889], [1437619968.0, 31120000.0, 0.6470559615694429], [1437621696.0, 31140000.0, 0.6565857557529544], [1437623424.0, 31160000.0, 0.6660118674342517], [1437625152.0, 31180000.0, 0.6753328081210239], [1437626880.0, 31200000.0, 0.6845471059286876], [1437628608.0, 31220000.0, 0.6936533058128034], [1437630336.0, 31240000.0, 0.7026499697988495], [1437632064.0, 31260000.0, 0.7115356772092851], [1437633792.0, 31280000.0, 0.7203090248879062], [1437635520.0, 31300000.0, 0.7289686274214102], [1437637248.0, 31320000.0, 0.7375131173581745], [1437638976.0, 31340000.0, 0.7459411454241822], [1437640704.0, 31360000.0, 0.7542513807361034], [1437642432.0, 31380000.0, 0.762442511011447], [1437644160.0, 31400000.0, 0.7705132427757901], [1437645888.0, 31420000.0, 0.7784623015670216], [1437647616.0, 31440000.0, 0.7862884321366188], [1437649344.0, 31460000.0, 0.7939903986478347], [1437651072.0, 31480000.0, 0.8015669848708776], [1437652800.0, 31500000.0, 0.8090169943749459], [1437654528.0, 31520000.0, 0.816339250717184], [1437656256.0, 31540000.0, 0.8235325976284271], [1437657984.0, 31560000.0, 0.8305958991958119], [1437659712.0, 31580000.0, 0.8375280400421405], [1437661440.0, 31600000.0, 0.8443279255020154], [1437663168.0, 31620000.0, 0.8509944817946918], [1437664896.0, 31640000.0, 0.8575266561936518], [1437666624.0, 31660000.0, 0.8639234171928345], [1437668352.0, 31680000.0, 0.8701837546695262], [1437670080.0, 31700000.0, 0.8763066800438637], [1437671808.0, 31720000.0, 0.8822912264349531], [1437673536.0, 31740000.0, 0.8881364488135439], [1437675264.0, 31760000.0, 0.8938414241512644], [1437676992.0, 31780000.0, 0.8994052515663697], [1437678720.0, 31800000.0, 0.9048270524660195], [1437680448.0, 31820000.0, 0.9101059706849953], [1437682176.0, 31840000.0, 0.9152411726209183], [1437683904.0, 31860000.0, 0.9202318473658694], [1437685632.0, 31880000.0, 0.9250772068344582], [1437687360.0, 31900000.0, 0.9297764858882512], [1437689088.0, 31920000.0, 0.9343289424566116], [1437690816.0, 31940000.0, 0.9387338576538734], [1437692544.0, 31960000.0, 0.9429905358928647], [1437694272.0, 31980000.0, 0.9470983049947442], [1437696000.0, 32000000.0, 0.9510565162951533], [1437697728.0, 32020000.0, 0.9548645447466425], [1437699456.0, 32040000.0, 0.9585217890173763], [1437701184.0, 32060000.0, 0.962027671586086], [1437702912.0, 32080000.0, 0.9653816388332738], [1437704640.0, 32100000.0, 0.9685831611286309], [1437706368.0, 32120000.0, 0.9716317329146743], [1437708096.0, 32140000.0, 0.9745268727865766], [1437709824.0, 32160000.0, 0.9772681235681935], [1437711552.0, 32180000.0, 0.9798550523842467], [1437713280.0, 32200000.0, 0.982287250728689], [1437715008.0, 32220000.0, 0.984564334529205], [1437716736.0, 32240000.0, 0.9866859442078681], [1437718464.0, 32260000.0, 0.988651744737914], [1437720192.0, 32280000.0, 0.9904614256966511], [1437721920.0, 32300000.0, 0.9921147013144775], [1437723648.0, 32320000.0, 0.9936113105200085], [1437725376.0, 32340000.0, 0.9949510169813002], [1437727104.0, 32360000.0, 0.9961336091431724], [1437728832.0, 32380000.0, 0.9971589002606138], [1437730560.0, 32400000.0, 0.9980267284282717], [1437732288.0, 32420000.0, 0.9987369566060176], [1437734016.0, 32440000.0, 0.9992894726405892], [1437735744.0, 32460000.0, 0.9996841892832999], [1437737472.0, 32480000.0, 0.9999210442038161], [1437739200.0, 32500000.0, 1.0], [1437740928.0, 32520000.0, 0.9999210442038161], [1437742656.0, 32540000.0, 0.9996841892833], [1437744384.0, 32560000.0, 0.9992894726405893], [1437746112.0, 32580000.0, 0.9987369566060176], [1437747840.0, 32600000.0, 0.9980267284282718], [1437749568.0, 32620000.0, 0.9971589002606139], [1437751296.0, 32640000.0, 0.9961336091431725], [1437753024.0, 32660000.0, 0.9949510169813003], [1437754752.0, 32680000.0, 0.9936113105200087], [1437756480.0, 32700000.0, 0.9921147013144778], [1437758208.0, 32720000.0, 0.9904614256966513], [1437759936.0, 32740000.0, 0.9886517447379142], [1437761664.0, 32760000.0, 0.9866859442078684], [1437763392.0, 32780000.0, 0.9845643345292052], [1437765120.0, 32800000.0, 0.9822872507286894], [1437766848.0, 32820000.0, 0.9798550523842471], [1437768576.0, 32840000.0, 0.9772681235681938], [1437770304.0, 32860000.0, 0.9745268727865769], [1437772032.0, 32880000.0, 0.9716317329146748], [1437773760.0, 32900000.0, 0.9685831611286312], [1437775488.0, 32920000.0, 0.9653816388332742], [1437777216.0, 32940000.0, 0.9620276715860865], [1437778944.0, 32960000.0, 0.9585217890173767], [1437780672.0, 32980000.0, 0.954864544746643], [1437782400.0, 33000000.0, 0.9510565162951539], [1437784128.0, 33020000.0, 0.9470983049947448], [1437785856.0, 33040000.0, 0.9429905358928653], [1437787584.0, 33060000.0, 0.938733857653874], [1437789312.0, 33080000.0, 0.9343289424566121], [1437791040.0, 33100000.0, 0.9297764858882518], [1437792768.0, 33120000.0, 0.9250772068344588], [1437794496.0, 33140000.0, 0.92023184736587], [1437796224.0, 33160000.0, 0.915241172620919], [1437797952.0, 33180000.0, 0.910105970684996], [1437799680.0, 33200000.0, 0.9048270524660201], [1437801408.0, 33220000.0, 0.8994052515663705], [1437803136.0, 33240000.0, 0.8938414241512652], [1437804864.0, 33260000.0, 0.8881364488135447], [1437806592.0, 33280000.0, 0.8822912264349538], [1437808320.0, 33300000.0, 0.8763066800438645], [1437810048.0, 33320000.0, 0.870183754669527], [1437811776.0, 33340000.0, 0.8639234171928353], [1437813504.0, 33360000.0, 0.8575266561936526], [1437815232.0, 33380000.0, 0.8509944817946926], [1437816960.0, 33400000.0, 0.8443279255020163], [1437818688.0, 33420000.0, 0.8375280400421414], [1437820416.0, 33440000.0, 0.8305958991958128], [1437822144.0, 33460000.0, 0.823532597628428], [1437823872.0, 33480000.0, 0.816339250717185], [1437825600.0, 33500000.0, 0.8090169943749469], [1437827328.0, 33520000.0, 0.8015669848708786], [1437829056.0, 33540000.0, 0.7939903986478357], [1437830784.0, 33560000.0, 0.7862884321366198], [1437832512.0, 33580000.0, 0.7784623015670226], [1437834240.0, 33600000.0, 0.7705132427757911], [1437835968.0, 33620000.0, 0.762442511011448], [1437837696.0, 33640000.0, 0.7542513807361044], [1437839424.0, 33660000.0, 0.7459411454241833], [1437841152.0, 33680000.0, 0.7375131173581756], [1437842880.0, 33700000.0, 0.7289686274214113], [1437844608.0, 33720000.0, 0.7203090248879073], [1437846336.0, 33740000.0, 0.7115356772092862], [1437848064.0, 33760000.0, 0.7026499697988507], [1437849792.0, 33780000.0, 0.6936533058128045], [1437851520.0, 33800000.0, 0.6845471059286887], [1437853248.0, 33820000.0, 0.6753328081210251], [1437854976.0, 33840000.0, 0.6660118674342529], [1437856704.0, 33860000.0, 0.6565857557529556], [1437858432.0, 33880000.0, 0.6470559615694441], [1437860160.0, 33900000.0, 0.6374239897486901], [1437861888.0, 33920000.0, 0.6276913612907015], [1437863616.0, 33940000.0, 0.6178596130903331], [1437865344.0, 33960000.0, 0.6079302976946076], [1437867072.0, 33980000.0, 0.5979049830575189], [1437868800.0, 34000000.0, 0.5877852522924738], [1437870528.0, 34020000.0, 0.577572703422269], [1437872256.0, 34040000.0, 0.5672689491267585], [1437873984.0, 34060000.0, 0.5568756164881877], [1437875712.0, 34080000.0, 0.5463943467342695], [1437877440.0, 34100000.0, 0.5358267949789977], [1437879168.0, 34120000.0, 0.5251746299612974], [1437880896.0, 34140000.0, 0.5144395337815058], [1437882624.0, 34160000.0, 0.5036232016357608], [1437884352.0, 34180000.0, 0.49272734154829223], [1437886080.0, 34200000.0, 0.48175367410171666], [1437887808.0, 34220000.0, 0.47070393216533146], [1437889536.0, 34240000.0, 0.4595798606214875], [1437891264.0, 34260000.0, 0.44838321609003257], [1437892992.0, 34280000.0, 0.43711576665093393], [1437894720.0, 34300000.0, 0.42577929156507116], [1437896448.0, 34320000.0, 0.4143755809932866], [1437898176.0, 34340000.0, 0.4029064357136626], [1437899904.0, 34360000.0, 0.39137366683720304], [1437901632.0, 34380000.0, 0.3797790955218025], [1437903360.0, 34400000.0, 0.3681245526846801], [1437905088.0, 34420000.0, 0.35641187871325025], [1437906816.0, 34440000.0, 0.34464292317451733], [1437908544.0, 34460000.0, 0.3328195445229876], [1437910272.0, 34480000.0, 0.3209436098072112], [1437912000.0, 34500000.0, 0.30901699437494656], [1437913728.0, 34520000.0, 0.29704158157703475], [1437915456.0, 34540000.0, 0.2850192624699767], [1437917184.0, 34560000.0, 0.2729519355173266], [1437918912.0, 34580000.0, 0.2608415062898956], [1437920640.0, 34600000.0, 0.24868988716485424], [1437922368.0, 34620000.0, 0.2364989970237249], [1437924096.0, 34640000.0, 0.22427076094938214], [1437925824.0, 34660000.0, 0.2120071099220529], [1437927552.0, 34680000.0, 0.19970998051440952], [1437929280.0, 34700000.0, 0.1873813145857244], [1437931008.0, 34720000.0, 0.17502305897527662], [1437932736.0, 34740000.0, 0.16263716519488494], [1437934464.0, 34760000.0, 0.15022558912075917], [1437936192.0, 34780000.0, 0.13779029068463744], [1437937920.0, 34800000.0, 0.1253332335643044], [1437939648.0, 34820000.0, 0.11285638487348261], [1437941376.0, 34840000.0, 0.10036171485121659], [1437943104.0, 34860000.0, 0.08785119655074211], [1437944832.0, 34880000.0, 0.07532680552793244], [1437946560.0, 34900000.0, 0.06279051952931387], [1437948288.0, 34920000.0, 0.05024431817977084], [1437950016.0, 34940000.0, 0.03769018266993305], [1437951744.0, 34960000.0, 0.02513009544333677], [1437953472.0, 34980000.0, 0.012566039883352684], [1437955200.0, 35000000.0, 8.572527594031472e-16], [1437956928.0, 35020000.0, -0.012566039883350968], [1437958656.0, 35040000.0, -0.025130095443335058], [1437960384.0, 35060000.0, -0.037690182669931335], [1437962112.0, 35080000.0, -0.050244318179769126], [1437963840.0, 35100000.0, -0.06279051952931217], [1437965568.0, 35120000.0, -0.07532680552793074], [1437967296.0, 35140000.0, -0.0878511965507404], [1437969024.0, 35160000.0, -0.10036171485121488], [1437970752.0, 35180000.0, -0.1128563848734809], [1437972480.0, 35200000.0, -0.12533323356430268], [1437974208.0, 35220000.0, -0.13779029068463572], [1437975936.0, 35240000.0, -0.15022558912075745], [1437977664.0, 35260000.0, -0.16263716519488325], [1437979392.0, 35280000.0, -0.17502305897527493], [1437981120.0, 35300000.0, -0.18738131458572274], [1437982848.0, 35320000.0, -0.19970998051440783], [1437984576.0, 35340000.0, -0.2120071099220512], [1437986304.0, 35360000.0, -0.22427076094938048], [1437988032.0, 35380000.0, -0.23649899702372323], [1437989760.0, 35400000.0, -0.24868988716485257], [1437991488.0, 35420000.0, -0.26084150628989394], [1437993216.0, 35440000.0, -0.27295193551732494], [1437994944.0, 35460000.0, -0.2850192624699751], [1437996672.0, 35480000.0, -0.29704158157703314], [1437998400.0, 35500000.0, -0.3090169943749449], [1438000128.0, 35520000.0, -0.3209436098072096], [1438001856.0, 35540000.0, -0.332819544522986], [1438003584.0, 35560000.0, -0.3446429231745157], [1438005312.0, 35580000.0, -0.35641187871324864], [1438007040.0, 35600000.0, -0.3681245526846785], [1438008768.0, 35620000.0, -0.3797790955218009], [1438010496.0, 35640000.0, -0.3913736668372015], [1438012224.0, 35660000.0, -0.402906435713661], [1438013952.0, 35680000.0, -0.41437558099328503], [1438015680.0, 35700000.0, -0.4257792915650696], [1438017408.0, 35720000.0, -0.4371157666509324], [1438019136.0, 35740000.0, -0.448383216090031], [1438020864.0, 35760000.0, -0.4595798606214859], [1438022592.0, 35780000.0, -0.47070393216532996], [1438024320.0, 35800000.0, -0.48175367410171516], [1438026048.0, 35820000.0, -0.49272734154829073], [1438027776.0, 35840000.0, -0.5036232016357594], [1438029504.0, 35860000.0, -0.5144395337815043], [1438031232.0, 35880000.0, -0.5251746299612959], [1438032960.0, 35900000.0, -0.5358267949789962], [1438034688.0, 35920000.0, -0.546394346734268], [1438036416.0, 35940000.0, -0.5568756164881863], [1438038144.0, 35960000.0, -0.5672689491267571], [1438039872.0, 35980000.0, -0.5775727034222675], [1438041600.0, 36000000.0, -0.5877852522924725], [1438043328.0, 36020000.0, -0.5979049830575175], [1438045056.0, 36040000.0, -0.6079302976946063], [1438046784.0, 36060000.0, -0.6178596130903318], [1438048512.0, 36080000.0, -0.6276913612907001], [1438050240.0, 36100000.0, -0.6374239897486887], [1438051968.0, 36120000.0, -0.6470559615694428], [1438053696.0, 36140000.0, -0.6565857557529543], [1438055424.0, 36160000.0, -0.6660118674342516], [1438057152.0, 36180000.0, -0.6753328081210238], [1438058880.0, 36200000.0, -0.6845471059286875], [1438060608.0, 36220000.0, -0.6936533058128033], [1438062336.0, 36240000.0, -0.7026499697988495], [1438064064.0, 36260000.0, -0.7115356772092851], [1438065792.0, 36280000.0, -0.720309024887906], [1438067520.0, 36300000.0, -0.7289686274214102], [1438069248.0, 36320000.0, -0.7375131173581745], [1438070976.0, 36340000.0, -0.7459411454241821], [1438072704.0, 36360000.0, -0.7542513807361033], [1438074432.0, 36380000.0, -0.7624425110114469], [1438076160.0, 36400000.0, -0.77051324277579], [1438077888.0, 36420000.0, -0.7784623015670215], [1438079616.0, 36440000.0, -0.7862884321366187], [1438081344.0, 36460000.0, -0.7939903986478346], [1438083072.0, 36480000.0, -0.8015669848708775], [1438084800.0, 36500000.0, -0.8090169943749459], [1438086528.0, 36520000.0, -0.816339250717184], [1438088256.0, 36540000.0, -0.823532597628427], [1438089984.0, 36560000.0, -0.8305958991958118], [1438091712.0, 36580000.0, -0.8375280400421404], [1438093440.0, 36600000.0, -0.8443279255020154], [1438095168.0, 36620000.0, -0.8509944817946917], [1438096896.0, 36640000.0, -0.8575266561936518], [1438098624.0, 36660000.0, -0.8639234171928344], [1438100352.0, 36680000.0, -0.8701837546695261], [1438102080.0, 36700000.0, -0.8763066800438637], [1438103808.0, 36720000.0, -0.882291226434953], [1438105536.0, 36740000.0, -0.8881364488135439], [1438107264.0, 36760000.0, -0.8938414241512644], [1438108992.0, 36780000.0, -0.8994052515663697], [1438110720.0, 36800000.0, -0.9048270524660195], [1438112448.0, 36820000.0, -0.9101059706849953], [1438114176.0, 36840000.0, -0.9152411726209183], [1438115904.0, 36860000.0, -0.9202318473658694], [1438117632.0, 36880000.0, -0.9250772068344582], [1438119360.0, 36900000.0, -0.9297764858882512], [1438121088.0, 36920000.0, -0.9343289424566116], [1438122816.0, 36940000.0, -0.9387338576538734], [1438124544.0, 36960000.0, -0.9429905358928646], [1438126272.0, 36980000.0, -0.9470983049947442], [1438128000.0, 37000000.0, -0.9510565162951533], [1438129728.0, 37020000.0, -0.9548645447466425], [1438131456.0, 37040000.0, -0.9585217890173762], [1438133184.0, 37060000.0, -0.9620276715860859], [1438134912.0, 37080000.0, -0.9653816388332738], [1438136640.0, 37100000.0, -0.9685831611286309], [1438138368.0, 37120000.0, -0.9716317329146743], [1438140096.0, 37140000.0, -0.9745268727865765], [1438141824.0, 37160000.0, -0.9772681235681935], [1438143552.0, 37180000.0, -0.9798550523842467], [1438145280.0, 37200000.0, -0.982287250728689], [1438147008.0, 37220000.0, -0.984564334529205], [1438148736.0, 37240000.0, -0.9866859442078681], [1438150464.0, 37260000.0, -0.988651744737914], [1438152192.0, 37280000.0, -0.9904614256966511], [1438153920.0, 37300000.0, -0.9921147013144775], [1438155648.0, 37320000.0, -0.9936113105200085], [1438157376.0, 37340000.0, -0.9949510169813002], [1438159104.0, 37360000.0, -0.9961336091431724], [1438160832.0, 37380000.0, -0.9971589002606138], [1438162560.0, 37400000.0, -0.9980267284282717], [1438164288.0, 37420000.0, -0.9987369566060175], [1438166016.0, 37440000.0, -0.9992894726405892], [1438167744.0, 37460000.0, -0.9996841892832999], [1438169472.0, 37480000.0, -0.9999210442038161], [1438171200.0, 37500000.0, -1.0], [1438172928.0, 37520000.0, -0.9999210442038161], [1438174656.0, 37540000.0, -0.9996841892833], [1438176384.0, 37560000.0, -0.9992894726405893], [1438178112.0, 37580000.0, -0.9987369566060176], [1438179840.0, 37600000.0, -0.9980267284282718], [1438181568.0, 37620000.0, -0.9971589002606139], [1438183296.0, 37640000.0, -0.9961336091431725], [1438185024.0, 37660000.0, -0.9949510169813004], [1438186752.0, 37680000.0, -0.9936113105200087], [1438188480.0, 37700000.0, -0.9921147013144778], [1438190208.0, 37720000.0, -0.9904614256966513], [1438191936.0, 37740000.0, -0.9886517447379142], [1438193664.0, 37760000.0, -0.9866859442078685], [1438195392.0, 37780000.0, -0.9845643345292053], [1438197120.0, 37800000.0, -0.9822872507286894], [1438198848.0, 37820000.0, -0.9798550523842471], [1438200576.0, 37840000.0, -0.9772681235681938], [1438202304.0, 37860000.0, -0.9745268727865769], [1438204032.0, 37880000.0, -0.9716317329146748], [1438205760.0, 37900000.0, -0.9685831611286313], [1438207488.0, 37920000.0, -0.9653816388332742], [1438209216.0, 37940000.0, -0.9620276715860865], [1438210944.0, 37960000.0, -0.9585217890173767], [1438212672.0, 37980000.0, -0.954864544746643], [1438214400.0, 38000000.0, -0.9510565162951539], [1438216128.0, 38020000.0, -0.9470983049947448], [1438217856.0, 38040000.0, -0.9429905358928653], [1438219584.0, 38060000.0, -0.938733857653874], [1438221312.0, 38080000.0, -0.9343289424566122], [1438223040.0, 38100000.0, -0.9297764858882519], [1438224768.0, 38120000.0, -0.9250772068344588], [1438226496.0, 38140000.0, -0.92023184736587], [1438228224.0, 38160000.0, -0.915241172620919], [1438229952.0, 38180000.0, -0.910105970684996], [1438231680.0, 38200000.0, -0.9048270524660202], [1438233408.0, 38220000.0, -0.8994052515663705], [1438235136.0, 38240000.0, -0.8938414241512652], [1438236864.0, 38260000.0, -0.8881364488135447], [1438238592.0, 38280000.0, -0.8822912264349538], [1438240320.0, 38300000.0, -0.8763066800438646], [1438242048.0, 38320000.0, -0.870183754669527], [1438243776.0, 38340000.0, -0.8639234171928353], [1438245504.0, 38360000.0, -0.8575266561936526], [1438247232.0, 38380000.0, -0.8509944817946927], [1438248960.0, 38400000.0, -0.8443279255020163], [1438250688.0, 38420000.0, -0.8375280400421415], [1438252416.0, 38440000.0, -0.8305958991958129], [1438254144.0, 38460000.0, -0.8235325976284281], [1438255872.0, 38480000.0, -0.816339250717185], [1438257600.0, 38500000.0, -0.8090169943749469], [1438259328.0, 38520000.0, -0.8015669848708786], [1438261056.0, 38540000.0, -0.7939903986478358], [1438262784.0, 38560000.0, -0.7862884321366198], [1438264512.0, 38580000.0, -0.7784623015670227], [1438266240.0, 38600000.0, -0.7705132427757911], [1438267968.0, 38620000.0, -0.7624425110114481], [1438269696.0, 38640000.0, -0.7542513807361045], [1438271424.0, 38660000.0, -0.7459411454241834], [1438273152.0, 38680000.0, -0.7375131173581757], [1438274880.0, 38700000.0, -0.7289686274214114], [1438276608.0, 38720000.0, -0.7203090248879074], [1438278336.0, 38740000.0, -0.7115356772092863], [1438280064.0, 38760000.0, -0.7026499697988507], [1438281792.0, 38780000.0, -0.6936533058128046], [1438283520.0, 38800000.0, -0.6845471059286888], [1438285248.0, 38820000.0, -0.6753328081210251], [1438286976.0, 38840000.0, -0.666011867434253], [1438288704.0, 38860000.0, -0.6565857557529557], [1438290432.0, 38880000.0, -0.6470559615694442], [1438292160.0, 38900000.0, -0.6374239897486902], [1438293888.0, 38920000.0, -0.6276913612907016], [1438295616.0, 38940000.0, -0.6178596130903332], [1438297344.0, 38960000.0, -0.6079302976946077], [1438299072.0, 38980000.0, -0.597904983057519], [1438300800.0, 39000000.0, -0.5877852522924739], [1438302528.0, 39020000.0, -0.577572703422269], [1438304256.0, 39040000.0, -0.5672689491267585], [1438305984.0, 39060000.0, -0.5568756164881878], [1438307712.0, 39080000.0, -0.5463943467342696], [1438309440.0, 39100000.0, -0.5358267949789978], [1438311168.0, 39120000.0, -0.5251746299612975], [1438312896.0, 39140000.0, -0.5144395337815059], [1438314624.0, 39160000.0, -0.5036232016357609], [1438316352.0, 39180000.0, -0.49272734154829234], [1438318080.0, 39200000.0, -0.48175367410171677], [1438319808.0, 39220000.0, -0.4707039321653316], [1438321536.0, 39240000.0, -0.4595798606214876], [1438323264.0, 39260000.0, -0.4483832160900327], [1438324992.0, 39280000.0, -0.43711576665093405], [1438326720.0, 39300000.0, -0.42577929156507127], [1438328448.0, 39320000.0, -0.4143755809932867], [1438330176.0, 39340000.0, -0.4029064357136627], [1438331904.0, 39360000.0, -0.39137366683720315], [1438333632.0, 39380000.0, -0.3797790955218026], [1438335360.0, 39400000.0, -0.3681245526846802], [1438337088.0, 39420000.0, -0.35641187871325036], [1438338816.0, 39440000.0, -0.34464292317451745], [1438340544.0, 39460000.0, -0.33281954452298773], [1438342272.0, 39480000.0, -0.32094360980721137], [1438344000.0, 39500000.0, -0.3090169943749467], [1438345728.0, 39520000.0, -0.29704158157703486], [1438347456.0, 39540000.0, -0.28501926246997683], [1438349184.0, 39560000.0, -0.2729519355173267], [1438350912.0, 39580000.0, -0.2608415062898957], [1438352640.0, 39600000.0, -0.24868988716485435], [1438354368.0, 39620000.0, -0.236498997023725], [1438356096.0, 39640000.0, -0.22427076094938228], [1438357824.0, 39660000.0, -0.21200710992205302], [1438359552.0, 39680000.0, -0.19970998051440964], [1438361280.0, 39700000.0, -0.18738131458572455], [1438363008.0, 39720000.0, -0.17502305897527673], [1438364736.0, 39740000.0, -0.16263716519488505], [1438366464.0, 39760000.0, -0.15022558912075928], [1438368192.0, 39780000.0, -0.13779029068463755], [1438369920.0, 39800000.0, -0.1253332335643045], [1438371648.0, 39820000.0, -0.11285638487348272], [1438373376.0, 39840000.0, -0.10036171485121671], [1438375104.0, 39860000.0, -0.08785119655074224], [1438376832.0, 39880000.0, -0.07532680552793257], [1438378560.0, 39900000.0, -0.062790519529314], [1438380288.0, 39920000.0, -0.05024431817977096], [1438382016.0, 39940000.0, -0.037690182669933174], [1438383744.0, 39960000.0, -0.025130095443336893], [1438385472.0, 39980000.0, -0.012566039883352805], [1438387200.0, 40000000.0, -9.797174393178826e-16], [1438388928.0, 40020000.0, 0.012566039883350847], [1438390656.0, 40040000.0, 0.025130095443334936], [1438392384.0, 40060000.0, 0.03769018266993476], [1438394112.0, 40080000.0, 0.050244318179769], [1438395840.0, 40100000.0, 0.06279051952931204], [1438397568.0, 40120000.0, 0.07532680552793061], [1438399296.0, 40140000.0, 0.08785119655074382], [1438401024.0, 40160000.0, 0.10036171485121476], [1438402752.0, 40180000.0, 0.11285638487348078], [1438404480.0, 40200000.0, 0.12533323356429904], [1438406208.0, 40220000.0, 0.13779029068463913], [1438407936.0, 40240000.0, 0.15022558912075734], [1438409664.0, 40260000.0, 0.1626371651948831], [1438411392.0, 40280000.0, 0.1750230589752713], [1438413120.0, 40300000.0, 0.1873813145857261], [1438414848.0, 40320000.0, 0.19970998051440772], [1438416576.0, 40340000.0, 0.2120071099220511], [1438418304.0, 40360000.0, 0.2242707609493769], [1438420032.0, 40380000.0, 0.23649899702372656], [1438421760.0, 40400000.0, 0.24868988716485246], [1438423488.0, 40420000.0, 0.26084150628989383], [1438425216.0, 40440000.0, 0.2729519355173214], [1438426944.0, 40460000.0, 0.2850192624699784], [1438428672.0, 40480000.0, 0.29704158157703303], [1438430400.0, 40500000.0, 0.3090169943749448], [1438432128.0, 40520000.0, 0.32094360980720615], [1438433856.0, 40540000.0, 0.3328195445229859], [1438435584.0, 40560000.0, 0.3446429231745156], [1438437312.0, 40580000.0, 0.35641187871324853], [1438439040.0, 40600000.0, 0.36812455268467503], [1438440768.0, 40620000.0, 0.3797790955218008], [1438442496.0, 40640000.0, 0.3913736668372014], [1438444224.0, 40660000.0, 0.4029064357136609], [1438445952.0, 40680000.0, 0.4143755809932817], [1438447680.0, 40700000.0, 0.4257792915650727], [1438449408.0, 40720000.0, 0.43711576665093227], [1438451136.0, 40740000.0, 0.4483832160900309], [1438452864.0, 40760000.0, 0.4595798606214858], [1438454592.0, 40780000.0, 0.470703932165333], [1438456320.0, 40800000.0, 0.48175367410171505], [1438458048.0, 40820000.0, 0.4927273415482906], [1438459776.0, 40840000.0, 0.5036232016357592], [1438461504.0, 40860000.0, 0.5144395337815072], [1438463232.0, 40880000.0, 0.5251746299612958], [1438464960.0, 40900000.0, 0.5358267949789961], [1438466688.0, 40920000.0, 0.5463943467342649], [1438468416.0, 40940000.0, 0.5568756164881892], [1438470144.0, 40960000.0, 0.567268949126757], [1438471872.0, 40980000.0, 0.5775727034222674], [1438473600.0, 41000000.0, 0.5877852522924695], [1438475328.0, 41020000.0, 0.5979049830575203], [1438477056.0, 41040000.0, 0.6079302976946062], [1438478784.0, 41060000.0, 0.6178596130903317], [1438480512.0, 41080000.0, 0.6276913612906972], [1438482240.0, 41100000.0, 0.6374239897486914], [1438483968.0, 41120000.0, 0.6470559615694427], [1438485696.0, 41140000.0, 0.6565857557529542], [1438487424.0, 41160000.0, 0.6660118674342489], [1438489152.0, 41180000.0, 0.6753328081210264], [1438490880.0, 41200000.0, 0.6845471059286874], [1438492608.0, 41220000.0, 0.6936533058128032], [1438494336.0, 41240000.0, 0.7026499697988469], [1438496064.0, 41260000.0, 0.711535677209285], [1438497792.0, 41280000.0, 0.720309024887906], [1438499520.0, 41300000.0, 0.7289686274214101], [1438501248.0, 41320000.0, 0.7375131173581719], [1438502976.0, 41340000.0, 0.7459411454241821], [1438504704.0, 41360000.0, 0.7542513807361032], [1438506432.0, 41380000.0, 0.7624425110114468], [1438508160.0, 41400000.0, 0.7705132427757877], [1438509888.0, 41420000.0, 0.7784623015670237], [1438511616.0, 41440000.0, 0.7862884321366186], [1438513344.0, 41460000.0, 0.7939903986478346], [1438515072.0, 41480000.0, 0.8015669848708754], [1438516800.0, 41500000.0, 0.8090169943749479], [1438518528.0, 41520000.0, 0.8163392507171839], [1438520256.0, 41540000.0, 0.823532597628427], [1438521984.0, 41560000.0, 0.8305958991958118], [1438523712.0, 41580000.0, 0.8375280400421423], [1438525440.0, 41600000.0, 0.8443279255020153], [1438527168.0, 41620000.0, 0.8509944817946916], [1438528896.0, 41640000.0, 0.8575266561936516], [1438530624.0, 41660000.0, 0.8639234171928362], [1438532352.0, 41680000.0, 0.870183754669526], [1438534080.0, 41700000.0, 0.8763066800438636], [1438535808.0, 41720000.0, 0.8822912264349513], [1438537536.0, 41740000.0, 0.8881364488135455], [1438539264.0, 41760000.0, 0.8938414241512643], [1438540992.0, 41780000.0, 0.8994052515663697], [1438542720.0, 41800000.0, 0.9048270524660179], [1438544448.0, 41820000.0, 0.9101059706849967], [1438546176.0, 41840000.0, 0.9152411726209182], [1438547904.0, 41860000.0, 0.9202318473658693], [1438549632.0, 41880000.0, 0.9250772068344567], [1438551360.0, 41900000.0, 0.9297764858882525], [1438553088.0, 41920000.0, 0.9343289424566116], [1438554816.0, 41940000.0, 0.9387338576538733], [1438556544.0, 41960000.0, 0.9429905358928634], [1438558272.0, 41980000.0, 0.9470983049947442], [1438560000.0, 42000000.0, 0.9510565162951533], [1438561728.0, 42020000.0, 0.9548645447466424], [1438563456.0, 42040000.0, 0.9585217890173752], [1438565184.0, 42060000.0, 0.9620276715860859], [1438566912.0, 42080000.0, 0.9653816388332738], [1438568640.0, 42100000.0, 0.9685831611286307], [1438570368.0, 42120000.0, 0.9716317329146734], [1438572096.0, 42140000.0, 0.9745268727865772], [1438573824.0, 42160000.0, 0.9772681235681934], [1438575552.0, 42180000.0, 0.9798550523842466], [1438577280.0, 42200000.0, 0.9822872507286884], [1438579008.0, 42220000.0, 0.9845643345292056], [1438580736.0, 42240000.0, 0.9866859442078681], [1438582464.0, 42260000.0, 0.988651744737914], [1438584192.0, 42280000.0, 0.9904614256966511], [1438585920.0, 42300000.0, 0.992114701314478], [1438587648.0, 42320000.0, 0.9936113105200085], [1438589376.0, 42340000.0, 0.9949510169813002], [1438591104.0, 42360000.0, 0.9961336091431724], [1438592832.0, 42380000.0, 0.997158900260614], [1438594560.0, 42400000.0, 0.9980267284282717], [1438596288.0, 42420000.0, 0.9987369566060175], [1438598016.0, 42440000.0, 0.9992894726405891], [1438599744.0, 42460000.0, 0.9996841892833], [1438601472.0, 42480000.0, 0.9999210442038161], [1438603200.0, 42500000.0, 1.0], [1438604928.0, 42520000.0, 0.9999210442038161], [1438606656.0, 42540000.0, 0.9996841892833], [1438608384.0, 42560000.0, 0.9992894726405892], [1438610112.0, 42580000.0, 0.9987369566060176], [1438611840.0, 42600000.0, 0.9980267284282718], [1438613568.0, 42620000.0, 0.9971589002606143], [1438615296.0, 42640000.0, 0.9961336091431726], [1438617024.0, 42660000.0, 0.9949510169813004], [1438618752.0, 42680000.0, 0.9936113105200087], [1438620480.0, 42700000.0, 0.9921147013144783], [1438622208.0, 42720000.0, 0.9904614256966513], [1438623936.0, 42740000.0, 0.9886517447379143], [1438625664.0, 42760000.0, 0.9866859442078685], [1438627392.0, 42780000.0, 0.9845643345292059], [1438629120.0, 42800000.0, 0.9822872507286887], [1438630848.0, 42820000.0, 0.9798550523842471], [1438632576.0, 42840000.0, 0.9772681235681938], [1438634304.0, 42860000.0, 0.9745268727865778], [1438636032.0, 42880000.0, 0.9716317329146739], [1438637760.0, 42900000.0, 0.9685831611286313], [1438639488.0, 42920000.0, 0.9653816388332743], [1438641216.0, 42940000.0, 0.9620276715860865], [1438642944.0, 42960000.0, 0.9585217890173757], [1438644672.0, 42980000.0, 0.9548645447466431], [1438646400.0, 43000000.0, 0.9510565162951539], [1438648128.0, 43020000.0, 0.9470983049947449], [1438649856.0, 43040000.0, 0.9429905358928642], [1438651584.0, 43060000.0, 0.9387338576538741], [1438653312.0, 43080000.0, 0.9343289424566122], [1438655040.0, 43100000.0, 0.9297764858882532], [1438656768.0, 43120000.0, 0.9250772068344575], [1438658496.0, 43140000.0, 0.9202318473658702], [1438660224.0, 43160000.0, 0.9152411726209191], [1438661952.0, 43180000.0, 0.9101059706849975], [1438663680.0, 43200000.0, 0.9048270524660188], [1438665408.0, 43220000.0, 0.8994052515663706], [1438667136.0, 43240000.0, 0.8938414241512652], [1438668864.0, 43260000.0, 0.8881364488135464], [1438670592.0, 43280000.0, 0.8822912264349523], [1438672320.0, 43300000.0, 0.8763066800438646], [1438674048.0, 43320000.0, 0.8701837546695271], [1438675776.0, 43340000.0, 0.8639234171928372], [1438677504.0, 43360000.0, 0.8575266561936528], [1438679232.0, 43380000.0, 0.8509944817946927], [1438680960.0, 43400000.0, 0.8443279255020164], [1438682688.0, 43420000.0, 0.8375280400421435], [1438684416.0, 43440000.0, 0.8305958991958129], [1438686144.0, 43460000.0, 0.8235325976284281], [1438687872.0, 43480000.0, 0.8163392507171852], [1438689600.0, 43500000.0, 0.8090169943749491], [1438691328.0, 43520000.0, 0.8015669848708766], [1438693056.0, 43540000.0, 0.7939903986478358], [1438694784.0, 43560000.0, 0.7862884321366199], [1438696512.0, 43580000.0, 0.7784623015670249], [1438698240.0, 43600000.0, 0.770513242775789], [1438699968.0, 43620000.0, 0.7624425110114481], [1438701696.0, 43640000.0, 0.7542513807361046], [1438703424.0, 43660000.0, 0.7459411454241834], [1438705152.0, 43680000.0, 0.7375131173581734], [1438706880.0, 43700000.0, 0.7289686274214116], [1438708608.0, 43720000.0, 0.7203090248879075], [1438710336.0, 43740000.0, 0.7115356772092865], [1438712064.0, 43760000.0, 0.7026499697988483], [1438713792.0, 43780000.0, 0.6936533058128047], [1438715520.0, 43800000.0, 0.684547105928689], [1438717248.0, 43820000.0, 0.6753328081210279], [1438718976.0, 43840000.0, 0.6660118674342504], [1438720704.0, 43860000.0, 0.6565857557529557], [1438722432.0, 43880000.0, 0.6470559615694442], [1438724160.0, 43900000.0, 0.637423989748693], [1438725888.0, 43920000.0, 0.6276913612906989], [1438727616.0, 43940000.0, 0.6178596130903333], [1438729344.0, 43960000.0, 0.6079302976946078], [1438731072.0, 43980000.0, 0.5979049830575219], [1438732800.0, 44000000.0, 0.5877852522924711], [1438734528.0, 44020000.0, 0.5775727034222691], [1438736256.0, 44040000.0, 0.5672689491267586], [1438737984.0, 44060000.0, 0.5568756164881908], [1438739712.0, 44080000.0, 0.5463943467342667], [1438741440.0, 44100000.0, 0.5358267949789979], [1438743168.0, 44120000.0, 0.5251746299612976], [1438744896.0, 44140000.0, 0.514439533781509], [1438746624.0, 44160000.0, 0.503623201635761], [1438748352.0, 44180000.0, 0.49272734154829245], [1438750080.0, 44200000.0, 0.4817536741017168], [1438751808.0, 44220000.0, 0.47070393216533485], [1438753536.0, 44240000.0, 0.4595798606214877], [1438755264.0, 44260000.0, 0.4483832160900328], [1438756992.0, 44280000.0, 0.43711576665093416], [1438758720.0, 44300000.0, 0.4257792915650746], [1438760448.0, 44320000.0, 0.4143755809932836], [1438762176.0, 44340000.0, 0.4029064357136628], [1438763904.0, 44360000.0, 0.39137366683720326], [1438765632.0, 44380000.0, 0.3797790955218027], [1438767360.0, 44400000.0, 0.368124552684677], [1438769088.0, 44420000.0, 0.3564118787132505], [1438770816.0, 44440000.0, 0.34464292317451756], [1438772544.0, 44460000.0, 0.3328195445229879], [1438774272.0, 44480000.0, 0.3209436098072081], [1438776000.0, 44500000.0, 0.3090169943749468], [1438777728.0, 44520000.0, 0.29704158157703503], [1438779456.0, 44540000.0, 0.2850192624699804], [1438781184.0, 44560000.0, 0.2729519355173234], [1438782912.0, 44580000.0, 0.2608415062898959], [1438784640.0, 44600000.0, 0.24868988716485446], [1438786368.0, 44620000.0, 0.23649899702372856], [1438788096.0, 44640000.0, 0.22427076094937892], [1438789824.0, 44660000.0, 0.21200710992205313], [1438791552.0, 44680000.0, 0.19970998051440977], [1438793280.0, 44700000.0, 0.18738131458572815], [1438795008.0, 44720000.0, 0.17502305897527334], [1438796736.0, 44740000.0, 0.16263716519488516], [1438798464.0, 44760000.0, 0.1502255891207594], [1438800192.0, 44780000.0, 0.1377902906846412], [1438801920.0, 44800000.0, 0.1253332335643011], [1438803648.0, 44820000.0, 0.11285638487348285], [1438805376.0, 44840000.0, 0.10036171485121682], [1438807104.0, 44860000.0, 0.0878511965507459], [1438808832.0, 44880000.0, 0.07532680552793268], [1438810560.0, 44900000.0, 0.06279051952931412], [1438812288.0, 44920000.0, 0.05024431817977108], [1438814016.0, 44940000.0, 0.037690182669936845], [1438815744.0, 44960000.0, 0.025130095443337018], [1438817472.0, 44980000.0, 0.012566039883352928], [1438819200.0, 45000000.0, 1.102182119232618e-15], [1438820928.0, 45020000.0, -0.012566039883350723], [1438822656.0, 45040000.0, -0.025130095443334815], [1438824384.0, 45060000.0, -0.037690182669934645], [1438826112.0, 45080000.0, -0.05024431817976888], [1438827840.0, 45100000.0, -0.06279051952931192], [1438829568.0, 45120000.0, -0.07532680552793049], [1438831296.0, 45140000.0, -0.08785119655074371], [1438833024.0, 45160000.0, -0.10036171485121463], [1438834752.0, 45180000.0, -0.11285638487348065], [1438836480.0, 45200000.0, -0.12533323356429893], [1438838208.0, 45220000.0, -0.137790290684639], [1438839936.0, 45240000.0, -0.15022558912075723], [1438841664.0, 45260000.0, -0.162637165194883], [1438843392.0, 45280000.0, -0.17502305897527118], [1438845120.0, 45300000.0, -0.187381314585726], [1438846848.0, 45320000.0, -0.1997099805144076], [1438848576.0, 45340000.0, -0.212007109922051], [1438850304.0, 45360000.0, -0.22427076094937679], [1438852032.0, 45380000.0, -0.23649899702372643], [1438853760.0, 45400000.0, -0.24868988716485232], [1438855488.0, 45420000.0, -0.2608415062898937], [1438857216.0, 45440000.0, -0.2729519355173213], [1438858944.0, 45460000.0, -0.2850192624699783], [1438860672.0, 45480000.0, -0.2970415815770329], [1438862400.0, 45500000.0, -0.3090169943749447], [1438864128.0, 45520000.0, -0.320943609807206], [1438865856.0, 45540000.0, -0.3328195445229858], [1438867584.0, 45560000.0, -0.3446429231745155], [1438869312.0, 45580000.0, -0.3564118787132484], [1438871040.0, 45600000.0, -0.3681245526846749], [1438872768.0, 45620000.0, -0.37977909552180067], [1438874496.0, 45640000.0, -0.39137366683720126], [1438876224.0, 45660000.0, -0.4029064357136608], [1438877952.0, 45680000.0, -0.4143755809932816], [1438879680.0, 45700000.0, -0.4257792915650726], [1438881408.0, 45720000.0, -0.43711576665093216], [1438883136.0, 45740000.0, -0.4483832160900308], [1438884864.0, 45760000.0, -0.4595798606214857], [1438886592.0, 45780000.0, -0.4707039321653329], [1438888320.0, 45800000.0, -0.48175367410171493], [1438890048.0, 45820000.0, -0.4927273415482905], [1438891776.0, 45840000.0, -0.5036232016357591], [1438893504.0, 45860000.0, -0.5144395337815071], [1438895232.0, 45880000.0, -0.5251746299612957], [1438896960.0, 45900000.0, -0.535826794978996], [1438898688.0, 45920000.0, -0.5463943467342648], [1438900416.0, 45940000.0, -0.5568756164881891], [1438902144.0, 45960000.0, -0.5672689491267568], [1438903872.0, 45980000.0, -0.5775727034222673], [1438905600.0, 46000000.0, -0.5877852522924694], [1438907328.0, 46020000.0, -0.5979049830575202], [1438909056.0, 46040000.0, -0.607930297694606], [1438910784.0, 46060000.0, -0.6178596130903317], [1438912512.0, 46080000.0, -0.6276913612906971], [1438914240.0, 46100000.0, -0.6374239897486913], [1438915968.0, 46120000.0, -0.6470559615694426], [1438917696.0, 46140000.0, -0.6565857557529542], [1438919424.0, 46160000.0, -0.6660118674342488], [1438921152.0, 46180000.0, -0.6753328081210263], [1438922880.0, 46200000.0, -0.6845471059286873], [1438924608.0, 46220000.0, -0.693653305812803], [1438926336.0, 46240000.0, -0.7026499697988468], [1438928064.0, 46260000.0, -0.7115356772092849], [1438929792.0, 46280000.0, -0.7203090248879059], [1438931520.0, 46300000.0, -0.72896862742141], [1438933248.0, 46320000.0, -0.7375131173581719], [1438934976.0, 46340000.0, -0.745941145424182], [1438936704.0, 46360000.0, -0.7542513807361032], [1438938432.0, 46380000.0, -0.7624425110114467], [1438940160.0, 46400000.0, -0.7705132427757876], [1438941888.0, 46420000.0, -0.7784623015670236], [1438943616.0, 46440000.0, -0.7862884321366186], [1438945344.0, 46460000.0, -0.7939903986478345], [1438947072.0, 46480000.0, -0.8015669848708753], [1438948800.0, 46500000.0, -0.8090169943749478], [1438950528.0, 46520000.0, -0.8163392507171838], [1438952256.0, 46540000.0, -0.8235325976284269], [1438953984.0, 46560000.0, -0.8305958991958117], [1438955712.0, 46580000.0, -0.8375280400421423], [1438957440.0, 46600000.0, -0.8443279255020152], [1438959168.0, 46620000.0, -0.8509944817946916], [1438960896.0, 46640000.0, -0.8575266561936516], [1438962624.0, 46660000.0, -0.863923417192836], [1438964352.0, 46680000.0, -0.870183754669526], [1438966080.0, 46700000.0, -0.8763066800438636], [1438967808.0, 46720000.0, -0.8822912264349512], [1438969536.0, 46740000.0, -0.8881364488135454], [1438971264.0, 46760000.0, -0.8938414241512643], [1438972992.0, 46780000.0, -0.8994052515663696], [1438974720.0, 46800000.0, -0.9048270524660178], [1438976448.0, 46820000.0, -0.9101059706849967], [1438978176.0, 46840000.0, -0.9152411726209182], [1438979904.0, 46860000.0, -0.9202318473658693], [1438981632.0, 46880000.0, -0.9250772068344567], [1438983360.0, 46900000.0, -0.9297764858882525], [1438985088.0, 46920000.0, -0.9343289424566115], [1438986816.0, 46940000.0, -0.9387338576538733], [1438988544.0, 46960000.0, -0.9429905358928634], [1438990272.0, 46980000.0, -0.9470983049947441], [1438992000.0, 47000000.0, -0.9510565162951532], [1438993728.0, 47020000.0, -0.9548645447466424], [1438995456.0, 47040000.0, -0.9585217890173751], [1438997184.0, 47060000.0, -0.9620276715860859], [1438998912.0, 47080000.0, -0.9653816388332737], [1439000640.0, 47100000.0, -0.9685831611286307], [1439002368.0, 47120000.0, -0.9716317329146734], [1439004096.0, 47140000.0, -0.9745268727865772], [1439005824.0, 47160000.0, -0.9772681235681934], [1439007552.0, 47180000.0, -0.9798550523842466], [1439009280.0, 47200000.0, -0.9822872507286883], [1439011008.0, 47220000.0, -0.9845643345292056], [1439012736.0, 47240000.0, -0.986685944207868], [1439014464.0, 47260000.0, -0.988651744737914], [1439016192.0, 47280000.0, -0.990461425696651], [1439017920.0, 47300000.0, -0.992114701314478], [1439019648.0, 47320000.0, -0.9936113105200085], [1439021376.0, 47340000.0, -0.9949510169813002], [1439023104.0, 47360000.0, -0.9961336091431724], [1439024832.0, 47380000.0, -0.997158900260614], [1439026560.0, 47400000.0, -0.9980267284282717], [1439028288.0, 47420000.0, -0.9987369566060175], [1439030016.0, 47440000.0, -0.9992894726405891], [1439031744.0, 47460000.0, -0.9996841892833], [1439033472.0, 47480000.0, -0.9999210442038161], [1439035200.0, 47500000.0, -1.0], [1439036928.0, 47520000.0, -0.9999210442038161], [1439038656.0, 47540000.0, -0.9996841892833], [1439040384.0, 47560000.0, -0.9992894726405892], [1439042112.0, 47580000.0, -0.9987369566060176], [1439043840.0, 47600000.0, -0.9980267284282718], [1439045568.0, 47620000.0, -0.9971589002606143], [1439047296.0, 47640000.0, -0.9961336091431726], [1439049024.0, 47660000.0, -0.9949510169813004], [1439050752.0, 47680000.0, -0.9936113105200087], [1439052480.0, 47700000.0, -0.9921147013144783], [1439054208.0, 47720000.0, -0.9904614256966513], [1439055936.0, 47740000.0, -0.9886517447379143], [1439057664.0, 47760000.0, -0.9866859442078685], [1439059392.0, 47780000.0, -0.984564334529206], [1439061120.0, 47800000.0, -0.9822872507286887], [1439062848.0, 47820000.0, -0.9798550523842471], [1439064576.0, 47840000.0, -0.9772681235681939], [1439066304.0, 47860000.0, -0.9745268727865778], [1439068032.0, 47880000.0, -0.971631732914674], [1439069760.0, 47900000.0, -0.9685831611286313], [1439071488.0, 47920000.0, -0.9653816388332743], [1439073216.0, 47940000.0, -0.9620276715860865], [1439074944.0, 47960000.0, -0.9585217890173757], [1439076672.0, 47980000.0, -0.9548645447466431], [1439078400.0, 48000000.0, -0.951056516295154], [1439080128.0, 48020000.0, -0.9470983049947449], [1439081856.0, 48040000.0, -0.9429905358928642], [1439083584.0, 48060000.0, -0.9387338576538741], [1439085312.0, 48080000.0, -0.9343289424566124], [1439087040.0, 48100000.0, -0.9297764858882532], [1439088768.0, 48120000.0, -0.9250772068344576], [1439090496.0, 48140000.0, -0.9202318473658702], [1439092224.0, 48160000.0, -0.9152411726209191], [1439093952.0, 48180000.0, -0.9101059706849977], [1439095680.0, 48200000.0, -0.9048270524660188], [1439097408.0, 48220000.0, -0.8994052515663706], [1439099136.0, 48240000.0, -0.8938414241512653], [1439100864.0, 48260000.0, -0.8881364488135465], [1439102592.0, 48280000.0, -0.8822912264349523], [1439104320.0, 48300000.0, -0.8763066800438647], [1439106048.0, 48320000.0, -0.8701837546695271], [1439107776.0, 48340000.0, -0.8639234171928373], [1439109504.0, 48360000.0, -0.8575266561936528], [1439111232.0, 48380000.0, -0.8509944817946928], [1439112960.0, 48400000.0, -0.8443279255020165], [1439114688.0, 48420000.0, -0.8375280400421435], [1439116416.0, 48440000.0, -0.830595899195813], [1439118144.0, 48460000.0, -0.8235325976284282], [1439119872.0, 48480000.0, -0.8163392507171852], [1439121600.0, 48500000.0, -0.8090169943749491], [1439123328.0, 48520000.0, -0.8015669848708766], [1439125056.0, 48540000.0, -0.7939903986478359], [1439126784.0, 48560000.0, -0.78628843213662], [1439128512.0, 48580000.0, -0.778462301567025], [1439130240.0, 48600000.0, -0.770513242775789], [1439131968.0, 48620000.0, -0.7624425110114482], [1439133696.0, 48640000.0, -0.7542513807361046], [1439135424.0, 48660000.0, -0.7459411454241835], [1439137152.0, 48680000.0, -0.7375131173581735], [1439138880.0, 48700000.0, -0.7289686274214117], [1439140608.0, 48720000.0, -0.7203090248879075], [1439142336.0, 48740000.0, -0.7115356772092866], [1439144064.0, 48760000.0, -0.7026499697988484], [1439145792.0, 48780000.0, -0.6936533058128047], [1439147520.0, 48800000.0, -0.6845471059286891], [1439149248.0, 48820000.0, -0.675332808121028], [1439150976.0, 48840000.0, -0.6660118674342504], [1439152704.0, 48860000.0, -0.6565857557529559], [1439154432.0, 48880000.0, -0.6470559615694443], [1439156160.0, 48900000.0, -0.6374239897486931], [1439157888.0, 48920000.0, -0.627691361290699], [1439159616.0, 48940000.0, -0.6178596130903334], [1439161344.0, 48960000.0, -0.6079302976946079], [1439163072.0, 48980000.0, -0.597904983057522], [1439164800.0, 49000000.0, -0.5877852522924712], [1439166528.0, 49020000.0, -0.5775727034222692], [1439168256.0, 49040000.0, -0.5672689491267587], [1439169984.0, 49060000.0, -0.556875616488191], [1439171712.0, 49080000.0, -0.5463943467342668], [1439173440.0, 49100000.0, -0.535826794978998], [1439175168.0, 49120000.0, -0.5251746299612977], [1439176896.0, 49140000.0, -0.5144395337815091], [1439178624.0, 49160000.0, -0.5036232016357611], [1439180352.0, 49180000.0, -0.49272734154829256], [1439182080.0, 49200000.0, -0.48175367410171693], [1439183808.0, 49220000.0, -0.47070393216533496], [1439185536.0, 49240000.0, -0.4595798606214878], [1439187264.0, 49260000.0, -0.4483832160900329], [1439188992.0, 49280000.0, -0.43711576665093427], [1439190720.0, 49300000.0, -0.4257792915650747], [1439192448.0, 49320000.0, -0.4143755809932837], [1439194176.0, 49340000.0, -0.4029064357136629], [1439195904.0, 49360000.0, -0.3913736668372034], [1439197632.0, 49380000.0, -0.37977909552180283], [1439199360.0, 49400000.0, -0.3681245526846771], [1439201088.0, 49420000.0, -0.3564118787132506], [1439202816.0, 49440000.0, -0.34464292317451767], [1439204544.0, 49460000.0, -0.332819544522988], [1439206272.0, 49480000.0, -0.3209436098072082], [1439208000.0, 49500000.0, -0.3090169943749469], [1439209728.0, 49520000.0, -0.29704158157703514], [1439211456.0, 49540000.0, -0.2850192624699805], [1439213184.0, 49560000.0, -0.27295193551732355], [1439214912.0, 49580000.0, -0.260841506289896], [1439216640.0, 49600000.0, -0.2486898871648546], [1439218368.0, 49620000.0, -0.2364989970237287], [1439220096.0, 49640000.0, -0.22427076094937903], [1439221824.0, 49660000.0, -0.21200710992205327], [1439223552.0, 49680000.0, -0.19970998051440988], [1439225280.0, 49700000.0, -0.18738131458572826], [1439227008.0, 49720000.0, -0.17502305897527348], [1439228736.0, 49740000.0, -0.1626371651948853], [1439230464.0, 49760000.0, -0.15022558912075953], [1439232192.0, 49780000.0, -0.13779029068464133], [1439233920.0, 49800000.0, -0.12533323356430123], [1439235648.0, 49820000.0, -0.11285638487348297], [1439237376.0, 49840000.0, -0.10036171485121695], [1439239104.0, 49860000.0, -0.08785119655074602], [1439240832.0, 49880000.0, -0.0753268055279328], [1439242560.0, 49900000.0, -0.06279051952931425], [1439244288.0, 49920000.0, -0.0502443181797712], [1439246016.0, 49940000.0, -0.03769018266993697], [1439247744.0, 49960000.0, -0.02513009544333714], [1439249472.0, 49980000.0, -0.01256603988335305], [1439251200.0, 50000000.0, -1.2246467991473533e-15], [1439252928.0, 50020000.0, 0.012566039883350602], [1439254656.0, 50040000.0, 0.02513009544333469], [1439256384.0, 50060000.0, 0.03769018266993452], [1439258112.0, 50080000.0, 0.05024431817976876], [1439259840.0, 50100000.0, 0.06279051952931179], [1439261568.0, 50120000.0, 0.07532680552793036], [1439263296.0, 50140000.0, 0.08785119655074358], [1439265024.0, 50160000.0, 0.10036171485121452], [1439266752.0, 50180000.0, 0.11285638487348054], [1439268480.0, 50200000.0, 0.1253332335642988], [1439270208.0, 50220000.0, 0.13779029068463888], [1439271936.0, 50240000.0, 0.1502255891207571], [1439273664.0, 50260000.0, 0.1626371651948829], [1439275392.0, 50280000.0, 0.17502305897527107], [1439277120.0, 50300000.0, 0.18738131458572585], [1439278848.0, 50320000.0, 0.19970998051440747], [1439280576.0, 50340000.0, 0.21200710992205088], [1439282304.0, 50360000.0, 0.22427076094937665], [1439284032.0, 50380000.0, 0.23649899702372632], [1439285760.0, 50400000.0, 0.2486898871648522], [1439287488.0, 50420000.0, 0.2608415062898936], [1439289216.0, 50440000.0, 0.27295193551732116], [1439290944.0, 50460000.0, 0.28501926246997816], [1439292672.0, 50480000.0, 0.29704158157703275], [1439294400.0, 50500000.0, 0.30901699437494456], [1439296128.0, 50520000.0, 0.3209436098072059], [1439297856.0, 50540000.0, 0.3328195445229857], [1439299584.0, 50560000.0, 0.34464292317451534], [1439301312.0, 50580000.0, 0.3564118787132483], [1439303040.0, 50600000.0, 0.3681245526846748], [1439304768.0, 50620000.0, 0.37977909552180056], [1439306496.0, 50640000.0, 0.39137366683720115], [1439308224.0, 50660000.0, 0.4029064357136607], [1439309952.0, 50680000.0, 0.4143755809932815], [1439311680.0, 50700000.0, 0.4257792915650725], [1439313408.0, 50720000.0, 0.43711576665093205], [1439315136.0, 50740000.0, 0.4483832160900307], [1439316864.0, 50760000.0, 0.4595798606214856], [1439318592.0, 50780000.0, 0.4707039321653328], [1439320320.0, 50800000.0, 0.4817536741017148], [1439322048.0, 50820000.0, 0.4927273415482904], [1439323776.0, 50840000.0, 0.503623201635759], [1439325504.0, 50860000.0, 0.514439533781507], [1439327232.0, 50880000.0, 0.5251746299612956], [1439328960.0, 50900000.0, 0.5358267949789959], [1439330688.0, 50920000.0, 0.5463943467342647], [1439332416.0, 50940000.0, 0.556875616488186], [1439334144.0, 50960000.0, 0.5672689491267539], [1439335872.0, 50980000.0, 0.5775727034222643], [1439337600.0, 51000000.0, 0.5877852522924693], [1439339328.0, 51020000.0, 0.59790498305752], [1439341056.0, 51040000.0, 0.6079302976946059], [1439342784.0, 51060000.0, 0.6178596130903343], [1439344512.0, 51080000.0, 0.6276913612906998], [1439346240.0, 51100000.0, 0.6374239897486885], [1439347968.0, 51120000.0, 0.6470559615694425], [1439349696.0, 51140000.0, 0.6565857557529541], [1439351424.0, 51160000.0, 0.6660118674342487], [1439353152.0, 51180000.0, 0.6753328081210261], [1439354880.0, 51200000.0, 0.6845471059286898], [1439356608.0, 51220000.0, 0.6936533058128056], [1439358336.0, 51240000.0, 0.7026499697988492], [1439360064.0, 51260000.0, 0.7115356772092848], [1439361792.0, 51280000.0, 0.7203090248879058], [1439363520.0, 51300000.0, 0.7289686274214099], [1439365248.0, 51320000.0, 0.7375131173581718], [1439366976.0, 51340000.0, 0.7459411454241843], [1439368704.0, 51360000.0, 0.7542513807361054], [1439370432.0, 51380000.0, 0.7624425110114489], [1439372160.0, 51400000.0, 0.7705132427757853], [1439373888.0, 51420000.0, 0.7784623015670235], [1439375616.0, 51440000.0, 0.7862884321366185], [1439377344.0, 51460000.0, 0.7939903986478344], [1439379072.0, 51480000.0, 0.8015669848708752], [1439380800.0, 51500000.0, 0.8090169943749498], [1439382528.0, 51520000.0, 0.8163392507171817], [1439384256.0, 51540000.0, 0.8235325976284248], [1439385984.0, 51560000.0, 0.8305958991958097], [1439387712.0, 51580000.0, 0.8375280400421422], [1439389440.0, 51600000.0, 0.8443279255020152], [1439391168.0, 51620000.0, 0.8509944817946915], [1439392896.0, 51640000.0, 0.8575266561936515], [1439394624.0, 51660000.0, 0.8639234171928342], [1439396352.0, 51680000.0, 0.8701837546695242], [1439398080.0, 51700000.0, 0.8763066800438618], [1439399808.0, 51720000.0, 0.8822912264349512], [1439401536.0, 51740000.0, 0.8881364488135454], [1439403264.0, 51760000.0, 0.8938414241512642], [1439404992.0, 51780000.0, 0.8994052515663712], [1439406720.0, 51800000.0, 0.9048270524660192], [1439408448.0, 51820000.0, 0.9101059706849951], [1439410176.0, 51840000.0, 0.9152411726209168], [1439411904.0, 51860000.0, 0.9202318473658692], [1439413632.0, 51880000.0, 0.9250772068344566], [1439415360.0, 51900000.0, 0.9297764858882523], [1439417088.0, 51920000.0, 0.9343289424566127], [1439418816.0, 51940000.0, 0.9387338576538744], [1439420544.0, 51960000.0, 0.9429905358928645], [1439422272.0, 51980000.0, 0.9470983049947441], [1439424000.0, 52000000.0, 0.9510565162951532], [1439425728.0, 52020000.0, 0.9548645447466424], [1439427456.0, 52040000.0, 0.9585217890173751], [1439429184.0, 52060000.0, 0.9620276715860868], [1439430912.0, 52080000.0, 0.9653816388332745], [1439432640.0, 52100000.0, 0.9685831611286316], [1439434368.0, 52120000.0, 0.9716317329146725], [1439436096.0, 52140000.0, 0.9745268727865772], [1439437824.0, 52160000.0, 0.9772681235681934], [1439439552.0, 52180000.0, 0.9798550523842466], [1439441280.0, 52200000.0, 0.9822872507286883], [1439443008.0, 52220000.0, 0.9845643345292061], [1439444736.0, 52240000.0, 0.9866859442078675], [1439446464.0, 52260000.0, 0.9886517447379134], [1439448192.0, 52280000.0, 0.9904614256966505], [1439449920.0, 52300000.0, 0.992114701314478], [1439451648.0, 52320000.0, 0.9936113105200085], [1439453376.0, 52340000.0, 0.9949510169813002], [1439455104.0, 52360000.0, 0.9961336091431724], [1439456832.0, 52380000.0, 0.9971589002606138], [1439458560.0, 52400000.0, 0.9980267284282713], [1439460288.0, 52420000.0, 0.9987369566060174], [1439462016.0, 52440000.0, 0.9992894726405891], [1439463744.0, 52460000.0, 0.9996841892833], [1439465472.0, 52480000.0, 0.9999210442038161], [1439467200.0, 52500000.0, 1.0], [1439468928.0, 52520000.0, 0.9999210442038161], [1439470656.0, 52540000.0, 0.9996841892833], [1439472384.0, 52560000.0, 0.9992894726405893], [1439474112.0, 52580000.0, 0.9987369566060176], [1439475840.0, 52600000.0, 0.9980267284282718], [1439477568.0, 52620000.0, 0.9971589002606143], [1439479296.0, 52640000.0, 0.9961336091431723], [1439481024.0, 52660000.0, 0.9949510169813001], [1439482752.0, 52680000.0, 0.9936113105200084], [1439484480.0, 52700000.0, 0.9921147013144788], [1439486208.0, 52720000.0, 0.9904614256966514], [1439487936.0, 52740000.0, 0.9886517447379143], [1439489664.0, 52760000.0, 0.9866859442078685], [1439491392.0, 52780000.0, 0.984564334529206], [1439493120.0, 52800000.0, 0.9822872507286882], [1439494848.0, 52820000.0, 0.9798550523842464], [1439496576.0, 52840000.0, 0.9772681235681947], [1439498304.0, 52860000.0, 0.9745268727865786], [1439500032.0, 52880000.0, 0.971631732914674], [1439501760.0, 52900000.0, 0.9685831611286313], [1439503488.0, 52920000.0, 0.9653816388332743], [1439505216.0, 52940000.0, 0.9620276715860866], [1439506944.0, 52960000.0, 0.9585217890173748], [1439508672.0, 52980000.0, 0.9548645447466442], [1439510400.0, 53000000.0, 0.9510565162951551], [1439512128.0, 53020000.0, 0.9470983049947461], [1439513856.0, 53040000.0, 0.9429905358928642], [1439515584.0, 53060000.0, 0.9387338576538741], [1439517312.0, 53080000.0, 0.9343289424566124], [1439519040.0, 53100000.0, 0.929776485888252], [1439520768.0, 53120000.0, 0.9250772068344589], [1439522496.0, 53140000.0, 0.9202318473658716], [1439524224.0, 53160000.0, 0.9152411726209192], [1439525952.0, 53180000.0, 0.9101059706849977], [1439527680.0, 53200000.0, 0.9048270524660189], [1439529408.0, 53220000.0, 0.8994052515663707], [1439531136.0, 53240000.0, 0.8938414241512638], [1439532864.0, 53260000.0, 0.8881364488135449], [1439534592.0, 53280000.0, 0.8822912264349541], [1439536320.0, 53300000.0, 0.8763066800438647], [1439538048.0, 53320000.0, 0.8701837546695272], [1439539776.0, 53340000.0, 0.8639234171928373], [1439541504.0, 53360000.0, 0.857526656193651], [1439543232.0, 53380000.0, 0.8509944817946911], [1439544960.0, 53400000.0, 0.8443279255020146], [1439546688.0, 53420000.0, 0.8375280400421455], [1439548416.0, 53440000.0, 0.830595899195813], [1439550144.0, 53460000.0, 0.8235325976284283], [1439551872.0, 53480000.0, 0.8163392507171853], [1439553600.0, 53500000.0, 0.8090169943749492], [1439555328.0, 53520000.0, 0.8015669848708746], [1439557056.0, 53540000.0, 0.7939903986478338], [1439558784.0, 53560000.0, 0.7862884321366223], [1439560512.0, 53580000.0, 0.7784623015670273], [1439562240.0, 53600000.0, 0.7705132427757891], [1439563968.0, 53620000.0, 0.7624425110114483], [1439565696.0, 53640000.0, 0.7542513807361048], [1439567424.0, 53660000.0, 0.7459411454241837], [1439569152.0, 53680000.0, 0.7375131173581712], [1439570880.0, 53700000.0, 0.7289686274214141], [1439572608.0, 53720000.0, 0.72030902488791], [1439574336.0, 53740000.0, 0.7115356772092891], [1439576064.0, 53760000.0, 0.7026499697988485], [1439577792.0, 53780000.0, 0.6936533058128048], [1439579520.0, 53800000.0, 0.6845471059286892], [1439581248.0, 53820000.0, 0.6753328081210255], [1439582976.0, 53840000.0, 0.6660118674342532], [1439584704.0, 53860000.0, 0.6565857557529586], [1439586432.0, 53880000.0, 0.6470559615694471], [1439588160.0, 53900000.0, 0.6374239897486932], [1439589888.0, 53920000.0, 0.627691361290699], [1439591616.0, 53940000.0, 0.6178596130903335], [1439593344.0, 53960000.0, 0.6079302976946052], [1439595072.0, 53980000.0, 0.5979049830575193], [1439596800.0, 54000000.0, 0.5877852522924742], [1439598528.0, 54020000.0, 0.5775727034222693], [1439600256.0, 54040000.0, 0.5672689491267588], [1439601984.0, 54060000.0, 0.5568756164881911], [1439603712.0, 54080000.0, 0.5463943467342669], [1439605440.0, 54100000.0, 0.535826794978995], [1439607168.0, 54120000.0, 0.5251746299612948], [1439608896.0, 54140000.0, 0.5144395337815062], [1439610624.0, 54160000.0, 0.5036232016357612], [1439612352.0, 54180000.0, 0.4927273415482927], [1439614080.0, 54200000.0, 0.48175367410171704], [1439615808.0, 54220000.0, 0.47070393216533507], [1439617536.0, 54240000.0, 0.45957986062148476], [1439619264.0, 54260000.0, 0.44838321609002985], [1439620992.0, 54280000.0, 0.43711576665093754], [1439622720.0, 54300000.0, 0.42577929156507804], [1439624448.0, 54320000.0, 0.4143755809932838], [1439626176.0, 54340000.0, 0.402906435713663], [1439627904.0, 54360000.0, 0.39137366683720354], [1439629632.0, 54380000.0, 0.37977909552180295], [1439631360.0, 54400000.0, 0.3681245526846739], [1439633088.0, 54420000.0, 0.356411878713254], [1439634816.0, 54440000.0, 0.3446429231745211], [1439636544.0, 54460000.0, 0.33281954452299145], [1439638272.0, 54480000.0, 0.3209436098072083], [1439640000.0, 54500000.0, 0.309016994374947], [1439641728.0, 54520000.0, 0.29704158157703525], [1439643456.0, 54540000.0, 0.2850192624699772], [1439645184.0, 54560000.0, 0.27295193551732705], [1439646912.0, 54580000.0, 0.26084150628989955], [1439648640.0, 54600000.0, 0.24868988716485815], [1439650368.0, 54620000.0, 0.2364989970237288], [1439652096.0, 54640000.0, 0.22427076094937917], [1439653824.0, 54660000.0, 0.21200710992205338], [1439655552.0, 54680000.0, 0.19970998051440653], [1439657280.0, 54700000.0, 0.1873813145857249], [1439659008.0, 54720000.0, 0.1750230589752771], [1439660736.0, 54740000.0, 0.1626371651948854], [1439662464.0, 54760000.0, 0.15022558912075964], [1439664192.0, 54780000.0, 0.13779029068464144], [1439665920.0, 54800000.0, 0.12533323356430134], [1439667648.0, 54820000.0, 0.11285638487347956], [1439669376.0, 54840000.0, 0.10036171485121353], [1439671104.0, 54860000.0, 0.0878511965507426], [1439672832.0, 54880000.0, 0.07532680552793293], [1439674560.0, 54900000.0, 0.06279051952931436], [1439676288.0, 54920000.0, 0.050244318179771326], [1439678016.0, 54940000.0, 0.03769018266993709], [1439679744.0, 54960000.0, 0.02513009544333371], [1439681472.0, 54980000.0, 0.01256603988334962], [1439683200.0, 55000000.0, 4.899825157862589e-15], [1439684928.0, 55020000.0, -0.012566039883346926], [1439686656.0, 55040000.0, -0.025130095443331016], [1439688384.0, 55060000.0, -0.037690182669934395], [1439690112.0, 55080000.0, -0.050244318179768634], [1439691840.0, 55100000.0, -0.06279051952931168], [1439693568.0, 55120000.0, -0.07532680552793024], [1439695296.0, 55140000.0, -0.08785119655073992], [1439697024.0, 55160000.0, -0.10036171485121086], [1439698752.0, 55180000.0, -0.11285638487347688], [1439700480.0, 55200000.0, -0.12533323356429868], [1439702208.0, 55220000.0, -0.13779029068463877], [1439703936.0, 55240000.0, -0.15022558912075698], [1439705664.0, 55260000.0, -0.16263716519488275], [1439707392.0, 55280000.0, -0.17502305897527443], [1439709120.0, 55300000.0, -0.18738131458572224], [1439710848.0, 55320000.0, -0.1997099805144039], [1439712576.0, 55340000.0, -0.21200710992205074], [1439714304.0, 55360000.0, -0.22427076094937654], [1439716032.0, 55380000.0, -0.2364989970237262], [1439717760.0, 55400000.0, -0.24868988716485554], [1439719488.0, 55420000.0, -0.26084150628989694], [1439721216.0, 55440000.0, -0.2729519355173245], [1439722944.0, 55460000.0, -0.2850192624699746], [1439724672.0, 55480000.0, -0.29704158157703264], [1439726400.0, 55500000.0, -0.30901699437494445], [1439728128.0, 55520000.0, -0.32094360980720577], [1439729856.0, 55540000.0, -0.3328195445229889], [1439731584.0, 55560000.0, -0.34464292317451856], [1439733312.0, 55580000.0, -0.3564118787132515], [1439735040.0, 55600000.0, -0.3681245526846714], [1439736768.0, 55620000.0, -0.37977909552180045], [1439738496.0, 55640000.0, -0.39137366683720104], [1439740224.0, 55660000.0, -0.4029064357136606], [1439741952.0, 55680000.0, -0.41437558099328137], [1439743680.0, 55700000.0, -0.4257792915650756], [1439745408.0, 55720000.0, -0.4371157666509351], [1439747136.0, 55740000.0, -0.4483832160900274], [1439748864.0, 55760000.0, -0.4595798606214824], [1439750592.0, 55780000.0, -0.4707039321653327], [1439752320.0, 55800000.0, -0.4817536741017147], [1439754048.0, 55820000.0, -0.49272734154829034], [1439755776.0, 55840000.0, -0.5036232016357589], [1439757504.0, 55860000.0, -0.5144395337815039], [1439759232.0, 55880000.0, -0.5251746299612925], [1439760960.0, 55900000.0, -0.5358267949789928], [1439762688.0, 55920000.0, -0.5463943467342646], [1439764416.0, 55940000.0, -0.5568756164881888], [1439766144.0, 55960000.0, -0.5672689491267566], [1439767872.0, 55980000.0, -0.5775727034222671], [1439769600.0, 56000000.0, -0.587785252292472], [1439771328.0, 56020000.0, -0.5979049830575172], [1439773056.0, 56040000.0, -0.607930297694603], [1439774784.0, 56060000.0, -0.6178596130903314], [1439776512.0, 56080000.0, -0.627691361290697], [1439778240.0, 56100000.0, -0.6374239897486911], [1439779968.0, 56120000.0, -0.6470559615694451], [1439781696.0, 56140000.0, -0.6565857557529566], [1439783424.0, 56160000.0, -0.6660118674342512], [1439785152.0, 56180000.0, -0.6753328081210235], [1439786880.0, 56200000.0, -0.6845471059286872], [1439788608.0, 56220000.0, -0.6936533058128029], [1439790336.0, 56240000.0, -0.7026499697988466], [1439792064.0, 56260000.0, -0.7115356772092872], [1439793792.0, 56280000.0, -0.7203090248879082], [1439795520.0, 56300000.0, -0.7289686274214123], [1439797248.0, 56320000.0, -0.7375131173581693], [1439798976.0, 56340000.0, -0.7459411454241819], [1439800704.0, 56360000.0, -0.754251380736103], [1439802432.0, 56380000.0, -0.7624425110114466], [1439804160.0, 56400000.0, -0.7705132427757875], [1439805888.0, 56420000.0, -0.7784623015670257], [1439807616.0, 56440000.0, -0.7862884321366206], [1439809344.0, 56460000.0, -0.7939903986478322], [1439811072.0, 56480000.0, -0.801566984870873], [1439812800.0, 56500000.0, -0.8090169943749477], [1439814528.0, 56520000.0, -0.8163392507171837], [1439816256.0, 56540000.0, -0.8235325976284268], [1439817984.0, 56560000.0, -0.8305958991958116], [1439819712.0, 56580000.0, -0.8375280400421441], [1439821440.0, 56600000.0, -0.8443279255020132], [1439823168.0, 56620000.0, -0.8509944817946896], [1439824896.0, 56640000.0, -0.8575266561936497], [1439826624.0, 56660000.0, -0.8639234171928359], [1439828352.0, 56680000.0, -0.8701837546695259], [1439830080.0, 56700000.0, -0.8763066800438635], [1439831808.0, 56720000.0, -0.8822912264349527], [1439833536.0, 56740000.0, -0.8881364488135437], [1439835264.0, 56760000.0, -0.8938414241512626], [1439836992.0, 56780000.0, -0.8994052515663695], [1439838720.0, 56800000.0, -0.9048270524660177], [1439840448.0, 56820000.0, -0.9101059706849965], [1439842176.0, 56840000.0, -0.9152411726209181], [1439843904.0, 56860000.0, -0.9202318473658705], [1439845632.0, 56880000.0, -0.9250772068344579], [1439847360.0, 56900000.0, -0.929776485888251], [1439849088.0, 56920000.0, -0.9343289424566114], [1439850816.0, 56940000.0, -0.9387338576538732], [1439852544.0, 56960000.0, -0.9429905358928633], [1439854272.0, 56980000.0, -0.9470983049947452], [1439856000.0, 57000000.0, -0.9510565162951542], [1439857728.0, 57020000.0, -0.9548645447466434], [1439859456.0, 57040000.0, -0.9585217890173741], [1439861184.0, 57060000.0, -0.9620276715860858], [1439862912.0, 57080000.0, -0.9653816388332737], [1439864640.0, 57100000.0, -0.9685831611286306], [1439866368.0, 57120000.0, -0.9716317329146733], [1439868096.0, 57140000.0, -0.974526872786578], [1439869824.0, 57160000.0, -0.9772681235681941], [1439871552.0, 57180000.0, -0.9798550523842459], [1439873280.0, 57200000.0, -0.9822872507286876], [1439875008.0, 57220000.0, -0.9845643345292054], [1439876736.0, 57240000.0, -0.986685944207868], [1439878464.0, 57260000.0, -0.9886517447379138], [1439880192.0, 57280000.0, -0.990461425696651], [1439881920.0, 57300000.0, -0.9921147013144784], [1439883648.0, 57320000.0, -0.9936113105200081], [1439885376.0, 57340000.0, -0.9949510169812997], [1439887104.0, 57360000.0, -0.9961336091431721], [1439888832.0, 57380000.0, -0.997158900260614], [1439890560.0, 57400000.0, -0.9980267284282716], [1439892288.0, 57420000.0, -0.9987369566060175], [1439894016.0, 57440000.0, -0.9992894726405892], [1439895744.0, 57460000.0, -0.9996841892832999], [1439897472.0, 57480000.0, -0.9999210442038161], [1439899200.0, 57500000.0, -1.0], [1439900928.0, 57520000.0, -0.9999210442038162], [1439902656.0, 57540000.0, -0.9996841892833], [1439904384.0, 57560000.0, -0.9992894726405892], [1439906112.0, 57580000.0, -0.9987369566060175], [1439907840.0, 57600000.0, -0.9980267284282716], [1439909568.0, 57620000.0, -0.997158900260614], [1439911296.0, 57640000.0, -0.9961336091431726], [1439913024.0, 57660000.0, -0.9949510169813004], [1439914752.0, 57680000.0, -0.9936113105200087], [1439916480.0, 57700000.0, -0.9921147013144783], [1439918208.0, 57720000.0, -0.9904614256966509], [1439919936.0, 57740000.0, -0.9886517447379137], [1439921664.0, 57760000.0, -0.9866859442078679], [1439923392.0, 57780000.0, -0.9845643345292067], [1439925120.0, 57800000.0, -0.9822872507286888], [1439926848.0, 57820000.0, -0.9798550523842472], [1439928576.0, 57840000.0, -0.9772681235681939], [1439930304.0, 57860000.0, -0.9745268727865778], [1439932032.0, 57880000.0, -0.9716317329146732], [1439933760.0, 57900000.0, -0.9685831611286323], [1439935488.0, 57920000.0, -0.9653816388332753], [1439937216.0, 57940000.0, -0.9620276715860876], [1439938944.0, 57960000.0, -0.9585217890173758], [1439940672.0, 57980000.0, -0.9548645447466432], [1439942400.0, 58000000.0, -0.951056516295154], [1439944128.0, 58020000.0, -0.947098304994745], [1439945856.0, 58040000.0, -0.9429905358928654], [1439947584.0, 58060000.0, -0.9387338576538754], [1439949312.0, 58080000.0, -0.9343289424566137], [1439951040.0, 58100000.0, -0.9297764858882533], [1439952768.0, 58120000.0, -0.9250772068344577], [1439954496.0, 58140000.0, -0.9202318473658703], [1439956224.0, 58160000.0, -0.9152411726209178], [1439957952.0, 58180000.0, -0.9101059706849962], [1439959680.0, 58200000.0, -0.9048270524660205], [1439961408.0, 58220000.0, -0.8994052515663723], [1439963136.0, 58240000.0, -0.8938414241512654], [1439964864.0, 58260000.0, -0.8881364488135466], [1439966592.0, 58280000.0, -0.8822912264349524], [1439968320.0, 58300000.0, -0.876306680043863], [1439970048.0, 58320000.0, -0.8701837546695256], [1439971776.0, 58340000.0, -0.8639234171928356], [1439973504.0, 58360000.0, -0.8575266561936529], [1439975232.0, 58380000.0, -0.850994481794693], [1439976960.0, 58400000.0, -0.8443279255020166], [1439978688.0, 58420000.0, -0.8375280400421437], [1439980416.0, 58440000.0, -0.8305958991958111], [1439982144.0, 58460000.0, -0.8235325976284263], [1439983872.0, 58480000.0, -0.8163392507171833], [1439985600.0, 58500000.0, -0.8090169943749514], [1439987328.0, 58520000.0, -0.8015669848708769], [1439989056.0, 58540000.0, -0.793990398647836], [1439990784.0, 58560000.0, -0.7862884321366201], [1439992512.0, 58580000.0, -0.7784623015670251], [1439994240.0, 58600000.0, -0.7705132427757869], [1439995968.0, 58620000.0, -0.7624425110114507], [1439997696.0, 58640000.0, -0.7542513807361072], [1439999424.0, 58660000.0, -0.7459411454241861], [1440001152.0, 58680000.0, -0.7375131173581736], [1440002880.0, 58700000.0, -0.7289686274214118], [1440004608.0, 58720000.0, -0.7203090248879077], [1440006336.0, 58740000.0, -0.7115356772092867], [1440008064.0, 58760000.0, -0.7026499697988511], [1440009792.0, 58780000.0, -0.6936533058128075], [1440011520.0, 58800000.0, -0.6845471059286918], [1440013248.0, 58820000.0, -0.6753328081210281], [1440014976.0, 58840000.0, -0.6660118674342507], [1440016704.0, 58860000.0, -0.6565857557529561], [1440018432.0, 58880000.0, -0.6470559615694446], [1440020160.0, 58900000.0, -0.6374239897486905], [1440021888.0, 58920000.0, -0.6276913612907019], [1440023616.0, 58940000.0, -0.6178596130903364], [1440025344.0, 58960000.0, -0.6079302976946082], [1440027072.0, 58980000.0, -0.5979049830575223], [1440028800.0, 59000000.0, -0.5877852522924715], [1440030528.0, 59020000.0, -0.5775727034222665], [1440032256.0, 59040000.0, -0.5672689491267561], [1440033984.0, 59060000.0, -0.5568756164881882], [1440035712.0, 59080000.0, -0.5463943467342699], [1440037440.0, 59100000.0, -0.5358267949789981], [1440039168.0, 59120000.0, -0.5251746299612979], [1440040896.0, 59140000.0, -0.5144395337815093], [1440042624.0, 59160000.0, -0.5036232016357582], [1440044352.0, 59180000.0, -0.4927273415482897], [1440046080.0, 59200000.0, -0.48175367410171405], [1440047808.0, 59220000.0, -0.4707039321653383], [1440049536.0, 59240000.0, -0.45957986062148803], [1440051264.0, 59260000.0, -0.4483832160900331], [1440052992.0, 59280000.0, -0.4371157666509345], [1440054720.0, 59300000.0, -0.42577929156507494], [1440056448.0, 59320000.0, -0.41437558099328065], [1440058176.0, 59340000.0, -0.4029064357136599], [1440059904.0, 59360000.0, -0.39137366683720687], [1440061632.0, 59380000.0, -0.37977909552180633], [1440063360.0, 59400000.0, -0.3681245526846773], [1440065088.0, 59420000.0, -0.3564118787132508], [1440066816.0, 59440000.0, -0.3446429231745179], [1440068544.0, 59460000.0, -0.33281954452298823], [1440070272.0, 59480000.0, -0.3209436098072118], [1440072000.0, 59500000.0, -0.3090169943749505], [1440073728.0, 59520000.0, -0.29704158157703875], [1440075456.0, 59540000.0, -0.2850192624699807], [1440077184.0, 59560000.0, -0.2729519355173238], [1440078912.0, 59580000.0, -0.2608415062898962], [1440080640.0, 59600000.0, -0.24868988716485482], [1440082368.0, 59620000.0, -0.23649899702372548], [1440084096.0, 59640000.0, -0.22427076094938275], [1440085824.0, 59660000.0, -0.21200710992205696], [1440087552.0, 59680000.0, -0.19970998051441013], [1440089280.0, 59700000.0, -0.18738131458572851], [1440091008.0, 59720000.0, -0.1750230589752737], [1440092736.0, 59740000.0, -0.16263716519488203], [1440094464.0, 59760000.0, -0.15022558912075626], [1440096192.0, 59780000.0, -0.13779029068463802], [1440097920.0, 59800000.0, -0.12533323356430498], [1440099648.0, 59820000.0, -0.11285638487348322], [1440101376.0, 59840000.0, -0.1003617148512172], [1440103104.0, 59860000.0, -0.08785119655074626], [1440104832.0, 59880000.0, -0.0753268055279295], [1440106560.0, 59900000.0, -0.06279051952931095], [1440108288.0, 59920000.0, -0.0502443181797679], [1440110016.0, 59940000.0, -0.037690182669940765], [1440111744.0, 59960000.0, -0.025130095443337386], [1440113472.0, 59980000.0, -0.012566039883353296], [1440115200.0, 60000000.0, -1.4695761589768238e-15], [1440116928.0, 60020000.0, 0.012566039883350356], [1440118656.0, 60040000.0, 0.025130095443334447], [1440120384.0, 60060000.0, 0.03769018266993782], [1440122112.0, 60080000.0, 0.05024431817976496], [1440123840.0, 60100000.0, 0.062790519529308], [1440125568.0, 60120000.0, 0.07532680552792657], [1440127296.0, 60140000.0, 0.08785119655074333], [1440129024.0, 60160000.0, 0.10036171485121427], [1440130752.0, 60180000.0, 0.11285638487348029], [1440132480.0, 60200000.0, 0.12533323356430207], [1440134208.0, 60220000.0, 0.13779029068463514], [1440135936.0, 60240000.0, 0.15022558912075334], [1440137664.0, 60260000.0, 0.16263716519487914], [1440139392.0, 60280000.0, 0.17502305897527082], [1440141120.0, 60300000.0, 0.18738131458572563], [1440142848.0, 60320000.0, 0.19970998051440725], [1440144576.0, 60340000.0, 0.2120071099220541], [1440146304.0, 60360000.0, 0.2242707609493799], [1440148032.0, 60380000.0, 0.23649899702372262], [1440149760.0, 60400000.0, 0.248689887164852], [1440151488.0, 60420000.0, 0.2608415062898934], [1440153216.0, 60440000.0, 0.27295193551732094], [1440154944.0, 60460000.0, 0.2850192624699779], [1440156672.0, 60480000.0, 0.2970415815770359], [1440158400.0, 60500000.0, 0.30901699437494773], [1440160128.0, 60520000.0, 0.32094360980720904], [1440161856.0, 60540000.0, 0.33281954452298546], [1440163584.0, 60560000.0, 0.3446429231745151], [1440165312.0, 60580000.0, 0.35641187871324803], [1440167040.0, 60600000.0, 0.3681245526846746], [1440168768.0, 60620000.0, 0.3797790955218036], [1440170496.0, 60640000.0, 0.3913736668372042], [1440172224.0, 60660000.0, 0.4029064357136572], [1440173952.0, 60680000.0, 0.414375580993278], [1440175680.0, 60700000.0, 0.42577929156507227], [1440177408.0, 60720000.0, 0.4371157666509318], [1440179136.0, 60740000.0, 0.44838321609003046], [1440180864.0, 60760000.0, 0.4595798606214854], [1440182592.0, 60780000.0, 0.4707039321653357], [1440184320.0, 60800000.0, 0.4817536741017115], [1440186048.0, 60820000.0, 0.4927273415482871], [1440187776.0, 60840000.0, 0.5036232016357557], [1440189504.0, 60860000.0, 0.5144395337815069], [1440191232.0, 60880000.0, 0.5251746299612954], [1440192960.0, 60900000.0, 0.5358267949789957], [1440194688.0, 60920000.0, 0.5463943467342675], [1440196416.0, 60940000.0, 0.5568756164881857], [1440198144.0, 60960000.0, 0.5672689491267536], [1440199872.0, 60980000.0, 0.5775727034222641], [1440201600.0, 61000000.0, 0.587785252292469], [1440203328.0, 61020000.0, 0.5979049830575199], [1440205056.0, 61040000.0, 0.6079302976946058], [1440206784.0, 61060000.0, 0.6178596130903341], [1440208512.0, 61080000.0, 0.6276913612906997], [1440210240.0, 61100000.0, 0.6374239897486883], [1440211968.0, 61120000.0, 0.6470559615694423], [1440213696.0, 61140000.0, 0.6565857557529539], [1440215424.0, 61160000.0, 0.6660118674342485], [1440217152.0, 61180000.0, 0.675332808121026], [1440218880.0, 61200000.0, 0.6845471059286896], [1440220608.0, 61220000.0, 0.6936533058128054], [1440222336.0, 61240000.0, 0.7026499697988491], [1440224064.0, 61260000.0, 0.7115356772092847], [1440225792.0, 61280000.0, 0.7203090248879056], [1440227520.0, 61300000.0, 0.7289686274214098], [1440229248.0, 61320000.0, 0.7375131173581716], [1440230976.0, 61340000.0, 0.7459411454241841], [1440232704.0, 61360000.0, 0.7542513807361052], [1440234432.0, 61380000.0, 0.7624425110114488], [1440236160.0, 61400000.0, 0.7705132427757851], [1440237888.0, 61420000.0, 0.7784623015670233], [1440239616.0, 61440000.0, 0.7862884321366184], [1440241344.0, 61460000.0, 0.7939903986478343], [1440243072.0, 61480000.0, 0.8015669848708751], [1440244800.0, 61500000.0, 0.8090169943749497], [1440246528.0, 61520000.0, 0.8163392507171816], [1440248256.0, 61540000.0, 0.8235325976284247], [1440249984.0, 61560000.0, 0.8305958991958095], [1440251712.0, 61580000.0, 0.8375280400421421], [1440253440.0, 61600000.0, 0.8443279255020151], [1440255168.0, 61620000.0, 0.8509944817946914], [1440256896.0, 61640000.0, 0.8575266561936514], [1440258624.0, 61660000.0, 0.863923417192834], [1440260352.0, 61680000.0, 0.870183754669524], [1440262080.0, 61700000.0, 0.8763066800438617], [1440263808.0, 61720000.0, 0.8822912264349511], [1440265536.0, 61740000.0, 0.8881364488135453], [1440267264.0, 61760000.0, 0.8938414241512641], [1440268992.0, 61780000.0, 0.8994052515663711], [1440270720.0, 61800000.0, 0.9048270524660191], [1440272448.0, 61820000.0, 0.910105970684995], [1440274176.0, 61840000.0, 0.9152411726209166], [1440275904.0, 61860000.0, 0.9202318473658692], [1440277632.0, 61880000.0, 0.9250772068344566], [1440279360.0, 61900000.0, 0.9297764858882522], [1440281088.0, 61920000.0, 0.9343289424566126], [1440282816.0, 61940000.0, 0.9387338576538744], [1440284544.0, 61960000.0, 0.9429905358928645], [1440286272.0, 61980000.0, 0.947098304994744], [1440288000.0, 62000000.0, 0.9510565162951531], [1440289728.0, 62020000.0, 0.9548645447466423], [1440291456.0, 62040000.0, 0.9585217890173751], [1440293184.0, 62060000.0, 0.9620276715860868], [1440294912.0, 62080000.0, 0.9653816388332745], [1440296640.0, 62100000.0, 0.9685831611286315], [1440298368.0, 62120000.0, 0.9716317329146724], [1440300096.0, 62140000.0, 0.9745268727865771], [1440301824.0, 62160000.0, 0.9772681235681934], [1440303552.0, 62180000.0, 0.9798550523842465], [1440305280.0, 62200000.0, 0.9822872507286883], [1440307008.0, 62220000.0, 0.9845643345292061], [1440308736.0, 62240000.0, 0.9866859442078675], [1440310464.0, 62260000.0, 0.9886517447379133], [1440312192.0, 62280000.0, 0.9904614256966505], [1440313920.0, 62300000.0, 0.992114701314478], [1440315648.0, 62320000.0, 0.9936113105200084], [1440317376.0, 62340000.0, 0.9949510169813001], [1440319104.0, 62360000.0, 0.9961336091431724], [1440320832.0, 62380000.0, 0.9971589002606138], [1440322560.0, 62400000.0, 0.9980267284282713], [1440324288.0, 62420000.0, 0.9987369566060174], [1440326016.0, 62440000.0, 0.9992894726405891], [1440327744.0, 62460000.0, 0.9996841892833], [1440329472.0, 62480000.0, 0.9999210442038161], [1440331200.0, 62500000.0, 1.0], [1440332928.0, 62520000.0, 0.9999210442038161], [1440334656.0, 62540000.0, 0.9996841892833], [1440336384.0, 62560000.0, 0.9992894726405893], [1440338112.0, 62580000.0, 0.9987369566060177], [1440339840.0, 62600000.0, 0.9980267284282718], [1440341568.0, 62620000.0, 0.9971589002606143], [1440343296.0, 62640000.0, 0.9961336091431723], [1440345024.0, 62660000.0, 0.9949510169813001], [1440346752.0, 62680000.0, 0.9936113105200084], [1440348480.0, 62700000.0, 0.9921147013144788], [1440350208.0, 62720000.0, 0.9904614256966514], [1440351936.0, 62740000.0, 0.9886517447379143], [1440353664.0, 62760000.0, 0.9866859442078685], [1440355392.0, 62780000.0, 0.984564334529206], [1440357120.0, 62800000.0, 0.9822872507286882], [1440358848.0, 62820000.0, 0.9798550523842465], [1440360576.0, 62840000.0, 0.9772681235681947], [1440362304.0, 62860000.0, 0.9745268727865787], [1440364032.0, 62880000.0, 0.9716317329146741], [1440365760.0, 62900000.0, 0.9685831611286314], [1440367488.0, 62920000.0, 0.9653816388332744], [1440369216.0, 62940000.0, 0.9620276715860866], [1440370944.0, 62960000.0, 0.9585217890173748], [1440372672.0, 62980000.0, 0.9548645447466443], [1440374400.0, 63000000.0, 0.9510565162951552], [1440376128.0, 63020000.0, 0.9470983049947461], [1440377856.0, 63040000.0, 0.9429905358928643], [1440379584.0, 63060000.0, 0.9387338576538742], [1440381312.0, 63080000.0, 0.9343289424566125], [1440383040.0, 63100000.0, 0.9297764858882521], [1440384768.0, 63120000.0, 0.925077206834459], [1440386496.0, 63140000.0, 0.9202318473658717], [1440388224.0, 63160000.0, 0.9152411726209193], [1440389952.0, 63180000.0, 0.9101059706849978], [1440391680.0, 63200000.0, 0.904827052466019], [1440393408.0, 63220000.0, 0.8994052515663709], [1440395136.0, 63240000.0, 0.8938414241512639], [1440396864.0, 63260000.0, 0.888136448813545], [1440398592.0, 63280000.0, 0.8822912264349542], [1440400320.0, 63300000.0, 0.8763066800438648], [1440402048.0, 63320000.0, 0.8701837546695274], [1440403776.0, 63340000.0, 0.8639234171928374], [1440405504.0, 63360000.0, 0.8575266561936512], [1440407232.0, 63380000.0, 0.8509944817946912], [1440408960.0, 63400000.0, 0.8443279255020147], [1440410688.0, 63420000.0, 0.8375280400421456], [1440412416.0, 63440000.0, 0.8305958991958132], [1440414144.0, 63460000.0, 0.8235325976284285], [1440415872.0, 63480000.0, 0.8163392507171854], [1440417600.0, 63500000.0, 0.8090169943749493], [1440419328.0, 63520000.0, 0.8015669848708747], [1440421056.0, 63540000.0, 0.7939903986478339], [1440422784.0, 63560000.0, 0.7862884321366224], [1440424512.0, 63580000.0, 0.7784623015670274], [1440426240.0, 63600000.0, 0.7705132427757894], [1440427968.0, 63620000.0, 0.7624425110114484], [1440429696.0, 63640000.0, 0.754251380736105], [1440431424.0, 63660000.0, 0.7459411454241838], [1440433152.0, 63680000.0, 0.7375131173581713], [1440434880.0, 63700000.0, 0.7289686274214143], [1440436608.0, 63720000.0, 0.7203090248879103], [1440438336.0, 63740000.0, 0.7115356772092892], [1440440064.0, 63760000.0, 0.7026499697988488], [1440441792.0, 63780000.0, 0.693653305812805], [1440443520.0, 63800000.0, 0.6845471059286893], [1440445248.0, 63820000.0, 0.6753328081210257], [1440446976.0, 63840000.0, 0.6660118674342534], [1440448704.0, 63860000.0, 0.6565857557529589], [1440450432.0, 63880000.0, 0.6470559615694473], [1440452160.0, 63900000.0, 0.6374239897486934], [1440453888.0, 63920000.0, 0.6276913612906992], [1440455616.0, 63940000.0, 0.6178596130903338], [1440457344.0, 63960000.0, 0.6079302976946054], [1440459072.0, 63980000.0, 0.5979049830575195], [1440460800.0, 64000000.0, 0.5877852522924744], [1440462528.0, 64020000.0, 0.5775727034222695], [1440464256.0, 64040000.0, 0.5672689491267591], [1440465984.0, 64060000.0, 0.5568756164881913], [1440467712.0, 64080000.0, 0.5463943467342671], [1440469440.0, 64100000.0, 0.5358267949789952], [1440471168.0, 64120000.0, 0.5251746299612949], [1440472896.0, 64140000.0, 0.5144395337815064], [1440474624.0, 64160000.0, 0.5036232016357615], [1440476352.0, 64180000.0, 0.4927273415482929], [1440478080.0, 64200000.0, 0.48175367410171727], [1440479808.0, 64220000.0, 0.4707039321653353], [1440481536.0, 64240000.0, 0.459579860621485], [1440483264.0, 64260000.0, 0.44838321609003007], [1440484992.0, 64280000.0, 0.43711576665093776], [1440486720.0, 64300000.0, 0.42577929156507827], [1440488448.0, 64320000.0, 0.41437558099328403], [1440490176.0, 64340000.0, 0.40290643571366325], [1440491904.0, 64360000.0, 0.39137366683720376], [1440493632.0, 64380000.0, 0.37977909552180317], [1440495360.0, 64400000.0, 0.36812455268467414], [1440497088.0, 64420000.0, 0.35641187871325425], [1440498816.0, 64440000.0, 0.34464292317452133], [1440500544.0, 64460000.0, 0.3328195445229917], [1440502272.0, 64480000.0, 0.32094360980720854], [1440504000.0, 64500000.0, 0.30901699437494723], [1440505728.0, 64520000.0, 0.2970415815770355], [1440507456.0, 64540000.0, 0.28501926246997744], [1440509184.0, 64560000.0, 0.2729519355173273], [1440510912.0, 64580000.0, 0.26084150628989977], [1440512640.0, 64600000.0, 0.24868988716485838], [1440514368.0, 64620000.0, 0.23649899702372906], [1440516096.0, 64640000.0, 0.2242707609493794], [1440517824.0, 64660000.0, 0.21200710992205363], [1440519552.0, 64680000.0, 0.19970998051440675], [1440521280.0, 64700000.0, 0.18738131458572513], [1440523008.0, 64720000.0, 0.17502305897527734], [1440524736.0, 64740000.0, 0.16263716519488566], [1440526464.0, 64760000.0, 0.1502255891207599], [1440528192.0, 64780000.0, 0.1377902906846417], [1440529920.0, 64800000.0, 0.1253332335643016], [1440531648.0, 64820000.0, 0.1128563848734798], [1440533376.0, 64840000.0, 0.10036171485121378], [1440535104.0, 64860000.0, 0.08785119655074285], [1440536832.0, 64880000.0, 0.07532680552793318], [1440538560.0, 64900000.0, 0.06279051952931461], [1440540288.0, 64920000.0, 0.05024431817977157], [1440542016.0, 64940000.0, 0.03769018266993734], [1440543744.0, 64960000.0, 0.025130095443333954], [1440545472.0, 64980000.0, 0.012566039883349865], [1440547200.0, 65000000.0, -1.9606728399089416e-15], [1440548928.0, 65020000.0, -0.012566039883346682], [1440550656.0, 65040000.0, -0.025130095443330773], [1440552384.0, 65060000.0, -0.03769018266993415], [1440554112.0, 65080000.0, -0.05024431817976839], [1440555840.0, 65100000.0, -0.06279051952931143], [1440557568.0, 65120000.0, -0.07532680552793], [1440559296.0, 65140000.0, -0.08785119655073967], [1440561024.0, 65160000.0, -0.10036171485121062], [1440562752.0, 65180000.0, -0.11285638487347664], [1440564480.0, 65200000.0, -0.12533323356429843], [1440566208.0, 65220000.0, -0.13779029068463852], [1440567936.0, 65240000.0, -0.15022558912075673], [1440569664.0, 65260000.0, -0.16263716519488253], [1440571392.0, 65280000.0, -0.1750230589752742], [1440573120.0, 65300000.0, -0.18738131458572202], [1440574848.0, 65320000.0, -0.19970998051440364], [1440576576.0, 65340000.0, -0.21200710992205052], [1440578304.0, 65360000.0, -0.2242707609493763], [1440580032.0, 65380000.0, -0.23649899702372595], [1440581760.0, 65400000.0, -0.2486898871648553], [1440583488.0, 65420000.0, -0.26084150628989666], [1440585216.0, 65440000.0, -0.2729519355173242], [1440586944.0, 65460000.0, -0.2850192624699744], [1440588672.0, 65480000.0, -0.2970415815770324], [1440590400.0, 65500000.0, -0.30901699437494423], [1440592128.0, 65520000.0, -0.32094360980720554], [1440593856.0, 65540000.0, -0.3328195445229887], [1440595584.0, 65560000.0, -0.34464292317451833], [1440597312.0, 65580000.0, -0.35641187871325125], [1440599040.0, 65600000.0, -0.3681245526846712], [1440600768.0, 65620000.0, -0.3797790955218002], [1440602496.0, 65640000.0, -0.3913736668372008], [1440604224.0, 65660000.0, -0.40290643571366036], [1440605952.0, 65680000.0, -0.41437558099328115], [1440607680.0, 65700000.0, -0.4257792915650754], [1440609408.0, 65720000.0, -0.43711576665093493], [1440611136.0, 65740000.0, -0.4483832160900272], [1440612864.0, 65760000.0, -0.45957986062148215], [1440614592.0, 65780000.0, -0.47070393216533246], [1440616320.0, 65800000.0, -0.4817536741017145], [1440618048.0, 65820000.0, -0.4927273415482901], [1440619776.0, 65840000.0, -0.5036232016357587], [1440621504.0, 65860000.0, -0.5144395337815036], [1440623232.0, 65880000.0, -0.5251746299612923], [1440624960.0, 65900000.0, -0.5358267949789925], [1440626688.0, 65920000.0, -0.5463943467342643], [1440628416.0, 65940000.0, -0.5568756164881886], [1440630144.0, 65960000.0, -0.5672689491267564], [1440631872.0, 65980000.0, -0.577572703422267], [1440633600.0, 66000000.0, -0.5877852522924718], [1440635328.0, 66020000.0, -0.5979049830575169], [1440637056.0, 66040000.0, -0.6079302976946028], [1440638784.0, 66060000.0, -0.6178596130903312], [1440640512.0, 66080000.0, -0.6276913612906968], [1440642240.0, 66100000.0, -0.637423989748691], [1440643968.0, 66120000.0, -0.6470559615694449], [1440645696.0, 66140000.0, -0.6565857557529564], [1440647424.0, 66160000.0, -0.666011867434251], [1440649152.0, 66180000.0, -0.6753328081210233], [1440650880.0, 66200000.0, -0.684547105928687], [1440652608.0, 66220000.0, -0.6936533058128027], [1440654336.0, 66240000.0, -0.7026499697988464], [1440656064.0, 66260000.0, -0.711535677209287], [1440657792.0, 66280000.0, -0.720309024887908], [1440659520.0, 66300000.0, -0.7289686274214121], [1440661248.0, 66320000.0, -0.7375131173581692], [1440662976.0, 66340000.0, -0.7459411454241817], [1440664704.0, 66360000.0, -0.7542513807361029], [1440666432.0, 66380000.0, -0.7624425110114464], [1440668160.0, 66400000.0, -0.7705132427757873], [1440669888.0, 66420000.0, -0.7784623015670254], [1440671616.0, 66440000.0, -0.7862884321366205], [1440673344.0, 66460000.0, -0.793990398647832], [1440675072.0, 66480000.0, -0.8015669848708729], [1440676800.0, 66500000.0, -0.8090169943749476], [1440678528.0, 66520000.0, -0.8163392507171836], [1440680256.0, 66540000.0, -0.8235325976284267], [1440681984.0, 66560000.0, -0.8305958991958114], [1440683712.0, 66580000.0, -0.837528040042144], [1440685440.0, 66600000.0, -0.8443279255020131], [1440687168.0, 66620000.0, -0.8509944817946895], [1440688896.0, 66640000.0, -0.8575266561936495], [1440690624.0, 66660000.0, -0.8639234171928358], [1440692352.0, 66680000.0, -0.8701837546695258], [1440694080.0, 66700000.0, -0.8763066800438634], [1440695808.0, 66720000.0, -0.8822912264349526], [1440697536.0, 66740000.0, -0.8881364488135436], [1440699264.0, 66760000.0, -0.8938414241512624], [1440700992.0, 66780000.0, -0.8994052515663694], [1440702720.0, 66800000.0, -0.9048270524660176], [1440704448.0, 66820000.0, -0.9101059706849964], [1440706176.0, 66840000.0, -0.915241172620918], [1440707904.0, 66860000.0, -0.9202318473658705], [1440709632.0, 66880000.0, -0.9250772068344578], [1440711360.0, 66900000.0, -0.9297764858882509], [1440713088.0, 66920000.0, -0.9343289424566114], [1440714816.0, 66940000.0, -0.9387338576538731], [1440716544.0, 66960000.0, -0.9429905358928633], [1440718272.0, 66980000.0, -0.9470983049947451], [1440720000.0, 67000000.0, -0.9510565162951542], [1440721728.0, 67020000.0, -0.9548645447466433], [1440723456.0, 67040000.0, -0.958521789017374], [1440725184.0, 67060000.0, -0.9620276715860858], [1440726912.0, 67080000.0, -0.9653816388332735], [1440728640.0, 67100000.0, -0.9685831611286306], [1440730368.0, 67120000.0, -0.9716317329146733], [1440732096.0, 67140000.0, -0.9745268727865779], [1440733824.0, 67160000.0, -0.977268123568194], [1440735552.0, 67180000.0, -0.9798550523842459], [1440737280.0, 67200000.0, -0.9822872507286876], [1440739008.0, 67220000.0, -0.9845643345292054], [1440740736.0, 67240000.0, -0.986685944207868], [1440742464.0, 67260000.0, -0.9886517447379138], [1440744192.0, 67280000.0, -0.990461425696651], [1440745920.0, 67300000.0, -0.9921147013144784], [1440747648.0, 67320000.0, -0.9936113105200081], [1440749376.0, 67340000.0, -0.9949510169812997], [1440751104.0, 67360000.0, -0.9961336091431721], [1440752832.0, 67380000.0, -0.997158900260614], [1440754560.0, 67400000.0, -0.9980267284282716], [1440756288.0, 67420000.0, -0.9987369566060175], [1440758016.0, 67440000.0, -0.9992894726405892], [1440759744.0, 67460000.0, -0.9996841892832999], [1440761472.0, 67480000.0, -0.9999210442038161], [1440763200.0, 67500000.0, -1.0], [1440764928.0, 67520000.0, -0.9999210442038162], [1440766656.0, 67540000.0, -0.9996841892833002], [1440768384.0, 67560000.0, -0.9992894726405892], [1440770112.0, 67580000.0, -0.9987369566060175], [1440771840.0, 67600000.0, -0.9980267284282716], [1440773568.0, 67620000.0, -0.997158900260614], [1440775296.0, 67640000.0, -0.9961336091431726], [1440777024.0, 67660000.0, -0.9949510169813004], [1440778752.0, 67680000.0, -0.9936113105200088], [1440780480.0, 67700000.0, -0.9921147013144783], [1440782208.0, 67720000.0, -0.990461425696651], [1440783936.0, 67740000.0, -0.9886517447379138], [1440785664.0, 67760000.0, -0.9866859442078679], [1440787392.0, 67780000.0, -0.9845643345292067], [1440789120.0, 67800000.0, -0.9822872507286888], [1440790848.0, 67820000.0, -0.9798550523842472], [1440792576.0, 67840000.0, -0.977268123568194], [1440794304.0, 67860000.0, -0.9745268727865779], [1440796032.0, 67880000.0, -0.9716317329146732], [1440797760.0, 67900000.0, -0.9685831611286323], [1440799488.0, 67920000.0, -0.9653816388332753], [1440801216.0, 67940000.0, -0.9620276715860876], [1440802944.0, 67960000.0, -0.958521789017376], [1440804672.0, 67980000.0, -0.9548645447466432], [1440806400.0, 68000000.0, -0.9510565162951541], [1440808128.0, 68020000.0, -0.9470983049947451], [1440809856.0, 68040000.0, -0.9429905358928655], [1440811584.0, 68060000.0, -0.9387338576538755], [1440813312.0, 68080000.0, -0.9343289424566138], [1440815040.0, 68100000.0, -0.9297764858882535], [1440816768.0, 68120000.0, -0.9250772068344577], [1440818496.0, 68140000.0, -0.9202318473658704], [1440820224.0, 68160000.0, -0.9152411726209179], [1440821952.0, 68180000.0, -0.9101059706849963], [1440823680.0, 68200000.0, -0.9048270524660206], [1440825408.0, 68220000.0, -0.8994052515663724], [1440827136.0, 68240000.0, -0.8938414241512656], [1440828864.0, 68260000.0, -0.8881364488135467], [1440830592.0, 68280000.0, -0.8822912264349525], [1440832320.0, 68300000.0, -0.8763066800438631], [1440834048.0, 68320000.0, -0.8701837546695257], [1440835776.0, 68340000.0, -0.8639234171928357], [1440837504.0, 68360000.0, -0.8575266561936531], [1440839232.0, 68380000.0, -0.8509944817946931], [1440840960.0, 68400000.0, -0.8443279255020167], [1440842688.0, 68420000.0, -0.8375280400421439], [1440844416.0, 68440000.0, -0.8305958991958112], [1440846144.0, 68460000.0, -0.8235325976284265], [1440847872.0, 68480000.0, -0.8163392507171835], [1440849600.0, 68500000.0, -0.8090169943749516], [1440851328.0, 68520000.0, -0.801566984870877], [1440853056.0, 68540000.0, -0.7939903986478363], [1440854784.0, 68560000.0, -0.7862884321366203], [1440856512.0, 68580000.0, -0.7784623015670253], [1440858240.0, 68600000.0, -0.7705132427757871], [1440859968.0, 68620000.0, -0.7624425110114509], [1440861696.0, 68640000.0, -0.7542513807361073], [1440863424.0, 68660000.0, -0.7459411454241862], [1440865152.0, 68680000.0, -0.7375131173581738], [1440866880.0, 68700000.0, -0.728968627421412], [1440868608.0, 68720000.0, -0.7203090248879078], [1440870336.0, 68740000.0, -0.7115356772092869], [1440872064.0, 68760000.0, -0.7026499697988513], [1440873792.0, 68780000.0, -0.6936533058128077], [1440875520.0, 68800000.0, -0.684547105928692], [1440877248.0, 68820000.0, -0.6753328081210284], [1440878976.0, 68840000.0, -0.6660118674342509], [1440880704.0, 68860000.0, -0.6565857557529563], [1440882432.0, 68880000.0, -0.6470559615694448], [1440884160.0, 68900000.0, -0.6374239897486907], [1440885888.0, 68920000.0, -0.6276913612907021], [1440887616.0, 68940000.0, -0.6178596130903367], [1440889344.0, 68960000.0, -0.6079302976946083], [1440891072.0, 68980000.0, -0.5979049830575225], [1440892800.0, 69000000.0, -0.5877852522924716], [1440894528.0, 69020000.0, -0.5775727034222667], [1440896256.0, 69040000.0, -0.5672689491267563], [1440897984.0, 69060000.0, -0.5568756164881884], [1440899712.0, 69080000.0, -0.5463943467342701], [1440901440.0, 69100000.0, -0.5358267949789983], [1440903168.0, 69120000.0, -0.5251746299612982], [1440904896.0, 69140000.0, -0.5144395337815095], [1440906624.0, 69160000.0, -0.5036232016357585], [1440908352.0, 69180000.0, -0.4927273415482899], [1440910080.0, 69200000.0, -0.48175367410171427], [1440911808.0, 69220000.0, -0.4707039321653385], [1440913536.0, 69240000.0, -0.4595798606214882], [1440915264.0, 69260000.0, -0.44838321609003334], [1440916992.0, 69280000.0, -0.4371157666509347], [1440918720.0, 69300000.0, -0.42577929156507516], [1440920448.0, 69320000.0, -0.4143755809932809], [1440922176.0, 69340000.0, -0.40290643571366014], [1440923904.0, 69360000.0, -0.39137366683720715], [1440925632.0, 69380000.0, -0.37977909552180655], [1440927360.0, 69400000.0, -0.36812455268467753], [1440929088.0, 69420000.0, -0.35641187871325103], [1440930816.0, 69440000.0, -0.3446429231745181], [1440932544.0, 69460000.0, -0.33281954452298845], [1440934272.0, 69480000.0, -0.32094360980721204], [1440936000.0, 69500000.0, -0.3090169943749507], [1440937728.0, 69520000.0, -0.29704158157703897], [1440939456.0, 69540000.0, -0.28501926246998094], [1440941184.0, 69560000.0, -0.272951935517324], [1440942912.0, 69580000.0, -0.26084150628989644], [1440944640.0, 69600000.0, -0.24868988716485507], [1440946368.0, 69620000.0, -0.23649899702372573], [1440948096.0, 69640000.0, -0.22427076094938297], [1440949824.0, 69660000.0, -0.2120071099220572], [1440951552.0, 69680000.0, -0.19970998051441036], [1440953280.0, 69700000.0, -0.18738131458572874], [1440955008.0, 69720000.0, -0.17502305897527395], [1440956736.0, 69740000.0, -0.16263716519488228], [1440958464.0, 69760000.0, -0.1502255891207565], [1440960192.0, 69780000.0, -0.13779029068463827], [1440961920.0, 69800000.0, -0.12533323356430523], [1440963648.0, 69820000.0, -0.11285638487348346], [1440965376.0, 69840000.0, -0.10036171485121743], [1440967104.0, 69860000.0, -0.08785119655074651], [1440968832.0, 69880000.0, -0.07532680552792975], [1440970560.0, 69900000.0, -0.06279051952931118], [1440972288.0, 69920000.0, -0.05024431817976815], [1440974016.0, 69940000.0, -0.03769018266994101], [1440975744.0, 69960000.0, -0.02513009544333763], [1440977472.0, 69980000.0, -0.01256603988335354], [1440979200.0, 70000000.0, -1.7145055188062944e-15], [1440980928.0, 70020000.0, 0.012566039883350111], [1440982656.0, 70040000.0, 0.0251300954433342], [1440984384.0, 70060000.0, 0.03769018266993758], [1440986112.0, 70080000.0, 0.05024431817976472], [1440987840.0, 70100000.0, 0.06279051952930777], [1440989568.0, 70120000.0, 0.07532680552792634], [1440991296.0, 70140000.0, 0.0878511965507431], [1440993024.0, 70160000.0, 0.10036171485121402], [1440994752.0, 70180000.0, 0.11285638487348006], [1440996480.0, 70200000.0, 0.12533323356430184], [1440998208.0, 70220000.0, 0.1377902906846349], [1440999936.0, 70240000.0, 0.1502255891207531], [1441001664.0, 70260000.0, 0.1626371651948789], [1441003392.0, 70280000.0, 0.17502305897527057], [1441005120.0, 70300000.0, 0.18738131458572538], [1441006848.0, 70320000.0, 0.199709980514407], [1441008576.0, 70340000.0, 0.21200710992205385], [1441010304.0, 70360000.0, 0.22427076094937964], [1441012032.0, 70380000.0, 0.23649899702372237], [1441013760.0, 70400000.0, 0.24868988716485174], [1441015488.0, 70420000.0, 0.26084150628989317], [1441017216.0, 70440000.0, 0.2729519355173207], [1441018944.0, 70460000.0, 0.28501926246997766], [1441020672.0, 70480000.0, 0.2970415815770357], [1441022400.0, 70500000.0, 0.30901699437494745], [1441024128.0, 70520000.0, 0.3209436098072088], [1441025856.0, 70540000.0, 0.33281954452298523], [1441027584.0, 70560000.0, 0.3446429231745149], [1441029312.0, 70580000.0, 0.3564118787132478], [1441031040.0, 70600000.0, 0.36812455268467437], [1441032768.0, 70620000.0, 0.3797790955218034], [1441034496.0, 70640000.0, 0.391373666837204], [1441036224.0, 70660000.0, 0.402906435713657], [1441037952.0, 70680000.0, 0.41437558099327776], [1441039680.0, 70700000.0, 0.42577929156507205], [1441041408.0, 70720000.0, 0.4371157666509316], [1441043136.0, 70740000.0, 0.4483832160900303], [1441044864.0, 70760000.0, 0.4595798606214852], [1441046592.0, 70780000.0, 0.47070393216533546], [1441048320.0, 70800000.0, 0.48175367410171127], [1441050048.0, 70820000.0, 0.4927273415482869], [1441051776.0, 70840000.0, 0.5036232016357556], [1441053504.0, 70860000.0, 0.5144395337815066], [1441055232.0, 70880000.0, 0.5251746299612952], [1441056960.0, 70900000.0, 0.5358267949789954], [1441058688.0, 70920000.0, 0.5463943467342672], [1441060416.0, 70940000.0, 0.5568756164881855], [1441062144.0, 70960000.0, 0.5672689491267534], [1441063872.0, 70980000.0, 0.577572703422264], [1441065600.0, 71000000.0, 0.5877852522924688], [1441067328.0, 71020000.0, 0.5979049830575197], [1441069056.0, 71040000.0, 0.6079302976946056], [1441070784.0, 71060000.0, 0.6178596130903339], [1441072512.0, 71080000.0, 0.6276913612906995], [1441074240.0, 71100000.0, 0.6374239897486881], [1441075968.0, 71120000.0, 0.6470559615694421], [1441077696.0, 71140000.0, 0.6565857557529536], [1441079424.0, 71160000.0, 0.6660118674342483], [1441081152.0, 71180000.0, 0.6753328081210258], [1441082880.0, 71200000.0, 0.6845471059286895], [1441084608.0, 71220000.0, 0.6936533058128052], [1441086336.0, 71240000.0, 0.7026499697988489], [1441088064.0, 71260000.0, 0.7115356772092845], [1441089792.0, 71280000.0, 0.7203090248879055], [1441091520.0, 71300000.0, 0.7289686274214096], [1441093248.0, 71320000.0, 0.7375131173581715], [1441094976.0, 71340000.0, 0.745941145424184], [1441096704.0, 71360000.0, 0.7542513807361051], [1441098432.0, 71380000.0, 0.7624425110114487], [1441100160.0, 71400000.0, 0.7705132427757849], [1441101888.0, 71420000.0, 0.7784623015670231], [1441103616.0, 71440000.0, 0.7862884321366181], [1441105344.0, 71460000.0, 0.7939903986478342], [1441107072.0, 71480000.0, 0.801566984870875], [1441108800.0, 71500000.0, 0.8090169943749496], [1441110528.0, 71520000.0, 0.8163392507171815], [1441112256.0, 71540000.0, 0.8235325976284246], [1441113984.0, 71560000.0, 0.8305958991958093], [1441115712.0, 71580000.0, 0.837528040042142], [1441117440.0, 71600000.0, 0.8443279255020149], [1441119168.0, 71620000.0, 0.8509944817946913], [1441120896.0, 71640000.0, 0.8575266561936513], [1441122624.0, 71660000.0, 0.8639234171928339], [1441124352.0, 71680000.0, 0.8701837546695239], [1441126080.0, 71700000.0, 0.8763066800438616], [1441127808.0, 71720000.0, 0.882291226434951], [1441129536.0, 71740000.0, 0.8881364488135451], [1441131264.0, 71760000.0, 0.893841424151264], [1441132992.0, 71780000.0, 0.899405251566371], [1441134720.0, 71800000.0, 0.9048270524660191], [1441136448.0, 71820000.0, 0.9101059706849949], [1441138176.0, 71840000.0, 0.9152411726209165], [1441139904.0, 71860000.0, 0.920231847365869], [1441141632.0, 71880000.0, 0.9250772068344565], [1441143360.0, 71900000.0, 0.9297764858882522], [1441145088.0, 71920000.0, 0.9343289424566126], [1441146816.0, 71940000.0, 0.9387338576538743], [1441148544.0, 71960000.0, 0.9429905358928644], [1441150272.0, 71980000.0, 0.947098304994744], [1441152000.0, 72000000.0, 0.951056516295153], [1441153728.0, 72020000.0, 0.9548645447466422], [1441155456.0, 72040000.0, 0.958521789017375], [1441157184.0, 72060000.0, 0.9620276715860867], [1441158912.0, 72080000.0, 0.9653816388332744], [1441160640.0, 72100000.0, 0.9685831611286315], [1441162368.0, 72120000.0, 0.9716317329146724], [1441164096.0, 72140000.0, 0.9745268727865771], [1441165824.0, 72160000.0, 0.9772681235681933], [1441167552.0, 72180000.0, 0.9798550523842465], [1441169280.0, 72200000.0, 0.9822872507286882], [1441171008.0, 72220000.0, 0.9845643345292061], [1441172736.0, 72240000.0, 0.9866859442078674], [1441174464.0, 72260000.0, 0.9886517447379133], [1441176192.0, 72280000.0, 0.9904614256966504], [1441177920.0, 72300000.0, 0.9921147013144779], [1441179648.0, 72320000.0, 0.9936113105200084], [1441181376.0, 72340000.0, 0.9949510169813001], [1441183104.0, 72360000.0, 0.9961336091431723], [1441184832.0, 72380000.0, 0.9971589002606137], [1441186560.0, 72400000.0, 0.9980267284282713], [1441188288.0, 72420000.0, 0.9987369566060172], [1441190016.0, 72440000.0, 0.9992894726405891], [1441191744.0, 72460000.0, 0.9996841892833], [1441193472.0, 72480000.0, 0.9999210442038161], [1441195200.0, 72500000.0, 1.0], [1441196928.0, 72520000.0, 0.9999210442038161], [1441198656.0, 72540000.0, 0.9996841892833], [1441200384.0, 72560000.0, 0.9992894726405893], [1441202112.0, 72580000.0, 0.9987369566060177], [1441203840.0, 72600000.0, 0.9980267284282718], [1441205568.0, 72620000.0, 0.9971589002606143], [1441207296.0, 72640000.0, 0.9961336091431723], [1441209024.0, 72660000.0, 0.9949510169813001], [1441210752.0, 72680000.0, 0.9936113105200084], [1441212480.0, 72700000.0, 0.9921147013144788], [1441214208.0, 72720000.0, 0.9904614256966514], [1441215936.0, 72740000.0, 0.9886517447379144], [1441217664.0, 72760000.0, 0.9866859442078686], [1441219392.0, 72780000.0, 0.984564334529206], [1441221120.0, 72800000.0, 0.9822872507286882], [1441222848.0, 72820000.0, 0.9798550523842465], [1441224576.0, 72840000.0, 0.9772681235681948], [1441226304.0, 72860000.0, 0.9745268727865787], [1441228032.0, 72880000.0, 0.9716317329146741], [1441229760.0, 72900000.0, 0.9685831611286315], [1441231488.0, 72920000.0, 0.9653816388332744], [1441233216.0, 72940000.0, 0.9620276715860867], [1441234944.0, 72960000.0, 0.958521789017375], [1441236672.0, 72980000.0, 0.9548645447466443], [1441238400.0, 73000000.0, 0.9510565162951552], [1441240128.0, 73020000.0, 0.9470983049947462], [1441241856.0, 73040000.0, 0.9429905358928644], [1441243584.0, 73060000.0, 0.9387338576538743], [1441245312.0, 73080000.0, 0.9343289424566126], [1441247040.0, 73100000.0, 0.9297764858882522], [1441248768.0, 73120000.0, 0.9250772068344592], [1441250496.0, 73140000.0, 0.9202318473658718], [1441252224.0, 73160000.0, 0.9152411726209194], [1441253952.0, 73180000.0, 0.9101059706849979], [1441255680.0, 73200000.0, 0.9048270524660191], [1441257408.0, 73220000.0, 0.899405251566371], [1441259136.0, 73240000.0, 0.893841424151264], [1441260864.0, 73260000.0, 0.8881364488135451], [1441262592.0, 73280000.0, 0.8822912264349543], [1441264320.0, 73300000.0, 0.8763066800438649], [1441266048.0, 73320000.0, 0.8701837546695275], [1441267776.0, 73340000.0, 0.8639234171928375], [1441269504.0, 73360000.0, 0.8575266561936513], [1441271232.0, 73380000.0, 0.8509944817946913], [1441272960.0, 73400000.0, 0.8443279255020149], [1441274688.0, 73420000.0, 0.8375280400421459], [1441276416.0, 73440000.0, 0.8305958991958133], [1441278144.0, 73460000.0, 0.8235325976284286], [1441279872.0, 73480000.0, 0.8163392507171856], [1441281600.0, 73500000.0, 0.8090169943749496], [1441283328.0, 73520000.0, 0.801566984870875], [1441285056.0, 73540000.0, 0.7939903986478342], [1441286784.0, 73560000.0, 0.7862884321366226], [1441288512.0, 73580000.0, 0.7784623015670277], [1441290240.0, 73600000.0, 0.7705132427757895], [1441291968.0, 73620000.0, 0.7624425110114487], [1441293696.0, 73640000.0, 0.7542513807361051], [1441295424.0, 73660000.0, 0.745941145424184], [1441297152.0, 73680000.0, 0.7375131173581715], [1441298880.0, 73700000.0, 0.7289686274214144], [1441300608.0, 73720000.0, 0.7203090248879104], [1441302336.0, 73740000.0, 0.7115356772092895], [1441304064.0, 73760000.0, 0.7026499697988489], [1441305792.0, 73780000.0, 0.6936533058128052], [1441307520.0, 73800000.0, 0.6845471059286895], [1441309248.0, 73820000.0, 0.6753328081210258], [1441310976.0, 73840000.0, 0.6660118674342536], [1441312704.0, 73860000.0, 0.6565857557529591], [1441314432.0, 73880000.0, 0.6470559615694476], [1441316160.0, 73900000.0, 0.6374239897486935], [1441317888.0, 73920000.0, 0.6276913612906995], [1441319616.0, 73940000.0, 0.6178596130903339], [1441321344.0, 73960000.0, 0.6079302976946056], [1441323072.0, 73980000.0, 0.5979049830575197], [1441324800.0, 74000000.0, 0.5877852522924746], [1441326528.0, 74020000.0, 0.5775727034222697], [1441328256.0, 74040000.0, 0.5672689491267593], [1441329984.0, 74060000.0, 0.5568756164881915], [1441331712.0, 74080000.0, 0.5463943467342672], [1441333440.0, 74100000.0, 0.5358267949789954], [1441335168.0, 74120000.0, 0.5251746299612952], [1441336896.0, 74140000.0, 0.5144395337815066], [1441338624.0, 74160000.0, 0.5036232016357617], [1441340352.0, 74180000.0, 0.49272734154829306], [1441342080.0, 74200000.0, 0.4817536741017175], [1441343808.0, 74220000.0, 0.47070393216533546], [1441345536.0, 74240000.0, 0.4595798606214852], [1441347264.0, 74260000.0, 0.4483832160900303], [1441348992.0, 74280000.0, 0.437115766650938], [1441350720.0, 74300000.0, 0.4257792915650785], [1441352448.0, 74320000.0, 0.41437558099328425], [1441354176.0, 74340000.0, 0.40290643571366347], [1441355904.0, 74360000.0, 0.391373666837204], [1441357632.0, 74380000.0, 0.3797790955218034], [1441359360.0, 74400000.0, 0.36812455268467437], [1441361088.0, 74420000.0, 0.35641187871325447], [1441362816.0, 74440000.0, 0.34464292317452155], [1441364544.0, 74460000.0, 0.3328195445229919], [1441366272.0, 74480000.0, 0.3209436098072088], [1441368000.0, 74500000.0, 0.30901699437494745], [1441369728.0, 74520000.0, 0.2970415815770357], [1441371456.0, 74540000.0, 0.28501926246997766], [1441373184.0, 74560000.0, 0.27295193551732755], [1441374912.0, 74580000.0, 0.2608415062899], [1441376640.0, 74600000.0, 0.24868988716485863], [1441378368.0, 74620000.0, 0.23649899702372928], [1441380096.0, 74640000.0, 0.22427076094937964], [1441381824.0, 74660000.0, 0.21200710992205385], [1441383552.0, 74680000.0, 0.199709980514407], [1441385280.0, 74700000.0, 0.18738131458572538], [1441387008.0, 74720000.0, 0.17502305897527756], [1441388736.0, 74740000.0, 0.1626371651948859], [1441390464.0, 74760000.0, 0.15022558912076012], [1441392192.0, 74780000.0, 0.1377902906846419], [1441393920.0, 74800000.0, 0.12533323356430184], [1441395648.0, 74820000.0, 0.11285638487348004], [1441397376.0, 74840000.0, 0.10036171485121402], [1441399104.0, 74860000.0, 0.0878511965507431], [1441400832.0, 74880000.0, 0.07532680552793342], [1441402560.0, 74900000.0, 0.06279051952931486], [1441404288.0, 74920000.0, 0.05024431817977182], [1441406016.0, 74940000.0, 0.03769018266993758], [1441407744.0, 74960000.0, 0.0251300954433342], [1441409472.0, 74980000.0, 0.012566039883350111], [1441411200.0, 75000000.0, 5.3896838775215305e-15], [1441412928.0, 75020000.0, -0.012566039883346437], [1441414656.0, 75040000.0, -0.025130095443330527], [1441416384.0, 75060000.0, -0.03769018266993391], [1441418112.0, 75080000.0, -0.05024431817976815], [1441419840.0, 75100000.0, -0.06279051952931118], [1441421568.0, 75120000.0, -0.07532680552792975], [1441423296.0, 75140000.0, -0.08785119655073943], [1441425024.0, 75160000.0, -0.10036171485121037], [1441426752.0, 75180000.0, -0.11285638487347639], [1441428480.0, 75200000.0, -0.12533323356429818], [1441430208.0, 75220000.0, -0.13779029068463827], [1441431936.0, 75240000.0, -0.1502255891207565], [1441433664.0, 75260000.0, -0.16263716519488228], [1441435392.0, 75280000.0, -0.17502305897527395], [1441437120.0, 75300000.0, -0.18738131458572177], [1441438848.0, 75320000.0, -0.1997099805144034], [1441440576.0, 75340000.0, -0.21200710992205027], [1441442304.0, 75360000.0, -0.22427076094937606], [1441444032.0, 75380000.0, -0.23649899702372573], [1441445760.0, 75400000.0, -0.24868988716485507], [1441447488.0, 75420000.0, -0.26084150628989644], [1441449216.0, 75440000.0, -0.272951935517324], [1441450944.0, 75460000.0, -0.28501926246997417], [1441452672.0, 75480000.0, -0.2970415815770322], [1441454400.0, 75500000.0, -0.30901699437494395], [1441456128.0, 75520000.0, -0.3209436098072053], [1441457856.0, 75540000.0, -0.33281954452298845], [1441459584.0, 75560000.0, -0.3446429231745181], [1441461312.0, 75580000.0, -0.35641187871325103], [1441463040.0, 75600000.0, -0.3681245526846709], [1441464768.0, 75620000.0, -0.3797790955218], [1441466496.0, 75640000.0, -0.3913736668372006], [1441468224.0, 75660000.0, -0.40290643571366014], [1441469952.0, 75680000.0, -0.4143755809932809], [1441471680.0, 75700000.0, -0.42577929156507516], [1441473408.0, 75720000.0, -0.4371157666509347], [1441475136.0, 75740000.0, -0.44838321609002696], [1441476864.0, 75760000.0, -0.45957986062148193], [1441478592.0, 75780000.0, -0.47070393216533224], [1441480320.0, 75800000.0, -0.48175367410171427], [1441482048.0, 75820000.0, -0.4927273415482899], [1441483776.0, 75840000.0, -0.5036232016357585], [1441485504.0, 75860000.0, -0.5144395337815034], [1441487232.0, 75880000.0, -0.525174629961292], [1441488960.0, 75900000.0, -0.5358267949789923], [1441490688.0, 75920000.0, -0.5463943467342642], [1441492416.0, 75940000.0, -0.5568756164881884], [1441494144.0, 75960000.0, -0.5672689491267563], [1441495872.0, 75980000.0, -0.5775727034222667], [1441497600.0, 76000000.0, -0.5877852522924716], [1441499328.0, 76020000.0, -0.5979049830575167], [1441501056.0, 76040000.0, -0.6079302976946027], [1441502784.0, 76060000.0, -0.617859613090331], [1441504512.0, 76080000.0, -0.6276913612906966], [1441506240.0, 76100000.0, -0.6374239897486907], [1441507968.0, 76120000.0, -0.6470559615694448], [1441509696.0, 76140000.0, -0.6565857557529563], [1441511424.0, 76160000.0, -0.6660118674342509], [1441513152.0, 76180000.0, -0.6753328081210231], [1441514880.0, 76200000.0, -0.6845471059286868], [1441516608.0, 76220000.0, -0.6936533058128026], [1441518336.0, 76240000.0, -0.7026499697988463], [1441520064.0, 76260000.0, -0.7115356772092869], [1441521792.0, 76280000.0, -0.7203090248879078], [1441523520.0, 76300000.0, -0.728968627421412], [1441525248.0, 76320000.0, -0.737513117358169], [1441526976.0, 76340000.0, -0.7459411454241816], [1441528704.0, 76360000.0, -0.7542513807361027], [1441530432.0, 76380000.0, -0.7624425110114462], [1441532160.0, 76400000.0, -0.7705132427757871], [1441533888.0, 76420000.0, -0.7784623015670253], [1441535616.0, 76440000.0, -0.7862884321366203], [1441537344.0, 76460000.0, -0.7939903986478319], [1441539072.0, 76480000.0, -0.8015669848708727], [1441540800.0, 76500000.0, -0.8090169943749473], [1441542528.0, 76520000.0, -0.8163392507171835], [1441544256.0, 76540000.0, -0.8235325976284265], [1441545984.0, 76560000.0, -0.8305958991958112], [1441547712.0, 76580000.0, -0.8375280400421439], [1441549440.0, 76600000.0, -0.844327925502013], [1441551168.0, 76620000.0, -0.8509944817946894], [1441552896.0, 76640000.0, -0.8575266561936494], [1441554624.0, 76660000.0, -0.8639234171928357], [1441556352.0, 76680000.0, -0.8701837546695257], [1441558080.0, 76700000.0, -0.8763066800438633], [1441559808.0, 76720000.0, -0.8822912264349525], [1441561536.0, 76740000.0, -0.8881364488135435], [1441563264.0, 76760000.0, -0.8938414241512623], [1441564992.0, 76780000.0, -0.8994052515663693], [1441566720.0, 76800000.0, -0.9048270524660175], [1441568448.0, 76820000.0, -0.9101059706849963], [1441570176.0, 76840000.0, -0.9152411726209179], [1441571904.0, 76860000.0, -0.9202318473658704], [1441573632.0, 76880000.0, -0.9250772068344577], [1441575360.0, 76900000.0, -0.9297764858882508], [1441577088.0, 76920000.0, -0.9343289424566112], [1441578816.0, 76940000.0, -0.9387338576538731], [1441580544.0, 76960000.0, -0.9429905358928632], [1441582272.0, 76980000.0, -0.9470983049947451], [1441584000.0, 77000000.0, -0.9510565162951541], [1441585728.0, 77020000.0, -0.9548645447466432], [1441587456.0, 77040000.0, -0.9585217890173738], [1441589184.0, 77060000.0, -0.9620276715860857], [1441590912.0, 77080000.0, -0.9653816388332735], [1441592640.0, 77100000.0, -0.9685831611286305], [1441594368.0, 77120000.0, -0.9716317329146732], [1441596096.0, 77140000.0, -0.9745268727865779], [1441597824.0, 77160000.0, -0.977268123568194], [1441599552.0, 77180000.0, -0.9798550523842458], [1441601280.0, 77200000.0, -0.9822872507286875], [1441603008.0, 77220000.0, -0.9845643345292054], [1441604736.0, 77240000.0, -0.9866859442078679], [1441606464.0, 77260000.0, -0.9886517447379138], [1441608192.0, 77280000.0, -0.990461425696651], [1441609920.0, 77300000.0, -0.9921147013144783], [1441611648.0, 77320000.0, -0.993611310520008], [1441613376.0, 77340000.0, -0.9949510169812997], [1441615104.0, 77360000.0, -0.996133609143172], [1441616832.0, 77380000.0, -0.997158900260614], [1441618560.0, 77400000.0, -0.9980267284282716], [1441620288.0, 77420000.0, -0.9987369566060175], [1441622016.0, 77440000.0, -0.9992894726405892], [1441623744.0, 77460000.0, -0.9996841892832999], [1441625472.0, 77480000.0, -0.9999210442038161], [1441627200.0, 77500000.0, -1.0], [1441628928.0, 77520000.0, -0.9999210442038162], [1441630656.0, 77540000.0, -0.9996841892833002], [1441632384.0, 77560000.0, -0.9992894726405892], [1441634112.0, 77580000.0, -0.9987369566060175], [1441635840.0, 77600000.0, -0.9980267284282716], [1441637568.0, 77620000.0, -0.997158900260614], [1441639296.0, 77640000.0, -0.9961336091431726], [1441641024.0, 77660000.0, -0.9949510169813004], [1441642752.0, 77680000.0, -0.9936113105200088], [1441644480.0, 77700000.0, -0.9921147013144784], [1441646208.0, 77720000.0, -0.990461425696651], [1441647936.0, 77740000.0, -0.9886517447379138], [1441649664.0, 77760000.0, -0.986685944207868], [1441651392.0, 77780000.0, -0.9845643345292067], [1441653120.0, 77800000.0, -0.9822872507286889], [1441654848.0, 77820000.0, -0.9798550523842473], [1441656576.0, 77840000.0, -0.977268123568194], [1441658304.0, 77860000.0, -0.9745268727865779], [1441660032.0, 77880000.0, -0.9716317329146733], [1441661760.0, 77900000.0, -0.9685831611286324], [1441663488.0, 77920000.0, -0.9653816388332754], [1441665216.0, 77940000.0, -0.9620276715860877], [1441666944.0, 77960000.0, -0.958521789017376], [1441668672.0, 77980000.0, -0.9548645447466433], [1441670400.0, 78000000.0, -0.9510565162951542], [1441672128.0, 78020000.0, -0.9470983049947451], [1441673856.0, 78040000.0, -0.9429905358928656], [1441675584.0, 78060000.0, -0.9387338576538755], [1441677312.0, 78080000.0, -0.9343289424566138], [1441679040.0, 78100000.0, -0.9297764858882536], [1441680768.0, 78120000.0, -0.9250772068344578], [1441682496.0, 78140000.0, -0.9202318473658705], [1441684224.0, 78160000.0, -0.915241172620918], [1441685952.0, 78180000.0, -0.9101059706849964], [1441687680.0, 78200000.0, -0.9048270524660207], [1441689408.0, 78220000.0, -0.8994052515663725], [1441691136.0, 78240000.0, -0.8938414241512657], [1441692864.0, 78260000.0, -0.8881364488135468], [1441694592.0, 78280000.0, -0.8822912264349526], [1441696320.0, 78300000.0, -0.8763066800438634], [1441698048.0, 78320000.0, -0.8701837546695258], [1441699776.0, 78340000.0, -0.8639234171928358], [1441701504.0, 78360000.0, -0.8575266561936532], [1441703232.0, 78380000.0, -0.8509944817946932], [1441704960.0, 78400000.0, -0.8443279255020169], [1441706688.0, 78420000.0, -0.837528040042144], [1441708416.0, 78440000.0, -0.8305958991958114], [1441710144.0, 78460000.0, -0.8235325976284267], [1441711872.0, 78480000.0, -0.8163392507171836], [1441713600.0, 78500000.0, -0.8090169943749517], [1441715328.0, 78520000.0, -0.8015669848708771], [1441717056.0, 78540000.0, -0.7939903986478364], [1441718784.0, 78560000.0, -0.7862884321366205], [1441720512.0, 78580000.0, -0.7784623015670254], [1441722240.0, 78600000.0, -0.7705132427757873], [1441723968.0, 78620000.0, -0.762442511011451], [1441725696.0, 78640000.0, -0.7542513807361075], [1441727424.0, 78660000.0, -0.7459411454241864], [1441729152.0, 78680000.0, -0.7375131173581739], [1441730880.0, 78700000.0, -0.7289686274214121], [1441732608.0, 78720000.0, -0.720309024887908], [1441734336.0, 78740000.0, -0.711535677209287], [1441736064.0, 78760000.0, -0.7026499697988515], [1441737792.0, 78780000.0, -0.6936533058128078], [1441739520.0, 78800000.0, -0.6845471059286922], [1441741248.0, 78820000.0, -0.6753328081210286], [1441742976.0, 78840000.0, -0.666011867434251], [1441744704.0, 78860000.0, -0.6565857557529564], [1441746432.0, 78880000.0, -0.6470559615694449], [1441748160.0, 78900000.0, -0.637423989748691], [1441749888.0, 78920000.0, -0.6276913612907024], [1441751616.0, 78940000.0, -0.6178596130903368], [1441753344.0, 78960000.0, -0.6079302976946085], [1441755072.0, 78980000.0, -0.5979049830575226], [1441756800.0, 79000000.0, -0.5877852522924718], [1441758528.0, 79020000.0, -0.577572703422267], [1441760256.0, 79040000.0, -0.5672689491267564], [1441761984.0, 79060000.0, -0.5568756164881886], [1441763712.0, 79080000.0, -0.5463943467342703], [1441765440.0, 79100000.0, -0.5358267949789985], [1441767168.0, 79120000.0, -0.5251746299612983], [1441768896.0, 79140000.0, -0.5144395337815098], [1441770624.0, 79160000.0, -0.5036232016357587], [1441772352.0, 79180000.0, -0.4927273415482901], [1441774080.0, 79200000.0, -0.4817536741017145], [1441775808.0, 79220000.0, -0.47070393216533873], [1441777536.0, 79240000.0, -0.4595798606214884], [1441779264.0, 79260000.0, -0.44838321609003357], [1441780992.0, 79280000.0, -0.43711576665093493], [1441782720.0, 79300000.0, -0.4257792915650754], [1441784448.0, 79320000.0, -0.41437558099328115], [1441786176.0, 79340000.0, -0.40290643571366036], [1441787904.0, 79360000.0, -0.39137366683720737], [1441789632.0, 79380000.0, -0.3797790955218068], [1441791360.0, 79400000.0, -0.3681245526846778], [1441793088.0, 79420000.0, -0.35641187871325125], [1441794816.0, 79440000.0, -0.34464292317451833], [1441796544.0, 79460000.0, -0.3328195445229887], [1441798272.0, 79480000.0, -0.32094360980721226], [1441800000.0, 79500000.0, -0.30901699437495095], [1441801728.0, 79520000.0, -0.2970415815770392], [1441803456.0, 79540000.0, -0.2850192624699812], [1441805184.0, 79560000.0, -0.2729519355173242], [1441806912.0, 79580000.0, -0.26084150628989666], [1441808640.0, 79600000.0, -0.2486898871648553], [1441810368.0, 79620000.0, -0.23649899702372595], [1441812096.0, 79640000.0, -0.22427076094938322], [1441813824.0, 79660000.0, -0.21200710992205746], [1441815552.0, 79680000.0, -0.1997099805144106], [1441817280.0, 79700000.0, -0.187381314585729], [1441819008.0, 79720000.0, -0.1750230589752742], [1441820736.0, 79740000.0, -0.16263716519488253], [1441822464.0, 79760000.0, -0.15022558912075673], [1441824192.0, 79780000.0, -0.13779029068463852], [1441825920.0, 79800000.0, -0.12533323356430548], [1441827648.0, 79820000.0, -0.1128563848734837], [1441829376.0, 79840000.0, -0.10036171485121768], [1441831104.0, 79860000.0, -0.08785119655074675], [1441832832.0, 79880000.0, -0.07532680552793], [1441834560.0, 79900000.0, -0.06279051952931143], [1441836288.0, 79920000.0, -0.05024431817976839], [1441838016.0, 79940000.0, -0.03769018266994125], [1441839744.0, 79960000.0, -0.025130095443337875], [1441841472.0, 79980000.0, -0.012566039883353785], [1441843200.0, 80000000.0, -1.959434878635765e-15], [1441844928.0, 80020000.0, 0.012566039883356972], [1441846656.0, 80040000.0, 0.025130095443333958], [1441848384.0, 80060000.0, 0.03769018266993734], [1441850112.0, 80080000.0, 0.05024431817976448], [1441851840.0, 80100000.0, 0.06279051952930752], [1441853568.0, 80120000.0, 0.07532680552793318], [1441855296.0, 80140000.0, 0.08785119655073577], [1441857024.0, 80160000.0, 0.10036171485121378], [1441858752.0, 80180000.0, 0.11285638487348687], [1441860480.0, 80200000.0, 0.1253332335643016], [1441862208.0, 80220000.0, 0.13779029068463464], [1441863936.0, 80240000.0, 0.15022558912075287], [1441865664.0, 80260000.0, 0.16263716519487864], [1441867392.0, 80280000.0, 0.17502305897527734], [1441869120.0, 80300000.0, 0.18738131458571816], [1441870848.0, 80320000.0, 0.19970998051440675], [1441872576.0, 80340000.0, 0.21200710992205363], [1441874304.0, 80360000.0, 0.2242707609493794], [1441876032.0, 80380000.0, 0.23649899702372215], [1441877760.0, 80400000.0, 0.2486898871648446], [1441879488.0, 80420000.0, 0.2608415062898929], [1441881216.0, 80440000.0, 0.2729519355173273], [1441882944.0, 80460000.0, 0.2850192624699706], [1441884672.0, 80480000.0, 0.2970415815770355], [1441886400.0, 80500000.0, 0.30901699437494723], [1441888128.0, 80520000.0, 0.32094360980720854], [1441889856.0, 80540000.0, 0.33281954452298496], [1441891584.0, 80560000.0, 0.344642923174508], [1441893312.0, 80580000.0, 0.3564118787132476], [1441895040.0, 80600000.0, 0.36812455268468075], [1441896768.0, 80620000.0, 0.37977909552179656], [1441898496.0, 80640000.0, 0.39137366683720376], [1441900224.0, 80660000.0, 0.40290643571366325], [1441901952.0, 80680000.0, 0.41437558099327754], [1441903680.0, 80700000.0, 0.4257792915650718], [1441905408.0, 80720000.0, 0.437115766650925], [1441907136.0, 80740000.0, 0.44838321609003007], [1441908864.0, 80760000.0, 0.45957986062149125], [1441910592.0, 80780000.0, 0.470703932165329], [1441912320.0, 80800000.0, 0.48175367410171105], [1441914048.0, 80820000.0, 0.4927273415482929], [1441915776.0, 80840000.0, 0.5036232016357554], [1441917504.0, 80860000.0, 0.5144395337815064], [1441919232.0, 80880000.0, 0.5251746299612889], [1441920960.0, 80900000.0, 0.5358267949789952], [1441922688.0, 80920000.0, 0.546394346734273], [1441924416.0, 80940000.0, 0.5568756164881854], [1441926144.0, 80960000.0, 0.5672689491267532], [1441927872.0, 80980000.0, 0.5775727034222695], [1441929600.0, 81000000.0, 0.5877852522924687], [1441931328.0, 81020000.0, 0.5979049830575195], [1441933056.0, 81040000.0, 0.6079302976945997], [1441934784.0, 81060000.0, 0.6178596130903338], [1441936512.0, 81080000.0, 0.6276913612906992], [1441938240.0, 81100000.0, 0.6374239897486879], [1441939968.0, 81120000.0, 0.6470559615694419], [1441941696.0, 81140000.0, 0.6565857557529589], [1441943424.0, 81160000.0, 0.6660118674342481], [1441945152.0, 81180000.0, 0.6753328081210257], [1441946880.0, 81200000.0, 0.6845471059286841], [1441948608.0, 81220000.0, 0.693653305812805], [1441950336.0, 81240000.0, 0.7026499697988488], [1441952064.0, 81260000.0, 0.7115356772092793], [1441953792.0, 81280000.0, 0.7203090248879053], [1441955520.0, 81300000.0, 0.7289686274214143], [1441957248.0, 81320000.0, 0.7375131173581713], [1441958976.0, 81340000.0, 0.7459411454241838], [1441960704.0, 81360000.0, 0.7542513807361003], [1441962432.0, 81380000.0, 0.7624425110114484], [1441964160.0, 81400000.0, 0.7705132427757894], [1441965888.0, 81420000.0, 0.7784623015670186], [1441967616.0, 81440000.0, 0.786288432136618], [1441969344.0, 81460000.0, 0.7939903986478383], [1441971072.0, 81480000.0, 0.8015669848708747], [1441972800.0, 81500000.0, 0.8090169943749493], [1441974528.0, 81520000.0, 0.8163392507171813], [1441976256.0, 81540000.0, 0.8235325976284243], [1441977984.0, 81560000.0, 0.8305958991958132], [1441979712.0, 81580000.0, 0.837528040042138], [1441981440.0, 81600000.0, 0.8443279255020147], [1441983168.0, 81620000.0, 0.8509944817946948], [1441984896.0, 81640000.0, 0.8575266561936512], [1441986624.0, 81660000.0, 0.8639234171928338], [1441988352.0, 81680000.0, 0.8701837546695238], [1441990080.0, 81700000.0, 0.8763066800438615], [1441991808.0, 81720000.0, 0.8822912264349542], [1441993536.0, 81740000.0, 0.8881364488135417], [1441995264.0, 81760000.0, 0.8938414241512639], [1441996992.0, 81780000.0, 0.899405251566374], [1441998720.0, 81800000.0, 0.904827052466019], [1442000448.0, 81820000.0, 0.9101059706849948], [1442002176.0, 81840000.0, 0.9152411726209135], [1442003904.0, 81860000.0, 0.9202318473658689], [1442005632.0, 81880000.0, 0.925077206834459], [1442007360.0, 81900000.0, 0.9297764858882495], [1442009088.0, 81920000.0, 0.9343289424566125], [1442010816.0, 81940000.0, 0.9387338576538742], [1442012544.0, 81960000.0, 0.9429905358928643], [1442014272.0, 81980000.0, 0.9470983049947439], [1442016000.0, 82000000.0, 0.9510565162951508], [1442017728.0, 82020000.0, 0.9548645447466422], [1442019456.0, 82040000.0, 0.958521789017377], [1442021184.0, 82060000.0, 0.9620276715860847], [1442022912.0, 82080000.0, 0.9653816388332744], [1442024640.0, 82100000.0, 0.9685831611286314], [1442026368.0, 82120000.0, 0.9716317329146723], [1442028096.0, 82140000.0, 0.974526872786577], [1442029824.0, 82160000.0, 0.9772681235681917], [1442031552.0, 82180000.0, 0.9798550523842465], [1442033280.0, 82200000.0, 0.9822872507286895], [1442035008.0, 82220000.0, 0.9845643345292048], [1442036736.0, 82240000.0, 0.9866859442078674], [1442038464.0, 82260000.0, 0.9886517447379143], [1442040192.0, 82280000.0, 0.9904614256966504], [1442041920.0, 82300000.0, 0.9921147013144779], [1442043648.0, 82320000.0, 0.9936113105200076], [1442045376.0, 82340000.0, 0.9949510169813001], [1442047104.0, 82360000.0, 0.996133609143173], [1442048832.0, 82380000.0, 0.9971589002606137], [1442050560.0, 82400000.0, 0.9980267284282713], [1442052288.0, 82420000.0, 0.9987369566060177], [1442054016.0, 82440000.0, 0.9992894726405891], [1442055744.0, 82460000.0, 0.9996841892833], [1442057472.0, 82480000.0, 0.999921044203816], [1442059200.0, 82500000.0, 1.0], [1442060928.0, 82520000.0, 0.9999210442038161], [1442062656.0, 82540000.0, 0.9996841892833], [1442064384.0, 82560000.0, 0.9992894726405893], [1442066112.0, 82580000.0, 0.998736956606018], [1442067840.0, 82600000.0, 0.9980267284282718], [1442069568.0, 82620000.0, 0.9971589002606138], [1442071296.0, 82640000.0, 0.996133609143173], [1442073024.0, 82660000.0, 0.9949510169813001], [1442074752.0, 82680000.0, 0.9936113105200084], [1442076480.0, 82700000.0, 0.9921147013144789], [1442078208.0, 82720000.0, 0.9904614256966514], [1442079936.0, 82740000.0, 0.9886517447379155], [1442081664.0, 82760000.0, 0.9866859442078686], [1442083392.0, 82780000.0, 0.9845643345292049], [1442085120.0, 82800000.0, 0.9822872507286896], [1442086848.0, 82820000.0, 0.9798550523842465], [1442088576.0, 82840000.0, 0.9772681235681934], [1442090304.0, 82860000.0, 0.9745268727865788], [1442092032.0, 82880000.0, 0.9716317329146742], [1442093760.0, 82900000.0, 0.9685831611286333], [1442095488.0, 82920000.0, 0.9653816388332745], [1442097216.0, 82940000.0, 0.9620276715860848], [1442098944.0, 82960000.0, 0.9585217890173771], [1442100672.0, 82980000.0, 0.9548645447466444], [1442102400.0, 83000000.0, 0.9510565162951531], [1442104128.0, 83020000.0, 0.9470983049947463], [1442105856.0, 83040000.0, 0.9429905358928645], [1442107584.0, 83060000.0, 0.9387338576538768], [1442109312.0, 83080000.0, 0.9343289424566126], [1442111040.0, 83100000.0, 0.9297764858882522], [1442112768.0, 83120000.0, 0.9250772068344593], [1442114496.0, 83140000.0, 0.9202318473658719], [1442116224.0, 83160000.0, 0.9152411726209166], [1442117952.0, 83180000.0, 0.910105970684998], [1442119680.0, 83200000.0, 0.9048270524660191], [1442121408.0, 83220000.0, 0.8994052515663742], [1442123136.0, 83240000.0, 0.8938414241512641], [1442124864.0, 83260000.0, 0.8881364488135453], [1442126592.0, 83280000.0, 0.8822912264349544], [1442128320.0, 83300000.0, 0.8763066800438651], [1442130048.0, 83320000.0, 0.870183754669524], [1442131776.0, 83340000.0, 0.8639234171928377], [1442133504.0, 83360000.0, 0.8575266561936514], [1442135232.0, 83380000.0, 0.8509944817946952], [1442136960.0, 83400000.0, 0.8443279255020151], [1442138688.0, 83420000.0, 0.8375280400421421], [1442140416.0, 83440000.0, 0.8305958991958174], [1442142144.0, 83460000.0, 0.8235325976284287], [1442143872.0, 83480000.0, 0.8163392507171816], [1442145600.0, 83500000.0, 0.8090169943749497], [1442147328.0, 83520000.0, 0.8015669848708751], [1442149056.0, 83540000.0, 0.7939903986478386], [1442150784.0, 83560000.0, 0.7862884321366227], [1442152512.0, 83580000.0, 0.7784623015670233], [1442154240.0, 83600000.0, 0.7705132427757941], [1442155968.0, 83620000.0, 0.7624425110114488], [1442157696.0, 83640000.0, 0.7542513807361005], [1442159424.0, 83660000.0, 0.7459411454241841], [1442161152.0, 83680000.0, 0.7375131173581716], [1442162880.0, 83700000.0, 0.7289686274214147], [1442164608.0, 83720000.0, 0.7203090248879106], [1442166336.0, 83740000.0, 0.7115356772092847], [1442168064.0, 83760000.0, 0.7026499697988541], [1442169792.0, 83780000.0, 0.6936533058128054], [1442171520.0, 83800000.0, 0.6845471059286845], [1442173248.0, 83820000.0, 0.675332808121026], [1442174976.0, 83840000.0, 0.6660118674342538], [1442176704.0, 83860000.0, 0.6565857557529592], [1442178432.0, 83880000.0, 0.6470559615694477], [1442180160.0, 83900000.0, 0.6374239897486883], [1442181888.0, 83920000.0, 0.6276913612907051], [1442183616.0, 83940000.0, 0.6178596130903341], [1442185344.0, 83960000.0, 0.6079302976946058], [1442187072.0, 83980000.0, 0.5979049830575199], [1442188800.0, 84000000.0, 0.5877852522924748], [1442190528.0, 84020000.0, 0.5775727034222757], [1442192256.0, 84040000.0, 0.5672689491267595], [1442193984.0, 84060000.0, 0.5568756164881857], [1442195712.0, 84080000.0, 0.5463943467342735], [1442197440.0, 84100000.0, 0.5358267949789957], [1442199168.0, 84120000.0, 0.5251746299612954], [1442200896.0, 84140000.0, 0.5144395337815069], [1442202624.0, 84160000.0, 0.5036232016357619], [1442204352.0, 84180000.0, 0.4927273415482995], [1442206080.0, 84200000.0, 0.4817536741017177], [1442207808.0, 84220000.0, 0.4707039321653294], [1442209536.0, 84240000.0, 0.4595798606214917], [1442211264.0, 84260000.0, 0.44838321609003046], [1442212992.0, 84280000.0, 0.4371157666509318], [1442214720.0, 84300000.0, 0.4257792915650787], [1442216448.0, 84320000.0, 0.4143755809932845], [1442218176.0, 84340000.0, 0.4029064357136702], [1442219904.0, 84360000.0, 0.3913736668372042], [1442221632.0, 84380000.0, 0.37977909552179706], [1442223360.0, 84400000.0, 0.3681245526846812], [1442225088.0, 84420000.0, 0.3564118787132547], [1442226816.0, 84440000.0, 0.3446429231745151], [1442228544.0, 84460000.0, 0.3328195445229921], [1442230272.0, 84480000.0, 0.32094360980720904], [1442232000.0, 84500000.0, 0.30901699437495445], [1442233728.0, 84520000.0, 0.2970415815770359], [1442235456.0, 84540000.0, 0.2850192624699711], [1442237184.0, 84560000.0, 0.27295193551732777], [1442238912.0, 84580000.0, 0.2608415062899002], [1442240640.0, 84600000.0, 0.248689887164852], [1442242368.0, 84620000.0, 0.23649899702372953], [1442244096.0, 84640000.0, 0.2242707609493799], [1442245824.0, 84660000.0, 0.21200710992206104], [1442247552.0, 84680000.0, 0.19970998051440725], [1442249280.0, 84700000.0, 0.18738131458572563], [1442251008.0, 84720000.0, 0.1750230589752778], [1442252736.0, 84740000.0, 0.16263716519488614], [1442254464.0, 84760000.0, 0.15022558912075334], [1442256192.0, 84780000.0, 0.13779029068464216], [1442257920.0, 84800000.0, 0.12533323356430207], [1442259648.0, 84820000.0, 0.11285638487348736], [1442261376.0, 84840000.0, 0.10036171485121427], [1442263104.0, 84860000.0, 0.08785119655074333], [1442264832.0, 84880000.0, 0.07532680552794074], [1442266560.0, 84900000.0, 0.0627905195293151], [1442268288.0, 84920000.0, 0.05024431817976496], [1442270016.0, 84940000.0, 0.03769018266993782], [1442271744.0, 84960000.0, 0.025130095443334444], [1442273472.0, 84980000.0, 0.01256603988335746], [1442275200.0, 85000000.0, -1.4708141202500005e-15], [1442276928.0, 85020000.0, -0.012566039883353296], [1442278656.0, 85040000.0, -0.025130095443330284], [1442280384.0, 85060000.0, -0.03769018266993367], [1442282112.0, 85080000.0, -0.05024431817976081], [1442283840.0, 85100000.0, -0.06279051952931095], [1442285568.0, 85120000.0, -0.0753268055279366], [1442287296.0, 85140000.0, -0.08785119655073918], [1442289024.0, 85160000.0, -0.10036171485121012], [1442290752.0, 85180000.0, -0.11285638487348322], [1442292480.0, 85200000.0, -0.12533323356429796], [1442294208.0, 85220000.0, -0.13779029068463805], [1442295936.0, 85240000.0, -0.15022558912074924], [1442297664.0, 85260000.0, -0.16263716519488203], [1442299392.0, 85280000.0, -0.1750230589752737], [1442301120.0, 85300000.0, -0.18738131458572152], [1442302848.0, 85320000.0, -0.19970998051440317], [1442304576.0, 85340000.0, -0.21200710992205699], [1442306304.0, 85360000.0, -0.2242707609493758], [1442308032.0, 85380000.0, -0.23649899702372548], [1442309760.0, 85400000.0, -0.24868988716484794], [1442311488.0, 85420000.0, -0.2608415062898962], [1442313216.0, 85440000.0, -0.2729519355173238], [1442314944.0, 85460000.0, -0.2850192624699671], [1442316672.0, 85480000.0, -0.297041581577032], [1442318400.0, 85500000.0, -0.3090169943749505], [1442320128.0, 85520000.0, -0.3209436098072051], [1442321856.0, 85540000.0, -0.33281954452298823], [1442323584.0, 85560000.0, -0.34464292317451123], [1442325312.0, 85580000.0, -0.3564118787132508], [1442327040.0, 85600000.0, -0.3681245526846773], [1442328768.0, 85620000.0, -0.3797790955217932], [1442330496.0, 85640000.0, -0.3913736668372004], [1442332224.0, 85660000.0, -0.4029064357136664], [1442333952.0, 85680000.0, -0.4143755809932807], [1442335680.0, 85700000.0, -0.42577929156507494], [1442337408.0, 85720000.0, -0.43711576665092805], [1442339136.0, 85740000.0, -0.44838321609002674], [1442340864.0, 85760000.0, -0.45957986062148803], [1442342592.0, 85780000.0, -0.47070393216532574], [1442344320.0, 85800000.0, -0.48175367410171405], [1442346048.0, 85820000.0, -0.49272734154829584], [1442347776.0, 85840000.0, -0.5036232016357582], [1442349504.0, 85860000.0, -0.5144395337815032], [1442351232.0, 85880000.0, -0.5251746299612918], [1442352960.0, 85900000.0, -0.5358267949789921], [1442354688.0, 85920000.0, -0.5463943467342699], [1442356416.0, 85940000.0, -0.5568756164881823], [1442358144.0, 85960000.0, -0.5672689491267561], [1442359872.0, 85980000.0, -0.5775727034222723], [1442361600.0, 86000000.0, -0.5877852522924715], [1442363328.0, 86020000.0, -0.5979049830575166], [1442365056.0, 86040000.0, -0.6079302976946025], [1442366784.0, 86060000.0, -0.6178596130903309], [1442368512.0, 86080000.0, -0.6276913612907019], [1442370240.0, 86100000.0, -0.6374239897486851], [1442371968.0, 86120000.0, -0.6470559615694446], [1442373696.0, 86140000.0, -0.6565857557529561], [1442375424.0, 86160000.0, -0.6660118674342507], [1442377152.0, 86180000.0, -0.6753328081210229], [1442378880.0, 86200000.0, -0.6845471059286814], [1442380608.0, 86220000.0, -0.6936533058128024], [1442382336.0, 86240000.0, -0.7026499697988511], [1442384064.0, 86260000.0, -0.7115356772092817], [1442385792.0, 86280000.0, -0.7203090248879077], [1442387520.0, 86300000.0, -0.7289686274214118], [1442389248.0, 86320000.0, -0.7375131173581688], [1442390976.0, 86340000.0, -0.7459411454241813], [1442392704.0, 86360000.0, -0.7542513807360979], [1442394432.0, 86380000.0, -0.7624425110114461], [1442396160.0, 86400000.0, -0.7705132427757915], [1442397888.0, 86420000.0, -0.7784623015670207], [1442399616.0, 86440000.0, -0.7862884321366201], [1442401344.0, 86460000.0, -0.793990398647836], [1442403072.0, 86480000.0, -0.8015669848708726], [1442404800.0, 86500000.0, -0.8090169943749472], [1442406528.0, 86520000.0, -0.8163392507171792], [1442408256.0, 86540000.0, -0.8235325976284263], [1442409984.0, 86560000.0, -0.8305958991958151], [1442411712.0, 86580000.0, -0.8375280400421398], [1442413440.0, 86600000.0, -0.8443279255020129], [1442415168.0, 86620000.0, -0.850994481794693], [1442416896.0, 86640000.0, -0.8575266561936493], [1442418624.0, 86660000.0, -0.8639234171928356], [1442420352.0, 86680000.0, -0.870183754669522], [1442422080.0, 86700000.0, -0.876306680043863], [1442423808.0, 86720000.0, -0.8822912264349524], [1442425536.0, 86740000.0, -0.8881364488135434], [1442427264.0, 86760000.0, -0.8938414241512622], [1442428992.0, 86780000.0, -0.8994052515663723], [1442430720.0, 86800000.0, -0.9048270524660175], [1442432448.0, 86820000.0, -0.9101059706849962], [1442434176.0, 86840000.0, -0.915241172620915], [1442435904.0, 86860000.0, -0.9202318473658703], [1442437632.0, 86880000.0, -0.9250772068344577], [1442439360.0, 86900000.0, -0.9297764858882508], [1442441088.0, 86920000.0, -0.9343289424566111], [1442442816.0, 86940000.0, -0.9387338576538754], [1442444544.0, 86960000.0, -0.9429905358928631], [1442446272.0, 86980000.0, -0.947098304994745], [1442448000.0, 87000000.0, -0.9510565162951519], [1442449728.0, 87020000.0, -0.9548645447466432], [1442451456.0, 87040000.0, -0.9585217890173758], [1442453184.0, 87060000.0, -0.9620276715860837], [1442454912.0, 87080000.0, -0.9653816388332734], [1442456640.0, 87100000.0, -0.9685831611286323], [1442458368.0, 87120000.0, -0.9716317329146732], [1442460096.0, 87140000.0, -0.9745268727865778], [1442461824.0, 87160000.0, -0.9772681235681925], [1442463552.0, 87180000.0, -0.9798550523842458], [1442465280.0, 87200000.0, -0.9822872507286888], [1442467008.0, 87220000.0, -0.9845643345292041], [1442468736.0, 87240000.0, -0.9866859442078679], [1442470464.0, 87260000.0, -0.9886517447379148], [1442472192.0, 87280000.0, -0.9904614256966509], [1442473920.0, 87300000.0, -0.9921147013144783], [1442475648.0, 87320000.0, -0.993611310520008], [1442477376.0, 87340000.0, -0.9949510169812997], [1442479104.0, 87360000.0, -0.9961336091431726], [1442480832.0, 87380000.0, -0.9971589002606135], [1442482560.0, 87400000.0, -0.9980267284282716], [1442484288.0, 87420000.0, -0.9987369566060178], [1442486016.0, 87440000.0, -0.9992894726405892], [1442487744.0, 87460000.0, -0.9996841892832999], [1442489472.0, 87480000.0, -0.9999210442038161], [1442491200.0, 87500000.0, -1.0], [1442492928.0, 87520000.0, -0.9999210442038161], [1442494656.0, 87540000.0, -0.9996841892833002], [1442496384.0, 87560000.0, -0.9992894726405892], [1442498112.0, 87580000.0, -0.9987369566060178], [1442499840.0, 87600000.0, -0.9980267284282716], [1442501568.0, 87620000.0, -0.997158900260614], [1442503296.0, 87640000.0, -0.9961336091431733], [1442505024.0, 87660000.0, -0.9949510169813005], [1442506752.0, 87680000.0, -0.9936113105200081], [1442508480.0, 87700000.0, -0.9921147013144784], [1442510208.0, 87720000.0, -0.990461425696651], [1442511936.0, 87740000.0, -0.988651744737915], [1442513664.0, 87760000.0, -0.986685944207868], [1442515392.0, 87780000.0, -0.9845643345292054], [1442517120.0, 87800000.0, -0.9822872507286903], [1442518848.0, 87820000.0, -0.9798550523842473], [1442520576.0, 87840000.0, -0.9772681235681926], [1442522304.0, 87860000.0, -0.974526872786578], [1442524032.0, 87880000.0, -0.9716317329146733], [1442525760.0, 87900000.0, -0.9685831611286324], [1442527488.0, 87920000.0, -0.9653816388332754], [1442529216.0, 87940000.0, -0.9620276715860858], [1442530944.0, 87960000.0, -0.9585217890173781], [1442532672.0, 87980000.0, -0.9548645447466434], [1442534400.0, 88000000.0, -0.9510565162951521], [1442536128.0, 88020000.0, -0.9470983049947452], [1442537856.0, 88040000.0, -0.9429905358928657], [1442539584.0, 88060000.0, -0.9387338576538756], [1442541312.0, 88080000.0, -0.9343289424566139], [1442543040.0, 88100000.0, -0.929776485888251], [1442544768.0, 88120000.0, -0.9250772068344606], [1442546496.0, 88140000.0, -0.9202318473658705], [1442548224.0, 88160000.0, -0.9152411726209152], [1442549952.0, 88180000.0, -0.9101059706849965], [1442551680.0, 88200000.0, -0.9048270524660208], [1442553408.0, 88220000.0, -0.8994052515663757], [1442555136.0, 88240000.0, -0.8938414241512658], [1442556864.0, 88260000.0, -0.8881364488135437], [1442558592.0, 88280000.0, -0.882291226434956], [1442560320.0, 88300000.0, -0.8763066800438635], [1442562048.0, 88320000.0, -0.8701837546695259], [1442563776.0, 88340000.0, -0.8639234171928359], [1442565504.0, 88360000.0, -0.8575266561936533], [1442567232.0, 88380000.0, -0.850994481794697], [1442568960.0, 88400000.0, -0.844327925502017], [1442570688.0, 88420000.0, -0.8375280400421402], [1442572416.0, 88440000.0, -0.8305958991958156], [1442574144.0, 88460000.0, -0.8235325976284268], [1442575872.0, 88480000.0, -0.8163392507171837], [1442577600.0, 88500000.0, -0.8090169943749518], [1442579328.0, 88520000.0, -0.8015669848708773], [1442581056.0, 88540000.0, -0.7939903986478408], [1442582784.0, 88560000.0, -0.7862884321366206], [1442584512.0, 88580000.0, -0.7784623015670211], [1442586240.0, 88600000.0, -0.7705132427757919], [1442587968.0, 88620000.0, -0.7624425110114511], [1442589696.0, 88640000.0, -0.754251380736103], [1442591424.0, 88660000.0, -0.7459411454241865], [1442593152.0, 88680000.0, -0.7375131173581742], [1442594880.0, 88700000.0, -0.7289686274214171], [1442596608.0, 88720000.0, -0.7203090248879082], [1442598336.0, 88740000.0, -0.7115356772092822], [1442600064.0, 88760000.0, -0.7026499697988516], [1442601792.0, 88780000.0, -0.693653305812808], [1442603520.0, 88800000.0, -0.6845471059286872], [1442605248.0, 88820000.0, -0.6753328081210287], [1442606976.0, 88840000.0, -0.6660118674342512], [1442608704.0, 88860000.0, -0.656585755752962], [1442610432.0, 88880000.0, -0.6470559615694451], [1442612160.0, 88900000.0, -0.6374239897486911], [1442613888.0, 88920000.0, -0.6276913612907025], [1442615616.0, 88940000.0, -0.617859613090337], [1442617344.0, 88960000.0, -0.607930297694603], [1442619072.0, 88980000.0, -0.5979049830575228], [1442620800.0, 89000000.0, -0.587785252292472], [1442622528.0, 89020000.0, -0.577572703422273], [1442624256.0, 89040000.0, -0.5672689491267566], [1442625984.0, 89060000.0, -0.5568756164881888], [1442627712.0, 89080000.0, -0.5463943467342766], [1442629440.0, 89100000.0, -0.5358267949789988], [1442631168.0, 89120000.0, -0.5251746299612925], [1442632896.0, 89140000.0, -0.51443953378151], [1442634624.0, 89160000.0, -0.5036232016357589], [1442636352.0, 89180000.0, -0.4927273415482965], [1442638080.0, 89200000.0, -0.4817536741017147], [1442639808.0, 89220000.0, -0.4707039321653327], [1442641536.0, 89240000.0, -0.459579860621495], [1442643264.0, 89260000.0, -0.4483832160900338], [1442644992.0, 89280000.0, -0.4371157666509287], [1442646720.0, 89300000.0, -0.4257792915650756], [1442648448.0, 89320000.0, -0.41437558099328137], [1442650176.0, 89340000.0, -0.4029064357136671], [1442651904.0, 89360000.0, -0.3913736668372076], [1442653632.0, 89380000.0, -0.37977909552180045], [1442655360.0, 89400000.0, -0.36812455268468464], [1442657088.0, 89420000.0, -0.3564118787132515], [1442658816.0, 89440000.0, -0.3446429231745119], [1442660544.0, 89460000.0, -0.3328195445229889], [1442662272.0, 89480000.0, -0.3209436098072125], [1442664000.0, 89500000.0, -0.3090169943749512], [1442665728.0, 89520000.0, -0.29704158157703947], [1442667456.0, 89540000.0, -0.2850192624699746], [1442669184.0, 89560000.0, -0.2729519355173313], [1442670912.0, 89580000.0, -0.26084150628989694], [1442672640.0, 89600000.0, -0.24868988716484866], [1442674368.0, 89620000.0, -0.2364989970237262], [1442676096.0, 89640000.0, -0.22427076094938347], [1442677824.0, 89660000.0, -0.21200710992205768], [1442679552.0, 89680000.0, -0.19970998051441083], [1442681280.0, 89700000.0, -0.18738131458572224], [1442683008.0, 89720000.0, -0.17502305897528142], [1442684736.0, 89740000.0, -0.16263716519488275], [1442686464.0, 89760000.0, -0.15022558912075698], [1442688192.0, 89780000.0, -0.13779029068463877], [1442689920.0, 89800000.0, -0.12533323356430573], [1442691648.0, 89820000.0, -0.112856384873491], [1442693376.0, 89840000.0, -0.10036171485121792], [1442695104.0, 89860000.0, -0.08785119655073992], [1442696832.0, 89880000.0, -0.07532680552793733], [1442698560.0, 89900000.0, -0.06279051952931167], [1442700288.0, 89920000.0, -0.050244318179768634], [1442702016.0, 89940000.0, -0.037690182669941494], [1442703744.0, 89960000.0, -0.025130095443338118], [1442705472.0, 89980000.0, -0.012566039883361135], [1442707200.0, 90000000.0, -2.204364238465236e-15], [1442708928.0, 90020000.0, 0.012566039883356727], [1442710656.0, 90040000.0, 0.02513009544333371], [1442712384.0, 90060000.0, 0.037690182669937095], [1442714112.0, 90080000.0, 0.050244318179764234], [1442715840.0, 90100000.0, 0.06279051952930727], [1442717568.0, 90120000.0, 0.07532680552793293], [1442719296.0, 90140000.0, 0.08785119655073553], [1442721024.0, 90160000.0, 0.10036171485121353], [1442722752.0, 90180000.0, 0.11285638487348662], [1442724480.0, 90200000.0, 0.12533323356430134], [1442726208.0, 90220000.0, 0.1377902906846344], [1442727936.0, 90240000.0, 0.15022558912075262], [1442729664.0, 90260000.0, 0.16263716519487842], [1442731392.0, 90280000.0, 0.1750230589752771], [1442733120.0, 90300000.0, 0.1873813145857179], [1442734848.0, 90320000.0, 0.19970998051440653], [1442736576.0, 90340000.0, 0.21200710992205338], [1442738304.0, 90360000.0, 0.22427076094937917], [1442740032.0, 90380000.0, 0.2364989970237219], [1442741760.0, 90400000.0, 0.2486898871648444], [1442743488.0, 90420000.0, 0.26084150628989267], [1442745216.0, 90440000.0, 0.27295193551732705], [1442746944.0, 90460000.0, 0.2850192624699704], [1442748672.0, 90480000.0, 0.29704158157703525], [1442750400.0, 90500000.0, 0.309016994374947], [1442752128.0, 90520000.0, 0.3209436098072083], [1442753856.0, 90540000.0, 0.33281954452298473], [1442755584.0, 90560000.0, 0.3446429231745078], [1442757312.0, 90580000.0, 0.35641187871324737], [1442759040.0, 90600000.0, 0.36812455268468053], [1442760768.0, 90620000.0, 0.37977909552179634], [1442762496.0, 90640000.0, 0.39137366683720354], [1442764224.0, 90660000.0, 0.402906435713663], [1442765952.0, 90680000.0, 0.4143755809932773], [1442767680.0, 90700000.0, 0.4257792915650716], [1442769408.0, 90720000.0, 0.4371157666509248], [1442771136.0, 90740000.0, 0.44838321609002985], [1442772864.0, 90760000.0, 0.45957986062149103], [1442774592.0, 90780000.0, 0.4707039321653288], [1442776320.0, 90800000.0, 0.4817536741017108], [1442778048.0, 90820000.0, 0.4927273415482927], [1442779776.0, 90840000.0, 0.5036232016357551], [1442781504.0, 90860000.0, 0.5144395337815062], [1442783232.0, 90880000.0, 0.5251746299612887], [1442784960.0, 90900000.0, 0.535826794978995], [1442786688.0, 90920000.0, 0.5463943467342728], [1442788416.0, 90940000.0, 0.5568756164881852], [1442790144.0, 90960000.0, 0.5672689491267531], [1442791872.0, 90980000.0, 0.5775727034222693], [1442793600.0, 91000000.0, 0.5877852522924685], [1442795328.0, 91020000.0, 0.5979049830575193], [1442797056.0, 91040000.0, 0.6079302976945996], [1442798784.0, 91060000.0, 0.6178596130903335], [1442800512.0, 91080000.0, 0.627691361290699], [1442802240.0, 91100000.0, 0.6374239897486877], [1442803968.0, 91120000.0, 0.6470559615694418], [1442805696.0, 91140000.0, 0.6565857557529586], [1442807424.0, 91160000.0, 0.6660118674342479], [1442809152.0, 91180000.0, 0.6753328081210255], [1442810880.0, 91200000.0, 0.684547105928684], [1442812608.0, 91220000.0, 0.6936533058128048], [1442814336.0, 91240000.0, 0.7026499697988485], [1442816064.0, 91260000.0, 0.7115356772092791], [1442817792.0, 91280000.0, 0.7203090248879052], [1442819520.0, 91300000.0, 0.7289686274214141], [1442821248.0, 91320000.0, 0.7375131173581712], [1442822976.0, 91340000.0, 0.7459411454241837], [1442824704.0, 91360000.0, 0.7542513807361001], [1442826432.0, 91380000.0, 0.7624425110114483], [1442828160.0, 91400000.0, 0.7705132427757891], [1442829888.0, 91420000.0, 0.7784623015670185], [1442831616.0, 91440000.0, 0.7862884321366179], [1442833344.0, 91460000.0, 0.7939903986478382], [1442835072.0, 91480000.0, 0.8015669848708746], [1442836800.0, 91500000.0, 0.8090169943749492], [1442838528.0, 91520000.0, 0.8163392507171812], [1442840256.0, 91540000.0, 0.8235325976284242], [1442841984.0, 91560000.0, 0.830595899195813], [1442843712.0, 91580000.0, 0.8375280400421378], [1442845440.0, 91600000.0, 0.8443279255020146], [1442847168.0, 91620000.0, 0.8509944817946947], [1442848896.0, 91640000.0, 0.857526656193651], [1442850624.0, 91660000.0, 0.8639234171928337], [1442852352.0, 91680000.0, 0.8701837546695237], [1442854080.0, 91700000.0, 0.8763066800438613], [1442855808.0, 91720000.0, 0.8822912264349541], [1442857536.0, 91740000.0, 0.8881364488135416], [1442859264.0, 91760000.0, 0.8938414241512638], [1442860992.0, 91780000.0, 0.8994052515663739], [1442862720.0, 91800000.0, 0.9048270524660189], [1442864448.0, 91820000.0, 0.9101059706849948], [1442866176.0, 91840000.0, 0.9152411726209134], [1442867904.0, 91860000.0, 0.9202318473658688], [1442869632.0, 91880000.0, 0.9250772068344589], [1442871360.0, 91900000.0, 0.9297764858882493], [1442873088.0, 91920000.0, 0.9343289424566124], [1442874816.0, 91940000.0, 0.9387338576538741], [1442876544.0, 91960000.0, 0.9429905358928642], [1442878272.0, 91980000.0, 0.9470983049947438], [1442880000.0, 92000000.0, 0.9510565162951506], [1442881728.0, 92020000.0, 0.9548645447466421], [1442883456.0, 92040000.0, 0.9585217890173768], [1442885184.0, 92060000.0, 0.9620276715860846], [1442886912.0, 92080000.0, 0.9653816388332743], [1442888640.0, 92100000.0, 0.9685831611286314], [1442890368.0, 92120000.0, 0.9716317329146723], [1442892096.0, 92140000.0, 0.974526872786577], [1442893824.0, 92160000.0, 0.9772681235681917], [1442895552.0, 92180000.0, 0.9798550523842464], [1442897280.0, 92200000.0, 0.9822872507286895], [1442899008.0, 92220000.0, 0.9845643345292048], [1442900736.0, 92240000.0, 0.9866859442078674], [1442902464.0, 92260000.0, 0.9886517447379143], [1442904192.0, 92280000.0, 0.9904614256966504], [1442905920.0, 92300000.0, 0.9921147013144779], [1442907648.0, 92320000.0, 0.9936113105200075], [1442909376.0, 92340000.0, 0.9949510169813001], [1442911104.0, 92360000.0, 0.996133609143173], [1442912832.0, 92380000.0, 0.9971589002606137], [1442914560.0, 92400000.0, 0.9980267284282713], [1442916288.0, 92420000.0, 0.9987369566060176], [1442918016.0, 92440000.0, 0.9992894726405891], [1442919744.0, 92460000.0, 0.9996841892833], [1442921472.0, 92480000.0, 0.999921044203816], [1442923200.0, 92500000.0, 1.0], [1442924928.0, 92520000.0, 0.9999210442038161], [1442926656.0, 92540000.0, 0.9996841892833], [1442928384.0, 92560000.0, 0.9992894726405893], [1442930112.0, 92580000.0, 0.998736956606018], [1442931840.0, 92600000.0, 0.9980267284282719], [1442933568.0, 92620000.0, 0.9971589002606138], [1442935296.0, 92640000.0, 0.996133609143173], [1442937024.0, 92660000.0, 0.9949510169813002], [1442938752.0, 92680000.0, 0.9936113105200085], [1442940480.0, 92700000.0, 0.9921147013144789], [1442942208.0, 92720000.0, 0.9904614256966515], [1442943936.0, 92740000.0, 0.9886517447379155], [1442945664.0, 92760000.0, 0.9866859442078686], [1442947392.0, 92780000.0, 0.9845643345292049], [1442949120.0, 92800000.0, 0.9822872507286896], [1442950848.0, 92820000.0, 0.9798550523842466], [1442952576.0, 92840000.0, 0.9772681235681934], [1442954304.0, 92860000.0, 0.9745268727865788], [1442956032.0, 92880000.0, 0.9716317329146742], [1442957760.0, 92900000.0, 0.9685831611286334], [1442959488.0, 92920000.0, 0.9653816388332745], [1442961216.0, 92940000.0, 0.9620276715860849], [1442962944.0, 92960000.0, 0.9585217890173771], [1442964672.0, 92980000.0, 0.9548645447466445], [1442966400.0, 93000000.0, 0.9510565162951532], [1442968128.0, 93020000.0, 0.9470983049947465], [1442969856.0, 93040000.0, 0.9429905358928645], [1442971584.0, 93060000.0, 0.938733857653877], [1442973312.0, 93080000.0, 0.9343289424566127], [1442975040.0, 93100000.0, 0.9297764858882523], [1442976768.0, 93120000.0, 0.9250772068344594], [1442978496.0, 93140000.0, 0.9202318473658719], [1442980224.0, 93160000.0, 0.9152411726209168], [1442981952.0, 93180000.0, 0.9101059706849981], [1442983680.0, 93200000.0, 0.9048270524660192], [1442985408.0, 93220000.0, 0.8994052515663742], [1442987136.0, 93240000.0, 0.8938414241512642], [1442988864.0, 93260000.0, 0.8881364488135454], [1442990592.0, 93280000.0, 0.8822912264349545], [1442992320.0, 93300000.0, 0.8763066800438652], [1442994048.0, 93320000.0, 0.8701837546695242], [1442995776.0, 93340000.0, 0.8639234171928378], [1442997504.0, 93360000.0, 0.8575266561936515], [1442999232.0, 93380000.0, 0.8509944817946953], [1443000960.0, 93400000.0, 0.8443279255020152], [1443002688.0, 93420000.0, 0.8375280400421422], [1443004416.0, 93440000.0, 0.8305958991958176], [1443006144.0, 93460000.0, 0.8235325976284289], [1443007872.0, 93480000.0, 0.8163392507171817], [1443009600.0, 93500000.0, 0.8090169943749498], [1443011328.0, 93520000.0, 0.8015669848708752], [1443013056.0, 93540000.0, 0.7939903986478387], [1443014784.0, 93560000.0, 0.7862884321366228], [1443016512.0, 93580000.0, 0.7784623015670235], [1443018240.0, 93600000.0, 0.7705132427757944], [1443019968.0, 93620000.0, 0.7624425110114489], [1443021696.0, 93640000.0, 0.7542513807361008], [1443023424.0, 93660000.0, 0.7459411454241843], [1443025152.0, 93680000.0, 0.7375131173581718], [1443026880.0, 93700000.0, 0.7289686274214148], [1443028608.0, 93720000.0, 0.7203090248879107], [1443030336.0, 93740000.0, 0.7115356772092848], [1443032064.0, 93760000.0, 0.7026499697988543], [1443033792.0, 93780000.0, 0.6936533058128056], [1443035520.0, 93800000.0, 0.6845471059286846], [1443037248.0, 93820000.0, 0.6753328081210261], [1443038976.0, 93840000.0, 0.666011867434254], [1443040704.0, 93860000.0, 0.6565857557529594], [1443042432.0, 93880000.0, 0.6470559615694479], [1443044160.0, 93900000.0, 0.6374239897486885], [1443045888.0, 93920000.0, 0.6276913612907054], [1443047616.0, 93940000.0, 0.6178596130903343], [1443049344.0, 93960000.0, 0.6079302976946059], [1443051072.0, 93980000.0, 0.59790498305752], [1443052800.0, 94000000.0, 0.587785252292475], [1443054528.0, 94020000.0, 0.577572703422276], [1443056256.0, 94040000.0, 0.5672689491267596], [1443057984.0, 94060000.0, 0.556875616488186], [1443059712.0, 94080000.0, 0.5463943467342737], [1443061440.0, 94100000.0, 0.5358267949789959], [1443063168.0, 94120000.0, 0.5251746299612956], [1443064896.0, 94140000.0, 0.514439533781507], [1443066624.0, 94160000.0, 0.5036232016357621], [1443068352.0, 94180000.0, 0.49272734154829967], [1443070080.0, 94200000.0, 0.48175367410171793], [1443071808.0, 94220000.0, 0.47070393216532963], [1443073536.0, 94240000.0, 0.4595798606214919], [1443075264.0, 94260000.0, 0.4483832160900307], [1443076992.0, 94280000.0, 0.43711576665093205], [1443078720.0, 94300000.0, 0.42577929156507893], [1443080448.0, 94320000.0, 0.4143755809932847], [1443082176.0, 94340000.0, 0.4029064357136704], [1443083904.0, 94360000.0, 0.3913736668372044], [1443085632.0, 94380000.0, 0.3797790955217973], [1443087360.0, 94400000.0, 0.3681245526846814], [1443089088.0, 94420000.0, 0.3564118787132549], [1443090816.0, 94440000.0, 0.34464292317451534], [1443092544.0, 94460000.0, 0.3328195445229924], [1443094272.0, 94480000.0, 0.32094360980720926], [1443096000.0, 94500000.0, 0.30901699437495467], [1443097728.0, 94520000.0, 0.2970415815770362], [1443099456.0, 94540000.0, 0.28501926246997134], [1443101184.0, 94560000.0, 0.272951935517328], [1443102912.0, 94580000.0, 0.2608415062899005], [1443104640.0, 94600000.0, 0.2486898871648522], [1443106368.0, 94620000.0, 0.23649899702372976], [1443108096.0, 94640000.0, 0.22427076094938012], [1443109824.0, 94660000.0, 0.2120071099220613], [1443111552.0, 94680000.0, 0.19970998051440747], [1443113280.0, 94700000.0, 0.18738131458572585], [1443115008.0, 94720000.0, 0.17502305897527806], [1443116736.0, 94740000.0, 0.16263716519488639], [1443118464.0, 94760000.0, 0.1502255891207536], [1443120192.0, 94780000.0, 0.1377902906846424], [1443121920.0, 94800000.0, 0.12533323356430232], [1443123648.0, 94820000.0, 0.11285638487348759], [1443125376.0, 94840000.0, 0.10036171485121452], [1443127104.0, 94860000.0, 0.08785119655074358], [1443128832.0, 94880000.0, 0.075326805527941], [1443130560.0, 94900000.0, 0.06279051952931534], [1443132288.0, 94920000.0, 0.050244318179765206], [1443134016.0, 94940000.0, 0.037690182669938066], [1443135744.0, 94960000.0, 0.02513009544333469], [1443137472.0, 94980000.0, 0.012566039883357706], [1443139200.0, 95000000.0, 5.879542597180472e-15], [1443140928.0, 95020000.0, -0.012566039883353051], [1443142656.0, 95040000.0, -0.025130095443330037], [1443144384.0, 95060000.0, -0.03769018266993342], [1443146112.0, 95080000.0, -0.050244318179760564], [1443147840.0, 95100000.0, -0.0627905195293107], [1443149568.0, 95120000.0, -0.07532680552793634], [1443151296.0, 95140000.0, -0.08785119655073895], [1443153024.0, 95160000.0, -0.10036171485120989], [1443154752.0, 95180000.0, -0.11285638487348297], [1443156480.0, 95200000.0, -0.1253332335642977], [1443158208.0, 95220000.0, -0.1377902906846378], [1443159936.0, 95240000.0, -0.150225589120749], [1443161664.0, 95260000.0, -0.16263716519488178], [1443163392.0, 95280000.0, -0.17502305897527348], [1443165120.0, 95300000.0, -0.1873813145857213], [1443166848.0, 95320000.0, -0.19970998051440292], [1443168576.0, 95340000.0, -0.21200710992205674], [1443170304.0, 95360000.0, -0.2242707609493756], [1443172032.0, 95380000.0, -0.23649899702372523], [1443173760.0, 95400000.0, -0.24868988716484772], [1443175488.0, 95420000.0, -0.260841506289896], [1443177216.0, 95440000.0, -0.27295193551732355], [1443178944.0, 95460000.0, -0.2850192624699669], [1443180672.0, 95480000.0, -0.29704158157703175], [1443182400.0, 95500000.0, -0.3090169943749503], [1443184128.0, 95520000.0, -0.3209436098072049], [1443185856.0, 95540000.0, -0.332819544522988], [1443187584.0, 95560000.0, -0.344642923174511], [1443189312.0, 95580000.0, -0.3564118787132506], [1443191040.0, 95600000.0, -0.3681245526846771], [1443192768.0, 95620000.0, -0.37977909552179295], [1443194496.0, 95640000.0, -0.39137366683720015], [1443196224.0, 95660000.0, -0.4029064357136662], [1443197952.0, 95680000.0, -0.4143755809932805], [1443199680.0, 95700000.0, -0.4257792915650747], [1443201408.0, 95720000.0, -0.43711576665092783], [1443203136.0, 95740000.0, -0.4483832160900265], [1443204864.0, 95760000.0, -0.4595798606214878], [1443206592.0, 95780000.0, -0.4707039321653255], [1443208320.0, 95800000.0, -0.4817536741017138], [1443210048.0, 95820000.0, -0.49272734154829567], [1443211776.0, 95840000.0, -0.503623201635758], [1443213504.0, 95860000.0, -0.5144395337815031], [1443215232.0, 95880000.0, -0.5251746299612916], [1443216960.0, 95900000.0, -0.5358267949789919], [1443218688.0, 95920000.0, -0.5463943467342698], [1443220416.0, 95940000.0, -0.5568756164881821], [1443222144.0, 95960000.0, -0.5672689491267559], [1443223872.0, 95980000.0, -0.5775727034222721], [1443225600.0, 96000000.0, -0.5877852522924712], [1443227328.0, 96020000.0, -0.5979049830575164], [1443229056.0, 96040000.0, -0.6079302976946023], [1443230784.0, 96060000.0, -0.6178596130903307], [1443232512.0, 96080000.0, -0.6276913612907018], [1443234240.0, 96100000.0, -0.6374239897486849], [1443235968.0, 96120000.0, -0.6470559615694443], [1443237696.0, 96140000.0, -0.6565857557529559], [1443239424.0, 96160000.0, -0.6660118674342504], [1443241152.0, 96180000.0, -0.6753328081210227], [1443242880.0, 96200000.0, -0.6845471059286813], [1443244608.0, 96220000.0, -0.6936533058128022], [1443246336.0, 96240000.0, -0.702649969798851], [1443248064.0, 96260000.0, -0.7115356772092816], [1443249792.0, 96280000.0, -0.7203090248879075], [1443251520.0, 96300000.0, -0.7289686274214117], [1443253248.0, 96320000.0, -0.7375131173581687], [1443254976.0, 96340000.0, -0.7459411454241812], [1443256704.0, 96360000.0, -0.7542513807360977], [1443258432.0, 96380000.0, -0.7624425110114459], [1443260160.0, 96400000.0, -0.7705132427757914], [1443261888.0, 96420000.0, -0.7784623015670206], [1443263616.0, 96440000.0, -0.78628843213662], [1443265344.0, 96460000.0, -0.7939903986478359], [1443267072.0, 96480000.0, -0.8015669848708724], [1443268800.0, 96500000.0, -0.8090169943749471], [1443270528.0, 96520000.0, -0.816339250717179], [1443272256.0, 96540000.0, -0.8235325976284262], [1443273984.0, 96560000.0, -0.830595899195815], [1443275712.0, 96580000.0, -0.8375280400421397], [1443277440.0, 96600000.0, -0.8443279255020126], [1443279168.0, 96620000.0, -0.8509944817946928], [1443280896.0, 96640000.0, -0.8575266561936491], [1443282624.0, 96660000.0, -0.8639234171928355], [1443284352.0, 96680000.0, -0.8701837546695219], [1443286080.0, 96700000.0, -0.8763066800438629], [1443287808.0, 96720000.0, -0.8822912264349523], [1443289536.0, 96740000.0, -0.8881364488135433], [1443291264.0, 96760000.0, -0.8938414241512621], [1443292992.0, 96780000.0, -0.8994052515663722], [1443294720.0, 96800000.0, -0.9048270524660174], [1443296448.0, 96820000.0, -0.9101059706849961], [1443298176.0, 96840000.0, -0.9152411726209149], [1443299904.0, 96860000.0, -0.9202318473658702], [1443301632.0, 96880000.0, -0.9250772068344576], [1443303360.0, 96900000.0, -0.9297764858882507], [1443305088.0, 96920000.0, -0.934328942456611], [1443306816.0, 96940000.0, -0.9387338576538753], [1443308544.0, 96960000.0, -0.942990535892863], [1443310272.0, 96980000.0, -0.9470983049947449], [1443312000.0, 97000000.0, -0.9510565162951518], [1443313728.0, 97020000.0, -0.9548645447466431], [1443315456.0, 97040000.0, -0.9585217890173757], [1443317184.0, 97060000.0, -0.9620276715860836], [1443318912.0, 97080000.0, -0.9653816388332733], [1443320640.0, 97100000.0, -0.9685831611286322], [1443322368.0, 97120000.0, -0.9716317329146731], [1443324096.0, 97140000.0, -0.9745268727865778], [1443325824.0, 97160000.0, -0.9772681235681924], [1443327552.0, 97180000.0, -0.9798550523842458], [1443329280.0, 97200000.0, -0.9822872507286887], [1443331008.0, 97220000.0, -0.9845643345292041], [1443332736.0, 97240000.0, -0.9866859442078679], [1443334464.0, 97260000.0, -0.9886517447379148], [1443336192.0, 97280000.0, -0.9904614256966509], [1443337920.0, 97300000.0, -0.9921147013144783], [1443339648.0, 97320000.0, -0.993611310520008], [1443341376.0, 97340000.0, -0.9949510169812996], [1443343104.0, 97360000.0, -0.9961336091431726], [1443344832.0, 97380000.0, -0.9971589002606135], [1443346560.0, 97400000.0, -0.9980267284282716], [1443348288.0, 97420000.0, -0.9987369566060178], [1443350016.0, 97440000.0, -0.9992894726405892], [1443351744.0, 97460000.0, -0.9996841892832999], [1443353472.0, 97480000.0, -0.9999210442038161], [1443355200.0, 97500000.0, -1.0], [1443356928.0, 97520000.0, -0.9999210442038161], [1443358656.0, 97540000.0, -0.9996841892833002], [1443360384.0, 97560000.0, -0.9992894726405892], [1443362112.0, 97580000.0, -0.9987369566060179], [1443363840.0, 97600000.0, -0.9980267284282717], [1443365568.0, 97620000.0, -0.997158900260614], [1443367296.0, 97640000.0, -0.9961336091431733], [1443369024.0, 97660000.0, -0.9949510169813005], [1443370752.0, 97680000.0, -0.9936113105200081], [1443372480.0, 97700000.0, -0.9921147013144784], [1443374208.0, 97720000.0, -0.990461425696651], [1443375936.0, 97740000.0, -0.988651744737915], [1443377664.0, 97760000.0, -0.986685944207868], [1443379392.0, 97780000.0, -0.9845643345292056], [1443381120.0, 97800000.0, -0.9822872507286903], [1443382848.0, 97820000.0, -0.9798550523842473], [1443384576.0, 97840000.0, -0.9772681235681926], [1443386304.0, 97860000.0, -0.974526872786578], [1443388032.0, 97880000.0, -0.9716317329146734], [1443389760.0, 97900000.0, -0.9685831611286325], [1443391488.0, 97920000.0, -0.9653816388332755], [1443393216.0, 97940000.0, -0.9620276715860859], [1443394944.0, 97960000.0, -0.9585217890173782], [1443396672.0, 97980000.0, -0.9548645447466434], [1443398400.0, 98000000.0, -0.9510565162951521], [1443400128.0, 98020000.0, -0.9470983049947453], [1443401856.0, 98040000.0, -0.9429905358928657], [1443403584.0, 98060000.0, -0.9387338576538757], [1443405312.0, 98080000.0, -0.934328942456614], [1443407040.0, 98100000.0, -0.9297764858882511], [1443408768.0, 98120000.0, -0.9250772068344607], [1443410496.0, 98140000.0, -0.9202318473658706], [1443412224.0, 98160000.0, -0.9152411726209153], [1443413952.0, 98180000.0, -0.9101059706849967], [1443415680.0, 98200000.0, -0.9048270524660209], [1443417408.0, 98220000.0, -0.8994052515663759], [1443419136.0, 98240000.0, -0.8938414241512659], [1443420864.0, 98260000.0, -0.8881364488135438], [1443422592.0, 98280000.0, -0.8822912264349562], [1443424320.0, 98300000.0, -0.8763066800438636], [1443426048.0, 98320000.0, -0.870183754669526], [1443427776.0, 98340000.0, -0.863923417192836], [1443429504.0, 98360000.0, -0.8575266561936534], [1443431232.0, 98380000.0, -0.8509944817946972], [1443432960.0, 98400000.0, -0.8443279255020172], [1443434688.0, 98420000.0, -0.8375280400421403], [1443436416.0, 98440000.0, -0.8305958991958157], [1443438144.0, 98460000.0, -0.8235325976284269], [1443439872.0, 98480000.0, -0.8163392507171838], [1443441600.0, 98500000.0, -0.809016994374952], [1443443328.0, 98520000.0, -0.8015669848708774], [1443445056.0, 98540000.0, -0.7939903986478409], [1443446784.0, 98560000.0, -0.7862884321366207], [1443448512.0, 98580000.0, -0.7784623015670213], [1443450240.0, 98600000.0, -0.7705132427757921], [1443451968.0, 98620000.0, -0.7624425110114513], [1443453696.0, 98640000.0, -0.7542513807361032], [1443455424.0, 98660000.0, -0.7459411454241868], [1443457152.0, 98680000.0, -0.7375131173581743], [1443458880.0, 98700000.0, -0.7289686274214173], [1443460608.0, 98720000.0, -0.7203090248879084], [1443462336.0, 98740000.0, -0.7115356772092823], [1443464064.0, 98760000.0, -0.7026499697988519], [1443465792.0, 98780000.0, -0.6936533058128082], [1443467520.0, 98800000.0, -0.6845471059286873], [1443469248.0, 98820000.0, -0.6753328081210289], [1443470976.0, 98840000.0, -0.6660118674342514], [1443472704.0, 98860000.0, -0.6565857557529622], [1443474432.0, 98880000.0, -0.6470559615694453], [1443476160.0, 98900000.0, -0.6374239897486913], [1443477888.0, 98920000.0, -0.6276913612907027], [1443479616.0, 98940000.0, -0.6178596130903372], [1443481344.0, 98960000.0, -0.6079302976946033], [1443483072.0, 98980000.0, -0.597904983057523], [1443484800.0, 99000000.0, -0.5877852522924722], [1443486528.0, 99020000.0, -0.5775727034222731], [1443488256.0, 99040000.0, -0.5672689491267568], [1443489984.0, 99060000.0, -0.5568756164881891], [1443491712.0, 99080000.0, -0.5463943467342767], [1443493440.0, 99100000.0, -0.535826794978999], [1443495168.0, 99120000.0, -0.5251746299612927], [1443496896.0, 99140000.0, -0.5144395337815102], [1443498624.0, 99160000.0, -0.5036232016357591], [1443500352.0, 99180000.0, -0.4927273415482967], [1443502080.0, 99200000.0, -0.48175367410171493], [1443503808.0, 99220000.0, -0.4707039321653329], [1443505536.0, 99240000.0, -0.4595798606214952], [1443507264.0, 99260000.0, -0.448383216090034], [1443508992.0, 99280000.0, -0.43711576665092894], [1443510720.0, 99300000.0, -0.4257792915650758], [1443512448.0, 99320000.0, -0.4143755809932816], [1443514176.0, 99340000.0, -0.4029064357136673], [1443515904.0, 99360000.0, -0.3913736668372078], [1443517632.0, 99380000.0, -0.37977909552180067], [1443519360.0, 99400000.0, -0.36812455268468486], [1443521088.0, 99420000.0, -0.3564118787132517], [1443522816.0, 99440000.0, -0.3446429231745121], [1443524544.0, 99460000.0, -0.3328195445229891], [1443526272.0, 99480000.0, -0.32094360980721276], [1443528000.0, 99500000.0, -0.30901699437495145], [1443529728.0, 99520000.0, -0.2970415815770397], [1443531456.0, 99540000.0, -0.28501926246997483], [1443533184.0, 99560000.0, -0.27295193551733155], [1443534912.0, 99580000.0, -0.26084150628989716], [1443536640.0, 99600000.0, -0.24868988716484888], [1443538368.0, 99620000.0, -0.23649899702372643], [1443540096.0, 99640000.0, -0.2242707609493837], [1443541824.0, 99660000.0, -0.21200710992205793], [1443543552.0, 99680000.0, -0.19970998051441108], [1443545280.0, 99700000.0, -0.1873813145857225], [1443547008.0, 99720000.0, -0.17502305897528167], [1443548736.0, 99740000.0, -0.162637165194883], [1443550464.0, 99760000.0, -0.15022558912075723], [1443552192.0, 99780000.0, -0.137790290684639], [1443553920.0, 99800000.0, -0.12533323356430598], [1443555648.0, 99820000.0, -0.11285638487349124], [1443557376.0, 99840000.0, -0.10036171485121817], [1443559104.0, 99860000.0, -0.08785119655074017], [1443560832.0, 99880000.0, -0.07532680552793757], [1443562560.0, 99900000.0, -0.06279051952931192], [1443564288.0, 99920000.0, -0.050244318179768876], [1443566016.0, 99940000.0, -0.037690182669941744], [1443567744.0, 99960000.0, -0.025130095443338364], [1443569472.0, 99980000.0, -0.01256603988336138]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/app/demo/data/sq.json b/tensorflow/tensorboard/app/demo/data/sq.json new file mode 100644 index 0000000000..03c99221b9 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/data/sq.json @@ -0,0 +1 @@ +[[1434931200.0, 0.0, 100.0], [1434932928.0, 20000.0, 99.999996], [1434934656.0, 40000.0, 99.999984], [1434936384.0, 60000.0, 99.999964], [1434938112.0, 80000.0, 99.999936], [1434939840.0, 100000.0, 99.9999], [1434941568.0, 120000.0, 99.999856], [1434943296.0, 140000.0, 99.999804], [1434945024.0, 160000.0, 99.999744], [1434946752.0, 180000.0, 99.999676], [1434948480.0, 200000.0, 99.9996], [1434950208.0, 220000.0, 99.999516], [1434951936.0, 240000.0, 99.999424], [1434953664.0, 260000.0, 99.999324], [1434955392.0, 280000.0, 99.999216], [1434957120.0, 300000.0, 99.9991], [1434958848.0, 320000.0, 99.998976], [1434960576.0, 340000.0, 99.998844], [1434962304.0, 360000.0, 99.998704], [1434964032.0, 380000.0, 99.998556], [1434965760.0, 400000.0, 99.9984], [1434967488.0, 420000.0, 99.998236], [1434969216.0, 440000.0, 99.998064], [1434970944.0, 460000.0, 99.997884], [1434972672.0, 480000.0, 99.997696], [1434974400.0, 500000.0, 99.9975], [1434976128.0, 520000.0, 99.997296], [1434977856.0, 540000.0, 99.997084], [1434979584.0, 560000.0, 99.996864], [1434981312.0, 580000.0, 99.996636], [1434983040.0, 600000.0, 99.9964], [1434984768.0, 620000.0, 99.996156], [1434986496.0, 640000.0, 99.995904], [1434988224.0, 660000.0, 99.995644], [1434989952.0, 680000.0, 99.995376], [1434991680.0, 700000.0, 99.9951], [1434993408.0, 720000.0, 99.994816], [1434995136.0, 740000.0, 99.994524], [1434996864.0, 760000.0, 99.994224], [1434998592.0, 780000.0, 99.993916], [1435000320.0, 800000.0, 99.9936], [1435002048.0, 820000.0, 99.993276], [1435003776.0, 840000.0, 99.992944], [1435005504.0, 860000.0, 99.992604], [1435007232.0, 880000.0, 99.992256], [1435008960.0, 900000.0, 99.9919], [1435010688.0, 920000.0, 99.991536], [1435012416.0, 940000.0, 99.991164], [1435014144.0, 960000.0, 99.990784], [1435015872.0, 980000.0, 99.990396], [1435017600.0, 1000000.0, 99.99], [1435019328.0, 1020000.0, 99.989596], [1435021056.0, 1040000.0, 99.989184], [1435022784.0, 1060000.0, 99.988764], [1435024512.0, 1080000.0, 99.988336], [1435026240.0, 1100000.0, 99.9879], [1435027968.0, 1120000.0, 99.987456], [1435029696.0, 1140000.0, 99.987004], [1435031424.0, 1160000.0, 99.986544], [1435033152.0, 1180000.0, 99.986076], [1435034880.0, 1200000.0, 99.9856], [1435036608.0, 1220000.0, 99.985116], [1435038336.0, 1240000.0, 99.984624], [1435040064.0, 1260000.0, 99.984124], [1435041792.0, 1280000.0, 99.983616], [1435043520.0, 1300000.0, 99.9831], [1435045248.0, 1320000.0, 99.982576], [1435046976.0, 1340000.0, 99.982044], [1435048704.0, 1360000.0, 99.981504], [1435050432.0, 1380000.0, 99.980956], [1435052160.0, 1400000.0, 99.9804], [1435053888.0, 1420000.0, 99.979836], [1435055616.0, 1440000.0, 99.979264], [1435057344.0, 1460000.0, 99.978684], [1435059072.0, 1480000.0, 99.978096], [1435060800.0, 1500000.0, 99.9775], [1435062528.0, 1520000.0, 99.976896], [1435064256.0, 1540000.0, 99.976284], [1435065984.0, 1560000.0, 99.975664], [1435067712.0, 1580000.0, 99.975036], [1435069440.0, 1600000.0, 99.9744], [1435071168.0, 1620000.0, 99.973756], [1435072896.0, 1640000.0, 99.973104], [1435074624.0, 1660000.0, 99.972444], [1435076352.0, 1680000.0, 99.971776], [1435078080.0, 1700000.0, 99.9711], [1435079808.0, 1720000.0, 99.970416], [1435081536.0, 1740000.0, 99.969724], [1435083264.0, 1760000.0, 99.969024], [1435084992.0, 1780000.0, 99.968316], [1435086720.0, 1800000.0, 99.9676], [1435088448.0, 1820000.0, 99.966876], [1435090176.0, 1840000.0, 99.966144], [1435091904.0, 1860000.0, 99.965404], [1435093632.0, 1880000.0, 99.964656], [1435095360.0, 1900000.0, 99.9639], [1435097088.0, 1920000.0, 99.963136], [1435098816.0, 1940000.0, 99.962364], [1435100544.0, 1960000.0, 99.961584], [1435102272.0, 1980000.0, 99.960796], [1435104000.0, 2000000.0, 99.96], [1435105728.0, 2020000.0, 99.959196], [1435107456.0, 2040000.0, 99.958384], [1435109184.0, 2060000.0, 99.957564], [1435110912.0, 2080000.0, 99.956736], [1435112640.0, 2100000.0, 99.9559], [1435114368.0, 2120000.0, 99.955056], [1435116096.0, 2140000.0, 99.954204], [1435117824.0, 2160000.0, 99.953344], [1435119552.0, 2180000.0, 99.952476], [1435121280.0, 2200000.0, 99.9516], [1435123008.0, 2220000.0, 99.950716], [1435124736.0, 2240000.0, 99.949824], [1435126464.0, 2260000.0, 99.948924], [1435128192.0, 2280000.0, 99.948016], [1435129920.0, 2300000.0, 99.9471], [1435131648.0, 2320000.0, 99.946176], [1435133376.0, 2340000.0, 99.945244], [1435135104.0, 2360000.0, 99.944304], [1435136832.0, 2380000.0, 99.943356], [1435138560.0, 2400000.0, 99.9424], [1435140288.0, 2420000.0, 99.941436], [1435142016.0, 2440000.0, 99.940464], [1435143744.0, 2460000.0, 99.939484], [1435145472.0, 2480000.0, 99.938496], [1435147200.0, 2500000.0, 99.9375], [1435148928.0, 2520000.0, 99.936496], [1435150656.0, 2540000.0, 99.935484], [1435152384.0, 2560000.0, 99.934464], [1435154112.0, 2580000.0, 99.933436], [1435155840.0, 2600000.0, 99.9324], [1435157568.0, 2620000.0, 99.931356], [1435159296.0, 2640000.0, 99.930304], [1435161024.0, 2660000.0, 99.929244], [1435162752.0, 2680000.0, 99.928176], [1435164480.0, 2700000.0, 99.9271], [1435166208.0, 2720000.0, 99.926016], [1435167936.0, 2740000.0, 99.924924], [1435169664.0, 2760000.0, 99.923824], [1435171392.0, 2780000.0, 99.922716], [1435173120.0, 2800000.0, 99.9216], [1435174848.0, 2820000.0, 99.920476], [1435176576.0, 2840000.0, 99.919344], [1435178304.0, 2860000.0, 99.918204], [1435180032.0, 2880000.0, 99.917056], [1435181760.0, 2900000.0, 99.9159], [1435183488.0, 2920000.0, 99.914736], [1435185216.0, 2940000.0, 99.913564], [1435186944.0, 2960000.0, 99.912384], [1435188672.0, 2980000.0, 99.911196], [1435190400.0, 3000000.0, 99.91], [1435192128.0, 3020000.0, 99.908796], [1435193856.0, 3040000.0, 99.907584], [1435195584.0, 3060000.0, 99.906364], [1435197312.0, 3080000.0, 99.905136], [1435199040.0, 3100000.0, 99.9039], [1435200768.0, 3120000.0, 99.902656], [1435202496.0, 3140000.0, 99.901404], [1435204224.0, 3160000.0, 99.900144], [1435205952.0, 3180000.0, 99.898876], [1435207680.0, 3200000.0, 99.8976], [1435209408.0, 3220000.0, 99.896316], [1435211136.0, 3240000.0, 99.895024], [1435212864.0, 3260000.0, 99.893724], [1435214592.0, 3280000.0, 99.892416], [1435216320.0, 3300000.0, 99.8911], [1435218048.0, 3320000.0, 99.889776], [1435219776.0, 3340000.0, 99.888444], [1435221504.0, 3360000.0, 99.887104], [1435223232.0, 3380000.0, 99.885756], [1435224960.0, 3400000.0, 99.8844], [1435226688.0, 3420000.0, 99.883036], [1435228416.0, 3440000.0, 99.881664], [1435230144.0, 3460000.0, 99.880284], [1435231872.0, 3480000.0, 99.878896], [1435233600.0, 3500000.0, 99.8775], [1435235328.0, 3520000.0, 99.876096], [1435237056.0, 3540000.0, 99.874684], [1435238784.0, 3560000.0, 99.873264], [1435240512.0, 3580000.0, 99.871836], [1435242240.0, 3600000.0, 99.8704], [1435243968.0, 3620000.0, 99.868956], [1435245696.0, 3640000.0, 99.867504], [1435247424.0, 3660000.0, 99.866044], [1435249152.0, 3680000.0, 99.864576], [1435250880.0, 3700000.0, 99.8631], [1435252608.0, 3720000.0, 99.861616], [1435254336.0, 3740000.0, 99.860124], [1435256064.0, 3760000.0, 99.858624], [1435257792.0, 3780000.0, 99.857116], [1435259520.0, 3800000.0, 99.8556], [1435261248.0, 3820000.0, 99.854076], [1435262976.0, 3840000.0, 99.852544], [1435264704.0, 3860000.0, 99.851004], [1435266432.0, 3880000.0, 99.849456], [1435268160.0, 3900000.0, 99.8479], [1435269888.0, 3920000.0, 99.846336], [1435271616.0, 3940000.0, 99.844764], [1435273344.0, 3960000.0, 99.843184], [1435275072.0, 3980000.0, 99.841596], [1435276800.0, 4000000.0, 99.84], [1435278528.0, 4020000.0, 99.838396], [1435280256.0, 4040000.0, 99.836784], [1435281984.0, 4060000.0, 99.835164], [1435283712.0, 4080000.0, 99.833536], [1435285440.0, 4100000.0, 99.8319], [1435287168.0, 4120000.0, 99.830256], [1435288896.0, 4140000.0, 99.828604], [1435290624.0, 4160000.0, 99.826944], [1435292352.0, 4180000.0, 99.825276], [1435294080.0, 4200000.0, 99.8236], [1435295808.0, 4220000.0, 99.821916], [1435297536.0, 4240000.0, 99.820224], [1435299264.0, 4260000.0, 99.818524], [1435300992.0, 4280000.0, 99.816816], [1435302720.0, 4300000.0, 99.8151], [1435304448.0, 4320000.0, 99.813376], [1435306176.0, 4340000.0, 99.811644], [1435307904.0, 4360000.0, 99.809904], [1435309632.0, 4380000.0, 99.808156], [1435311360.0, 4400000.0, 99.8064], [1435313088.0, 4420000.0, 99.804636], [1435314816.0, 4440000.0, 99.802864], [1435316544.0, 4460000.0, 99.801084], [1435318272.0, 4480000.0, 99.799296], [1435320000.0, 4500000.0, 99.7975], [1435321728.0, 4520000.0, 99.795696], [1435323456.0, 4540000.0, 99.793884], [1435325184.0, 4560000.0, 99.792064], [1435326912.0, 4580000.0, 99.790236], [1435328640.0, 4600000.0, 99.7884], [1435330368.0, 4620000.0, 99.786556], [1435332096.0, 4640000.0, 99.784704], [1435333824.0, 4660000.0, 99.782844], [1435335552.0, 4680000.0, 99.780976], [1435337280.0, 4700000.0, 99.7791], [1435339008.0, 4720000.0, 99.777216], [1435340736.0, 4740000.0, 99.775324], [1435342464.0, 4760000.0, 99.773424], [1435344192.0, 4780000.0, 99.771516], [1435345920.0, 4800000.0, 99.7696], [1435347648.0, 4820000.0, 99.767676], [1435349376.0, 4840000.0, 99.765744], [1435351104.0, 4860000.0, 99.763804], [1435352832.0, 4880000.0, 99.761856], [1435354560.0, 4900000.0, 99.7599], [1435356288.0, 4920000.0, 99.757936], [1435358016.0, 4940000.0, 99.755964], [1435359744.0, 4960000.0, 99.753984], [1435361472.0, 4980000.0, 99.751996], [1435363200.0, 5000000.0, 99.75], [1435364928.0, 5020000.0, 99.747996], [1435366656.0, 5040000.0, 99.74598399999999], [1435368384.0, 5060000.0, 99.743964], [1435370112.0, 5080000.0, 99.741936], [1435371840.0, 5100000.0, 99.7399], [1435373568.0, 5120000.0, 99.737856], [1435375296.0, 5140000.0, 99.735804], [1435377024.0, 5160000.0, 99.733744], [1435378752.0, 5180000.0, 99.731676], [1435380480.0, 5200000.0, 99.7296], [1435382208.0, 5220000.0, 99.727516], [1435383936.0, 5240000.0, 99.725424], [1435385664.0, 5260000.0, 99.723324], [1435387392.0, 5280000.0, 99.721216], [1435389120.0, 5300000.0, 99.7191], [1435390848.0, 5320000.0, 99.716976], [1435392576.0, 5340000.0, 99.714844], [1435394304.0, 5360000.0, 99.712704], [1435396032.0, 5380000.0, 99.710556], [1435397760.0, 5400000.0, 99.7084], [1435399488.0, 5420000.0, 99.706236], [1435401216.0, 5440000.0, 99.704064], [1435402944.0, 5460000.0, 99.701884], [1435404672.0, 5480000.0, 99.699696], [1435406400.0, 5500000.0, 99.6975], [1435408128.0, 5520000.0, 99.695296], [1435409856.0, 5540000.0, 99.693084], [1435411584.0, 5560000.0, 99.690864], [1435413312.0, 5580000.0, 99.688636], [1435415040.0, 5600000.0, 99.6864], [1435416768.0, 5620000.0, 99.684156], [1435418496.0, 5640000.0, 99.681904], [1435420224.0, 5660000.0, 99.679644], [1435421952.0, 5680000.0, 99.677376], [1435423680.0, 5700000.0, 99.6751], [1435425408.0, 5720000.0, 99.672816], [1435427136.0, 5740000.0, 99.670524], [1435428864.0, 5760000.0, 99.668224], [1435430592.0, 5780000.0, 99.665916], [1435432320.0, 5800000.0, 99.6636], [1435434048.0, 5820000.0, 99.661276], [1435435776.0, 5840000.0, 99.658944], [1435437504.0, 5860000.0, 99.656604], [1435439232.0, 5880000.0, 99.654256], [1435440960.0, 5900000.0, 99.6519], [1435442688.0, 5920000.0, 99.649536], [1435444416.0, 5940000.0, 99.647164], [1435446144.0, 5960000.0, 99.644784], [1435447872.0, 5980000.0, 99.642396], [1435449600.0, 6000000.0, 99.64], [1435451328.0, 6020000.0, 99.637596], [1435453056.0, 6040000.0, 99.635184], [1435454784.0, 6060000.0, 99.632764], [1435456512.0, 6080000.0, 99.630336], [1435458240.0, 6100000.0, 99.6279], [1435459968.0, 6120000.0, 99.625456], [1435461696.0, 6140000.0, 99.623004], [1435463424.0, 6160000.0, 99.620544], [1435465152.0, 6180000.0, 99.618076], [1435466880.0, 6200000.0, 99.6156], [1435468608.0, 6220000.0, 99.613116], [1435470336.0, 6240000.0, 99.610624], [1435472064.0, 6260000.0, 99.608124], [1435473792.0, 6280000.0, 99.605616], [1435475520.0, 6300000.0, 99.6031], [1435477248.0, 6320000.0, 99.600576], [1435478976.0, 6340000.0, 99.598044], [1435480704.0, 6360000.0, 99.595504], [1435482432.0, 6380000.0, 99.592956], [1435484160.0, 6400000.0, 99.5904], [1435485888.0, 6420000.0, 99.587836], [1435487616.0, 6440000.0, 99.585264], [1435489344.0, 6460000.0, 99.582684], [1435491072.0, 6480000.0, 99.580096], [1435492800.0, 6500000.0, 99.5775], [1435494528.0, 6520000.0, 99.574896], [1435496256.0, 6540000.0, 99.572284], [1435497984.0, 6560000.0, 99.569664], [1435499712.0, 6580000.0, 99.567036], [1435501440.0, 6600000.0, 99.5644], [1435503168.0, 6620000.0, 99.561756], [1435504896.0, 6640000.0, 99.559104], [1435506624.0, 6660000.0, 99.556444], [1435508352.0, 6680000.0, 99.553776], [1435510080.0, 6700000.0, 99.5511], [1435511808.0, 6720000.0, 99.548416], [1435513536.0, 6740000.0, 99.545724], [1435515264.0, 6760000.0, 99.543024], [1435516992.0, 6780000.0, 99.540316], [1435518720.0, 6800000.0, 99.5376], [1435520448.0, 6820000.0, 99.534876], [1435522176.0, 6840000.0, 99.532144], [1435523904.0, 6860000.0, 99.529404], [1435525632.0, 6880000.0, 99.526656], [1435527360.0, 6900000.0, 99.5239], [1435529088.0, 6920000.0, 99.521136], [1435530816.0, 6940000.0, 99.518364], [1435532544.0, 6960000.0, 99.515584], [1435534272.0, 6980000.0, 99.512796], [1435536000.0, 7000000.0, 99.51], [1435537728.0, 7020000.0, 99.507196], [1435539456.0, 7040000.0, 99.504384], [1435541184.0, 7060000.0, 99.501564], [1435542912.0, 7080000.0, 99.498736], [1435544640.0, 7100000.0, 99.4959], [1435546368.0, 7120000.0, 99.493056], [1435548096.0, 7140000.0, 99.490204], [1435549824.0, 7160000.0, 99.487344], [1435551552.0, 7180000.0, 99.484476], [1435553280.0, 7200000.0, 99.4816], [1435555008.0, 7220000.0, 99.478716], [1435556736.0, 7240000.0, 99.475824], [1435558464.0, 7260000.0, 99.472924], [1435560192.0, 7280000.0, 99.470016], [1435561920.0, 7300000.0, 99.4671], [1435563648.0, 7320000.0, 99.464176], [1435565376.0, 7340000.0, 99.461244], [1435567104.0, 7360000.0, 99.458304], [1435568832.0, 7380000.0, 99.455356], [1435570560.0, 7400000.0, 99.4524], [1435572288.0, 7420000.0, 99.449436], [1435574016.0, 7440000.0, 99.446464], [1435575744.0, 7460000.0, 99.443484], [1435577472.0, 7480000.0, 99.440496], [1435579200.0, 7500000.0, 99.4375], [1435580928.0, 7520000.0, 99.434496], [1435582656.0, 7540000.0, 99.431484], [1435584384.0, 7560000.0, 99.428464], [1435586112.0, 7580000.0, 99.425436], [1435587840.0, 7600000.0, 99.4224], [1435589568.0, 7620000.0, 99.419356], [1435591296.0, 7640000.0, 99.416304], [1435593024.0, 7660000.0, 99.413244], [1435594752.0, 7680000.0, 99.410176], [1435596480.0, 7700000.0, 99.4071], [1435598208.0, 7720000.0, 99.404016], [1435599936.0, 7740000.0, 99.400924], [1435601664.0, 7760000.0, 99.397824], [1435603392.0, 7780000.0, 99.394716], [1435605120.0, 7800000.0, 99.3916], [1435606848.0, 7820000.0, 99.388476], [1435608576.0, 7840000.0, 99.385344], [1435610304.0, 7860000.0, 99.382204], [1435612032.0, 7880000.0, 99.379056], [1435613760.0, 7900000.0, 99.3759], [1435615488.0, 7920000.0, 99.372736], [1435617216.0, 7940000.0, 99.369564], [1435618944.0, 7960000.0, 99.366384], [1435620672.0, 7980000.0, 99.363196], [1435622400.0, 8000000.0, 99.36], [1435624128.0, 8020000.0, 99.356796], [1435625856.0, 8040000.0, 99.353584], [1435627584.0, 8060000.0, 99.350364], [1435629312.0, 8080000.0, 99.347136], [1435631040.0, 8100000.0, 99.3439], [1435632768.0, 8120000.0, 99.340656], [1435634496.0, 8140000.0, 99.337404], [1435636224.0, 8160000.0, 99.334144], [1435637952.0, 8180000.0, 99.330876], [1435639680.0, 8200000.0, 99.3276], [1435641408.0, 8220000.0, 99.324316], [1435643136.0, 8240000.0, 99.321024], [1435644864.0, 8260000.0, 99.317724], [1435646592.0, 8280000.0, 99.314416], [1435648320.0, 8300000.0, 99.3111], [1435650048.0, 8320000.0, 99.307776], [1435651776.0, 8340000.0, 99.304444], [1435653504.0, 8360000.0, 99.301104], [1435655232.0, 8380000.0, 99.297756], [1435656960.0, 8400000.0, 99.2944], [1435658688.0, 8420000.0, 99.291036], [1435660416.0, 8440000.0, 99.287664], [1435662144.0, 8460000.0, 99.284284], [1435663872.0, 8480000.0, 99.280896], [1435665600.0, 8500000.0, 99.2775], [1435667328.0, 8520000.0, 99.274096], [1435669056.0, 8540000.0, 99.270684], [1435670784.0, 8560000.0, 99.267264], [1435672512.0, 8580000.0, 99.263836], [1435674240.0, 8600000.0, 99.2604], [1435675968.0, 8620000.0, 99.256956], [1435677696.0, 8640000.0, 99.253504], [1435679424.0, 8660000.0, 99.250044], [1435681152.0, 8680000.0, 99.246576], [1435682880.0, 8700000.0, 99.2431], [1435684608.0, 8720000.0, 99.239616], [1435686336.0, 8740000.0, 99.236124], [1435688064.0, 8760000.0, 99.232624], [1435689792.0, 8780000.0, 99.229116], [1435691520.0, 8800000.0, 99.2256], [1435693248.0, 8820000.0, 99.222076], [1435694976.0, 8840000.0, 99.218544], [1435696704.0, 8860000.0, 99.215004], [1435698432.0, 8880000.0, 99.211456], [1435700160.0, 8900000.0, 99.2079], [1435701888.0, 8920000.0, 99.204336], [1435703616.0, 8940000.0, 99.200764], [1435705344.0, 8960000.0, 99.197184], [1435707072.0, 8980000.0, 99.193596], [1435708800.0, 9000000.0, 99.19], [1435710528.0, 9020000.0, 99.186396], [1435712256.0, 9040000.0, 99.182784], [1435713984.0, 9060000.0, 99.179164], [1435715712.0, 9080000.0, 99.175536], [1435717440.0, 9100000.0, 99.1719], [1435719168.0, 9120000.0, 99.168256], [1435720896.0, 9140000.0, 99.164604], [1435722624.0, 9160000.0, 99.160944], [1435724352.0, 9180000.0, 99.157276], [1435726080.0, 9200000.0, 99.1536], [1435727808.0, 9220000.0, 99.149916], [1435729536.0, 9240000.0, 99.146224], [1435731264.0, 9260000.0, 99.142524], [1435732992.0, 9280000.0, 99.138816], [1435734720.0, 9300000.0, 99.1351], [1435736448.0, 9320000.0, 99.131376], [1435738176.0, 9340000.0, 99.127644], [1435739904.0, 9360000.0, 99.123904], [1435741632.0, 9380000.0, 99.120156], [1435743360.0, 9400000.0, 99.1164], [1435745088.0, 9420000.0, 99.112636], [1435746816.0, 9440000.0, 99.108864], [1435748544.0, 9460000.0, 99.105084], [1435750272.0, 9480000.0, 99.101296], [1435752000.0, 9500000.0, 99.0975], [1435753728.0, 9520000.0, 99.093696], [1435755456.0, 9540000.0, 99.089884], [1435757184.0, 9560000.0, 99.086064], [1435758912.0, 9580000.0, 99.082236], [1435760640.0, 9600000.0, 99.0784], [1435762368.0, 9620000.0, 99.074556], [1435764096.0, 9640000.0, 99.070704], [1435765824.0, 9660000.0, 99.066844], [1435767552.0, 9680000.0, 99.062976], [1435769280.0, 9700000.0, 99.0591], [1435771008.0, 9720000.0, 99.055216], [1435772736.0, 9740000.0, 99.051324], [1435774464.0, 9760000.0, 99.047424], [1435776192.0, 9780000.0, 99.043516], [1435777920.0, 9800000.0, 99.03960000000001], [1435779648.0, 9820000.0, 99.035676], [1435781376.0, 9840000.0, 99.031744], [1435783104.0, 9860000.0, 99.027804], [1435784832.0, 9880000.0, 99.023856], [1435786560.0, 9900000.0, 99.0199], [1435788288.0, 9920000.0, 99.015936], [1435790016.0, 9940000.0, 99.011964], [1435791744.0, 9960000.0, 99.007984], [1435793472.0, 9980000.0, 99.003996], [1435795200.0, 10000000.0, 99.0], [1435796928.0, 10020000.0, 98.995996], [1435798656.0, 10040000.0, 98.991984], [1435800384.0, 10060000.0, 98.987964], [1435802112.0, 10080000.0, 98.983936], [1435803840.0, 10100000.0, 98.9799], [1435805568.0, 10120000.0, 98.975856], [1435807296.0, 10140000.0, 98.971804], [1435809024.0, 10160000.0, 98.967744], [1435810752.0, 10180000.0, 98.963676], [1435812480.0, 10200000.0, 98.9596], [1435814208.0, 10220000.0, 98.955516], [1435815936.0, 10240000.0, 98.951424], [1435817664.0, 10260000.0, 98.947324], [1435819392.0, 10280000.0, 98.943216], [1435821120.0, 10300000.0, 98.9391], [1435822848.0, 10320000.0, 98.934976], [1435824576.0, 10340000.0, 98.930844], [1435826304.0, 10360000.0, 98.926704], [1435828032.0, 10380000.0, 98.922556], [1435829760.0, 10400000.0, 98.9184], [1435831488.0, 10420000.0, 98.914236], [1435833216.0, 10440000.0, 98.910064], [1435834944.0, 10460000.0, 98.905884], [1435836672.0, 10480000.0, 98.901696], [1435838400.0, 10500000.0, 98.8975], [1435840128.0, 10520000.0, 98.893296], [1435841856.0, 10540000.0, 98.889084], [1435843584.0, 10560000.0, 98.884864], [1435845312.0, 10580000.0, 98.880636], [1435847040.0, 10600000.0, 98.8764], [1435848768.0, 10620000.0, 98.872156], [1435850496.0, 10640000.0, 98.867904], [1435852224.0, 10660000.0, 98.863644], [1435853952.0, 10680000.0, 98.859376], [1435855680.0, 10700000.0, 98.8551], [1435857408.0, 10720000.0, 98.850816], [1435859136.0, 10740000.0, 98.846524], [1435860864.0, 10760000.0, 98.842224], [1435862592.0, 10780000.0, 98.837916], [1435864320.0, 10800000.0, 98.8336], [1435866048.0, 10820000.0, 98.829276], [1435867776.0, 10840000.0, 98.824944], [1435869504.0, 10860000.0, 98.820604], [1435871232.0, 10880000.0, 98.816256], [1435872960.0, 10900000.0, 98.8119], [1435874688.0, 10920000.0, 98.807536], [1435876416.0, 10940000.0, 98.803164], [1435878144.0, 10960000.0, 98.798784], [1435879872.0, 10980000.0, 98.794396], [1435881600.0, 11000000.0, 98.79], [1435883328.0, 11020000.0, 98.785596], [1435885056.0, 11040000.0, 98.781184], [1435886784.0, 11060000.0, 98.776764], [1435888512.0, 11080000.0, 98.772336], [1435890240.0, 11100000.0, 98.7679], [1435891968.0, 11120000.0, 98.763456], [1435893696.0, 11140000.0, 98.759004], [1435895424.0, 11160000.0, 98.754544], [1435897152.0, 11180000.0, 98.75007599999999], [1435898880.0, 11200000.0, 98.7456], [1435900608.0, 11220000.0, 98.741116], [1435902336.0, 11240000.0, 98.736624], [1435904064.0, 11260000.0, 98.732124], [1435905792.0, 11280000.0, 98.727616], [1435907520.0, 11300000.0, 98.7231], [1435909248.0, 11320000.0, 98.718576], [1435910976.0, 11340000.0, 98.714044], [1435912704.0, 11360000.0, 98.709504], [1435914432.0, 11380000.0, 98.704956], [1435916160.0, 11400000.0, 98.7004], [1435917888.0, 11420000.0, 98.695836], [1435919616.0, 11440000.0, 98.691264], [1435921344.0, 11460000.0, 98.686684], [1435923072.0, 11480000.0, 98.682096], [1435924800.0, 11500000.0, 98.6775], [1435926528.0, 11520000.0, 98.672896], [1435928256.0, 11540000.0, 98.668284], [1435929984.0, 11560000.0, 98.663664], [1435931712.0, 11580000.0, 98.659036], [1435933440.0, 11600000.0, 98.6544], [1435935168.0, 11620000.0, 98.649756], [1435936896.0, 11640000.0, 98.645104], [1435938624.0, 11660000.0, 98.640444], [1435940352.0, 11680000.0, 98.635776], [1435942080.0, 11700000.0, 98.6311], [1435943808.0, 11720000.0, 98.626416], [1435945536.0, 11740000.0, 98.621724], [1435947264.0, 11760000.0, 98.617024], [1435948992.0, 11780000.0, 98.612316], [1435950720.0, 11800000.0, 98.6076], [1435952448.0, 11820000.0, 98.602876], [1435954176.0, 11840000.0, 98.598144], [1435955904.0, 11860000.0, 98.593404], [1435957632.0, 11880000.0, 98.588656], [1435959360.0, 11900000.0, 98.5839], [1435961088.0, 11920000.0, 98.579136], [1435962816.0, 11940000.0, 98.574364], [1435964544.0, 11960000.0, 98.569584], [1435966272.0, 11980000.0, 98.564796], [1435968000.0, 12000000.0, 98.56], [1435969728.0, 12020000.0, 98.555196], [1435971456.0, 12040000.0, 98.550384], [1435973184.0, 12060000.0, 98.545564], [1435974912.0, 12080000.0, 98.540736], [1435976640.0, 12100000.0, 98.5359], [1435978368.0, 12120000.0, 98.531056], [1435980096.0, 12140000.0, 98.526204], [1435981824.0, 12160000.0, 98.521344], [1435983552.0, 12180000.0, 98.516476], [1435985280.0, 12200000.0, 98.5116], [1435987008.0, 12220000.0, 98.506716], [1435988736.0, 12240000.0, 98.501824], [1435990464.0, 12260000.0, 98.496924], [1435992192.0, 12280000.0, 98.492016], [1435993920.0, 12300000.0, 98.4871], [1435995648.0, 12320000.0, 98.482176], [1435997376.0, 12340000.0, 98.477244], [1435999104.0, 12360000.0, 98.472304], [1436000832.0, 12380000.0, 98.467356], [1436002560.0, 12400000.0, 98.4624], [1436004288.0, 12420000.0, 98.457436], [1436006016.0, 12440000.0, 98.452464], [1436007744.0, 12460000.0, 98.447484], [1436009472.0, 12480000.0, 98.442496], [1436011200.0, 12500000.0, 98.4375], [1436012928.0, 12520000.0, 98.432496], [1436014656.0, 12540000.0, 98.427484], [1436016384.0, 12560000.0, 98.422464], [1436018112.0, 12580000.0, 98.417436], [1436019840.0, 12600000.0, 98.4124], [1436021568.0, 12620000.0, 98.407356], [1436023296.0, 12640000.0, 98.402304], [1436025024.0, 12660000.0, 98.397244], [1436026752.0, 12680000.0, 98.392176], [1436028480.0, 12700000.0, 98.3871], [1436030208.0, 12720000.0, 98.382016], [1436031936.0, 12740000.0, 98.376924], [1436033664.0, 12760000.0, 98.371824], [1436035392.0, 12780000.0, 98.366716], [1436037120.0, 12800000.0, 98.3616], [1436038848.0, 12820000.0, 98.356476], [1436040576.0, 12840000.0, 98.351344], [1436042304.0, 12860000.0, 98.346204], [1436044032.0, 12880000.0, 98.341056], [1436045760.0, 12900000.0, 98.3359], [1436047488.0, 12920000.0, 98.330736], [1436049216.0, 12940000.0, 98.325564], [1436050944.0, 12960000.0, 98.320384], [1436052672.0, 12980000.0, 98.315196], [1436054400.0, 13000000.0, 98.31], [1436056128.0, 13020000.0, 98.304796], [1436057856.0, 13040000.0, 98.299584], [1436059584.0, 13060000.0, 98.294364], [1436061312.0, 13080000.0, 98.289136], [1436063040.0, 13100000.0, 98.2839], [1436064768.0, 13120000.0, 98.278656], [1436066496.0, 13140000.0, 98.273404], [1436068224.0, 13160000.0, 98.268144], [1436069952.0, 13180000.0, 98.262876], [1436071680.0, 13200000.0, 98.2576], [1436073408.0, 13220000.0, 98.252316], [1436075136.0, 13240000.0, 98.247024], [1436076864.0, 13260000.0, 98.241724], [1436078592.0, 13280000.0, 98.236416], [1436080320.0, 13300000.0, 98.2311], [1436082048.0, 13320000.0, 98.225776], [1436083776.0, 13340000.0, 98.220444], [1436085504.0, 13360000.0, 98.215104], [1436087232.0, 13380000.0, 98.209756], [1436088960.0, 13400000.0, 98.20439999999999], [1436090688.0, 13420000.0, 98.199036], [1436092416.0, 13440000.0, 98.193664], [1436094144.0, 13460000.0, 98.188284], [1436095872.0, 13480000.0, 98.182896], [1436097600.0, 13500000.0, 98.1775], [1436099328.0, 13520000.0, 98.172096], [1436101056.0, 13540000.0, 98.166684], [1436102784.0, 13560000.0, 98.161264], [1436104512.0, 13580000.0, 98.155836], [1436106240.0, 13600000.0, 98.1504], [1436107968.0, 13620000.0, 98.144956], [1436109696.0, 13640000.0, 98.139504], [1436111424.0, 13660000.0, 98.134044], [1436113152.0, 13680000.0, 98.128576], [1436114880.0, 13700000.0, 98.1231], [1436116608.0, 13720000.0, 98.117616], [1436118336.0, 13740000.0, 98.112124], [1436120064.0, 13760000.0, 98.106624], [1436121792.0, 13780000.0, 98.101116], [1436123520.0, 13800000.0, 98.0956], [1436125248.0, 13820000.0, 98.090076], [1436126976.0, 13840000.0, 98.084544], [1436128704.0, 13860000.0, 98.079004], [1436130432.0, 13880000.0, 98.073456], [1436132160.0, 13900000.0, 98.0679], [1436133888.0, 13920000.0, 98.062336], [1436135616.0, 13940000.0, 98.056764], [1436137344.0, 13960000.0, 98.051184], [1436139072.0, 13980000.0, 98.045596], [1436140800.0, 14000000.0, 98.04], [1436142528.0, 14020000.0, 98.034396], [1436144256.0, 14040000.0, 98.028784], [1436145984.0, 14060000.0, 98.023164], [1436147712.0, 14080000.0, 98.017536], [1436149440.0, 14100000.0, 98.0119], [1436151168.0, 14120000.0, 98.006256], [1436152896.0, 14140000.0, 98.000604], [1436154624.0, 14160000.0, 97.994944], [1436156352.0, 14180000.0, 97.989276], [1436158080.0, 14200000.0, 97.9836], [1436159808.0, 14220000.0, 97.977916], [1436161536.0, 14240000.0, 97.972224], [1436163264.0, 14260000.0, 97.966524], [1436164992.0, 14280000.0, 97.960816], [1436166720.0, 14300000.0, 97.9551], [1436168448.0, 14320000.0, 97.949376], [1436170176.0, 14340000.0, 97.943644], [1436171904.0, 14360000.0, 97.937904], [1436173632.0, 14380000.0, 97.932156], [1436175360.0, 14400000.0, 97.9264], [1436177088.0, 14420000.0, 97.920636], [1436178816.0, 14440000.0, 97.914864], [1436180544.0, 14460000.0, 97.90908400000001], [1436182272.0, 14480000.0, 97.903296], [1436184000.0, 14500000.0, 97.8975], [1436185728.0, 14520000.0, 97.891696], [1436187456.0, 14540000.0, 97.885884], [1436189184.0, 14560000.0, 97.880064], [1436190912.0, 14580000.0, 97.874236], [1436192640.0, 14600000.0, 97.8684], [1436194368.0, 14620000.0, 97.862556], [1436196096.0, 14640000.0, 97.856704], [1436197824.0, 14660000.0, 97.850844], [1436199552.0, 14680000.0, 97.844976], [1436201280.0, 14700000.0, 97.8391], [1436203008.0, 14720000.0, 97.833216], [1436204736.0, 14740000.0, 97.827324], [1436206464.0, 14760000.0, 97.821424], [1436208192.0, 14780000.0, 97.815516], [1436209920.0, 14800000.0, 97.8096], [1436211648.0, 14820000.0, 97.803676], [1436213376.0, 14840000.0, 97.797744], [1436215104.0, 14860000.0, 97.791804], [1436216832.0, 14880000.0, 97.785856], [1436218560.0, 14900000.0, 97.7799], [1436220288.0, 14920000.0, 97.773936], [1436222016.0, 14940000.0, 97.767964], [1436223744.0, 14960000.0, 97.761984], [1436225472.0, 14980000.0, 97.755996], [1436227200.0, 15000000.0, 97.75], [1436228928.0, 15020000.0, 97.743996], [1436230656.0, 15040000.0, 97.737984], [1436232384.0, 15060000.0, 97.731964], [1436234112.0, 15080000.0, 97.725936], [1436235840.0, 15100000.0, 97.7199], [1436237568.0, 15120000.0, 97.71385599999999], [1436239296.0, 15140000.0, 97.707804], [1436241024.0, 15160000.0, 97.701744], [1436242752.0, 15180000.0, 97.695676], [1436244480.0, 15200000.0, 97.6896], [1436246208.0, 15220000.0, 97.683516], [1436247936.0, 15240000.0, 97.677424], [1436249664.0, 15260000.0, 97.671324], [1436251392.0, 15280000.0, 97.665216], [1436253120.0, 15300000.0, 97.6591], [1436254848.0, 15320000.0, 97.652976], [1436256576.0, 15340000.0, 97.646844], [1436258304.0, 15360000.0, 97.640704], [1436260032.0, 15380000.0, 97.634556], [1436261760.0, 15400000.0, 97.6284], [1436263488.0, 15420000.0, 97.622236], [1436265216.0, 15440000.0, 97.616064], [1436266944.0, 15460000.0, 97.609884], [1436268672.0, 15480000.0, 97.603696], [1436270400.0, 15500000.0, 97.5975], [1436272128.0, 15520000.0, 97.591296], [1436273856.0, 15540000.0, 97.585084], [1436275584.0, 15560000.0, 97.578864], [1436277312.0, 15580000.0, 97.572636], [1436279040.0, 15600000.0, 97.5664], [1436280768.0, 15620000.0, 97.560156], [1436282496.0, 15640000.0, 97.553904], [1436284224.0, 15660000.0, 97.547644], [1436285952.0, 15680000.0, 97.541376], [1436287680.0, 15700000.0, 97.5351], [1436289408.0, 15720000.0, 97.528816], [1436291136.0, 15740000.0, 97.522524], [1436292864.0, 15760000.0, 97.516224], [1436294592.0, 15780000.0, 97.509916], [1436296320.0, 15800000.0, 97.5036], [1436298048.0, 15820000.0, 97.497276], [1436299776.0, 15840000.0, 97.490944], [1436301504.0, 15860000.0, 97.484604], [1436303232.0, 15880000.0, 97.478256], [1436304960.0, 15900000.0, 97.4719], [1436306688.0, 15920000.0, 97.465536], [1436308416.0, 15940000.0, 97.459164], [1436310144.0, 15960000.0, 97.452784], [1436311872.0, 15980000.0, 97.446396], [1436313600.0, 16000000.0, 97.44], [1436315328.0, 16020000.0, 97.433596], [1436317056.0, 16040000.0, 97.427184], [1436318784.0, 16060000.0, 97.420764], [1436320512.0, 16080000.0, 97.414336], [1436322240.0, 16100000.0, 97.4079], [1436323968.0, 16120000.0, 97.401456], [1436325696.0, 16140000.0, 97.395004], [1436327424.0, 16160000.0, 97.388544], [1436329152.0, 16180000.0, 97.382076], [1436330880.0, 16200000.0, 97.3756], [1436332608.0, 16220000.0, 97.369116], [1436334336.0, 16240000.0, 97.362624], [1436336064.0, 16260000.0, 97.356124], [1436337792.0, 16280000.0, 97.349616], [1436339520.0, 16300000.0, 97.3431], [1436341248.0, 16320000.0, 97.336576], [1436342976.0, 16340000.0, 97.330044], [1436344704.0, 16360000.0, 97.323504], [1436346432.0, 16380000.0, 97.316956], [1436348160.0, 16400000.0, 97.3104], [1436349888.0, 16420000.0, 97.303836], [1436351616.0, 16440000.0, 97.297264], [1436353344.0, 16460000.0, 97.290684], [1436355072.0, 16480000.0, 97.284096], [1436356800.0, 16500000.0, 97.2775], [1436358528.0, 16520000.0, 97.270896], [1436360256.0, 16540000.0, 97.264284], [1436361984.0, 16560000.0, 97.257664], [1436363712.0, 16580000.0, 97.251036], [1436365440.0, 16600000.0, 97.2444], [1436367168.0, 16620000.0, 97.237756], [1436368896.0, 16640000.0, 97.231104], [1436370624.0, 16660000.0, 97.224444], [1436372352.0, 16680000.0, 97.217776], [1436374080.0, 16700000.0, 97.2111], [1436375808.0, 16720000.0, 97.204416], [1436377536.0, 16740000.0, 97.197724], [1436379264.0, 16760000.0, 97.191024], [1436380992.0, 16780000.0, 97.184316], [1436382720.0, 16800000.0, 97.1776], [1436384448.0, 16820000.0, 97.170876], [1436386176.0, 16840000.0, 97.164144], [1436387904.0, 16860000.0, 97.157404], [1436389632.0, 16880000.0, 97.150656], [1436391360.0, 16900000.0, 97.1439], [1436393088.0, 16920000.0, 97.137136], [1436394816.0, 16940000.0, 97.130364], [1436396544.0, 16960000.0, 97.123584], [1436398272.0, 16980000.0, 97.116796], [1436400000.0, 17000000.0, 97.11], [1436401728.0, 17020000.0, 97.103196], [1436403456.0, 17040000.0, 97.096384], [1436405184.0, 17060000.0, 97.089564], [1436406912.0, 17080000.0, 97.082736], [1436408640.0, 17100000.0, 97.0759], [1436410368.0, 17120000.0, 97.069056], [1436412096.0, 17140000.0, 97.062204], [1436413824.0, 17160000.0, 97.055344], [1436415552.0, 17180000.0, 97.048476], [1436417280.0, 17200000.0, 97.0416], [1436419008.0, 17220000.0, 97.034716], [1436420736.0, 17240000.0, 97.027824], [1436422464.0, 17260000.0, 97.020924], [1436424192.0, 17280000.0, 97.014016], [1436425920.0, 17300000.0, 97.0071], [1436427648.0, 17320000.0, 97.000176], [1436429376.0, 17340000.0, 96.993244], [1436431104.0, 17360000.0, 96.986304], [1436432832.0, 17380000.0, 96.979356], [1436434560.0, 17400000.0, 96.9724], [1436436288.0, 17420000.0, 96.965436], [1436438016.0, 17440000.0, 96.958464], [1436439744.0, 17460000.0, 96.951484], [1436441472.0, 17480000.0, 96.944496], [1436443200.0, 17500000.0, 96.9375], [1436444928.0, 17520000.0, 96.930496], [1436446656.0, 17540000.0, 96.923484], [1436448384.0, 17560000.0, 96.916464], [1436450112.0, 17580000.0, 96.909436], [1436451840.0, 17600000.0, 96.9024], [1436453568.0, 17620000.0, 96.895356], [1436455296.0, 17640000.0, 96.888304], [1436457024.0, 17660000.0, 96.881244], [1436458752.0, 17680000.0, 96.874176], [1436460480.0, 17700000.0, 96.8671], [1436462208.0, 17720000.0, 96.860016], [1436463936.0, 17740000.0, 96.852924], [1436465664.0, 17760000.0, 96.845824], [1436467392.0, 17780000.0, 96.838716], [1436469120.0, 17800000.0, 96.8316], [1436470848.0, 17820000.0, 96.824476], [1436472576.0, 17840000.0, 96.817344], [1436474304.0, 17860000.0, 96.810204], [1436476032.0, 17880000.0, 96.803056], [1436477760.0, 17900000.0, 96.7959], [1436479488.0, 17920000.0, 96.788736], [1436481216.0, 17940000.0, 96.781564], [1436482944.0, 17960000.0, 96.774384], [1436484672.0, 17980000.0, 96.767196], [1436486400.0, 18000000.0, 96.76], [1436488128.0, 18020000.0, 96.752796], [1436489856.0, 18040000.0, 96.745584], [1436491584.0, 18060000.0, 96.738364], [1436493312.0, 18080000.0, 96.731136], [1436495040.0, 18100000.0, 96.7239], [1436496768.0, 18120000.0, 96.716656], [1436498496.0, 18140000.0, 96.709404], [1436500224.0, 18160000.0, 96.702144], [1436501952.0, 18180000.0, 96.694876], [1436503680.0, 18200000.0, 96.6876], [1436505408.0, 18220000.0, 96.680316], [1436507136.0, 18240000.0, 96.673024], [1436508864.0, 18260000.0, 96.665724], [1436510592.0, 18280000.0, 96.658416], [1436512320.0, 18300000.0, 96.6511], [1436514048.0, 18320000.0, 96.643776], [1436515776.0, 18340000.0, 96.636444], [1436517504.0, 18360000.0, 96.629104], [1436519232.0, 18380000.0, 96.621756], [1436520960.0, 18400000.0, 96.6144], [1436522688.0, 18420000.0, 96.607036], [1436524416.0, 18440000.0, 96.599664], [1436526144.0, 18460000.0, 96.592284], [1436527872.0, 18480000.0, 96.584896], [1436529600.0, 18500000.0, 96.5775], [1436531328.0, 18520000.0, 96.570096], [1436533056.0, 18540000.0, 96.562684], [1436534784.0, 18560000.0, 96.555264], [1436536512.0, 18580000.0, 96.547836], [1436538240.0, 18600000.0, 96.5404], [1436539968.0, 18620000.0, 96.532956], [1436541696.0, 18640000.0, 96.525504], [1436543424.0, 18660000.0, 96.518044], [1436545152.0, 18680000.0, 96.510576], [1436546880.0, 18700000.0, 96.5031], [1436548608.0, 18720000.0, 96.495616], [1436550336.0, 18740000.0, 96.488124], [1436552064.0, 18760000.0, 96.480624], [1436553792.0, 18780000.0, 96.473116], [1436555520.0, 18800000.0, 96.4656], [1436557248.0, 18820000.0, 96.458076], [1436558976.0, 18840000.0, 96.450544], [1436560704.0, 18860000.0, 96.443004], [1436562432.0, 18880000.0, 96.435456], [1436564160.0, 18900000.0, 96.4279], [1436565888.0, 18920000.0, 96.420336], [1436567616.0, 18940000.0, 96.412764], [1436569344.0, 18960000.0, 96.405184], [1436571072.0, 18980000.0, 96.39759600000001], [1436572800.0, 19000000.0, 96.39], [1436574528.0, 19020000.0, 96.382396], [1436576256.0, 19040000.0, 96.374784], [1436577984.0, 19060000.0, 96.367164], [1436579712.0, 19080000.0, 96.359536], [1436581440.0, 19100000.0, 96.3519], [1436583168.0, 19120000.0, 96.344256], [1436584896.0, 19140000.0, 96.336604], [1436586624.0, 19160000.0, 96.328944], [1436588352.0, 19180000.0, 96.321276], [1436590080.0, 19200000.0, 96.3136], [1436591808.0, 19220000.0, 96.305916], [1436593536.0, 19240000.0, 96.298224], [1436595264.0, 19260000.0, 96.290524], [1436596992.0, 19280000.0, 96.282816], [1436598720.0, 19300000.0, 96.2751], [1436600448.0, 19320000.0, 96.267376], [1436602176.0, 19340000.0, 96.259644], [1436603904.0, 19360000.0, 96.251904], [1436605632.0, 19380000.0, 96.244156], [1436607360.0, 19400000.0, 96.2364], [1436609088.0, 19420000.0, 96.228636], [1436610816.0, 19440000.0, 96.220864], [1436612544.0, 19460000.0, 96.213084], [1436614272.0, 19480000.0, 96.205296], [1436616000.0, 19500000.0, 96.1975], [1436617728.0, 19520000.0, 96.189696], [1436619456.0, 19540000.0, 96.181884], [1436621184.0, 19560000.0, 96.174064], [1436622912.0, 19580000.0, 96.166236], [1436624640.0, 19600000.0, 96.1584], [1436626368.0, 19620000.0, 96.150556], [1436628096.0, 19640000.0, 96.142704], [1436629824.0, 19660000.0, 96.134844], [1436631552.0, 19680000.0, 96.126976], [1436633280.0, 19700000.0, 96.1191], [1436635008.0, 19720000.0, 96.111216], [1436636736.0, 19740000.0, 96.103324], [1436638464.0, 19760000.0, 96.095424], [1436640192.0, 19780000.0, 96.087516], [1436641920.0, 19800000.0, 96.0796], [1436643648.0, 19820000.0, 96.071676], [1436645376.0, 19840000.0, 96.063744], [1436647104.0, 19860000.0, 96.055804], [1436648832.0, 19880000.0, 96.047856], [1436650560.0, 19900000.0, 96.0399], [1436652288.0, 19920000.0, 96.031936], [1436654016.0, 19940000.0, 96.023964], [1436655744.0, 19960000.0, 96.015984], [1436657472.0, 19980000.0, 96.007996], [1436659200.0, 20000000.0, 96.0], [1436660928.0, 20020000.0, 95.991996], [1436662656.0, 20040000.0, 95.983984], [1436664384.0, 20060000.0, 95.975964], [1436666112.0, 20080000.0, 95.967936], [1436667840.0, 20100000.0, 95.9599], [1436669568.0, 20120000.0, 95.951856], [1436671296.0, 20140000.0, 95.943804], [1436673024.0, 20160000.0, 95.935744], [1436674752.0, 20180000.0, 95.927676], [1436676480.0, 20200000.0, 95.9196], [1436678208.0, 20220000.0, 95.911516], [1436679936.0, 20240000.0, 95.903424], [1436681664.0, 20260000.0, 95.895324], [1436683392.0, 20280000.0, 95.887216], [1436685120.0, 20300000.0, 95.8791], [1436686848.0, 20320000.0, 95.870976], [1436688576.0, 20340000.0, 95.862844], [1436690304.0, 20360000.0, 95.854704], [1436692032.0, 20380000.0, 95.846556], [1436693760.0, 20400000.0, 95.83840000000001], [1436695488.0, 20420000.0, 95.830236], [1436697216.0, 20440000.0, 95.822064], [1436698944.0, 20460000.0, 95.813884], [1436700672.0, 20480000.0, 95.805696], [1436702400.0, 20500000.0, 95.7975], [1436704128.0, 20520000.0, 95.78929600000001], [1436705856.0, 20540000.0, 95.781084], [1436707584.0, 20560000.0, 95.772864], [1436709312.0, 20580000.0, 95.764636], [1436711040.0, 20600000.0, 95.7564], [1436712768.0, 20620000.0, 95.748156], [1436714496.0, 20640000.0, 95.739904], [1436716224.0, 20660000.0, 95.731644], [1436717952.0, 20680000.0, 95.723376], [1436719680.0, 20700000.0, 95.7151], [1436721408.0, 20720000.0, 95.706816], [1436723136.0, 20740000.0, 95.698524], [1436724864.0, 20760000.0, 95.690224], [1436726592.0, 20780000.0, 95.681916], [1436728320.0, 20800000.0, 95.6736], [1436730048.0, 20820000.0, 95.665276], [1436731776.0, 20840000.0, 95.656944], [1436733504.0, 20860000.0, 95.648604], [1436735232.0, 20880000.0, 95.640256], [1436736960.0, 20900000.0, 95.6319], [1436738688.0, 20920000.0, 95.623536], [1436740416.0, 20940000.0, 95.61516400000001], [1436742144.0, 20960000.0, 95.606784], [1436743872.0, 20980000.0, 95.598396], [1436745600.0, 21000000.0, 95.59], [1436747328.0, 21020000.0, 95.581596], [1436749056.0, 21040000.0, 95.573184], [1436750784.0, 21060000.0, 95.564764], [1436752512.0, 21080000.0, 95.556336], [1436754240.0, 21100000.0, 95.5479], [1436755968.0, 21120000.0, 95.539456], [1436757696.0, 21140000.0, 95.531004], [1436759424.0, 21160000.0, 95.522544], [1436761152.0, 21180000.0, 95.514076], [1436762880.0, 21200000.0, 95.5056], [1436764608.0, 21220000.0, 95.497116], [1436766336.0, 21240000.0, 95.488624], [1436768064.0, 21260000.0, 95.480124], [1436769792.0, 21280000.0, 95.471616], [1436771520.0, 21300000.0, 95.4631], [1436773248.0, 21320000.0, 95.454576], [1436774976.0, 21340000.0, 95.446044], [1436776704.0, 21360000.0, 95.437504], [1436778432.0, 21380000.0, 95.428956], [1436780160.0, 21400000.0, 95.4204], [1436781888.0, 21420000.0, 95.411836], [1436783616.0, 21440000.0, 95.403264], [1436785344.0, 21460000.0, 95.394684], [1436787072.0, 21480000.0, 95.386096], [1436788800.0, 21500000.0, 95.3775], [1436790528.0, 21520000.0, 95.368896], [1436792256.0, 21540000.0, 95.36028400000001], [1436793984.0, 21560000.0, 95.351664], [1436795712.0, 21580000.0, 95.343036], [1436797440.0, 21600000.0, 95.3344], [1436799168.0, 21620000.0, 95.325756], [1436800896.0, 21640000.0, 95.317104], [1436802624.0, 21660000.0, 95.308444], [1436804352.0, 21680000.0, 95.299776], [1436806080.0, 21700000.0, 95.2911], [1436807808.0, 21720000.0, 95.282416], [1436809536.0, 21740000.0, 95.273724], [1436811264.0, 21760000.0, 95.265024], [1436812992.0, 21780000.0, 95.256316], [1436814720.0, 21800000.0, 95.2476], [1436816448.0, 21820000.0, 95.238876], [1436818176.0, 21840000.0, 95.230144], [1436819904.0, 21860000.0, 95.221404], [1436821632.0, 21880000.0, 95.212656], [1436823360.0, 21900000.0, 95.2039], [1436825088.0, 21920000.0, 95.195136], [1436826816.0, 21940000.0, 95.186364], [1436828544.0, 21960000.0, 95.177584], [1436830272.0, 21980000.0, 95.168796], [1436832000.0, 22000000.0, 95.16], [1436833728.0, 22020000.0, 95.151196], [1436835456.0, 22040000.0, 95.14238399999999], [1436837184.0, 22060000.0, 95.133564], [1436838912.0, 22080000.0, 95.124736], [1436840640.0, 22100000.0, 95.1159], [1436842368.0, 22120000.0, 95.107056], [1436844096.0, 22140000.0, 95.098204], [1436845824.0, 22160000.0, 95.089344], [1436847552.0, 22180000.0, 95.080476], [1436849280.0, 22200000.0, 95.0716], [1436851008.0, 22220000.0, 95.062716], [1436852736.0, 22240000.0, 95.05382399999999], [1436854464.0, 22260000.0, 95.044924], [1436856192.0, 22280000.0, 95.036016], [1436857920.0, 22300000.0, 95.0271], [1436859648.0, 22320000.0, 95.018176], [1436861376.0, 22340000.0, 95.009244], [1436863104.0, 22360000.0, 95.000304], [1436864832.0, 22380000.0, 94.991356], [1436866560.0, 22400000.0, 94.9824], [1436868288.0, 22420000.0, 94.973436], [1436870016.0, 22440000.0, 94.96446399999999], [1436871744.0, 22460000.0, 94.955484], [1436873472.0, 22480000.0, 94.946496], [1436875200.0, 22500000.0, 94.9375], [1436876928.0, 22520000.0, 94.928496], [1436878656.0, 22540000.0, 94.919484], [1436880384.0, 22560000.0, 94.910464], [1436882112.0, 22580000.0, 94.901436], [1436883840.0, 22600000.0, 94.8924], [1436885568.0, 22620000.0, 94.883356], [1436887296.0, 22640000.0, 94.874304], [1436889024.0, 22660000.0, 94.865244], [1436890752.0, 22680000.0, 94.856176], [1436892480.0, 22700000.0, 94.8471], [1436894208.0, 22720000.0, 94.838016], [1436895936.0, 22740000.0, 94.828924], [1436897664.0, 22760000.0, 94.819824], [1436899392.0, 22780000.0, 94.810716], [1436901120.0, 22800000.0, 94.80160000000001], [1436902848.0, 22820000.0, 94.792476], [1436904576.0, 22840000.0, 94.783344], [1436906304.0, 22860000.0, 94.774204], [1436908032.0, 22880000.0, 94.765056], [1436909760.0, 22900000.0, 94.7559], [1436911488.0, 22920000.0, 94.746736], [1436913216.0, 22940000.0, 94.737564], [1436914944.0, 22960000.0, 94.728384], [1436916672.0, 22980000.0, 94.719196], [1436918400.0, 23000000.0, 94.71000000000001], [1436920128.0, 23020000.0, 94.700796], [1436921856.0, 23040000.0, 94.691584], [1436923584.0, 23060000.0, 94.682364], [1436925312.0, 23080000.0, 94.673136], [1436927040.0, 23100000.0, 94.6639], [1436928768.0, 23120000.0, 94.654656], [1436930496.0, 23140000.0, 94.645404], [1436932224.0, 23160000.0, 94.636144], [1436933952.0, 23180000.0, 94.626876], [1436935680.0, 23200000.0, 94.6176], [1436937408.0, 23220000.0, 94.608316], [1436939136.0, 23240000.0, 94.599024], [1436940864.0, 23260000.0, 94.589724], [1436942592.0, 23280000.0, 94.580416], [1436944320.0, 23300000.0, 94.5711], [1436946048.0, 23320000.0, 94.561776], [1436947776.0, 23340000.0, 94.552444], [1436949504.0, 23360000.0, 94.543104], [1436951232.0, 23380000.0, 94.533756], [1436952960.0, 23400000.0, 94.5244], [1436954688.0, 23420000.0, 94.515036], [1436956416.0, 23440000.0, 94.505664], [1436958144.0, 23460000.0, 94.496284], [1436959872.0, 23480000.0, 94.486896], [1436961600.0, 23500000.0, 94.47749999999999], [1436963328.0, 23520000.0, 94.468096], [1436965056.0, 23540000.0, 94.458684], [1436966784.0, 23560000.0, 94.449264], [1436968512.0, 23580000.0, 94.439836], [1436970240.0, 23600000.0, 94.4304], [1436971968.0, 23620000.0, 94.420956], [1436973696.0, 23640000.0, 94.41150400000001], [1436975424.0, 23660000.0, 94.402044], [1436977152.0, 23680000.0, 94.392576], [1436978880.0, 23700000.0, 94.3831], [1436980608.0, 23720000.0, 94.373616], [1436982336.0, 23740000.0, 94.364124], [1436984064.0, 23760000.0, 94.354624], [1436985792.0, 23780000.0, 94.345116], [1436987520.0, 23800000.0, 94.3356], [1436989248.0, 23820000.0, 94.326076], [1436990976.0, 23840000.0, 94.316544], [1436992704.0, 23860000.0, 94.307004], [1436994432.0, 23880000.0, 94.297456], [1436996160.0, 23900000.0, 94.2879], [1436997888.0, 23920000.0, 94.278336], [1436999616.0, 23940000.0, 94.268764], [1437001344.0, 23960000.0, 94.259184], [1437003072.0, 23980000.0, 94.249596], [1437004800.0, 24000000.0, 94.24], [1437006528.0, 24020000.0, 94.230396], [1437008256.0, 24040000.0, 94.220784], [1437009984.0, 24060000.0, 94.211164], [1437011712.0, 24080000.0, 94.201536], [1437013440.0, 24100000.0, 94.1919], [1437015168.0, 24120000.0, 94.182256], [1437016896.0, 24140000.0, 94.17260399999999], [1437018624.0, 24160000.0, 94.162944], [1437020352.0, 24180000.0, 94.153276], [1437022080.0, 24200000.0, 94.1436], [1437023808.0, 24220000.0, 94.133916], [1437025536.0, 24240000.0, 94.124224], [1437027264.0, 24260000.0, 94.114524], [1437028992.0, 24280000.0, 94.104816], [1437030720.0, 24300000.0, 94.0951], [1437032448.0, 24320000.0, 94.085376], [1437034176.0, 24340000.0, 94.075644], [1437035904.0, 24360000.0, 94.065904], [1437037632.0, 24380000.0, 94.056156], [1437039360.0, 24400000.0, 94.0464], [1437041088.0, 24420000.0, 94.036636], [1437042816.0, 24440000.0, 94.026864], [1437044544.0, 24460000.0, 94.017084], [1437046272.0, 24480000.0, 94.007296], [1437048000.0, 24500000.0, 93.9975], [1437049728.0, 24520000.0, 93.987696], [1437051456.0, 24540000.0, 93.977884], [1437053184.0, 24560000.0, 93.968064], [1437054912.0, 24580000.0, 93.958236], [1437056640.0, 24600000.0, 93.9484], [1437058368.0, 24620000.0, 93.938556], [1437060096.0, 24640000.0, 93.928704], [1437061824.0, 24660000.0, 93.91884399999999], [1437063552.0, 24680000.0, 93.908976], [1437065280.0, 24700000.0, 93.8991], [1437067008.0, 24720000.0, 93.889216], [1437068736.0, 24740000.0, 93.879324], [1437070464.0, 24760000.0, 93.869424], [1437072192.0, 24780000.0, 93.859516], [1437073920.0, 24800000.0, 93.8496], [1437075648.0, 24820000.0, 93.839676], [1437077376.0, 24840000.0, 93.829744], [1437079104.0, 24860000.0, 93.819804], [1437080832.0, 24880000.0, 93.809856], [1437082560.0, 24900000.0, 93.7999], [1437084288.0, 24920000.0, 93.789936], [1437086016.0, 24940000.0, 93.77996399999999], [1437087744.0, 24960000.0, 93.769984], [1437089472.0, 24980000.0, 93.759996], [1437091200.0, 25000000.0, 93.75], [1437092928.0, 25020000.0, 93.739996], [1437094656.0, 25040000.0, 93.729984], [1437096384.0, 25060000.0, 93.719964], [1437098112.0, 25080000.0, 93.709936], [1437099840.0, 25100000.0, 93.6999], [1437101568.0, 25120000.0, 93.689856], [1437103296.0, 25140000.0, 93.679804], [1437105024.0, 25160000.0, 93.669744], [1437106752.0, 25180000.0, 93.659676], [1437108480.0, 25200000.0, 93.64959999999999], [1437110208.0, 25220000.0, 93.639516], [1437111936.0, 25240000.0, 93.629424], [1437113664.0, 25260000.0, 93.619324], [1437115392.0, 25280000.0, 93.609216], [1437117120.0, 25300000.0, 93.5991], [1437118848.0, 25320000.0, 93.588976], [1437120576.0, 25340000.0, 93.578844], [1437122304.0, 25360000.0, 93.568704], [1437124032.0, 25380000.0, 93.558556], [1437125760.0, 25400000.0, 93.5484], [1437127488.0, 25420000.0, 93.538236], [1437129216.0, 25440000.0, 93.528064], [1437130944.0, 25460000.0, 93.517884], [1437132672.0, 25480000.0, 93.507696], [1437134400.0, 25500000.0, 93.4975], [1437136128.0, 25520000.0, 93.487296], [1437137856.0, 25540000.0, 93.477084], [1437139584.0, 25560000.0, 93.466864], [1437141312.0, 25580000.0, 93.456636], [1437143040.0, 25600000.0, 93.4464], [1437144768.0, 25620000.0, 93.436156], [1437146496.0, 25640000.0, 93.425904], [1437148224.0, 25660000.0, 93.415644], [1437149952.0, 25680000.0, 93.405376], [1437151680.0, 25700000.0, 93.3951], [1437153408.0, 25720000.0, 93.384816], [1437155136.0, 25740000.0, 93.37452400000001], [1437156864.0, 25760000.0, 93.364224], [1437158592.0, 25780000.0, 93.353916], [1437160320.0, 25800000.0, 93.3436], [1437162048.0, 25820000.0, 93.333276], [1437163776.0, 25840000.0, 93.322944], [1437165504.0, 25860000.0, 93.312604], [1437167232.0, 25880000.0, 93.302256], [1437168960.0, 25900000.0, 93.2919], [1437170688.0, 25920000.0, 93.281536], [1437172416.0, 25940000.0, 93.271164], [1437174144.0, 25960000.0, 93.260784], [1437175872.0, 25980000.0, 93.250396], [1437177600.0, 26000000.0, 93.24], [1437179328.0, 26020000.0, 93.229596], [1437181056.0, 26040000.0, 93.219184], [1437182784.0, 26060000.0, 93.208764], [1437184512.0, 26080000.0, 93.198336], [1437186240.0, 26100000.0, 93.1879], [1437187968.0, 26120000.0, 93.177456], [1437189696.0, 26140000.0, 93.167004], [1437191424.0, 26160000.0, 93.156544], [1437193152.0, 26180000.0, 93.146076], [1437194880.0, 26200000.0, 93.1356], [1437196608.0, 26220000.0, 93.125116], [1437198336.0, 26240000.0, 93.11462399999999], [1437200064.0, 26260000.0, 93.104124], [1437201792.0, 26280000.0, 93.093616], [1437203520.0, 26300000.0, 93.0831], [1437205248.0, 26320000.0, 93.072576], [1437206976.0, 26340000.0, 93.062044], [1437208704.0, 26360000.0, 93.051504], [1437210432.0, 26380000.0, 93.040956], [1437212160.0, 26400000.0, 93.0304], [1437213888.0, 26420000.0, 93.019836], [1437215616.0, 26440000.0, 93.009264], [1437217344.0, 26460000.0, 92.998684], [1437219072.0, 26480000.0, 92.988096], [1437220800.0, 26500000.0, 92.9775], [1437222528.0, 26520000.0, 92.966896], [1437224256.0, 26540000.0, 92.956284], [1437225984.0, 26560000.0, 92.945664], [1437227712.0, 26580000.0, 92.935036], [1437229440.0, 26600000.0, 92.9244], [1437231168.0, 26620000.0, 92.913756], [1437232896.0, 26640000.0, 92.903104], [1437234624.0, 26660000.0, 92.892444], [1437236352.0, 26680000.0, 92.881776], [1437238080.0, 26700000.0, 92.8711], [1437239808.0, 26720000.0, 92.860416], [1437241536.0, 26740000.0, 92.849724], [1437243264.0, 26760000.0, 92.839024], [1437244992.0, 26780000.0, 92.828316], [1437246720.0, 26800000.0, 92.8176], [1437248448.0, 26820000.0, 92.806876], [1437250176.0, 26840000.0, 92.796144], [1437251904.0, 26860000.0, 92.785404], [1437253632.0, 26880000.0, 92.774656], [1437255360.0, 26900000.0, 92.7639], [1437257088.0, 26920000.0, 92.753136], [1437258816.0, 26940000.0, 92.742364], [1437260544.0, 26960000.0, 92.731584], [1437262272.0, 26980000.0, 92.720796], [1437264000.0, 27000000.0, 92.71], [1437265728.0, 27020000.0, 92.699196], [1437267456.0, 27040000.0, 92.688384], [1437269184.0, 27060000.0, 92.677564], [1437270912.0, 27080000.0, 92.666736], [1437272640.0, 27100000.0, 92.6559], [1437274368.0, 27120000.0, 92.645056], [1437276096.0, 27140000.0, 92.634204], [1437277824.0, 27160000.0, 92.623344], [1437279552.0, 27180000.0, 92.612476], [1437281280.0, 27200000.0, 92.6016], [1437283008.0, 27220000.0, 92.590716], [1437284736.0, 27240000.0, 92.579824], [1437286464.0, 27260000.0, 92.568924], [1437288192.0, 27280000.0, 92.558016], [1437289920.0, 27300000.0, 92.5471], [1437291648.0, 27320000.0, 92.536176], [1437293376.0, 27340000.0, 92.525244], [1437295104.0, 27360000.0, 92.514304], [1437296832.0, 27380000.0, 92.503356], [1437298560.0, 27400000.0, 92.4924], [1437300288.0, 27420000.0, 92.481436], [1437302016.0, 27440000.0, 92.47046399999999], [1437303744.0, 27460000.0, 92.459484], [1437305472.0, 27480000.0, 92.448496], [1437307200.0, 27500000.0, 92.4375], [1437308928.0, 27520000.0, 92.426496], [1437310656.0, 27540000.0, 92.415484], [1437312384.0, 27560000.0, 92.404464], [1437314112.0, 27580000.0, 92.393436], [1437315840.0, 27600000.0, 92.3824], [1437317568.0, 27620000.0, 92.371356], [1437319296.0, 27640000.0, 92.360304], [1437321024.0, 27660000.0, 92.349244], [1437322752.0, 27680000.0, 92.338176], [1437324480.0, 27700000.0, 92.3271], [1437326208.0, 27720000.0, 92.316016], [1437327936.0, 27740000.0, 92.304924], [1437329664.0, 27760000.0, 92.293824], [1437331392.0, 27780000.0, 92.282716], [1437333120.0, 27800000.0, 92.2716], [1437334848.0, 27820000.0, 92.260476], [1437336576.0, 27840000.0, 92.24934400000001], [1437338304.0, 27860000.0, 92.238204], [1437340032.0, 27880000.0, 92.227056], [1437341760.0, 27900000.0, 92.2159], [1437343488.0, 27920000.0, 92.204736], [1437345216.0, 27940000.0, 92.193564], [1437346944.0, 27960000.0, 92.182384], [1437348672.0, 27980000.0, 92.171196], [1437350400.0, 28000000.0, 92.16], [1437352128.0, 28020000.0, 92.148796], [1437353856.0, 28040000.0, 92.137584], [1437355584.0, 28060000.0, 92.126364], [1437357312.0, 28080000.0, 92.115136], [1437359040.0, 28100000.0, 92.1039], [1437360768.0, 28120000.0, 92.092656], [1437362496.0, 28140000.0, 92.081404], [1437364224.0, 28160000.0, 92.070144], [1437365952.0, 28180000.0, 92.058876], [1437367680.0, 28200000.0, 92.0476], [1437369408.0, 28220000.0, 92.036316], [1437371136.0, 28240000.0, 92.025024], [1437372864.0, 28260000.0, 92.013724], [1437374592.0, 28280000.0, 92.002416], [1437376320.0, 28300000.0, 91.9911], [1437378048.0, 28320000.0, 91.979776], [1437379776.0, 28340000.0, 91.968444], [1437381504.0, 28360000.0, 91.957104], [1437383232.0, 28380000.0, 91.945756], [1437384960.0, 28400000.0, 91.9344], [1437386688.0, 28420000.0, 91.923036], [1437388416.0, 28440000.0, 91.911664], [1437390144.0, 28460000.0, 91.900284], [1437391872.0, 28480000.0, 91.888896], [1437393600.0, 28500000.0, 91.8775], [1437395328.0, 28520000.0, 91.866096], [1437397056.0, 28540000.0, 91.85468399999999], [1437398784.0, 28560000.0, 91.843264], [1437400512.0, 28580000.0, 91.831836], [1437402240.0, 28600000.0, 91.8204], [1437403968.0, 28620000.0, 91.808956], [1437405696.0, 28640000.0, 91.797504], [1437407424.0, 28660000.0, 91.786044], [1437409152.0, 28680000.0, 91.774576], [1437410880.0, 28700000.0, 91.7631], [1437412608.0, 28720000.0, 91.751616], [1437414336.0, 28740000.0, 91.740124], [1437416064.0, 28760000.0, 91.728624], [1437417792.0, 28780000.0, 91.717116], [1437419520.0, 28800000.0, 91.7056], [1437421248.0, 28820000.0, 91.694076], [1437422976.0, 28840000.0, 91.68254400000001], [1437424704.0, 28860000.0, 91.671004], [1437426432.0, 28880000.0, 91.659456], [1437428160.0, 28900000.0, 91.64789999999999], [1437429888.0, 28920000.0, 91.636336], [1437431616.0, 28940000.0, 91.624764], [1437433344.0, 28960000.0, 91.613184], [1437435072.0, 28980000.0, 91.601596], [1437436800.0, 29000000.0, 91.59], [1437438528.0, 29020000.0, 91.578396], [1437440256.0, 29040000.0, 91.566784], [1437441984.0, 29060000.0, 91.555164], [1437443712.0, 29080000.0, 91.543536], [1437445440.0, 29100000.0, 91.5319], [1437447168.0, 29120000.0, 91.520256], [1437448896.0, 29140000.0, 91.50860399999999], [1437450624.0, 29160000.0, 91.496944], [1437452352.0, 29180000.0, 91.485276], [1437454080.0, 29200000.0, 91.4736], [1437455808.0, 29220000.0, 91.461916], [1437457536.0, 29240000.0, 91.450224], [1437459264.0, 29260000.0, 91.438524], [1437460992.0, 29280000.0, 91.426816], [1437462720.0, 29300000.0, 91.4151], [1437464448.0, 29320000.0, 91.403376], [1437466176.0, 29340000.0, 91.391644], [1437467904.0, 29360000.0, 91.379904], [1437469632.0, 29380000.0, 91.368156], [1437471360.0, 29400000.0, 91.35640000000001], [1437473088.0, 29420000.0, 91.344636], [1437474816.0, 29440000.0, 91.332864], [1437476544.0, 29460000.0, 91.321084], [1437478272.0, 29480000.0, 91.309296], [1437480000.0, 29500000.0, 91.2975], [1437481728.0, 29520000.0, 91.285696], [1437483456.0, 29540000.0, 91.273884], [1437485184.0, 29560000.0, 91.262064], [1437486912.0, 29580000.0, 91.250236], [1437488640.0, 29600000.0, 91.2384], [1437490368.0, 29620000.0, 91.226556], [1437492096.0, 29640000.0, 91.214704], [1437493824.0, 29660000.0, 91.202844], [1437495552.0, 29680000.0, 91.190976], [1437497280.0, 29700000.0, 91.1791], [1437499008.0, 29720000.0, 91.167216], [1437500736.0, 29740000.0, 91.155324], [1437502464.0, 29760000.0, 91.143424], [1437504192.0, 29780000.0, 91.131516], [1437505920.0, 29800000.0, 91.1196], [1437507648.0, 29820000.0, 91.107676], [1437509376.0, 29840000.0, 91.095744], [1437511104.0, 29860000.0, 91.083804], [1437512832.0, 29880000.0, 91.071856], [1437514560.0, 29900000.0, 91.0599], [1437516288.0, 29920000.0, 91.04793599999999], [1437518016.0, 29940000.0, 91.03596399999999], [1437519744.0, 29960000.0, 91.023984], [1437521472.0, 29980000.0, 91.011996], [1437523200.0, 30000000.0, 91.0], [1437524928.0, 30020000.0, 90.987996], [1437526656.0, 30040000.0, 90.975984], [1437528384.0, 30060000.0, 90.963964], [1437530112.0, 30080000.0, 90.951936], [1437531840.0, 30100000.0, 90.9399], [1437533568.0, 30120000.0, 90.927856], [1437535296.0, 30140000.0, 90.91580400000001], [1437537024.0, 30160000.0, 90.903744], [1437538752.0, 30180000.0, 90.891676], [1437540480.0, 30200000.0, 90.8796], [1437542208.0, 30220000.0, 90.867516], [1437543936.0, 30240000.0, 90.855424], [1437545664.0, 30260000.0, 90.843324], [1437547392.0, 30280000.0, 90.831216], [1437549120.0, 30300000.0, 90.8191], [1437550848.0, 30320000.0, 90.806976], [1437552576.0, 30340000.0, 90.794844], [1437554304.0, 30360000.0, 90.782704], [1437556032.0, 30380000.0, 90.770556], [1437557760.0, 30400000.0, 90.7584], [1437559488.0, 30420000.0, 90.746236], [1437561216.0, 30440000.0, 90.734064], [1437562944.0, 30460000.0, 90.721884], [1437564672.0, 30480000.0, 90.709696], [1437566400.0, 30500000.0, 90.6975], [1437568128.0, 30520000.0, 90.685296], [1437569856.0, 30540000.0, 90.673084], [1437571584.0, 30560000.0, 90.660864], [1437573312.0, 30580000.0, 90.648636], [1437575040.0, 30600000.0, 90.6364], [1437576768.0, 30620000.0, 90.624156], [1437578496.0, 30640000.0, 90.611904], [1437580224.0, 30660000.0, 90.599644], [1437581952.0, 30680000.0, 90.587376], [1437583680.0, 30700000.0, 90.5751], [1437585408.0, 30720000.0, 90.562816], [1437587136.0, 30740000.0, 90.550524], [1437588864.0, 30760000.0, 90.538224], [1437590592.0, 30780000.0, 90.525916], [1437592320.0, 30800000.0, 90.5136], [1437594048.0, 30820000.0, 90.501276], [1437595776.0, 30840000.0, 90.488944], [1437597504.0, 30860000.0, 90.476604], [1437599232.0, 30880000.0, 90.464256], [1437600960.0, 30900000.0, 90.4519], [1437602688.0, 30920000.0, 90.439536], [1437604416.0, 30940000.0, 90.427164], [1437606144.0, 30960000.0, 90.414784], [1437607872.0, 30980000.0, 90.402396], [1437609600.0, 31000000.0, 90.39], [1437611328.0, 31020000.0, 90.377596], [1437613056.0, 31040000.0, 90.365184], [1437614784.0, 31060000.0, 90.35276400000001], [1437616512.0, 31080000.0, 90.340336], [1437618240.0, 31100000.0, 90.3279], [1437619968.0, 31120000.0, 90.315456], [1437621696.0, 31140000.0, 90.303004], [1437623424.0, 31160000.0, 90.290544], [1437625152.0, 31180000.0, 90.278076], [1437626880.0, 31200000.0, 90.2656], [1437628608.0, 31220000.0, 90.253116], [1437630336.0, 31240000.0, 90.240624], [1437632064.0, 31260000.0, 90.22812400000001], [1437633792.0, 31280000.0, 90.215616], [1437635520.0, 31300000.0, 90.2031], [1437637248.0, 31320000.0, 90.190576], [1437638976.0, 31340000.0, 90.178044], [1437640704.0, 31360000.0, 90.165504], [1437642432.0, 31380000.0, 90.152956], [1437644160.0, 31400000.0, 90.1404], [1437645888.0, 31420000.0, 90.127836], [1437647616.0, 31440000.0, 90.115264], [1437649344.0, 31460000.0, 90.102684], [1437651072.0, 31480000.0, 90.090096], [1437652800.0, 31500000.0, 90.0775], [1437654528.0, 31520000.0, 90.064896], [1437656256.0, 31540000.0, 90.052284], [1437657984.0, 31560000.0, 90.039664], [1437659712.0, 31580000.0, 90.027036], [1437661440.0, 31600000.0, 90.0144], [1437663168.0, 31620000.0, 90.001756], [1437664896.0, 31640000.0, 89.989104], [1437666624.0, 31660000.0, 89.976444], [1437668352.0, 31680000.0, 89.963776], [1437670080.0, 31700000.0, 89.9511], [1437671808.0, 31720000.0, 89.938416], [1437673536.0, 31740000.0, 89.925724], [1437675264.0, 31760000.0, 89.913024], [1437676992.0, 31780000.0, 89.900316], [1437678720.0, 31800000.0, 89.88759999999999], [1437680448.0, 31820000.0, 89.874876], [1437682176.0, 31840000.0, 89.862144], [1437683904.0, 31860000.0, 89.84940399999999], [1437685632.0, 31880000.0, 89.836656], [1437687360.0, 31900000.0, 89.8239], [1437689088.0, 31920000.0, 89.811136], [1437690816.0, 31940000.0, 89.798364], [1437692544.0, 31960000.0, 89.785584], [1437694272.0, 31980000.0, 89.772796], [1437696000.0, 32000000.0, 89.75999999999999], [1437697728.0, 32020000.0, 89.747196], [1437699456.0, 32040000.0, 89.734384], [1437701184.0, 32060000.0, 89.721564], [1437702912.0, 32080000.0, 89.708736], [1437704640.0, 32100000.0, 89.6959], [1437706368.0, 32120000.0, 89.683056], [1437708096.0, 32140000.0, 89.670204], [1437709824.0, 32160000.0, 89.657344], [1437711552.0, 32180000.0, 89.644476], [1437713280.0, 32200000.0, 89.63159999999999], [1437715008.0, 32220000.0, 89.618716], [1437716736.0, 32240000.0, 89.605824], [1437718464.0, 32260000.0, 89.592924], [1437720192.0, 32280000.0, 89.580016], [1437721920.0, 32300000.0, 89.5671], [1437723648.0, 32320000.0, 89.554176], [1437725376.0, 32340000.0, 89.541244], [1437727104.0, 32360000.0, 89.52830399999999], [1437728832.0, 32380000.0, 89.515356], [1437730560.0, 32400000.0, 89.5024], [1437732288.0, 32420000.0, 89.489436], [1437734016.0, 32440000.0, 89.47646399999999], [1437735744.0, 32460000.0, 89.463484], [1437737472.0, 32480000.0, 89.450496], [1437739200.0, 32500000.0, 89.4375], [1437740928.0, 32520000.0, 89.424496], [1437742656.0, 32540000.0, 89.411484], [1437744384.0, 32560000.0, 89.398464], [1437746112.0, 32580000.0, 89.385436], [1437747840.0, 32600000.0, 89.3724], [1437749568.0, 32620000.0, 89.359356], [1437751296.0, 32640000.0, 89.346304], [1437753024.0, 32660000.0, 89.33324400000001], [1437754752.0, 32680000.0, 89.320176], [1437756480.0, 32700000.0, 89.3071], [1437758208.0, 32720000.0, 89.294016], [1437759936.0, 32740000.0, 89.280924], [1437761664.0, 32760000.0, 89.267824], [1437763392.0, 32780000.0, 89.254716], [1437765120.0, 32800000.0, 89.2416], [1437766848.0, 32820000.0, 89.228476], [1437768576.0, 32840000.0, 89.215344], [1437770304.0, 32860000.0, 89.202204], [1437772032.0, 32880000.0, 89.189056], [1437773760.0, 32900000.0, 89.1759], [1437775488.0, 32920000.0, 89.162736], [1437777216.0, 32940000.0, 89.149564], [1437778944.0, 32960000.0, 89.136384], [1437780672.0, 32980000.0, 89.12319600000001], [1437782400.0, 33000000.0, 89.11], [1437784128.0, 33020000.0, 89.096796], [1437785856.0, 33040000.0, 89.083584], [1437787584.0, 33060000.0, 89.070364], [1437789312.0, 33080000.0, 89.057136], [1437791040.0, 33100000.0, 89.0439], [1437792768.0, 33120000.0, 89.030656], [1437794496.0, 33140000.0, 89.017404], [1437796224.0, 33160000.0, 89.004144], [1437797952.0, 33180000.0, 88.990876], [1437799680.0, 33200000.0, 88.9776], [1437801408.0, 33220000.0, 88.964316], [1437803136.0, 33240000.0, 88.951024], [1437804864.0, 33260000.0, 88.937724], [1437806592.0, 33280000.0, 88.92441600000001], [1437808320.0, 33300000.0, 88.9111], [1437810048.0, 33320000.0, 88.897776], [1437811776.0, 33340000.0, 88.884444], [1437813504.0, 33360000.0, 88.871104], [1437815232.0, 33380000.0, 88.857756], [1437816960.0, 33400000.0, 88.84440000000001], [1437818688.0, 33420000.0, 88.831036], [1437820416.0, 33440000.0, 88.81766400000001], [1437822144.0, 33460000.0, 88.804284], [1437823872.0, 33480000.0, 88.790896], [1437825600.0, 33500000.0, 88.7775], [1437827328.0, 33520000.0, 88.764096], [1437829056.0, 33540000.0, 88.750684], [1437830784.0, 33560000.0, 88.737264], [1437832512.0, 33580000.0, 88.723836], [1437834240.0, 33600000.0, 88.7104], [1437835968.0, 33620000.0, 88.696956], [1437837696.0, 33640000.0, 88.683504], [1437839424.0, 33660000.0, 88.670044], [1437841152.0, 33680000.0, 88.656576], [1437842880.0, 33700000.0, 88.6431], [1437844608.0, 33720000.0, 88.629616], [1437846336.0, 33740000.0, 88.616124], [1437848064.0, 33760000.0, 88.602624], [1437849792.0, 33780000.0, 88.589116], [1437851520.0, 33800000.0, 88.57560000000001], [1437853248.0, 33820000.0, 88.562076], [1437854976.0, 33840000.0, 88.548544], [1437856704.0, 33860000.0, 88.535004], [1437858432.0, 33880000.0, 88.521456], [1437860160.0, 33900000.0, 88.5079], [1437861888.0, 33920000.0, 88.494336], [1437863616.0, 33940000.0, 88.480764], [1437865344.0, 33960000.0, 88.467184], [1437867072.0, 33980000.0, 88.453596], [1437868800.0, 34000000.0, 88.44], [1437870528.0, 34020000.0, 88.426396], [1437872256.0, 34040000.0, 88.412784], [1437873984.0, 34060000.0, 88.399164], [1437875712.0, 34080000.0, 88.385536], [1437877440.0, 34100000.0, 88.3719], [1437879168.0, 34120000.0, 88.358256], [1437880896.0, 34140000.0, 88.344604], [1437882624.0, 34160000.0, 88.330944], [1437884352.0, 34180000.0, 88.31727599999999], [1437886080.0, 34200000.0, 88.3036], [1437887808.0, 34220000.0, 88.289916], [1437889536.0, 34240000.0, 88.276224], [1437891264.0, 34260000.0, 88.262524], [1437892992.0, 34280000.0, 88.248816], [1437894720.0, 34300000.0, 88.2351], [1437896448.0, 34320000.0, 88.221376], [1437898176.0, 34340000.0, 88.207644], [1437899904.0, 34360000.0, 88.193904], [1437901632.0, 34380000.0, 88.180156], [1437903360.0, 34400000.0, 88.1664], [1437905088.0, 34420000.0, 88.152636], [1437906816.0, 34440000.0, 88.138864], [1437908544.0, 34460000.0, 88.125084], [1437910272.0, 34480000.0, 88.111296], [1437912000.0, 34500000.0, 88.0975], [1437913728.0, 34520000.0, 88.083696], [1437915456.0, 34540000.0, 88.069884], [1437917184.0, 34560000.0, 88.056064], [1437918912.0, 34580000.0, 88.042236], [1437920640.0, 34600000.0, 88.0284], [1437922368.0, 34620000.0, 88.014556], [1437924096.0, 34640000.0, 88.000704], [1437925824.0, 34660000.0, 87.98684399999999], [1437927552.0, 34680000.0, 87.972976], [1437929280.0, 34700000.0, 87.9591], [1437931008.0, 34720000.0, 87.945216], [1437932736.0, 34740000.0, 87.931324], [1437934464.0, 34760000.0, 87.917424], [1437936192.0, 34780000.0, 87.903516], [1437937920.0, 34800000.0, 87.8896], [1437939648.0, 34820000.0, 87.875676], [1437941376.0, 34840000.0, 87.861744], [1437943104.0, 34860000.0, 87.847804], [1437944832.0, 34880000.0, 87.833856], [1437946560.0, 34900000.0, 87.8199], [1437948288.0, 34920000.0, 87.805936], [1437950016.0, 34940000.0, 87.791964], [1437951744.0, 34960000.0, 87.777984], [1437953472.0, 34980000.0, 87.76399599999999], [1437955200.0, 35000000.0, 87.75], [1437956928.0, 35020000.0, 87.735996], [1437958656.0, 35040000.0, 87.721984], [1437960384.0, 35060000.0, 87.707964], [1437962112.0, 35080000.0, 87.69393600000001], [1437963840.0, 35100000.0, 87.6799], [1437965568.0, 35120000.0, 87.665856], [1437967296.0, 35140000.0, 87.651804], [1437969024.0, 35160000.0, 87.637744], [1437970752.0, 35180000.0, 87.623676], [1437972480.0, 35200000.0, 87.6096], [1437974208.0, 35220000.0, 87.595516], [1437975936.0, 35240000.0, 87.581424], [1437977664.0, 35260000.0, 87.567324], [1437979392.0, 35280000.0, 87.55321599999999], [1437981120.0, 35300000.0, 87.5391], [1437982848.0, 35320000.0, 87.524976], [1437984576.0, 35340000.0, 87.510844], [1437986304.0, 35360000.0, 87.496704], [1437988032.0, 35380000.0, 87.482556], [1437989760.0, 35400000.0, 87.4684], [1437991488.0, 35420000.0, 87.45423600000001], [1437993216.0, 35440000.0, 87.440064], [1437994944.0, 35460000.0, 87.425884], [1437996672.0, 35480000.0, 87.411696], [1437998400.0, 35500000.0, 87.39750000000001], [1438000128.0, 35520000.0, 87.383296], [1438001856.0, 35540000.0, 87.369084], [1438003584.0, 35560000.0, 87.35486399999999], [1438005312.0, 35580000.0, 87.340636], [1438007040.0, 35600000.0, 87.3264], [1438008768.0, 35620000.0, 87.312156], [1438010496.0, 35640000.0, 87.297904], [1438012224.0, 35660000.0, 87.283644], [1438013952.0, 35680000.0, 87.269376], [1438015680.0, 35700000.0, 87.2551], [1438017408.0, 35720000.0, 87.240816], [1438019136.0, 35740000.0, 87.226524], [1438020864.0, 35760000.0, 87.21222399999999], [1438022592.0, 35780000.0, 87.197916], [1438024320.0, 35800000.0, 87.1836], [1438026048.0, 35820000.0, 87.169276], [1438027776.0, 35840000.0, 87.154944], [1438029504.0, 35860000.0, 87.140604], [1438031232.0, 35880000.0, 87.126256], [1438032960.0, 35900000.0, 87.1119], [1438034688.0, 35920000.0, 87.097536], [1438036416.0, 35940000.0, 87.083164], [1438038144.0, 35960000.0, 87.068784], [1438039872.0, 35980000.0, 87.054396], [1438041600.0, 36000000.0, 87.03999999999999], [1438043328.0, 36020000.0, 87.02559600000001], [1438045056.0, 36040000.0, 87.011184], [1438046784.0, 36060000.0, 86.996764], [1438048512.0, 36080000.0, 86.982336], [1438050240.0, 36100000.0, 86.9679], [1438051968.0, 36120000.0, 86.953456], [1438053696.0, 36140000.0, 86.939004], [1438055424.0, 36160000.0, 86.924544], [1438057152.0, 36180000.0, 86.910076], [1438058880.0, 36200000.0, 86.8956], [1438060608.0, 36220000.0, 86.881116], [1438062336.0, 36240000.0, 86.866624], [1438064064.0, 36260000.0, 86.852124], [1438065792.0, 36280000.0, 86.837616], [1438067520.0, 36300000.0, 86.8231], [1438069248.0, 36320000.0, 86.808576], [1438070976.0, 36340000.0, 86.794044], [1438072704.0, 36360000.0, 86.779504], [1438074432.0, 36380000.0, 86.764956], [1438076160.0, 36400000.0, 86.7504], [1438077888.0, 36420000.0, 86.735836], [1438079616.0, 36440000.0, 86.721264], [1438081344.0, 36460000.0, 86.706684], [1438083072.0, 36480000.0, 86.69209599999999], [1438084800.0, 36500000.0, 86.6775], [1438086528.0, 36520000.0, 86.662896], [1438088256.0, 36540000.0, 86.648284], [1438089984.0, 36560000.0, 86.633664], [1438091712.0, 36580000.0, 86.619036], [1438093440.0, 36600000.0, 86.6044], [1438095168.0, 36620000.0, 86.589756], [1438096896.0, 36640000.0, 86.575104], [1438098624.0, 36660000.0, 86.560444], [1438100352.0, 36680000.0, 86.545776], [1438102080.0, 36700000.0, 86.5311], [1438103808.0, 36720000.0, 86.51641599999999], [1438105536.0, 36740000.0, 86.501724], [1438107264.0, 36760000.0, 86.48702399999999], [1438108992.0, 36780000.0, 86.472316], [1438110720.0, 36800000.0, 86.4576], [1438112448.0, 36820000.0, 86.442876], [1438114176.0, 36840000.0, 86.428144], [1438115904.0, 36860000.0, 86.413404], [1438117632.0, 36880000.0, 86.398656], [1438119360.0, 36900000.0, 86.3839], [1438121088.0, 36920000.0, 86.369136], [1438122816.0, 36940000.0, 86.354364], [1438124544.0, 36960000.0, 86.339584], [1438126272.0, 36980000.0, 86.324796], [1438128000.0, 37000000.0, 86.31], [1438129728.0, 37020000.0, 86.295196], [1438131456.0, 37040000.0, 86.280384], [1438133184.0, 37060000.0, 86.265564], [1438134912.0, 37080000.0, 86.250736], [1438136640.0, 37100000.0, 86.2359], [1438138368.0, 37120000.0, 86.221056], [1438140096.0, 37140000.0, 86.206204], [1438141824.0, 37160000.0, 86.191344], [1438143552.0, 37180000.0, 86.17647600000001], [1438145280.0, 37200000.0, 86.16159999999999], [1438147008.0, 37220000.0, 86.146716], [1438148736.0, 37240000.0, 86.131824], [1438150464.0, 37260000.0, 86.116924], [1438152192.0, 37280000.0, 86.10201599999999], [1438153920.0, 37300000.0, 86.08709999999999], [1438155648.0, 37320000.0, 86.072176], [1438157376.0, 37340000.0, 86.057244], [1438159104.0, 37360000.0, 86.042304], [1438160832.0, 37380000.0, 86.027356], [1438162560.0, 37400000.0, 86.0124], [1438164288.0, 37420000.0, 85.997436], [1438166016.0, 37440000.0, 85.982464], [1438167744.0, 37460000.0, 85.967484], [1438169472.0, 37480000.0, 85.952496], [1438171200.0, 37500000.0, 85.9375], [1438172928.0, 37520000.0, 85.922496], [1438174656.0, 37540000.0, 85.907484], [1438176384.0, 37560000.0, 85.892464], [1438178112.0, 37580000.0, 85.877436], [1438179840.0, 37600000.0, 85.86240000000001], [1438181568.0, 37620000.0, 85.847356], [1438183296.0, 37640000.0, 85.83230400000001], [1438185024.0, 37660000.0, 85.817244], [1438186752.0, 37680000.0, 85.802176], [1438188480.0, 37700000.0, 85.7871], [1438190208.0, 37720000.0, 85.77201600000001], [1438191936.0, 37740000.0, 85.756924], [1438193664.0, 37760000.0, 85.74182400000001], [1438195392.0, 37780000.0, 85.726716], [1438197120.0, 37800000.0, 85.7116], [1438198848.0, 37820000.0, 85.696476], [1438200576.0, 37840000.0, 85.681344], [1438202304.0, 37860000.0, 85.666204], [1438204032.0, 37880000.0, 85.651056], [1438205760.0, 37900000.0, 85.63589999999999], [1438207488.0, 37920000.0, 85.620736], [1438209216.0, 37940000.0, 85.605564], [1438210944.0, 37960000.0, 85.590384], [1438212672.0, 37980000.0, 85.575196], [1438214400.0, 38000000.0, 85.56], [1438216128.0, 38020000.0, 85.544796], [1438217856.0, 38040000.0, 85.529584], [1438219584.0, 38060000.0, 85.514364], [1438221312.0, 38080000.0, 85.49913600000001], [1438223040.0, 38100000.0, 85.4839], [1438224768.0, 38120000.0, 85.468656], [1438226496.0, 38140000.0, 85.453404], [1438228224.0, 38160000.0, 85.438144], [1438229952.0, 38180000.0, 85.422876], [1438231680.0, 38200000.0, 85.4076], [1438233408.0, 38220000.0, 85.392316], [1438235136.0, 38240000.0, 85.377024], [1438236864.0, 38260000.0, 85.361724], [1438238592.0, 38280000.0, 85.346416], [1438240320.0, 38300000.0, 85.33109999999999], [1438242048.0, 38320000.0, 85.315776], [1438243776.0, 38340000.0, 85.300444], [1438245504.0, 38360000.0, 85.285104], [1438247232.0, 38380000.0, 85.269756], [1438248960.0, 38400000.0, 85.2544], [1438250688.0, 38420000.0, 85.239036], [1438252416.0, 38440000.0, 85.223664], [1438254144.0, 38460000.0, 85.20828399999999], [1438255872.0, 38480000.0, 85.192896], [1438257600.0, 38500000.0, 85.1775], [1438259328.0, 38520000.0, 85.162096], [1438261056.0, 38540000.0, 85.146684], [1438262784.0, 38560000.0, 85.131264], [1438264512.0, 38580000.0, 85.115836], [1438266240.0, 38600000.0, 85.10040000000001], [1438267968.0, 38620000.0, 85.084956], [1438269696.0, 38640000.0, 85.069504], [1438271424.0, 38660000.0, 85.054044], [1438273152.0, 38680000.0, 85.038576], [1438274880.0, 38700000.0, 85.0231], [1438276608.0, 38720000.0, 85.007616], [1438278336.0, 38740000.0, 84.992124], [1438280064.0, 38760000.0, 84.976624], [1438281792.0, 38780000.0, 84.961116], [1438283520.0, 38800000.0, 84.9456], [1438285248.0, 38820000.0, 84.930076], [1438286976.0, 38840000.0, 84.914544], [1438288704.0, 38860000.0, 84.899004], [1438290432.0, 38880000.0, 84.883456], [1438292160.0, 38900000.0, 84.86789999999999], [1438293888.0, 38920000.0, 84.85233600000001], [1438295616.0, 38940000.0, 84.836764], [1438297344.0, 38960000.0, 84.821184], [1438299072.0, 38980000.0, 84.805596], [1438300800.0, 39000000.0, 84.79], [1438302528.0, 39020000.0, 84.774396], [1438304256.0, 39040000.0, 84.758784], [1438305984.0, 39060000.0, 84.743164], [1438307712.0, 39080000.0, 84.727536], [1438309440.0, 39100000.0, 84.7119], [1438311168.0, 39120000.0, 84.696256], [1438312896.0, 39140000.0, 84.680604], [1438314624.0, 39160000.0, 84.664944], [1438316352.0, 39180000.0, 84.649276], [1438318080.0, 39200000.0, 84.6336], [1438319808.0, 39220000.0, 84.617916], [1438321536.0, 39240000.0, 84.602224], [1438323264.0, 39260000.0, 84.586524], [1438324992.0, 39280000.0, 84.57081600000001], [1438326720.0, 39300000.0, 84.5551], [1438328448.0, 39320000.0, 84.539376], [1438330176.0, 39340000.0, 84.523644], [1438331904.0, 39360000.0, 84.507904], [1438333632.0, 39380000.0, 84.492156], [1438335360.0, 39400000.0, 84.4764], [1438337088.0, 39420000.0, 84.460636], [1438338816.0, 39440000.0, 84.444864], [1438340544.0, 39460000.0, 84.429084], [1438342272.0, 39480000.0, 84.413296], [1438344000.0, 39500000.0, 84.3975], [1438345728.0, 39520000.0, 84.381696], [1438347456.0, 39540000.0, 84.365884], [1438349184.0, 39560000.0, 84.350064], [1438350912.0, 39580000.0, 84.334236], [1438352640.0, 39600000.0, 84.3184], [1438354368.0, 39620000.0, 84.302556], [1438356096.0, 39640000.0, 84.286704], [1438357824.0, 39660000.0, 84.270844], [1438359552.0, 39680000.0, 84.254976], [1438361280.0, 39700000.0, 84.2391], [1438363008.0, 39720000.0, 84.22321600000001], [1438364736.0, 39740000.0, 84.207324], [1438366464.0, 39760000.0, 84.191424], [1438368192.0, 39780000.0, 84.175516], [1438369920.0, 39800000.0, 84.1596], [1438371648.0, 39820000.0, 84.143676], [1438373376.0, 39840000.0, 84.127744], [1438375104.0, 39860000.0, 84.11180399999999], [1438376832.0, 39880000.0, 84.095856], [1438378560.0, 39900000.0, 84.0799], [1438380288.0, 39920000.0, 84.063936], [1438382016.0, 39940000.0, 84.047964], [1438383744.0, 39960000.0, 84.031984], [1438385472.0, 39980000.0, 84.015996], [1438387200.0, 40000000.0, 84.0], [1438388928.0, 40020000.0, 83.983996], [1438390656.0, 40040000.0, 83.967984], [1438392384.0, 40060000.0, 83.951964], [1438394112.0, 40080000.0, 83.935936], [1438395840.0, 40100000.0, 83.9199], [1438397568.0, 40120000.0, 83.903856], [1438399296.0, 40140000.0, 83.887804], [1438401024.0, 40160000.0, 83.871744], [1438402752.0, 40180000.0, 83.855676], [1438404480.0, 40200000.0, 83.8396], [1438406208.0, 40220000.0, 83.823516], [1438407936.0, 40240000.0, 83.807424], [1438409664.0, 40260000.0, 83.791324], [1438411392.0, 40280000.0, 83.775216], [1438413120.0, 40300000.0, 83.75909999999999], [1438414848.0, 40320000.0, 83.742976], [1438416576.0, 40340000.0, 83.726844], [1438418304.0, 40360000.0, 83.710704], [1438420032.0, 40380000.0, 83.694556], [1438421760.0, 40400000.0, 83.6784], [1438423488.0, 40420000.0, 83.66223600000001], [1438425216.0, 40440000.0, 83.646064], [1438426944.0, 40460000.0, 83.629884], [1438428672.0, 40480000.0, 83.613696], [1438430400.0, 40500000.0, 83.5975], [1438432128.0, 40520000.0, 83.58129600000001], [1438433856.0, 40540000.0, 83.565084], [1438435584.0, 40560000.0, 83.548864], [1438437312.0, 40580000.0, 83.532636], [1438439040.0, 40600000.0, 83.5164], [1438440768.0, 40620000.0, 83.500156], [1438442496.0, 40640000.0, 83.483904], [1438444224.0, 40660000.0, 83.467644], [1438445952.0, 40680000.0, 83.45137600000001], [1438447680.0, 40700000.0, 83.4351], [1438449408.0, 40720000.0, 83.41881599999999], [1438451136.0, 40740000.0, 83.402524], [1438452864.0, 40760000.0, 83.386224], [1438454592.0, 40780000.0, 83.36991599999999], [1438456320.0, 40800000.0, 83.3536], [1438458048.0, 40820000.0, 83.337276], [1438459776.0, 40840000.0, 83.320944], [1438461504.0, 40860000.0, 83.304604], [1438463232.0, 40880000.0, 83.288256], [1438464960.0, 40900000.0, 83.2719], [1438466688.0, 40920000.0, 83.255536], [1438468416.0, 40940000.0, 83.239164], [1438470144.0, 40960000.0, 83.222784], [1438471872.0, 40980000.0, 83.206396], [1438473600.0, 41000000.0, 83.19], [1438475328.0, 41020000.0, 83.173596], [1438477056.0, 41040000.0, 83.157184], [1438478784.0, 41060000.0, 83.140764], [1438480512.0, 41080000.0, 83.124336], [1438482240.0, 41100000.0, 83.1079], [1438483968.0, 41120000.0, 83.091456], [1438485696.0, 41140000.0, 83.075004], [1438487424.0, 41160000.0, 83.058544], [1438489152.0, 41180000.0, 83.042076], [1438490880.0, 41200000.0, 83.0256], [1438492608.0, 41220000.0, 83.009116], [1438494336.0, 41240000.0, 82.992624], [1438496064.0, 41260000.0, 82.976124], [1438497792.0, 41280000.0, 82.959616], [1438499520.0, 41300000.0, 82.9431], [1438501248.0, 41320000.0, 82.92657600000001], [1438502976.0, 41340000.0, 82.910044], [1438504704.0, 41360000.0, 82.89350400000001], [1438506432.0, 41380000.0, 82.876956], [1438508160.0, 41400000.0, 82.8604], [1438509888.0, 41420000.0, 82.843836], [1438511616.0, 41440000.0, 82.827264], [1438513344.0, 41460000.0, 82.81068400000001], [1438515072.0, 41480000.0, 82.794096], [1438516800.0, 41500000.0, 82.7775], [1438518528.0, 41520000.0, 82.760896], [1438520256.0, 41540000.0, 82.744284], [1438521984.0, 41560000.0, 82.727664], [1438523712.0, 41580000.0, 82.711036], [1438525440.0, 41600000.0, 82.6944], [1438527168.0, 41620000.0, 82.677756], [1438528896.0, 41640000.0, 82.661104], [1438530624.0, 41660000.0, 82.644444], [1438532352.0, 41680000.0, 82.627776], [1438534080.0, 41700000.0, 82.6111], [1438535808.0, 41720000.0, 82.594416], [1438537536.0, 41740000.0, 82.57772399999999], [1438539264.0, 41760000.0, 82.561024], [1438540992.0, 41780000.0, 82.54431600000001], [1438542720.0, 41800000.0, 82.5276], [1438544448.0, 41820000.0, 82.510876], [1438546176.0, 41840000.0, 82.494144], [1438547904.0, 41860000.0, 82.477404], [1438549632.0, 41880000.0, 82.460656], [1438551360.0, 41900000.0, 82.4439], [1438553088.0, 41920000.0, 82.42713599999999], [1438554816.0, 41940000.0, 82.410364], [1438556544.0, 41960000.0, 82.393584], [1438558272.0, 41980000.0, 82.376796], [1438560000.0, 42000000.0, 82.36], [1438561728.0, 42020000.0, 82.343196], [1438563456.0, 42040000.0, 82.326384], [1438565184.0, 42060000.0, 82.309564], [1438566912.0, 42080000.0, 82.29273599999999], [1438568640.0, 42100000.0, 82.27590000000001], [1438570368.0, 42120000.0, 82.259056], [1438572096.0, 42140000.0, 82.242204], [1438573824.0, 42160000.0, 82.225344], [1438575552.0, 42180000.0, 82.208476], [1438577280.0, 42200000.0, 82.1916], [1438579008.0, 42220000.0, 82.17471599999999], [1438580736.0, 42240000.0, 82.157824], [1438582464.0, 42260000.0, 82.140924], [1438584192.0, 42280000.0, 82.124016], [1438585920.0, 42300000.0, 82.1071], [1438587648.0, 42320000.0, 82.090176], [1438589376.0, 42340000.0, 82.073244], [1438591104.0, 42360000.0, 82.056304], [1438592832.0, 42380000.0, 82.039356], [1438594560.0, 42400000.0, 82.0224], [1438596288.0, 42420000.0, 82.005436], [1438598016.0, 42440000.0, 81.988464], [1438599744.0, 42460000.0, 81.971484], [1438601472.0, 42480000.0, 81.954496], [1438603200.0, 42500000.0, 81.9375], [1438604928.0, 42520000.0, 81.920496], [1438606656.0, 42540000.0, 81.903484], [1438608384.0, 42560000.0, 81.88646399999999], [1438610112.0, 42580000.0, 81.86943600000001], [1438611840.0, 42600000.0, 81.8524], [1438613568.0, 42620000.0, 81.835356], [1438615296.0, 42640000.0, 81.818304], [1438617024.0, 42660000.0, 81.801244], [1438618752.0, 42680000.0, 81.784176], [1438620480.0, 42700000.0, 81.7671], [1438622208.0, 42720000.0, 81.750016], [1438623936.0, 42740000.0, 81.732924], [1438625664.0, 42760000.0, 81.715824], [1438627392.0, 42780000.0, 81.698716], [1438629120.0, 42800000.0, 81.6816], [1438630848.0, 42820000.0, 81.66447600000001], [1438632576.0, 42840000.0, 81.647344], [1438634304.0, 42860000.0, 81.630204], [1438636032.0, 42880000.0, 81.613056], [1438637760.0, 42900000.0, 81.5959], [1438639488.0, 42920000.0, 81.578736], [1438641216.0, 42940000.0, 81.561564], [1438642944.0, 42960000.0, 81.544384], [1438644672.0, 42980000.0, 81.527196], [1438646400.0, 43000000.0, 81.51], [1438648128.0, 43020000.0, 81.492796], [1438649856.0, 43040000.0, 81.475584], [1438651584.0, 43060000.0, 81.458364], [1438653312.0, 43080000.0, 81.441136], [1438655040.0, 43100000.0, 81.4239], [1438656768.0, 43120000.0, 81.406656], [1438658496.0, 43140000.0, 81.389404], [1438660224.0, 43160000.0, 81.372144], [1438661952.0, 43180000.0, 81.354876], [1438663680.0, 43200000.0, 81.3376], [1438665408.0, 43220000.0, 81.32031599999999], [1438667136.0, 43240000.0, 81.303024], [1438668864.0, 43260000.0, 81.285724], [1438670592.0, 43280000.0, 81.268416], [1438672320.0, 43300000.0, 81.25110000000001], [1438674048.0, 43320000.0, 81.233776], [1438675776.0, 43340000.0, 81.216444], [1438677504.0, 43360000.0, 81.199104], [1438679232.0, 43380000.0, 81.18175600000001], [1438680960.0, 43400000.0, 81.1644], [1438682688.0, 43420000.0, 81.147036], [1438684416.0, 43440000.0, 81.12966399999999], [1438686144.0, 43460000.0, 81.112284], [1438687872.0, 43480000.0, 81.094896], [1438689600.0, 43500000.0, 81.0775], [1438691328.0, 43520000.0, 81.060096], [1438693056.0, 43540000.0, 81.042684], [1438694784.0, 43560000.0, 81.02526399999999], [1438696512.0, 43580000.0, 81.007836], [1438698240.0, 43600000.0, 80.9904], [1438699968.0, 43620000.0, 80.972956], [1438701696.0, 43640000.0, 80.955504], [1438703424.0, 43660000.0, 80.938044], [1438705152.0, 43680000.0, 80.920576], [1438706880.0, 43700000.0, 80.9031], [1438708608.0, 43720000.0, 80.885616], [1438710336.0, 43740000.0, 80.868124], [1438712064.0, 43760000.0, 80.850624], [1438713792.0, 43780000.0, 80.833116], [1438715520.0, 43800000.0, 80.8156], [1438717248.0, 43820000.0, 80.79807600000001], [1438718976.0, 43840000.0, 80.78054399999999], [1438720704.0, 43860000.0, 80.763004], [1438722432.0, 43880000.0, 80.745456], [1438724160.0, 43900000.0, 80.7279], [1438725888.0, 43920000.0, 80.710336], [1438727616.0, 43940000.0, 80.692764], [1438729344.0, 43960000.0, 80.675184], [1438731072.0, 43980000.0, 80.657596], [1438732800.0, 44000000.0, 80.64], [1438734528.0, 44020000.0, 80.622396], [1438736256.0, 44040000.0, 80.604784], [1438737984.0, 44060000.0, 80.587164], [1438739712.0, 44080000.0, 80.569536], [1438741440.0, 44100000.0, 80.5519], [1438743168.0, 44120000.0, 80.534256], [1438744896.0, 44140000.0, 80.516604], [1438746624.0, 44160000.0, 80.498944], [1438748352.0, 44180000.0, 80.481276], [1438750080.0, 44200000.0, 80.4636], [1438751808.0, 44220000.0, 80.44591600000001], [1438753536.0, 44240000.0, 80.428224], [1438755264.0, 44260000.0, 80.410524], [1438756992.0, 44280000.0, 80.392816], [1438758720.0, 44300000.0, 80.3751], [1438760448.0, 44320000.0, 80.35737599999999], [1438762176.0, 44340000.0, 80.33964399999999], [1438763904.0, 44360000.0, 80.321904], [1438765632.0, 44380000.0, 80.304156], [1438767360.0, 44400000.0, 80.2864], [1438769088.0, 44420000.0, 80.268636], [1438770816.0, 44440000.0, 80.250864], [1438772544.0, 44460000.0, 80.233084], [1438774272.0, 44480000.0, 80.215296], [1438776000.0, 44500000.0, 80.19749999999999], [1438777728.0, 44520000.0, 80.179696], [1438779456.0, 44540000.0, 80.161884], [1438781184.0, 44560000.0, 80.144064], [1438782912.0, 44580000.0, 80.126236], [1438784640.0, 44600000.0, 80.1084], [1438786368.0, 44620000.0, 80.090556], [1438788096.0, 44640000.0, 80.07270399999999], [1438789824.0, 44660000.0, 80.054844], [1438791552.0, 44680000.0, 80.036976], [1438793280.0, 44700000.0, 80.01910000000001], [1438795008.0, 44720000.0, 80.001216], [1438796736.0, 44740000.0, 79.983324], [1438798464.0, 44760000.0, 79.965424], [1438800192.0, 44780000.0, 79.94751600000001], [1438801920.0, 44800000.0, 79.9296], [1438803648.0, 44820000.0, 79.911676], [1438805376.0, 44840000.0, 79.893744], [1438807104.0, 44860000.0, 79.875804], [1438808832.0, 44880000.0, 79.857856], [1438810560.0, 44900000.0, 79.8399], [1438812288.0, 44920000.0, 79.821936], [1438814016.0, 44940000.0, 79.80396400000001], [1438815744.0, 44960000.0, 79.785984], [1438817472.0, 44980000.0, 79.767996], [1438819200.0, 45000000.0, 79.75], [1438820928.0, 45020000.0, 79.73199600000001], [1438822656.0, 45040000.0, 79.71398400000001], [1438824384.0, 45060000.0, 79.695964], [1438826112.0, 45080000.0, 79.677936], [1438827840.0, 45100000.0, 79.6599], [1438829568.0, 45120000.0, 79.641856], [1438831296.0, 45140000.0, 79.62380399999999], [1438833024.0, 45160000.0, 79.605744], [1438834752.0, 45180000.0, 79.587676], [1438836480.0, 45200000.0, 79.56960000000001], [1438838208.0, 45220000.0, 79.55151599999999], [1438839936.0, 45240000.0, 79.533424], [1438841664.0, 45260000.0, 79.515324], [1438843392.0, 45280000.0, 79.49721600000001], [1438845120.0, 45300000.0, 79.4791], [1438846848.0, 45320000.0, 79.460976], [1438848576.0, 45340000.0, 79.44284400000001], [1438850304.0, 45360000.0, 79.424704], [1438852032.0, 45380000.0, 79.406556], [1438853760.0, 45400000.0, 79.3884], [1438855488.0, 45420000.0, 79.370236], [1438857216.0, 45440000.0, 79.352064], [1438858944.0, 45460000.0, 79.333884], [1438860672.0, 45480000.0, 79.315696], [1438862400.0, 45500000.0, 79.2975], [1438864128.0, 45520000.0, 79.279296], [1438865856.0, 45540000.0, 79.261084], [1438867584.0, 45560000.0, 79.242864], [1438869312.0, 45580000.0, 79.224636], [1438871040.0, 45600000.0, 79.2064], [1438872768.0, 45620000.0, 79.18815599999999], [1438874496.0, 45640000.0, 79.169904], [1438876224.0, 45660000.0, 79.151644], [1438877952.0, 45680000.0, 79.133376], [1438879680.0, 45700000.0, 79.1151], [1438881408.0, 45720000.0, 79.096816], [1438883136.0, 45740000.0, 79.078524], [1438884864.0, 45760000.0, 79.060224], [1438886592.0, 45780000.0, 79.041916], [1438888320.0, 45800000.0, 79.0236], [1438890048.0, 45820000.0, 79.00527600000001], [1438891776.0, 45840000.0, 78.98694400000001], [1438893504.0, 45860000.0, 78.968604], [1438895232.0, 45880000.0, 78.950256], [1438896960.0, 45900000.0, 78.9319], [1438898688.0, 45920000.0, 78.91353600000001], [1438900416.0, 45940000.0, 78.895164], [1438902144.0, 45960000.0, 78.876784], [1438903872.0, 45980000.0, 78.858396], [1438905600.0, 46000000.0, 78.84], [1438907328.0, 46020000.0, 78.821596], [1438909056.0, 46040000.0, 78.803184], [1438910784.0, 46060000.0, 78.784764], [1438912512.0, 46080000.0, 78.766336], [1438914240.0, 46100000.0, 78.7479], [1438915968.0, 46120000.0, 78.729456], [1438917696.0, 46140000.0, 78.711004], [1438919424.0, 46160000.0, 78.692544], [1438921152.0, 46180000.0, 78.674076], [1438922880.0, 46200000.0, 78.65559999999999], [1438924608.0, 46220000.0, 78.637116], [1438926336.0, 46240000.0, 78.61862400000001], [1438928064.0, 46260000.0, 78.600124], [1438929792.0, 46280000.0, 78.581616], [1438931520.0, 46300000.0, 78.5631], [1438933248.0, 46320000.0, 78.544576], [1438934976.0, 46340000.0, 78.526044], [1438936704.0, 46360000.0, 78.507504], [1438938432.0, 46380000.0, 78.488956], [1438940160.0, 46400000.0, 78.4704], [1438941888.0, 46420000.0, 78.451836], [1438943616.0, 46440000.0, 78.433264], [1438945344.0, 46460000.0, 78.414684], [1438947072.0, 46480000.0, 78.396096], [1438948800.0, 46500000.0, 78.3775], [1438950528.0, 46520000.0, 78.358896], [1438952256.0, 46540000.0, 78.340284], [1438953984.0, 46560000.0, 78.321664], [1438955712.0, 46580000.0, 78.30303599999999], [1438957440.0, 46600000.0, 78.2844], [1438959168.0, 46620000.0, 78.265756], [1438960896.0, 46640000.0, 78.24710400000001], [1438962624.0, 46660000.0, 78.228444], [1438964352.0, 46680000.0, 78.209776], [1438966080.0, 46700000.0, 78.1911], [1438967808.0, 46720000.0, 78.172416], [1438969536.0, 46740000.0, 78.153724], [1438971264.0, 46760000.0, 78.135024], [1438972992.0, 46780000.0, 78.116316], [1438974720.0, 46800000.0, 78.0976], [1438976448.0, 46820000.0, 78.078876], [1438978176.0, 46840000.0, 78.060144], [1438979904.0, 46860000.0, 78.041404], [1438981632.0, 46880000.0, 78.022656], [1438983360.0, 46900000.0, 78.0039], [1438985088.0, 46920000.0, 77.985136], [1438986816.0, 46940000.0, 77.966364], [1438988544.0, 46960000.0, 77.947584], [1438990272.0, 46980000.0, 77.92879599999999], [1438992000.0, 47000000.0, 77.91], [1438993728.0, 47020000.0, 77.89119600000001], [1438995456.0, 47040000.0, 77.87238400000001], [1438997184.0, 47060000.0, 77.85356399999999], [1438998912.0, 47080000.0, 77.83473599999999], [1439000640.0, 47100000.0, 77.8159], [1439002368.0, 47120000.0, 77.797056], [1439004096.0, 47140000.0, 77.77820399999999], [1439005824.0, 47160000.0, 77.759344], [1439007552.0, 47180000.0, 77.740476], [1439009280.0, 47200000.0, 77.7216], [1439011008.0, 47220000.0, 77.702716], [1439012736.0, 47240000.0, 77.683824], [1439014464.0, 47260000.0, 77.664924], [1439016192.0, 47280000.0, 77.646016], [1439017920.0, 47300000.0, 77.6271], [1439019648.0, 47320000.0, 77.608176], [1439021376.0, 47340000.0, 77.58924400000001], [1439023104.0, 47360000.0, 77.57030400000001], [1439024832.0, 47380000.0, 77.551356], [1439026560.0, 47400000.0, 77.5324], [1439028288.0, 47420000.0, 77.513436], [1439030016.0, 47440000.0, 77.494464], [1439031744.0, 47460000.0, 77.475484], [1439033472.0, 47480000.0, 77.456496], [1439035200.0, 47500000.0, 77.4375], [1439036928.0, 47520000.0, 77.418496], [1439038656.0, 47540000.0, 77.399484], [1439040384.0, 47560000.0, 77.38046399999999], [1439042112.0, 47580000.0, 77.361436], [1439043840.0, 47600000.0, 77.3424], [1439045568.0, 47620000.0, 77.323356], [1439047296.0, 47640000.0, 77.304304], [1439049024.0, 47660000.0, 77.285244], [1439050752.0, 47680000.0, 77.266176], [1439052480.0, 47700000.0, 77.2471], [1439054208.0, 47720000.0, 77.228016], [1439055936.0, 47740000.0, 77.208924], [1439057664.0, 47760000.0, 77.189824], [1439059392.0, 47780000.0, 77.170716], [1439061120.0, 47800000.0, 77.1516], [1439062848.0, 47820000.0, 77.132476], [1439064576.0, 47840000.0, 77.113344], [1439066304.0, 47860000.0, 77.094204], [1439068032.0, 47880000.0, 77.07505599999999], [1439069760.0, 47900000.0, 77.05590000000001], [1439071488.0, 47920000.0, 77.036736], [1439073216.0, 47940000.0, 77.01756400000001], [1439074944.0, 47960000.0, 76.998384], [1439076672.0, 47980000.0, 76.979196], [1439078400.0, 48000000.0, 76.96000000000001], [1439080128.0, 48020000.0, 76.940796], [1439081856.0, 48040000.0, 76.921584], [1439083584.0, 48060000.0, 76.902364], [1439085312.0, 48080000.0, 76.88313600000001], [1439087040.0, 48100000.0, 76.8639], [1439088768.0, 48120000.0, 76.844656], [1439090496.0, 48140000.0, 76.82540399999999], [1439092224.0, 48160000.0, 76.806144], [1439093952.0, 48180000.0, 76.786876], [1439095680.0, 48200000.0, 76.7676], [1439097408.0, 48220000.0, 76.748316], [1439099136.0, 48240000.0, 76.72902400000001], [1439100864.0, 48260000.0, 76.70972400000001], [1439102592.0, 48280000.0, 76.690416], [1439104320.0, 48300000.0, 76.6711], [1439106048.0, 48320000.0, 76.651776], [1439107776.0, 48340000.0, 76.632444], [1439109504.0, 48360000.0, 76.61310399999999], [1439111232.0, 48380000.0, 76.593756], [1439112960.0, 48400000.0, 76.5744], [1439114688.0, 48420000.0, 76.555036], [1439116416.0, 48440000.0, 76.535664], [1439118144.0, 48460000.0, 76.516284], [1439119872.0, 48480000.0, 76.49689599999999], [1439121600.0, 48500000.0, 76.4775], [1439123328.0, 48520000.0, 76.458096], [1439125056.0, 48540000.0, 76.438684], [1439126784.0, 48560000.0, 76.419264], [1439128512.0, 48580000.0, 76.39983600000001], [1439130240.0, 48600000.0, 76.3804], [1439131968.0, 48620000.0, 76.360956], [1439133696.0, 48640000.0, 76.341504], [1439135424.0, 48660000.0, 76.322044], [1439137152.0, 48680000.0, 76.302576], [1439138880.0, 48700000.0, 76.28309999999999], [1439140608.0, 48720000.0, 76.263616], [1439142336.0, 48740000.0, 76.244124], [1439144064.0, 48760000.0, 76.22462399999999], [1439145792.0, 48780000.0, 76.205116], [1439147520.0, 48800000.0, 76.1856], [1439149248.0, 48820000.0, 76.166076], [1439150976.0, 48840000.0, 76.14654399999999], [1439152704.0, 48860000.0, 76.127004], [1439154432.0, 48880000.0, 76.107456], [1439156160.0, 48900000.0, 76.0879], [1439157888.0, 48920000.0, 76.06833599999999], [1439159616.0, 48940000.0, 76.048764], [1439161344.0, 48960000.0, 76.029184], [1439163072.0, 48980000.0, 76.009596], [1439164800.0, 49000000.0, 75.99], [1439166528.0, 49020000.0, 75.970396], [1439168256.0, 49040000.0, 75.950784], [1439169984.0, 49060000.0, 75.931164], [1439171712.0, 49080000.0, 75.911536], [1439173440.0, 49100000.0, 75.89189999999999], [1439175168.0, 49120000.0, 75.872256], [1439176896.0, 49140000.0, 75.852604], [1439178624.0, 49160000.0, 75.832944], [1439180352.0, 49180000.0, 75.813276], [1439182080.0, 49200000.0, 75.7936], [1439183808.0, 49220000.0, 75.773916], [1439185536.0, 49240000.0, 75.754224], [1439187264.0, 49260000.0, 75.734524], [1439188992.0, 49280000.0, 75.714816], [1439190720.0, 49300000.0, 75.6951], [1439192448.0, 49320000.0, 75.675376], [1439194176.0, 49340000.0, 75.655644], [1439195904.0, 49360000.0, 75.635904], [1439197632.0, 49380000.0, 75.616156], [1439199360.0, 49400000.0, 75.59639999999999], [1439201088.0, 49420000.0, 75.576636], [1439202816.0, 49440000.0, 75.556864], [1439204544.0, 49460000.0, 75.53708400000001], [1439206272.0, 49480000.0, 75.51729599999999], [1439208000.0, 49500000.0, 75.4975], [1439209728.0, 49520000.0, 75.47769600000001], [1439211456.0, 49540000.0, 75.457884], [1439213184.0, 49560000.0, 75.438064], [1439214912.0, 49580000.0, 75.418236], [1439216640.0, 49600000.0, 75.3984], [1439218368.0, 49620000.0, 75.378556], [1439220096.0, 49640000.0, 75.35870399999999], [1439221824.0, 49660000.0, 75.338844], [1439223552.0, 49680000.0, 75.31897599999999], [1439225280.0, 49700000.0, 75.29910000000001], [1439227008.0, 49720000.0, 75.27921599999999], [1439228736.0, 49740000.0, 75.25932399999999], [1439230464.0, 49760000.0, 75.239424], [1439232192.0, 49780000.0, 75.219516], [1439233920.0, 49800000.0, 75.1996], [1439235648.0, 49820000.0, 75.179676], [1439237376.0, 49840000.0, 75.159744], [1439239104.0, 49860000.0, 75.139804], [1439240832.0, 49880000.0, 75.119856], [1439242560.0, 49900000.0, 75.09989999999999], [1439244288.0, 49920000.0, 75.079936], [1439246016.0, 49940000.0, 75.05996400000001], [1439247744.0, 49960000.0, 75.039984], [1439249472.0, 49980000.0, 75.01999599999999], [1439251200.0, 50000000.0, 75.0], [1439252928.0, 50020000.0, 74.979996], [1439254656.0, 50040000.0, 74.959984], [1439256384.0, 50060000.0, 74.939964], [1439258112.0, 50080000.0, 74.919936], [1439259840.0, 50100000.0, 74.8999], [1439261568.0, 50120000.0, 74.879856], [1439263296.0, 50140000.0, 74.859804], [1439265024.0, 50160000.0, 74.839744], [1439266752.0, 50180000.0, 74.819676], [1439268480.0, 50200000.0, 74.7996], [1439270208.0, 50220000.0, 74.779516], [1439271936.0, 50240000.0, 74.759424], [1439273664.0, 50260000.0, 74.73932400000001], [1439275392.0, 50280000.0, 74.719216], [1439277120.0, 50300000.0, 74.6991], [1439278848.0, 50320000.0, 74.678976], [1439280576.0, 50340000.0, 74.658844], [1439282304.0, 50360000.0, 74.638704], [1439284032.0, 50380000.0, 74.618556], [1439285760.0, 50400000.0, 74.5984], [1439287488.0, 50420000.0, 74.578236], [1439289216.0, 50440000.0, 74.558064], [1439290944.0, 50460000.0, 74.53788399999999], [1439292672.0, 50480000.0, 74.517696], [1439294400.0, 50500000.0, 74.4975], [1439296128.0, 50520000.0, 74.477296], [1439297856.0, 50540000.0, 74.457084], [1439299584.0, 50560000.0, 74.436864], [1439301312.0, 50580000.0, 74.416636], [1439303040.0, 50600000.0, 74.3964], [1439304768.0, 50620000.0, 74.376156], [1439306496.0, 50640000.0, 74.355904], [1439308224.0, 50660000.0, 74.335644], [1439309952.0, 50680000.0, 74.315376], [1439311680.0, 50700000.0, 74.29509999999999], [1439313408.0, 50720000.0, 74.274816], [1439315136.0, 50740000.0, 74.254524], [1439316864.0, 50760000.0, 74.23422400000001], [1439318592.0, 50780000.0, 74.213916], [1439320320.0, 50800000.0, 74.1936], [1439322048.0, 50820000.0, 74.173276], [1439323776.0, 50840000.0, 74.152944], [1439325504.0, 50860000.0, 74.132604], [1439327232.0, 50880000.0, 74.112256], [1439328960.0, 50900000.0, 74.09190000000001], [1439330688.0, 50920000.0, 74.07153600000001], [1439332416.0, 50940000.0, 74.051164], [1439334144.0, 50960000.0, 74.030784], [1439335872.0, 50980000.0, 74.010396], [1439337600.0, 51000000.0, 73.99000000000001], [1439339328.0, 51020000.0, 73.969596], [1439341056.0, 51040000.0, 73.949184], [1439342784.0, 51060000.0, 73.928764], [1439344512.0, 51080000.0, 73.908336], [1439346240.0, 51100000.0, 73.8879], [1439347968.0, 51120000.0, 73.867456], [1439349696.0, 51140000.0, 73.847004], [1439351424.0, 51160000.0, 73.826544], [1439353152.0, 51180000.0, 73.80607599999999], [1439354880.0, 51200000.0, 73.7856], [1439356608.0, 51220000.0, 73.765116], [1439358336.0, 51240000.0, 73.744624], [1439360064.0, 51260000.0, 73.72412399999999], [1439361792.0, 51280000.0, 73.703616], [1439363520.0, 51300000.0, 73.6831], [1439365248.0, 51320000.0, 73.662576], [1439366976.0, 51340000.0, 73.642044], [1439368704.0, 51360000.0, 73.621504], [1439370432.0, 51380000.0, 73.600956], [1439372160.0, 51400000.0, 73.5804], [1439373888.0, 51420000.0, 73.55983599999999], [1439375616.0, 51440000.0, 73.539264], [1439377344.0, 51460000.0, 73.51868400000001], [1439379072.0, 51480000.0, 73.498096], [1439380800.0, 51500000.0, 73.47749999999999], [1439382528.0, 51520000.0, 73.456896], [1439384256.0, 51540000.0, 73.436284], [1439385984.0, 51560000.0, 73.415664], [1439387712.0, 51580000.0, 73.395036], [1439389440.0, 51600000.0, 73.3744], [1439391168.0, 51620000.0, 73.353756], [1439392896.0, 51640000.0, 73.333104], [1439394624.0, 51660000.0, 73.312444], [1439396352.0, 51680000.0, 73.291776], [1439398080.0, 51700000.0, 73.2711], [1439399808.0, 51720000.0, 73.250416], [1439401536.0, 51740000.0, 73.229724], [1439403264.0, 51760000.0, 73.209024], [1439404992.0, 51780000.0, 73.188316], [1439406720.0, 51800000.0, 73.16760000000001], [1439408448.0, 51820000.0, 73.14687599999999], [1439410176.0, 51840000.0, 73.126144], [1439411904.0, 51860000.0, 73.105404], [1439413632.0, 51880000.0, 73.084656], [1439415360.0, 51900000.0, 73.06389999999999], [1439417088.0, 51920000.0, 73.043136], [1439418816.0, 51940000.0, 73.022364], [1439420544.0, 51960000.0, 73.00158400000001], [1439422272.0, 51980000.0, 72.980796], [1439424000.0, 52000000.0, 72.96], [1439425728.0, 52020000.0, 72.939196], [1439427456.0, 52040000.0, 72.918384], [1439429184.0, 52060000.0, 72.89756399999999], [1439430912.0, 52080000.0, 72.876736], [1439432640.0, 52100000.0, 72.8559], [1439434368.0, 52120000.0, 72.83505600000001], [1439436096.0, 52140000.0, 72.81420399999999], [1439437824.0, 52160000.0, 72.79334399999999], [1439439552.0, 52180000.0, 72.772476], [1439441280.0, 52200000.0, 72.7516], [1439443008.0, 52220000.0, 72.730716], [1439444736.0, 52240000.0, 72.709824], [1439446464.0, 52260000.0, 72.688924], [1439448192.0, 52280000.0, 72.668016], [1439449920.0, 52300000.0, 72.6471], [1439451648.0, 52320000.0, 72.626176], [1439453376.0, 52340000.0, 72.605244], [1439455104.0, 52360000.0, 72.584304], [1439456832.0, 52380000.0, 72.563356], [1439458560.0, 52400000.0, 72.5424], [1439460288.0, 52420000.0, 72.521436], [1439462016.0, 52440000.0, 72.500464], [1439463744.0, 52460000.0, 72.479484], [1439465472.0, 52480000.0, 72.458496], [1439467200.0, 52500000.0, 72.4375], [1439468928.0, 52520000.0, 72.416496], [1439470656.0, 52540000.0, 72.39548400000001], [1439472384.0, 52560000.0, 72.37446399999999], [1439474112.0, 52580000.0, 72.353436], [1439475840.0, 52600000.0, 72.3324], [1439477568.0, 52620000.0, 72.311356], [1439479296.0, 52640000.0, 72.29030399999999], [1439481024.0, 52660000.0, 72.269244], [1439482752.0, 52680000.0, 72.248176], [1439484480.0, 52700000.0, 72.22710000000001], [1439486208.0, 52720000.0, 72.206016], [1439487936.0, 52740000.0, 72.184924], [1439489664.0, 52760000.0, 72.163824], [1439491392.0, 52780000.0, 72.14271600000001], [1439493120.0, 52800000.0, 72.1216], [1439494848.0, 52820000.0, 72.100476], [1439496576.0, 52840000.0, 72.079344], [1439498304.0, 52860000.0, 72.058204], [1439500032.0, 52880000.0, 72.03705599999999], [1439501760.0, 52900000.0, 72.0159], [1439503488.0, 52920000.0, 71.994736], [1439505216.0, 52940000.0, 71.97356400000001], [1439506944.0, 52960000.0, 71.952384], [1439508672.0, 52980000.0, 71.931196], [1439510400.0, 53000000.0, 71.91], [1439512128.0, 53020000.0, 71.888796], [1439513856.0, 53040000.0, 71.867584], [1439515584.0, 53060000.0, 71.846364], [1439517312.0, 53080000.0, 71.825136], [1439519040.0, 53100000.0, 71.8039], [1439520768.0, 53120000.0, 71.782656], [1439522496.0, 53140000.0, 71.761404], [1439524224.0, 53160000.0, 71.740144], [1439525952.0, 53180000.0, 71.71887600000001], [1439527680.0, 53200000.0, 71.6976], [1439529408.0, 53220000.0, 71.676316], [1439531136.0, 53240000.0, 71.655024], [1439532864.0, 53260000.0, 71.633724], [1439534592.0, 53280000.0, 71.612416], [1439536320.0, 53300000.0, 71.5911], [1439538048.0, 53320000.0, 71.569776], [1439539776.0, 53340000.0, 71.548444], [1439541504.0, 53360000.0, 71.527104], [1439543232.0, 53380000.0, 71.50575599999999], [1439544960.0, 53400000.0, 71.4844], [1439546688.0, 53420000.0, 71.463036], [1439548416.0, 53440000.0, 71.441664], [1439550144.0, 53460000.0, 71.420284], [1439551872.0, 53480000.0, 71.39889600000001], [1439553600.0, 53500000.0, 71.3775], [1439555328.0, 53520000.0, 71.356096], [1439557056.0, 53540000.0, 71.334684], [1439558784.0, 53560000.0, 71.313264], [1439560512.0, 53580000.0, 71.291836], [1439562240.0, 53600000.0, 71.2704], [1439563968.0, 53620000.0, 71.24895599999999], [1439565696.0, 53640000.0, 71.227504], [1439567424.0, 53660000.0, 71.206044], [1439569152.0, 53680000.0, 71.18457599999999], [1439570880.0, 53700000.0, 71.1631], [1439572608.0, 53720000.0, 71.141616], [1439574336.0, 53740000.0, 71.120124], [1439576064.0, 53760000.0, 71.098624], [1439577792.0, 53780000.0, 71.077116], [1439579520.0, 53800000.0, 71.0556], [1439581248.0, 53820000.0, 71.034076], [1439582976.0, 53840000.0, 71.01254399999999], [1439584704.0, 53860000.0, 70.991004], [1439586432.0, 53880000.0, 70.96945600000001], [1439588160.0, 53900000.0, 70.9479], [1439589888.0, 53920000.0, 70.92633599999999], [1439591616.0, 53940000.0, 70.904764], [1439593344.0, 53960000.0, 70.883184], [1439595072.0, 53980000.0, 70.861596], [1439596800.0, 54000000.0, 70.84], [1439598528.0, 54020000.0, 70.818396], [1439600256.0, 54040000.0, 70.796784], [1439601984.0, 54060000.0, 70.775164], [1439603712.0, 54080000.0, 70.753536], [1439605440.0, 54100000.0, 70.7319], [1439607168.0, 54120000.0, 70.710256], [1439608896.0, 54140000.0, 70.688604], [1439610624.0, 54160000.0, 70.666944], [1439612352.0, 54180000.0, 70.645276], [1439614080.0, 54200000.0, 70.6236], [1439615808.0, 54220000.0, 70.601916], [1439617536.0, 54240000.0, 70.580224], [1439619264.0, 54260000.0, 70.558524], [1439620992.0, 54280000.0, 70.536816], [1439622720.0, 54300000.0, 70.5151], [1439624448.0, 54320000.0, 70.493376], [1439626176.0, 54340000.0, 70.471644], [1439627904.0, 54360000.0, 70.449904], [1439629632.0, 54380000.0, 70.428156], [1439631360.0, 54400000.0, 70.40639999999999], [1439633088.0, 54420000.0, 70.384636], [1439634816.0, 54440000.0, 70.362864], [1439636544.0, 54460000.0, 70.341084], [1439638272.0, 54480000.0, 70.319296], [1439640000.0, 54500000.0, 70.2975], [1439641728.0, 54520000.0, 70.275696], [1439643456.0, 54540000.0, 70.253884], [1439645184.0, 54560000.0, 70.232064], [1439646912.0, 54580000.0, 70.210236], [1439648640.0, 54600000.0, 70.1884], [1439650368.0, 54620000.0, 70.166556], [1439652096.0, 54640000.0, 70.14470399999999], [1439653824.0, 54660000.0, 70.122844], [1439655552.0, 54680000.0, 70.100976], [1439657280.0, 54700000.0, 70.07910000000001], [1439659008.0, 54720000.0, 70.057216], [1439660736.0, 54740000.0, 70.035324], [1439662464.0, 54760000.0, 70.013424], [1439664192.0, 54780000.0, 69.991516], [1439665920.0, 54800000.0, 69.9696], [1439667648.0, 54820000.0, 69.947676], [1439669376.0, 54840000.0, 69.92574400000001], [1439671104.0, 54860000.0, 69.90380400000001], [1439672832.0, 54880000.0, 69.881856], [1439674560.0, 54900000.0, 69.8599], [1439676288.0, 54920000.0, 69.837936], [1439678016.0, 54940000.0, 69.81596400000001], [1439679744.0, 54960000.0, 69.793984], [1439681472.0, 54980000.0, 69.771996], [1439683200.0, 55000000.0, 69.75], [1439684928.0, 55020000.0, 69.727996], [1439686656.0, 55040000.0, 69.705984], [1439688384.0, 55060000.0, 69.683964], [1439690112.0, 55080000.0, 69.661936], [1439691840.0, 55100000.0, 69.6399], [1439693568.0, 55120000.0, 69.617856], [1439695296.0, 55140000.0, 69.595804], [1439697024.0, 55160000.0, 69.573744], [1439698752.0, 55180000.0, 69.551676], [1439700480.0, 55200000.0, 69.5296], [1439702208.0, 55220000.0, 69.507516], [1439703936.0, 55240000.0, 69.485424], [1439705664.0, 55260000.0, 69.463324], [1439707392.0, 55280000.0, 69.441216], [1439709120.0, 55300000.0, 69.4191], [1439710848.0, 55320000.0, 69.396976], [1439712576.0, 55340000.0, 69.374844], [1439714304.0, 55360000.0, 69.352704], [1439716032.0, 55380000.0, 69.330556], [1439717760.0, 55400000.0, 69.3084], [1439719488.0, 55420000.0, 69.286236], [1439721216.0, 55440000.0, 69.264064], [1439722944.0, 55460000.0, 69.241884], [1439724672.0, 55480000.0, 69.219696], [1439726400.0, 55500000.0, 69.1975], [1439728128.0, 55520000.0, 69.175296], [1439729856.0, 55540000.0, 69.15308399999999], [1439731584.0, 55560000.0, 69.130864], [1439733312.0, 55580000.0, 69.108636], [1439735040.0, 55600000.0, 69.0864], [1439736768.0, 55620000.0, 69.064156], [1439738496.0, 55640000.0, 69.041904], [1439740224.0, 55660000.0, 69.019644], [1439741952.0, 55680000.0, 68.997376], [1439743680.0, 55700000.0, 68.9751], [1439745408.0, 55720000.0, 68.952816], [1439747136.0, 55740000.0, 68.930524], [1439748864.0, 55760000.0, 68.908224], [1439750592.0, 55780000.0, 68.885916], [1439752320.0, 55800000.0, 68.86359999999999], [1439754048.0, 55820000.0, 68.841276], [1439755776.0, 55840000.0, 68.818944], [1439757504.0, 55860000.0, 68.796604], [1439759232.0, 55880000.0, 68.774256], [1439760960.0, 55900000.0, 68.7519], [1439762688.0, 55920000.0, 68.729536], [1439764416.0, 55940000.0, 68.70716399999999], [1439766144.0, 55960000.0, 68.68478400000001], [1439767872.0, 55980000.0, 68.662396], [1439769600.0, 56000000.0, 68.64], [1439771328.0, 56020000.0, 68.61759599999999], [1439773056.0, 56040000.0, 68.595184], [1439774784.0, 56060000.0, 68.572764], [1439776512.0, 56080000.0, 68.550336], [1439778240.0, 56100000.0, 68.52789999999999], [1439779968.0, 56120000.0, 68.505456], [1439781696.0, 56140000.0, 68.483004], [1439783424.0, 56160000.0, 68.460544], [1439785152.0, 56180000.0, 68.438076], [1439786880.0, 56200000.0, 68.4156], [1439788608.0, 56220000.0, 68.393116], [1439790336.0, 56240000.0, 68.370624], [1439792064.0, 56260000.0, 68.348124], [1439793792.0, 56280000.0, 68.325616], [1439795520.0, 56300000.0, 68.3031], [1439797248.0, 56320000.0, 68.280576], [1439798976.0, 56340000.0, 68.258044], [1439800704.0, 56360000.0, 68.23550399999999], [1439802432.0, 56380000.0, 68.212956], [1439804160.0, 56400000.0, 68.19040000000001], [1439805888.0, 56420000.0, 68.167836], [1439807616.0, 56440000.0, 68.145264], [1439809344.0, 56460000.0, 68.12268399999999], [1439811072.0, 56480000.0, 68.10009600000001], [1439812800.0, 56500000.0, 68.0775], [1439814528.0, 56520000.0, 68.054896], [1439816256.0, 56540000.0, 68.032284], [1439817984.0, 56560000.0, 68.009664], [1439819712.0, 56580000.0, 67.98703599999999], [1439821440.0, 56600000.0, 67.9644], [1439823168.0, 56620000.0, 67.941756], [1439824896.0, 56640000.0, 67.919104], [1439826624.0, 56660000.0, 67.896444], [1439828352.0, 56680000.0, 67.87377599999999], [1439830080.0, 56700000.0, 67.8511], [1439831808.0, 56720000.0, 67.828416], [1439833536.0, 56740000.0, 67.805724], [1439835264.0, 56760000.0, 67.783024], [1439836992.0, 56780000.0, 67.760316], [1439838720.0, 56800000.0, 67.7376], [1439840448.0, 56820000.0, 67.714876], [1439842176.0, 56840000.0, 67.692144], [1439843904.0, 56860000.0, 67.669404], [1439845632.0, 56880000.0, 67.64665600000001], [1439847360.0, 56900000.0, 67.62389999999999], [1439849088.0, 56920000.0, 67.601136], [1439850816.0, 56940000.0, 67.578364], [1439852544.0, 56960000.0, 67.55558400000001], [1439854272.0, 56980000.0, 67.53279599999999], [1439856000.0, 57000000.0, 67.50999999999999], [1439857728.0, 57020000.0, 67.487196], [1439859456.0, 57040000.0, 67.464384], [1439861184.0, 57060000.0, 67.441564], [1439862912.0, 57080000.0, 67.418736], [1439864640.0, 57100000.0, 67.3959], [1439866368.0, 57120000.0, 67.373056], [1439868096.0, 57140000.0, 67.35020399999999], [1439869824.0, 57160000.0, 67.327344], [1439871552.0, 57180000.0, 67.304476], [1439873280.0, 57200000.0, 67.2816], [1439875008.0, 57220000.0, 67.25871599999999], [1439876736.0, 57240000.0, 67.23582400000001], [1439878464.0, 57260000.0, 67.212924], [1439880192.0, 57280000.0, 67.190016], [1439881920.0, 57300000.0, 67.1671], [1439883648.0, 57320000.0, 67.14417599999999], [1439885376.0, 57340000.0, 67.12124399999999], [1439887104.0, 57360000.0, 67.09830400000001], [1439888832.0, 57380000.0, 67.075356], [1439890560.0, 57400000.0, 67.0524], [1439892288.0, 57420000.0, 67.029436], [1439894016.0, 57440000.0, 67.006464], [1439895744.0, 57460000.0, 66.983484], [1439897472.0, 57480000.0, 66.960496], [1439899200.0, 57500000.0, 66.9375], [1439900928.0, 57520000.0, 66.914496], [1439902656.0, 57540000.0, 66.891484], [1439904384.0, 57560000.0, 66.86846399999999], [1439906112.0, 57580000.0, 66.845436], [1439907840.0, 57600000.0, 66.8224], [1439909568.0, 57620000.0, 66.799356], [1439911296.0, 57640000.0, 66.776304], [1439913024.0, 57660000.0, 66.753244], [1439914752.0, 57680000.0, 66.730176], [1439916480.0, 57700000.0, 66.7071], [1439918208.0, 57720000.0, 66.684016], [1439919936.0, 57740000.0, 66.660924], [1439921664.0, 57760000.0, 66.637824], [1439923392.0, 57780000.0, 66.614716], [1439925120.0, 57800000.0, 66.5916], [1439926848.0, 57820000.0, 66.568476], [1439928576.0, 57840000.0, 66.545344], [1439930304.0, 57860000.0, 66.522204], [1439932032.0, 57880000.0, 66.499056], [1439933760.0, 57900000.0, 66.4759], [1439935488.0, 57920000.0, 66.452736], [1439937216.0, 57940000.0, 66.429564], [1439938944.0, 57960000.0, 66.406384], [1439940672.0, 57980000.0, 66.383196], [1439942400.0, 58000000.0, 66.36], [1439944128.0, 58020000.0, 66.336796], [1439945856.0, 58040000.0, 66.31358399999999], [1439947584.0, 58060000.0, 66.290364], [1439949312.0, 58080000.0, 66.267136], [1439951040.0, 58100000.0, 66.2439], [1439952768.0, 58120000.0, 66.22065599999999], [1439954496.0, 58140000.0, 66.197404], [1439956224.0, 58160000.0, 66.17414400000001], [1439957952.0, 58180000.0, 66.15087600000001], [1439959680.0, 58200000.0, 66.1276], [1439961408.0, 58220000.0, 66.104316], [1439963136.0, 58240000.0, 66.081024], [1439964864.0, 58260000.0, 66.05772400000001], [1439966592.0, 58280000.0, 66.034416], [1439968320.0, 58300000.0, 66.0111], [1439970048.0, 58320000.0, 65.987776], [1439971776.0, 58340000.0, 65.96444400000001], [1439973504.0, 58360000.0, 65.941104], [1439975232.0, 58380000.0, 65.917756], [1439976960.0, 58400000.0, 65.8944], [1439978688.0, 58420000.0, 65.871036], [1439980416.0, 58440000.0, 65.847664], [1439982144.0, 58460000.0, 65.824284], [1439983872.0, 58480000.0, 65.800896], [1439985600.0, 58500000.0, 65.7775], [1439987328.0, 58520000.0, 65.754096], [1439989056.0, 58540000.0, 65.730684], [1439990784.0, 58560000.0, 65.70726400000001], [1439992512.0, 58580000.0, 65.68383600000001], [1439994240.0, 58600000.0, 65.6604], [1439995968.0, 58620000.0, 65.636956], [1439997696.0, 58640000.0, 65.613504], [1439999424.0, 58660000.0, 65.590044], [1440001152.0, 58680000.0, 65.566576], [1440002880.0, 58700000.0, 65.5431], [1440004608.0, 58720000.0, 65.519616], [1440006336.0, 58740000.0, 65.49612400000001], [1440008064.0, 58760000.0, 65.472624], [1440009792.0, 58780000.0, 65.449116], [1440011520.0, 58800000.0, 65.4256], [1440013248.0, 58820000.0, 65.402076], [1440014976.0, 58840000.0, 65.378544], [1440016704.0, 58860000.0, 65.35500400000001], [1440018432.0, 58880000.0, 65.331456], [1440020160.0, 58900000.0, 65.3079], [1440021888.0, 58920000.0, 65.284336], [1440023616.0, 58940000.0, 65.260764], [1440025344.0, 58960000.0, 65.237184], [1440027072.0, 58980000.0, 65.213596], [1440028800.0, 59000000.0, 65.19], [1440030528.0, 59020000.0, 65.16639599999999], [1440032256.0, 59040000.0, 65.142784], [1440033984.0, 59060000.0, 65.11916400000001], [1440035712.0, 59080000.0, 65.095536], [1440037440.0, 59100000.0, 65.0719], [1440039168.0, 59120000.0, 65.04825600000001], [1440040896.0, 59140000.0, 65.02460400000001], [1440042624.0, 59160000.0, 65.000944], [1440044352.0, 59180000.0, 64.97727599999999], [1440046080.0, 59200000.0, 64.9536], [1440047808.0, 59220000.0, 64.929916], [1440049536.0, 59240000.0, 64.906224], [1440051264.0, 59260000.0, 64.88252399999999], [1440052992.0, 59280000.0, 64.85881599999999], [1440054720.0, 59300000.0, 64.83510000000001], [1440056448.0, 59320000.0, 64.811376], [1440058176.0, 59340000.0, 64.787644], [1440059904.0, 59360000.0, 64.763904], [1440061632.0, 59380000.0, 64.74015600000001], [1440063360.0, 59400000.0, 64.7164], [1440065088.0, 59420000.0, 64.692636], [1440066816.0, 59440000.0, 64.668864], [1440068544.0, 59460000.0, 64.645084], [1440070272.0, 59480000.0, 64.621296], [1440072000.0, 59500000.0, 64.5975], [1440073728.0, 59520000.0, 64.573696], [1440075456.0, 59540000.0, 64.549884], [1440077184.0, 59560000.0, 64.52606399999999], [1440078912.0, 59580000.0, 64.502236], [1440080640.0, 59600000.0, 64.4784], [1440082368.0, 59620000.0, 64.454556], [1440084096.0, 59640000.0, 64.43070399999999], [1440085824.0, 59660000.0, 64.406844], [1440087552.0, 59680000.0, 64.382976], [1440089280.0, 59700000.0, 64.35910000000001], [1440091008.0, 59720000.0, 64.335216], [1440092736.0, 59740000.0, 64.311324], [1440094464.0, 59760000.0, 64.287424], [1440096192.0, 59780000.0, 64.26351600000001], [1440097920.0, 59800000.0, 64.2396], [1440099648.0, 59820000.0, 64.215676], [1440101376.0, 59840000.0, 64.191744], [1440103104.0, 59860000.0, 64.167804], [1440104832.0, 59880000.0, 64.143856], [1440106560.0, 59900000.0, 64.1199], [1440108288.0, 59920000.0, 64.095936], [1440110016.0, 59940000.0, 64.07196400000001], [1440111744.0, 59960000.0, 64.04798399999999], [1440113472.0, 59980000.0, 64.023996], [1440115200.0, 60000000.0, 64.0], [1440116928.0, 60020000.0, 63.975996], [1440118656.0, 60040000.0, 63.951984], [1440120384.0, 60060000.0, 63.927963999999996], [1440122112.0, 60080000.0, 63.903936], [1440123840.0, 60100000.0, 63.8799], [1440125568.0, 60120000.0, 63.855856], [1440127296.0, 60140000.0, 63.831804], [1440129024.0, 60160000.0, 63.807744], [1440130752.0, 60180000.0, 63.783676], [1440132480.0, 60200000.0, 63.759600000000006], [1440134208.0, 60220000.0, 63.735516], [1440135936.0, 60240000.0, 63.711424], [1440137664.0, 60260000.0, 63.687324000000004], [1440139392.0, 60280000.0, 63.663216000000006], [1440141120.0, 60300000.0, 63.6391], [1440142848.0, 60320000.0, 63.614976], [1440144576.0, 60340000.0, 63.590844000000004], [1440146304.0, 60360000.0, 63.566704], [1440148032.0, 60380000.0, 63.542556], [1440149760.0, 60400000.0, 63.5184], [1440151488.0, 60420000.0, 63.494236], [1440153216.0, 60440000.0, 63.47006400000001], [1440154944.0, 60460000.0, 63.445884], [1440156672.0, 60480000.0, 63.421696], [1440158400.0, 60500000.0, 63.3975], [1440160128.0, 60520000.0, 63.373296], [1440161856.0, 60540000.0, 63.349084], [1440163584.0, 60560000.0, 63.324864], [1440165312.0, 60580000.0, 63.300636000000004], [1440167040.0, 60600000.0, 63.2764], [1440168768.0, 60620000.0, 63.252156], [1440170496.0, 60640000.0, 63.227904], [1440172224.0, 60660000.0, 63.203644000000004], [1440173952.0, 60680000.0, 63.179376000000005], [1440175680.0, 60700000.0, 63.1551], [1440177408.0, 60720000.0, 63.130815999999996], [1440179136.0, 60740000.0, 63.106524], [1440180864.0, 60760000.0, 63.082224000000004], [1440182592.0, 60780000.0, 63.057916], [1440184320.0, 60800000.0, 63.0336], [1440186048.0, 60820000.0, 63.009276], [1440187776.0, 60840000.0, 62.984944000000006], [1440189504.0, 60860000.0, 62.960604], [1440191232.0, 60880000.0, 62.936256], [1440192960.0, 60900000.0, 62.9119], [1440194688.0, 60920000.0, 62.887536000000004], [1440196416.0, 60940000.0, 62.863164], [1440198144.0, 60960000.0, 62.838784], [1440199872.0, 60980000.0, 62.814396], [1440201600.0, 61000000.0, 62.790000000000006], [1440203328.0, 61020000.0, 62.765595999999995], [1440205056.0, 61040000.0, 62.741184], [1440206784.0, 61060000.0, 62.716764000000005], [1440208512.0, 61080000.0, 62.692336000000005], [1440210240.0, 61100000.0, 62.667899999999996], [1440211968.0, 61120000.0, 62.643456], [1440213696.0, 61140000.0, 62.619004000000004], [1440215424.0, 61160000.0, 62.594544000000006], [1440217152.0, 61180000.0, 62.57007599999999], [1440218880.0, 61200000.0, 62.5456], [1440220608.0, 61220000.0, 62.521116], [1440222336.0, 61240000.0, 62.496624000000004], [1440224064.0, 61260000.0, 62.472123999999994], [1440225792.0, 61280000.0, 62.447616], [1440227520.0, 61300000.0, 62.4231], [1440229248.0, 61320000.0, 62.398576000000006], [1440230976.0, 61340000.0, 62.374044], [1440232704.0, 61360000.0, 62.349503999999996], [1440234432.0, 61380000.0, 62.324956], [1440236160.0, 61400000.0, 62.3004], [1440237888.0, 61420000.0, 62.275836], [1440239616.0, 61440000.0, 62.251264], [1440241344.0, 61460000.0, 62.226684], [1440243072.0, 61480000.0, 62.202096000000004], [1440244800.0, 61500000.0, 62.177499999999995], [1440246528.0, 61520000.0, 62.152896], [1440248256.0, 61540000.0, 62.128284], [1440249984.0, 61560000.0, 62.103664], [1440251712.0, 61580000.0, 62.079035999999995], [1440253440.0, 61600000.0, 62.0544], [1440255168.0, 61620000.0, 62.029756], [1440256896.0, 61640000.0, 62.005104], [1440258624.0, 61660000.0, 61.980444], [1440260352.0, 61680000.0, 61.955776], [1440262080.0, 61700000.0, 61.9311], [1440263808.0, 61720000.0, 61.906416], [1440265536.0, 61740000.0, 61.881724], [1440267264.0, 61760000.0, 61.857023999999996], [1440268992.0, 61780000.0, 61.832316], [1440270720.0, 61800000.0, 61.8076], [1440272448.0, 61820000.0, 61.782875999999995], [1440274176.0, 61840000.0, 61.758144], [1440275904.0, 61860000.0, 61.733404], [1440277632.0, 61880000.0, 61.708656000000005], [1440279360.0, 61900000.0, 61.683899999999994], [1440281088.0, 61920000.0, 61.659136], [1440282816.0, 61940000.0, 61.634364], [1440284544.0, 61960000.0, 61.609584000000005], [1440286272.0, 61980000.0, 61.584796], [1440288000.0, 62000000.0, 61.559999999999995], [1440289728.0, 62020000.0, 61.535196], [1440291456.0, 62040000.0, 61.510384], [1440293184.0, 62060000.0, 61.485564], [1440294912.0, 62080000.0, 61.460736], [1440296640.0, 62100000.0, 61.435900000000004], [1440298368.0, 62120000.0, 61.411056], [1440300096.0, 62140000.0, 61.38620399999999], [1440301824.0, 62160000.0, 61.361343999999995], [1440303552.0, 62180000.0, 61.336476], [1440305280.0, 62200000.0, 61.311600000000006], [1440307008.0, 62220000.0, 61.28671599999999], [1440308736.0, 62240000.0, 61.261824], [1440310464.0, 62260000.0, 61.236924], [1440312192.0, 62280000.0, 61.212016000000006], [1440313920.0, 62300000.0, 61.187099999999994], [1440315648.0, 62320000.0, 61.162175999999995], [1440317376.0, 62340000.0, 61.137244], [1440319104.0, 62360000.0, 61.112304], [1440320832.0, 62380000.0, 61.08735599999999], [1440322560.0, 62400000.0, 61.0624], [1440324288.0, 62420000.0, 61.037436], [1440326016.0, 62440000.0, 61.012464], [1440327744.0, 62460000.0, 60.987483999999995], [1440329472.0, 62480000.0, 60.962495999999994], [1440331200.0, 62500000.0, 60.9375], [1440332928.0, 62520000.0, 60.912496000000004], [1440334656.0, 62540000.0, 60.88748400000001], [1440336384.0, 62560000.0, 60.862463999999996], [1440338112.0, 62580000.0, 60.837436], [1440339840.0, 62600000.0, 60.812400000000004], [1440341568.0, 62620000.0, 60.787356], [1440343296.0, 62640000.0, 60.762304], [1440345024.0, 62660000.0, 60.737244], [1440346752.0, 62680000.0, 60.712176], [1440348480.0, 62700000.0, 60.68710000000001], [1440350208.0, 62720000.0, 60.662015999999994], [1440351936.0, 62740000.0, 60.636924], [1440353664.0, 62760000.0, 60.611824000000006], [1440355392.0, 62780000.0, 60.586716], [1440357120.0, 62800000.0, 60.5616], [1440358848.0, 62820000.0, 60.536476], [1440360576.0, 62840000.0, 60.511344], [1440362304.0, 62860000.0, 60.48620400000001], [1440364032.0, 62880000.0, 60.461056], [1440365760.0, 62900000.0, 60.4359], [1440367488.0, 62920000.0, 60.410736], [1440369216.0, 62940000.0, 60.385564], [1440370944.0, 62960000.0, 60.360383999999996], [1440372672.0, 62980000.0, 60.335195999999996], [1440374400.0, 63000000.0, 60.31], [1440376128.0, 63020000.0, 60.28479600000001], [1440377856.0, 63040000.0, 60.259584], [1440379584.0, 63060000.0, 60.234364], [1440381312.0, 63080000.0, 60.209136], [1440383040.0, 63100000.0, 60.18390000000001], [1440384768.0, 63120000.0, 60.15865599999999], [1440386496.0, 63140000.0, 60.133404], [1440388224.0, 63160000.0, 60.108144], [1440389952.0, 63180000.0, 60.082876000000006], [1440391680.0, 63200000.0, 60.057599999999994], [1440393408.0, 63220000.0, 60.032316], [1440395136.0, 63240000.0, 60.007024], [1440396864.0, 63260000.0, 59.98172400000001], [1440398592.0, 63280000.0, 59.956416], [1440400320.0, 63300000.0, 59.9311], [1440402048.0, 63320000.0, 59.905776], [1440403776.0, 63340000.0, 59.880444000000004], [1440405504.0, 63360000.0, 59.855104], [1440407232.0, 63380000.0, 59.829755999999996], [1440408960.0, 63400000.0, 59.8044], [1440410688.0, 63420000.0, 59.779036000000005], [1440412416.0, 63440000.0, 59.75366399999999], [1440414144.0, 63460000.0, 59.728284], [1440415872.0, 63480000.0, 59.702896], [1440417600.0, 63500000.0, 59.6775], [1440419328.0, 63520000.0, 59.65209599999999], [1440421056.0, 63540000.0, 59.626684], [1440422784.0, 63560000.0, 59.601264], [1440424512.0, 63580000.0, 59.575836], [1440426240.0, 63600000.0, 59.550399999999996], [1440427968.0, 63620000.0, 59.524955999999996], [1440429696.0, 63640000.0, 59.499504], [1440431424.0, 63660000.0, 59.474044000000006], [1440433152.0, 63680000.0, 59.448575999999996], [1440434880.0, 63700000.0, 59.4231], [1440436608.0, 63720000.0, 59.397616], [1440438336.0, 63740000.0, 59.37212400000001], [1440440064.0, 63760000.0, 59.346624], [1440441792.0, 63780000.0, 59.321115999999996], [1440443520.0, 63800000.0, 59.2956], [1440445248.0, 63820000.0, 59.270076], [1440446976.0, 63840000.0, 59.244544], [1440448704.0, 63860000.0, 59.219004], [1440450432.0, 63880000.0, 59.193456000000005], [1440452160.0, 63900000.0, 59.1679], [1440453888.0, 63920000.0, 59.14233599999999], [1440455616.0, 63940000.0, 59.116763999999996], [1440457344.0, 63960000.0, 59.091184], [1440459072.0, 63980000.0, 59.065596000000006], [1440460800.0, 64000000.0, 59.03999999999999], [1440462528.0, 64020000.0, 59.014396], [1440464256.0, 64040000.0, 58.988784], [1440465984.0, 64060000.0, 58.963164000000006], [1440467712.0, 64080000.0, 58.937535999999994], [1440469440.0, 64100000.0, 58.911899999999996], [1440471168.0, 64120000.0, 58.886256], [1440472896.0, 64140000.0, 58.860604], [1440474624.0, 64160000.0, 58.83494399999999], [1440476352.0, 64180000.0, 58.809276], [1440478080.0, 64200000.0, 58.7836], [1440479808.0, 64220000.0, 58.757916], [1440481536.0, 64240000.0, 58.732223999999995], [1440483264.0, 64260000.0, 58.706523999999995], [1440484992.0, 64280000.0, 58.680816], [1440486720.0, 64300000.0, 58.655100000000004], [1440488448.0, 64320000.0, 58.62937599999999], [1440490176.0, 64340000.0, 58.603643999999996], [1440491904.0, 64360000.0, 58.577904000000004], [1440493632.0, 64380000.0, 58.552156000000004], [1440495360.0, 64400000.0, 58.526399999999995], [1440497088.0, 64420000.0, 58.500636], [1440498816.0, 64440000.0, 58.474864000000004], [1440500544.0, 64460000.0, 58.449084000000006], [1440502272.0, 64480000.0, 58.42329599999999], [1440504000.0, 64500000.0, 58.3975], [1440505728.0, 64520000.0, 58.371696], [1440507456.0, 64540000.0, 58.345884000000005], [1440509184.0, 64560000.0, 58.320063999999995], [1440510912.0, 64580000.0, 58.294236], [1440512640.0, 64600000.0, 58.2684], [1440514368.0, 64620000.0, 58.242556], [1440516096.0, 64640000.0, 58.21670399999999], [1440517824.0, 64660000.0, 58.190844], [1440519552.0, 64680000.0, 58.164976], [1440521280.0, 64700000.0, 58.139100000000006], [1440523008.0, 64720000.0, 58.113215999999994], [1440524736.0, 64740000.0, 58.087323999999995], [1440526464.0, 64760000.0, 58.061424], [1440528192.0, 64780000.0, 58.035516], [1440529920.0, 64800000.0, 58.00959999999999], [1440531648.0, 64820000.0, 57.983675999999996], [1440533376.0, 64840000.0, 57.957744], [1440535104.0, 64860000.0, 57.931804], [1440536832.0, 64880000.0, 57.90585599999999], [1440538560.0, 64900000.0, 57.8799], [1440540288.0, 64920000.0, 57.853936], [1440542016.0, 64940000.0, 57.827964], [1440543744.0, 64960000.0, 57.801984], [1440545472.0, 64980000.0, 57.775996], [1440547200.0, 65000000.0, 57.75], [1440548928.0, 65020000.0, 57.723996], [1440550656.0, 65040000.0, 57.697984000000005], [1440552384.0, 65060000.0, 57.671963999999996], [1440554112.0, 65080000.0, 57.645936], [1440555840.0, 65100000.0, 57.6199], [1440557568.0, 65120000.0, 57.593856], [1440559296.0, 65140000.0, 57.567803999999995], [1440561024.0, 65160000.0, 57.541744], [1440562752.0, 65180000.0, 57.515676], [1440564480.0, 65200000.0, 57.4896], [1440566208.0, 65220000.0, 57.463516], [1440567936.0, 65240000.0, 57.437424], [1440569664.0, 65260000.0, 57.411324], [1440571392.0, 65280000.0, 57.38521600000001], [1440573120.0, 65300000.0, 57.3591], [1440574848.0, 65320000.0, 57.332976], [1440576576.0, 65340000.0, 57.306844000000005], [1440578304.0, 65360000.0, 57.28070400000001], [1440580032.0, 65380000.0, 57.254555999999994], [1440581760.0, 65400000.0, 57.2284], [1440583488.0, 65420000.0, 57.202236], [1440585216.0, 65440000.0, 57.176064000000004], [1440586944.0, 65460000.0, 57.14988399999999], [1440588672.0, 65480000.0, 57.123696], [1440590400.0, 65500000.0, 57.097500000000004], [1440592128.0, 65520000.0, 57.071296000000004], [1440593856.0, 65540000.0, 57.045083999999996], [1440595584.0, 65560000.0, 57.018864], [1440597312.0, 65580000.0, 56.992636000000005], [1440599040.0, 65600000.0, 56.96640000000001], [1440600768.0, 65620000.0, 56.940155999999995], [1440602496.0, 65640000.0, 56.913904], [1440604224.0, 65660000.0, 56.887644], [1440605952.0, 65680000.0, 56.86137600000001], [1440607680.0, 65700000.0, 56.8351], [1440609408.0, 65720000.0, 56.808816], [1440611136.0, 65740000.0, 56.782524], [1440612864.0, 65760000.0, 56.756224], [1440614592.0, 65780000.0, 56.729915999999996], [1440616320.0, 65800000.0, 56.7036], [1440618048.0, 65820000.0, 56.677276], [1440619776.0, 65840000.0, 56.650944], [1440621504.0, 65860000.0, 56.624604], [1440623232.0, 65880000.0, 56.598256], [1440624960.0, 65900000.0, 56.5719], [1440626688.0, 65920000.0, 56.545536000000006], [1440628416.0, 65940000.0, 56.519163999999996], [1440630144.0, 65960000.0, 56.492784], [1440631872.0, 65980000.0, 56.466396], [1440633600.0, 66000000.0, 56.440000000000005], [1440635328.0, 66020000.0, 56.413596], [1440637056.0, 66040000.0, 56.387184], [1440638784.0, 66060000.0, 56.360764], [1440640512.0, 66080000.0, 56.33433600000001], [1440642240.0, 66100000.0, 56.3079], [1440643968.0, 66120000.0, 56.281456], [1440645696.0, 66140000.0, 56.255004], [1440647424.0, 66160000.0, 56.22854400000001], [1440649152.0, 66180000.0, 56.202076], [1440650880.0, 66200000.0, 56.175599999999996], [1440652608.0, 66220000.0, 56.149116], [1440654336.0, 66240000.0, 56.122624], [1440656064.0, 66260000.0, 56.096123999999996], [1440657792.0, 66280000.0, 56.069615999999996], [1440659520.0, 66300000.0, 56.0431], [1440661248.0, 66320000.0, 56.01657600000001], [1440662976.0, 66340000.0, 55.990044], [1440664704.0, 66360000.0, 55.963504], [1440666432.0, 66380000.0, 55.936956], [1440668160.0, 66400000.0, 55.9104], [1440669888.0, 66420000.0, 55.883835999999995], [1440671616.0, 66440000.0, 55.857264], [1440673344.0, 66460000.0, 55.830684], [1440675072.0, 66480000.0, 55.804096], [1440676800.0, 66500000.0, 55.777499999999996], [1440678528.0, 66520000.0, 55.750896], [1440680256.0, 66540000.0, 55.724284000000004], [1440681984.0, 66560000.0, 55.697664], [1440683712.0, 66580000.0, 55.671035999999994], [1440685440.0, 66600000.0, 55.6444], [1440687168.0, 66620000.0, 55.617756], [1440688896.0, 66640000.0, 55.591104], [1440690624.0, 66660000.0, 55.564443999999995], [1440692352.0, 66680000.0, 55.537776], [1440694080.0, 66700000.0, 55.5111], [1440695808.0, 66720000.0, 55.484416], [1440697536.0, 66740000.0, 55.45772399999999], [1440699264.0, 66760000.0, 55.431024], [1440700992.0, 66780000.0, 55.404316], [1440702720.0, 66800000.0, 55.3776], [1440704448.0, 66820000.0, 55.35087599999999], [1440706176.0, 66840000.0, 55.324144], [1440707904.0, 66860000.0, 55.297404], [1440709632.0, 66880000.0, 55.270656], [1440711360.0, 66900000.0, 55.2439], [1440713088.0, 66920000.0, 55.217135999999996], [1440714816.0, 66940000.0, 55.190364], [1440716544.0, 66960000.0, 55.163584], [1440718272.0, 66980000.0, 55.136796], [1440720000.0, 67000000.0, 55.11], [1440721728.0, 67020000.0, 55.083196], [1440723456.0, 67040000.0, 55.056384], [1440725184.0, 67060000.0, 55.02956399999999], [1440726912.0, 67080000.0, 55.002736], [1440728640.0, 67100000.0, 54.9759], [1440730368.0, 67120000.0, 54.949056000000006], [1440732096.0, 67140000.0, 54.922203999999994], [1440733824.0, 67160000.0, 54.895343999999994], [1440735552.0, 67180000.0, 54.868476], [1440737280.0, 67200000.0, 54.84160000000001], [1440739008.0, 67220000.0, 54.814716], [1440740736.0, 67240000.0, 54.787824], [1440742464.0, 67260000.0, 54.760924], [1440744192.0, 67280000.0, 54.734016000000004], [1440745920.0, 67300000.0, 54.7071], [1440747648.0, 67320000.0, 54.680175999999996], [1440749376.0, 67340000.0, 54.653244], [1440751104.0, 67360000.0, 54.626304000000005], [1440752832.0, 67380000.0, 54.59935599999999], [1440754560.0, 67400000.0, 54.572399999999995], [1440756288.0, 67420000.0, 54.545436], [1440758016.0, 67440000.0, 54.518464], [1440759744.0, 67460000.0, 54.49148399999999], [1440761472.0, 67480000.0, 54.464496], [1440763200.0, 67500000.0, 54.4375], [1440764928.0, 67520000.0, 54.410496], [1440766656.0, 67540000.0, 54.383484], [1440768384.0, 67560000.0, 54.356463999999995], [1440770112.0, 67580000.0, 54.329436], [1440771840.0, 67600000.0, 54.302400000000006], [1440773568.0, 67620000.0, 54.27535600000001], [1440775296.0, 67640000.0, 54.248304], [1440777024.0, 67660000.0, 54.221244], [1440778752.0, 67680000.0, 54.194176000000006], [1440780480.0, 67700000.0, 54.167100000000005], [1440782208.0, 67720000.0, 54.140015999999996], [1440783936.0, 67740000.0, 54.112924], [1440785664.0, 67760000.0, 54.085824], [1440787392.0, 67780000.0, 54.058716000000004], [1440789120.0, 67800000.0, 54.0316], [1440790848.0, 67820000.0, 54.004476], [1440792576.0, 67840000.0, 53.977344], [1440794304.0, 67860000.0, 53.95020400000001], [1440796032.0, 67880000.0, 53.923055999999995], [1440797760.0, 67900000.0, 53.8959], [1440799488.0, 67920000.0, 53.868736000000006], [1440801216.0, 67940000.0, 53.841564000000005], [1440802944.0, 67960000.0, 53.814384], [1440804672.0, 67980000.0, 53.787196], [1440806400.0, 68000000.0, 53.760000000000005], [1440808128.0, 68020000.0, 53.73279600000001], [1440809856.0, 68040000.0, 53.705583999999995], [1440811584.0, 68060000.0, 53.678364], [1440813312.0, 68080000.0, 53.651136], [1440815040.0, 68100000.0, 53.623900000000006], [1440816768.0, 68120000.0, 53.596655999999996], [1440818496.0, 68140000.0, 53.569404], [1440820224.0, 68160000.0, 53.542144], [1440821952.0, 68180000.0, 53.51487600000001], [1440823680.0, 68200000.0, 53.48759999999999], [1440825408.0, 68220000.0, 53.460316], [1440827136.0, 68240000.0, 53.433024], [1440828864.0, 68260000.0, 53.405724000000006], [1440830592.0, 68280000.0, 53.378415999999994], [1440832320.0, 68300000.0, 53.3511], [1440834048.0, 68320000.0, 53.323776], [1440835776.0, 68340000.0, 53.29644400000001], [1440837504.0, 68360000.0, 53.269104], [1440839232.0, 68380000.0, 53.241756], [1440840960.0, 68400000.0, 53.214400000000005], [1440842688.0, 68420000.0, 53.187036000000006], [1440844416.0, 68440000.0, 53.159664], [1440846144.0, 68460000.0, 53.132284], [1440847872.0, 68480000.0, 53.104896000000004], [1440849600.0, 68500000.0, 53.07750000000001], [1440851328.0, 68520000.0, 53.050095999999996], [1440853056.0, 68540000.0, 53.022684], [1440854784.0, 68560000.0, 52.995264], [1440856512.0, 68580000.0, 52.967836000000005], [1440858240.0, 68600000.0, 52.9404], [1440859968.0, 68620000.0, 52.912956], [1440861696.0, 68640000.0, 52.885504000000005], [1440863424.0, 68660000.0, 52.85804400000001], [1440865152.0, 68680000.0, 52.83057599999999], [1440866880.0, 68700000.0, 52.8031], [1440868608.0, 68720000.0, 52.775616], [1440870336.0, 68740000.0, 52.748124000000004], [1440872064.0, 68760000.0, 52.720623999999994], [1440873792.0, 68780000.0, 52.693115999999996], [1440875520.0, 68800000.0, 52.665600000000005], [1440877248.0, 68820000.0, 52.638076000000005], [1440878976.0, 68840000.0, 52.610544], [1440880704.0, 68860000.0, 52.583003999999995], [1440882432.0, 68880000.0, 52.555456], [1440884160.0, 68900000.0, 52.5279], [1440885888.0, 68920000.0, 52.500336], [1440887616.0, 68940000.0, 52.472764], [1440889344.0, 68960000.0, 52.445184000000005], [1440891072.0, 68980000.0, 52.417596], [1440892800.0, 69000000.0, 52.38999999999999], [1440894528.0, 69020000.0, 52.362396], [1440896256.0, 69040000.0, 52.334784], [1440897984.0, 69060000.0, 52.30716400000001], [1440899712.0, 69080000.0, 52.27953599999999], [1440901440.0, 69100000.0, 52.2519], [1440903168.0, 69120000.0, 52.224256000000004], [1440904896.0, 69140000.0, 52.196604], [1440906624.0, 69160000.0, 52.168943999999996], [1440908352.0, 69180000.0, 52.141276], [1440910080.0, 69200000.0, 52.1136], [1440911808.0, 69220000.0, 52.085916000000005], [1440913536.0, 69240000.0, 52.058223999999996], [1440915264.0, 69260000.0, 52.030524], [1440916992.0, 69280000.0, 52.002816], [1440918720.0, 69300000.0, 51.975100000000005], [1440920448.0, 69320000.0, 51.94737599999999], [1440922176.0, 69340000.0, 51.919644], [1440923904.0, 69360000.0, 51.891904000000004], [1440925632.0, 69380000.0, 51.864156], [1440927360.0, 69400000.0, 51.8364], [1440929088.0, 69420000.0, 51.808636], [1440930816.0, 69440000.0, 51.780864], [1440932544.0, 69460000.0, 51.753084], [1440934272.0, 69480000.0, 51.72529599999999], [1440936000.0, 69500000.0, 51.6975], [1440937728.0, 69520000.0, 51.669696], [1440939456.0, 69540000.0, 51.641884000000005], [1440941184.0, 69560000.0, 51.61406399999999], [1440942912.0, 69580000.0, 51.586236], [1440944640.0, 69600000.0, 51.5584], [1440946368.0, 69620000.0, 51.530556000000004], [1440948096.0, 69640000.0, 51.502703999999994], [1440949824.0, 69660000.0, 51.474844], [1440951552.0, 69680000.0, 51.446976], [1440953280.0, 69700000.0, 51.4191], [1440955008.0, 69720000.0, 51.39121599999999], [1440956736.0, 69740000.0, 51.363324], [1440958464.0, 69760000.0, 51.335424], [1440960192.0, 69780000.0, 51.30751600000001], [1440961920.0, 69800000.0, 51.279599999999995], [1440963648.0, 69820000.0, 51.251675999999996], [1440965376.0, 69840000.0, 51.223744], [1440967104.0, 69860000.0, 51.195804], [1440968832.0, 69880000.0, 51.16785599999999], [1440970560.0, 69900000.0, 51.1399], [1440972288.0, 69920000.0, 51.111936], [1440974016.0, 69940000.0, 51.083964], [1440975744.0, 69960000.0, 51.055983999999995], [1440977472.0, 69980000.0, 51.027995999999995], [1440979200.0, 70000000.0, 51.0], [1440980928.0, 70020000.0, 50.971996000000004], [1440982656.0, 70040000.0, 50.94398400000001], [1440984384.0, 70060000.0, 50.915963999999995], [1440986112.0, 70080000.0, 50.887936], [1440987840.0, 70100000.0, 50.8599], [1440989568.0, 70120000.0, 50.83185600000001], [1440991296.0, 70140000.0, 50.803804], [1440993024.0, 70160000.0, 50.775744], [1440994752.0, 70180000.0, 50.747676000000006], [1440996480.0, 70200000.0, 50.71960000000001], [1440998208.0, 70220000.0, 50.691516], [1440999936.0, 70240000.0, 50.663424], [1441001664.0, 70260000.0, 50.635324000000004], [1441003392.0, 70280000.0, 50.60721600000001], [1441005120.0, 70300000.0, 50.5791], [1441006848.0, 70320000.0, 50.550976], [1441008576.0, 70340000.0, 50.522844], [1441010304.0, 70360000.0, 50.494704000000006], [1441012032.0, 70380000.0, 50.466556], [1441013760.0, 70400000.0, 50.4384], [1441015488.0, 70420000.0, 50.410236000000005], [1441017216.0, 70440000.0, 50.38206400000001], [1441018944.0, 70460000.0, 50.353883999999994], [1441020672.0, 70480000.0, 50.325696], [1441022400.0, 70500000.0, 50.2975], [1441024128.0, 70520000.0, 50.269296000000004], [1441025856.0, 70540000.0, 50.241083999999994], [1441027584.0, 70560000.0, 50.212863999999996], [1441029312.0, 70580000.0, 50.184636000000005], [1441031040.0, 70600000.0, 50.156400000000005], [1441032768.0, 70620000.0, 50.128156], [1441034496.0, 70640000.0, 50.099904], [1441036224.0, 70660000.0, 50.071644], [1441037952.0, 70680000.0, 50.043376], [1441039680.0, 70700000.0, 50.0151], [1441041408.0, 70720000.0, 49.986816], [1441043136.0, 70740000.0, 49.958524000000004], [1441044864.0, 70760000.0, 49.930224], [1441046592.0, 70780000.0, 49.90191599999999], [1441048320.0, 70800000.0, 49.873599999999996], [1441050048.0, 70820000.0, 49.845276000000005], [1441051776.0, 70840000.0, 49.81694400000001], [1441053504.0, 70860000.0, 49.78860399999999], [1441055232.0, 70880000.0, 49.760256], [1441056960.0, 70900000.0, 49.7319], [1441058688.0, 70920000.0, 49.70353600000001], [1441060416.0, 70940000.0, 49.675163999999995], [1441062144.0, 70960000.0, 49.646784], [1441063872.0, 70980000.0, 49.618396000000004], [1441065600.0, 71000000.0, 49.59], [1441067328.0, 71020000.0, 49.561595999999994], [1441069056.0, 71040000.0, 49.533184], [1441070784.0, 71060000.0, 49.504764], [1441072512.0, 71080000.0, 49.476336], [1441074240.0, 71100000.0, 49.4479], [1441075968.0, 71120000.0, 49.419456], [1441077696.0, 71140000.0, 49.391004], [1441079424.0, 71160000.0, 49.36254400000001], [1441081152.0, 71180000.0, 49.334075999999996], [1441082880.0, 71200000.0, 49.3056], [1441084608.0, 71220000.0, 49.277116], [1441086336.0, 71240000.0, 49.24862400000001], [1441088064.0, 71260000.0, 49.220124], [1441089792.0, 71280000.0, 49.191615999999996], [1441091520.0, 71300000.0, 49.1631], [1441093248.0, 71320000.0, 49.134576], [1441094976.0, 71340000.0, 49.106044], [1441096704.0, 71360000.0, 49.077504], [1441098432.0, 71380000.0, 49.048956000000004], [1441100160.0, 71400000.0, 49.0204], [1441101888.0, 71420000.0, 48.99183599999999], [1441103616.0, 71440000.0, 48.963263999999995], [1441105344.0, 71460000.0, 48.934684000000004], [1441107072.0, 71480000.0, 48.906096000000005], [1441108800.0, 71500000.0, 48.8775], [1441110528.0, 71520000.0, 48.848895999999996], [1441112256.0, 71540000.0, 48.820284], [1441113984.0, 71560000.0, 48.791664000000004], [1441115712.0, 71580000.0, 48.76303599999999], [1441117440.0, 71600000.0, 48.7344], [1441119168.0, 71620000.0, 48.705756], [1441120896.0, 71640000.0, 48.67710400000001], [1441122624.0, 71660000.0, 48.648444], [1441124352.0, 71680000.0, 48.619775999999995], [1441126080.0, 71700000.0, 48.591100000000004], [1441127808.0, 71720000.0, 48.562416000000006], [1441129536.0, 71740000.0, 48.53372399999999], [1441131264.0, 71760000.0, 48.505024], [1441132992.0, 71780000.0, 48.476316000000004], [1441134720.0, 71800000.0, 48.4476], [1441136448.0, 71820000.0, 48.418876], [1441138176.0, 71840000.0, 48.390144], [1441139904.0, 71860000.0, 48.361404], [1441141632.0, 71880000.0, 48.33265600000001], [1441143360.0, 71900000.0, 48.30389999999999], [1441145088.0, 71920000.0, 48.275135999999996], [1441146816.0, 71940000.0, 48.246364], [1441148544.0, 71960000.0, 48.217584], [1441150272.0, 71980000.0, 48.188795999999996], [1441152000.0, 72000000.0, 48.16], [1441153728.0, 72020000.0, 48.131196], [1441155456.0, 72040000.0, 48.102384], [1441157184.0, 72060000.0, 48.073564], [1441158912.0, 72080000.0, 48.044736], [1441160640.0, 72100000.0, 48.0159], [1441162368.0, 72120000.0, 47.987056], [1441164096.0, 72140000.0, 47.958203999999995], [1441165824.0, 72160000.0, 47.929344], [1441167552.0, 72180000.0, 47.900476], [1441169280.0, 72200000.0, 47.8716], [1441171008.0, 72220000.0, 47.842715999999996], [1441172736.0, 72240000.0, 47.813824], [1441174464.0, 72260000.0, 47.784924000000004], [1441176192.0, 72280000.0, 47.756016], [1441177920.0, 72300000.0, 47.72709999999999], [1441179648.0, 72320000.0, 47.698176], [1441181376.0, 72340000.0, 47.669244], [1441183104.0, 72360000.0, 47.640304], [1441184832.0, 72380000.0, 47.611355999999994], [1441186560.0, 72400000.0, 47.5824], [1441188288.0, 72420000.0, 47.553436], [1441190016.0, 72440000.0, 47.524464], [1441191744.0, 72460000.0, 47.49548399999999], [1441193472.0, 72480000.0, 47.466496], [1441195200.0, 72500000.0, 47.4375], [1441196928.0, 72520000.0, 47.40849600000001], [1441198656.0, 72540000.0, 47.379484000000005], [1441200384.0, 72560000.0, 47.350463999999995], [1441202112.0, 72580000.0, 47.321436], [1441203840.0, 72600000.0, 47.2924], [1441205568.0, 72620000.0, 47.26335600000001], [1441207296.0, 72640000.0, 47.234303999999995], [1441209024.0, 72660000.0, 47.205244], [1441210752.0, 72680000.0, 47.176176000000005], [1441212480.0, 72700000.0, 47.14710000000001], [1441214208.0, 72720000.0, 47.118016], [1441215936.0, 72740000.0, 47.088924], [1441217664.0, 72760000.0, 47.059824000000006], [1441219392.0, 72780000.0, 47.030716000000005], [1441221120.0, 72800000.0, 47.001599999999996], [1441222848.0, 72820000.0, 46.972476], [1441224576.0, 72840000.0, 46.943344], [1441226304.0, 72860000.0, 46.914204000000005], [1441228032.0, 72880000.0, 46.885056], [1441229760.0, 72900000.0, 46.8559], [1441231488.0, 72920000.0, 46.826736000000004], [1441233216.0, 72940000.0, 46.79756400000001], [1441234944.0, 72960000.0, 46.768384], [1441236672.0, 72980000.0, 46.739196], [1441238400.0, 73000000.0, 46.71], [1441240128.0, 73020000.0, 46.68079600000001], [1441241856.0, 73040000.0, 46.65158399999999], [1441243584.0, 73060000.0, 46.622364], [1441245312.0, 73080000.0, 46.593136], [1441247040.0, 73100000.0, 46.563900000000004], [1441248768.0, 73120000.0, 46.534656], [1441250496.0, 73140000.0, 46.505404], [1441252224.0, 73160000.0, 46.476144000000005], [1441253952.0, 73180000.0, 46.446876], [1441255680.0, 73200000.0, 46.41759999999999], [1441257408.0, 73220000.0, 46.388315999999996], [1441259136.0, 73240000.0, 46.359024000000005], [1441260864.0, 73260000.0, 46.329724000000006], [1441262592.0, 73280000.0, 46.300416], [1441264320.0, 73300000.0, 46.2711], [1441266048.0, 73320000.0, 46.241776], [1441267776.0, 73340000.0, 46.212444000000005], [1441269504.0, 73360000.0, 46.18310399999999], [1441271232.0, 73380000.0, 46.153756], [1441272960.0, 73400000.0, 46.1244], [1441274688.0, 73420000.0, 46.09503600000001], [1441276416.0, 73440000.0, 46.065664], [1441278144.0, 73460000.0, 46.036284], [1441279872.0, 73480000.0, 46.006896000000005], [1441281600.0, 73500000.0, 45.977500000000006], [1441283328.0, 73520000.0, 45.94809599999999], [1441285056.0, 73540000.0, 45.918684], [1441286784.0, 73560000.0, 45.889264000000004], [1441288512.0, 73580000.0, 45.85983600000001], [1441290240.0, 73600000.0, 45.8304], [1441291968.0, 73620000.0, 45.800956], [1441293696.0, 73640000.0, 45.771504], [1441295424.0, 73660000.0, 45.74204400000001], [1441297152.0, 73680000.0, 45.712576], [1441298880.0, 73700000.0, 45.683099999999996], [1441300608.0, 73720000.0, 45.653616], [1441302336.0, 73740000.0, 45.624124], [1441304064.0, 73760000.0, 45.594623999999996], [1441305792.0, 73780000.0, 45.565115999999996], [1441307520.0, 73800000.0, 45.5356], [1441309248.0, 73820000.0, 45.50607600000001], [1441310976.0, 73840000.0, 45.476544], [1441312704.0, 73860000.0, 45.447004], [1441314432.0, 73880000.0, 45.417456], [1441316160.0, 73900000.0, 45.3879], [1441317888.0, 73920000.0, 45.358335999999994], [1441319616.0, 73940000.0, 45.328764], [1441321344.0, 73960000.0, 45.299184000000004], [1441323072.0, 73980000.0, 45.26959600000001], [1441324800.0, 74000000.0, 45.239999999999995], [1441326528.0, 74020000.0, 45.210395999999996], [1441328256.0, 74040000.0, 45.180784], [1441329984.0, 74060000.0, 45.151164], [1441331712.0, 74080000.0, 45.12153599999999], [1441333440.0, 74100000.0, 45.091899999999995], [1441335168.0, 74120000.0, 45.062256], [1441336896.0, 74140000.0, 45.032604000000006], [1441338624.0, 74160000.0, 45.00294399999999], [1441340352.0, 74180000.0, 44.973276], [1441342080.0, 74200000.0, 44.9436], [1441343808.0, 74220000.0, 44.91391600000001], [1441345536.0, 74240000.0, 44.884223999999996], [1441347264.0, 74260000.0, 44.854524], [1441348992.0, 74280000.0, 44.824816], [1441350720.0, 74300000.0, 44.795100000000005], [1441352448.0, 74320000.0, 44.765375999999996], [1441354176.0, 74340000.0, 44.735644], [1441355904.0, 74360000.0, 44.705904000000004], [1441357632.0, 74380000.0, 44.676156000000006], [1441359360.0, 74400000.0, 44.64639999999999], [1441361088.0, 74420000.0, 44.616636], [1441362816.0, 74440000.0, 44.586864], [1441364544.0, 74460000.0, 44.557084], [1441366272.0, 74480000.0, 44.52729599999999], [1441368000.0, 74500000.0, 44.497499999999995], [1441369728.0, 74520000.0, 44.467696000000004], [1441371456.0, 74540000.0, 44.437884000000004], [1441373184.0, 74560000.0, 44.408063999999996], [1441374912.0, 74580000.0, 44.378235999999994], [1441376640.0, 74600000.0, 44.3484], [1441378368.0, 74620000.0, 44.318556], [1441380096.0, 74640000.0, 44.288703999999996], [1441381824.0, 74660000.0, 44.258843999999996], [1441383552.0, 74680000.0, 44.228976], [1441385280.0, 74700000.0, 44.1991], [1441387008.0, 74720000.0, 44.16921599999999], [1441388736.0, 74740000.0, 44.139323999999995], [1441390464.0, 74760000.0, 44.109424], [1441392192.0, 74780000.0, 44.079516000000005], [1441393920.0, 74800000.0, 44.04959999999999], [1441395648.0, 74820000.0, 44.019676], [1441397376.0, 74840000.0, 43.989744], [1441399104.0, 74860000.0, 43.959804000000005], [1441400832.0, 74880000.0, 43.929855999999994], [1441402560.0, 74900000.0, 43.899899999999995], [1441404288.0, 74920000.0, 43.869936], [1441406016.0, 74940000.0, 43.839964], [1441407744.0, 74960000.0, 43.80998399999999], [1441409472.0, 74980000.0, 43.779996], [1441411200.0, 75000000.0, 43.75], [1441412928.0, 75020000.0, 43.719996], [1441414656.0, 75040000.0, 43.68998400000001], [1441416384.0, 75060000.0, 43.659963999999995], [1441418112.0, 75080000.0, 43.629936], [1441419840.0, 75100000.0, 43.599900000000005], [1441421568.0, 75120000.0, 43.56985600000001], [1441423296.0, 75140000.0, 43.539804], [1441425024.0, 75160000.0, 43.509744], [1441426752.0, 75180000.0, 43.479676000000005], [1441428480.0, 75200000.0, 43.449600000000004], [1441430208.0, 75220000.0, 43.419515999999994], [1441431936.0, 75240000.0, 43.389424], [1441433664.0, 75260000.0, 43.359324], [1441435392.0, 75280000.0, 43.32921600000001], [1441437120.0, 75300000.0, 43.299099999999996], [1441438848.0, 75320000.0, 43.268976], [1441440576.0, 75340000.0, 43.238844], [1441442304.0, 75360000.0, 43.208704000000004], [1441444032.0, 75380000.0, 43.17855599999999], [1441445760.0, 75400000.0, 43.1484], [1441447488.0, 75420000.0, 43.118236], [1441449216.0, 75440000.0, 43.088064], [1441450944.0, 75460000.0, 43.057883999999994], [1441452672.0, 75480000.0, 43.027696], [1441454400.0, 75500000.0, 42.9975], [1441456128.0, 75520000.0, 42.967296000000005], [1441457856.0, 75540000.0, 42.937084], [1441459584.0, 75560000.0, 42.906864], [1441461312.0, 75580000.0, 42.876636000000005], [1441463040.0, 75600000.0, 42.8464], [1441464768.0, 75620000.0, 42.81615599999999], [1441466496.0, 75640000.0, 42.785904], [1441468224.0, 75660000.0, 42.755644000000004], [1441469952.0, 75680000.0, 42.725376000000004], [1441471680.0, 75700000.0, 42.6951], [1441473408.0, 75720000.0, 42.664816], [1441475136.0, 75740000.0, 42.634524], [1441476864.0, 75760000.0, 42.60422400000001], [1441478592.0, 75780000.0, 42.573916], [1441480320.0, 75800000.0, 42.5436], [1441482048.0, 75820000.0, 42.513276000000005], [1441483776.0, 75840000.0, 42.482944], [1441485504.0, 75860000.0, 42.452603999999994], [1441487232.0, 75880000.0, 42.422256], [1441488960.0, 75900000.0, 42.3919], [1441490688.0, 75920000.0, 42.36153600000001], [1441492416.0, 75940000.0, 42.331163999999994], [1441494144.0, 75960000.0, 42.300784], [1441495872.0, 75980000.0, 42.270396000000005], [1441497600.0, 76000000.0, 42.24], [1441499328.0, 76020000.0, 42.209596], [1441501056.0, 76040000.0, 42.179184], [1441502784.0, 76060000.0, 42.148764], [1441504512.0, 76080000.0, 42.118336000000006], [1441506240.0, 76100000.0, 42.0879], [1441507968.0, 76120000.0, 42.057456], [1441509696.0, 76140000.0, 42.027004000000005], [1441511424.0, 76160000.0, 41.99654400000001], [1441513152.0, 76180000.0, 41.966075999999994], [1441514880.0, 76200000.0, 41.9356], [1441516608.0, 76220000.0, 41.905116], [1441518336.0, 76240000.0, 41.874624000000004], [1441520064.0, 76260000.0, 41.844123999999994], [1441521792.0, 76280000.0, 41.813615999999996], [1441523520.0, 76300000.0, 41.783100000000005], [1441525248.0, 76320000.0, 41.752576000000005], [1441526976.0, 76340000.0, 41.722044], [1441528704.0, 76360000.0, 41.691503999999995], [1441530432.0, 76380000.0, 41.660956], [1441532160.0, 76400000.0, 41.6304], [1441533888.0, 76420000.0, 41.599835999999996], [1441535616.0, 76440000.0, 41.569264], [1441537344.0, 76460000.0, 41.538684], [1441539072.0, 76480000.0, 41.508096], [1441540800.0, 76500000.0, 41.47749999999999], [1441542528.0, 76520000.0, 41.446895999999995], [1441544256.0, 76540000.0, 41.416284000000005], [1441545984.0, 76560000.0, 41.385664000000006], [1441547712.0, 76580000.0, 41.35503599999999], [1441549440.0, 76600000.0, 41.3244], [1441551168.0, 76620000.0, 41.293756], [1441552896.0, 76640000.0, 41.263104000000006], [1441554624.0, 76660000.0, 41.232443999999994], [1441556352.0, 76680000.0, 41.201775999999995], [1441558080.0, 76700000.0, 41.1711], [1441559808.0, 76720000.0, 41.140416], [1441561536.0, 76740000.0, 41.10972399999999], [1441563264.0, 76760000.0, 41.079024], [1441564992.0, 76780000.0, 41.048316], [1441566720.0, 76800000.0, 41.0176], [1441568448.0, 76820000.0, 40.986875999999995], [1441570176.0, 76840000.0, 40.956143999999995], [1441571904.0, 76860000.0, 40.925404], [1441573632.0, 76880000.0, 40.894656000000005], [1441575360.0, 76900000.0, 40.863899999999994], [1441577088.0, 76920000.0, 40.833135999999996], [1441578816.0, 76940000.0, 40.802364000000004], [1441580544.0, 76960000.0, 40.771584000000004], [1441582272.0, 76980000.0, 40.740795999999996], [1441584000.0, 77000000.0, 40.709999999999994], [1441585728.0, 77020000.0, 40.679196], [1441587456.0, 77040000.0, 40.64838400000001], [1441589184.0, 77060000.0, 40.617563999999994], [1441590912.0, 77080000.0, 40.586735999999995], [1441592640.0, 77100000.0, 40.5559], [1441594368.0, 77120000.0, 40.525056000000006], [1441596096.0, 77140000.0, 40.494203999999996], [1441597824.0, 77160000.0, 40.463344], [1441599552.0, 77180000.0, 40.432476], [1441601280.0, 77200000.0, 40.4016], [1441603008.0, 77220000.0, 40.370715999999994], [1441604736.0, 77240000.0, 40.339824], [1441606464.0, 77260000.0, 40.308924], [1441608192.0, 77280000.0, 40.278016], [1441609920.0, 77300000.0, 40.247099999999996], [1441611648.0, 77320000.0, 40.216176], [1441613376.0, 77340000.0, 40.185244], [1441615104.0, 77360000.0, 40.154304], [1441616832.0, 77380000.0, 40.123355999999994], [1441618560.0, 77400000.0, 40.0924], [1441620288.0, 77420000.0, 40.061436], [1441622016.0, 77440000.0, 40.030464], [1441623744.0, 77460000.0, 39.999483999999995], [1441625472.0, 77480000.0, 39.968495999999995], [1441627200.0, 77500000.0, 39.9375], [1441628928.0, 77520000.0, 39.906496000000004], [1441630656.0, 77540000.0, 39.87548400000001], [1441632384.0, 77560000.0, 39.844463999999995], [1441634112.0, 77580000.0, 39.813436], [1441635840.0, 77600000.0, 39.7824], [1441637568.0, 77620000.0, 39.75135600000001], [1441639296.0, 77640000.0, 39.720304], [1441641024.0, 77660000.0, 39.689244], [1441642752.0, 77680000.0, 39.658176000000005], [1441644480.0, 77700000.0, 39.627100000000006], [1441646208.0, 77720000.0, 39.596016], [1441647936.0, 77740000.0, 39.564924], [1441649664.0, 77760000.0, 39.533824], [1441651392.0, 77780000.0, 39.50271600000001], [1441653120.0, 77800000.0, 39.471599999999995], [1441654848.0, 77820000.0, 39.440476], [1441656576.0, 77840000.0, 39.409344000000004], [1441658304.0, 77860000.0, 39.378204000000004], [1441660032.0, 77880000.0, 39.347055999999995], [1441661760.0, 77900000.0, 39.3159], [1441663488.0, 77920000.0, 39.284736], [1441665216.0, 77940000.0, 39.253564000000004], [1441666944.0, 77960000.0, 39.222384], [1441668672.0, 77980000.0, 39.191196], [1441670400.0, 78000000.0, 39.160000000000004], [1441672128.0, 78020000.0, 39.12879600000001], [1441673856.0, 78040000.0, 39.097584], [1441675584.0, 78060000.0, 39.066364], [1441677312.0, 78080000.0, 39.035136], [1441679040.0, 78100000.0, 39.00390000000001], [1441680768.0, 78120000.0, 38.97265599999999], [1441682496.0, 78140000.0, 38.941404], [1441684224.0, 78160000.0, 38.910144], [1441685952.0, 78180000.0, 38.878876000000005], [1441687680.0, 78200000.0, 38.84759999999999], [1441689408.0, 78220000.0, 38.816316], [1441691136.0, 78240000.0, 38.785024], [1441692864.0, 78260000.0, 38.753724000000005], [1441694592.0, 78280000.0, 38.722415999999996], [1441696320.0, 78300000.0, 38.6911], [1441698048.0, 78320000.0, 38.659776], [1441699776.0, 78340000.0, 38.62844400000001], [1441701504.0, 78360000.0, 38.597103999999995], [1441703232.0, 78380000.0, 38.565756], [1441704960.0, 78400000.0, 38.534400000000005], [1441706688.0, 78420000.0, 38.50303600000001], [1441708416.0, 78440000.0, 38.471664], [1441710144.0, 78460000.0, 38.440284], [1441711872.0, 78480000.0, 38.408896], [1441713600.0, 78500000.0, 38.377500000000005], [1441715328.0, 78520000.0, 38.346095999999996], [1441717056.0, 78540000.0, 38.314684], [1441718784.0, 78560000.0, 38.283264], [1441720512.0, 78580000.0, 38.251836000000004], [1441722240.0, 78600000.0, 38.2204], [1441723968.0, 78620000.0, 38.188956], [1441725696.0, 78640000.0, 38.157504], [1441727424.0, 78660000.0, 38.12604400000001], [1441729152.0, 78680000.0, 38.094575999999996], [1441730880.0, 78700000.0, 38.0631], [1441732608.0, 78720000.0, 38.031616], [1441734336.0, 78740000.0, 38.00012400000001], [1441736064.0, 78760000.0, 37.96862399999999], [1441737792.0, 78780000.0, 37.937115999999996], [1441739520.0, 78800000.0, 37.9056], [1441741248.0, 78820000.0, 37.874076], [1441742976.0, 78840000.0, 37.842544], [1441744704.0, 78860000.0, 37.811004], [1441746432.0, 78880000.0, 37.779456], [1441748160.0, 78900000.0, 37.74790000000001], [1441749888.0, 78920000.0, 37.71633599999999], [1441751616.0, 78940000.0, 37.684764], [1441753344.0, 78960000.0, 37.653184], [1441755072.0, 78980000.0, 37.621596000000004], [1441756800.0, 79000000.0, 37.589999999999996], [1441758528.0, 79020000.0, 37.558395999999995], [1441760256.0, 79040000.0, 37.526784], [1441761984.0, 79060000.0, 37.495164], [1441763712.0, 79080000.0, 37.463536], [1441765440.0, 79100000.0, 37.4319], [1441767168.0, 79120000.0, 37.400256], [1441768896.0, 79140000.0, 37.368604000000005], [1441770624.0, 79160000.0, 37.336943999999995], [1441772352.0, 79180000.0, 37.305276], [1441774080.0, 79200000.0, 37.2736], [1441775808.0, 79220000.0, 37.241916], [1441777536.0, 79240000.0, 37.210224], [1441779264.0, 79260000.0, 37.178523999999996], [1441780992.0, 79280000.0, 37.146816], [1441782720.0, 79300000.0, 37.115100000000005], [1441784448.0, 79320000.0, 37.083375999999994], [1441786176.0, 79340000.0, 37.051643999999996], [1441787904.0, 79360000.0, 37.019904000000004], [1441789632.0, 79380000.0, 36.988156000000004], [1441791360.0, 79400000.0, 36.956399999999995], [1441793088.0, 79420000.0, 36.924636], [1441794816.0, 79440000.0, 36.892864], [1441796544.0, 79460000.0, 36.861084000000005], [1441798272.0, 79480000.0, 36.82929599999999], [1441800000.0, 79500000.0, 36.7975], [1441801728.0, 79520000.0, 36.765696], [1441803456.0, 79540000.0, 36.733884], [1441805184.0, 79560000.0, 36.70206399999999], [1441806912.0, 79580000.0, 36.670235999999996], [1441808640.0, 79600000.0, 36.6384], [1441810368.0, 79620000.0, 36.606556000000005], [1441812096.0, 79640000.0, 36.57470399999999], [1441813824.0, 79660000.0, 36.542843999999995], [1441815552.0, 79680000.0, 36.510976], [1441817280.0, 79700000.0, 36.4791], [1441819008.0, 79720000.0, 36.44721599999999], [1441820736.0, 79740000.0, 36.415324], [1441822464.0, 79760000.0, 36.383424], [1441824192.0, 79780000.0, 36.351516000000004], [1441825920.0, 79800000.0, 36.319599999999994], [1441827648.0, 79820000.0, 36.287676], [1441829376.0, 79840000.0, 36.255744], [1441831104.0, 79860000.0, 36.223804], [1441832832.0, 79880000.0, 36.191855999999994], [1441834560.0, 79900000.0, 36.15989999999999], [1441836288.0, 79920000.0, 36.127936], [1441838016.0, 79940000.0, 36.095964], [1441839744.0, 79960000.0, 36.06398399999999], [1441841472.0, 79980000.0, 36.031996], [1441843200.0, 80000000.0, 36.0], [1441844928.0, 80020000.0, 35.967995999999985], [1441846656.0, 80040000.0, 35.935984000000005], [1441848384.0, 80060000.0, 35.903964], [1441850112.0, 80080000.0, 35.87193600000002], [1441851840.0, 80100000.0, 35.8399], [1441853568.0, 80120000.0, 35.80785599999999], [1441855296.0, 80140000.0, 35.77580400000001], [1441857024.0, 80160000.0, 35.74374400000001], [1441858752.0, 80180000.0, 35.71167599999998], [1441860480.0, 80200000.0, 35.67960000000001], [1441862208.0, 80220000.0, 35.647515999999996], [1441863936.0, 80240000.0, 35.61542400000002], [1441865664.0, 80260000.0, 35.583324000000005], [1441867392.0, 80280000.0, 35.551216], [1441869120.0, 80300000.0, 35.51910000000001], [1441870848.0, 80320000.0, 35.486976], [1441872576.0, 80340000.0, 35.454843999999994], [1441874304.0, 80360000.0, 35.42270400000001], [1441876032.0, 80380000.0, 35.39055599999999], [1441877760.0, 80400000.0, 35.35840000000002], [1441879488.0, 80420000.0, 35.32623600000001], [1441881216.0, 80440000.0, 35.29406399999999], [1441882944.0, 80460000.0, 35.26188400000001], [1441884672.0, 80480000.0, 35.229696000000004], [1441886400.0, 80500000.0, 35.19749999999999], [1441888128.0, 80520000.0, 35.16529600000001], [1441889856.0, 80540000.0, 35.133084], [1441891584.0, 80560000.0, 35.100864000000016], [1441893312.0, 80580000.0, 35.068636], [1441895040.0, 80600000.0, 35.036399999999986], [1441896768.0, 80620000.0, 35.00415600000001], [1441898496.0, 80640000.0, 34.971903999999995], [1441900224.0, 80660000.0, 34.93964399999999], [1441901952.0, 80680000.0, 34.907376], [1441903680.0, 80700000.0, 34.87509999999999], [1441905408.0, 80720000.0, 34.84281600000001], [1441907136.0, 80740000.0, 34.810524], [1441908864.0, 80760000.0, 34.778223999999994], [1441910592.0, 80780000.0, 34.74591600000001], [1441912320.0, 80800000.0, 34.7136], [1441914048.0, 80820000.0, 34.68127599999998], [1441915776.0, 80840000.0, 34.648944], [1441917504.0, 80860000.0, 34.616603999999995], [1441919232.0, 80880000.0, 34.58425600000001], [1441920960.0, 80900000.0, 34.5519], [1441922688.0, 80920000.0, 34.51953599999999], [1441924416.0, 80940000.0, 34.48716400000001], [1441926144.0, 80960000.0, 34.454784000000004], [1441927872.0, 80980000.0, 34.42239599999999], [1441929600.0, 81000000.0, 34.39], [1441931328.0, 81020000.0, 34.357596], [1441933056.0, 81040000.0, 34.32518400000001], [1441934784.0, 81060000.0, 34.292764000000005], [1441936512.0, 81080000.0, 34.260335999999995], [1441938240.0, 81100000.0, 34.227900000000005], [1441939968.0, 81120000.0, 34.19545599999999], [1441941696.0, 81140000.0, 34.16300399999999], [1441943424.0, 81160000.0, 34.130544], [1441945152.0, 81180000.0, 34.09807599999999], [1441946880.0, 81200000.0, 34.06560000000002], [1441948608.0, 81220000.0, 34.03311600000001], [1441950336.0, 81240000.0, 34.00062399999999], [1441952064.0, 81260000.0, 33.968124], [1441953792.0, 81280000.0, 33.935615999999996], [1441955520.0, 81300000.0, 33.90309999999998], [1441957248.0, 81320000.0, 33.870576], [1441958976.0, 81340000.0, 33.838044], [1441960704.0, 81360000.0, 33.80550400000001], [1441962432.0, 81380000.0, 33.77295600000001], [1441964160.0, 81400000.0, 33.740399999999994], [1441965888.0, 81420000.0, 33.707836000000015], [1441967616.0, 81440000.0, 33.675264], [1441969344.0, 81460000.0, 33.64268399999999], [1441971072.0, 81480000.0, 33.610096], [1441972800.0, 81500000.0, 33.5775], [1441974528.0, 81520000.0, 33.54489600000001], [1441976256.0, 81540000.0, 33.51228400000001], [1441977984.0, 81560000.0, 33.479663999999985], [1441979712.0, 81580000.0, 33.44703600000001], [1441981440.0, 81600000.0, 33.4144], [1441983168.0, 81620000.0, 33.38175599999998], [1441984896.0, 81640000.0, 33.34910400000001], [1441986624.0, 81660000.0, 33.31644399999999], [1441988352.0, 81680000.0, 33.28377600000002], [1441990080.0, 81700000.0, 33.25110000000001], [1441991808.0, 81720000.0, 33.21841599999999], [1441993536.0, 81740000.0, 33.18572400000001], [1441995264.0, 81760000.0, 33.153024], [1441996992.0, 81780000.0, 33.12031599999999], [1441998720.0, 81800000.0, 33.08760000000001], [1442000448.0, 81820000.0, 33.05487599999999], [1442002176.0, 81840000.0, 33.02214400000001], [1442003904.0, 81860000.0, 32.98940400000001], [1442005632.0, 81880000.0, 32.956655999999995], [1442007360.0, 81900000.0, 32.9239], [1442009088.0, 81920000.0, 32.891136], [1442010816.0, 81940000.0, 32.85836399999998], [1442012544.0, 81960000.0, 32.825584000000006], [1442014272.0, 81980000.0, 32.792795999999996], [1442016000.0, 82000000.0, 32.760000000000005], [1442017728.0, 82020000.0, 32.727196000000006], [1442019456.0, 82040000.0, 32.694383999999985], [1442021184.0, 82060000.0, 32.66156400000001], [1442022912.0, 82080000.0, 32.628736], [1442024640.0, 82100000.0, 32.595899999999986], [1442026368.0, 82120000.0, 32.563056], [1442028096.0, 82140000.0, 32.530204], [1442029824.0, 82160000.0, 32.49734400000001], [1442031552.0, 82180000.0, 32.464476000000005], [1442033280.0, 82200000.0, 32.43159999999999], [1442035008.0, 82220000.0, 32.39871600000001], [1442036736.0, 82240000.0, 32.365824], [1442038464.0, 82260000.0, 32.33292399999999], [1442040192.0, 82280000.0, 32.300016], [1442041920.0, 82300000.0, 32.2671], [1442043648.0, 82320000.0, 32.234176000000005], [1442045376.0, 82340000.0, 32.201244], [1442047104.0, 82360000.0, 32.16830399999999], [1442048832.0, 82380000.0, 32.135356], [1442050560.0, 82400000.0, 32.1024], [1442052288.0, 82420000.0, 32.06943599999998], [1442054016.0, 82440000.0, 32.03646400000001], [1442055744.0, 82460000.0, 32.003483999999986], [1442057472.0, 82480000.0, 31.97049600000001], [1442059200.0, 82500000.0, 31.9375], [1442060928.0, 82520000.0, 31.904495999999995], [1442062656.0, 82540000.0, 31.87148400000001], [1442064384.0, 82560000.0, 31.838464000000002], [1442066112.0, 82580000.0, 31.805436000000014], [1442067840.0, 82600000.0, 31.772400000000005], [1442069568.0, 82620000.0, 31.739355999999987], [1442071296.0, 82640000.0, 31.706304000000017], [1442073024.0, 82660000.0, 31.673243999999997], [1442074752.0, 82680000.0, 31.640175999999983], [1442076480.0, 82700000.0, 31.607100000000003], [1442078208.0, 82720000.0, 31.574016], [1442079936.0, 82740000.0, 31.540924000000018], [1442081664.0, 82760000.0, 31.507824], [1442083392.0, 82780000.0, 31.474715999999987], [1442085120.0, 82800000.0, 31.441600000000008], [1442086848.0, 82820000.0, 31.408475999999993], [1442088576.0, 82840000.0, 31.375343999999984], [1442090304.0, 82860000.0, 31.34220400000001], [1442092032.0, 82880000.0, 31.309055999999998], [1442093760.0, 82900000.0, 31.275900000000007], [1442095488.0, 82920000.0, 31.242736000000008], [1442097216.0, 82940000.0, 31.209563999999986], [1442098944.0, 82960000.0, 31.176384000000013], [1442100672.0, 82980000.0, 31.143196000000003], [1442102400.0, 83000000.0, 31.109999999999985], [1442104128.0, 83020000.0, 31.076796], [1442105856.0, 83040000.0, 31.043583999999996], [1442107584.0, 83060000.0, 31.01036400000001], [1442109312.0, 83080000.0, 30.977136], [1442111040.0, 83100000.0, 30.943899999999985], [1442112768.0, 83120000.0, 30.910656000000017], [1442114496.0, 83140000.0, 30.877404], [1442116224.0, 83160000.0, 30.844143999999986], [1442117952.0, 83180000.0, 30.810876000000007], [1442119680.0, 83200000.0, 30.777599999999993], [1442121408.0, 83220000.0, 30.744316000000012], [1442123136.0, 83240000.0, 30.71102400000001], [1442124864.0, 83260000.0, 30.677723999999998], [1442126592.0, 83280000.0, 30.644416000000007], [1442128320.0, 83300000.0, 30.611099999999993], [1442130048.0, 83320000.0, 30.577775999999986], [1442131776.0, 83340000.0, 30.544444000000013], [1442133504.0, 83360000.0, 30.51110399999999], [1442135232.0, 83380000.0, 30.477756000000014], [1442136960.0, 83400000.0, 30.4444], [1442138688.0, 83420000.0, 30.411035999999996], [1442140416.0, 83440000.0, 30.37766400000001], [1442142144.0, 83460000.0, 30.344284000000002], [1442143872.0, 83480000.0, 30.310895999999985], [1442145600.0, 83500000.0, 30.277500000000003], [1442147328.0, 83520000.0, 30.244096], [1442149056.0, 83540000.0, 30.210684000000015], [1442150784.0, 83560000.0, 30.177264000000008], [1442152512.0, 83580000.0, 30.143835999999993], [1442154240.0, 83600000.0, 30.110400000000013], [1442155968.0, 83620000.0, 30.076955999999996], [1442157696.0, 83640000.0, 30.043503999999984], [1442159424.0, 83660000.0, 30.010044000000008], [1442161152.0, 83680000.0, 29.976575999999994], [1442162880.0, 83700000.0, 29.943100000000015], [1442164608.0, 83720000.0, 29.909616], [1442166336.0, 83740000.0, 29.87612399999999], [1442168064.0, 83760000.0, 29.842624000000015], [1442169792.0, 83780000.0, 29.809116000000003], [1442171520.0, 83800000.0, 29.775599999999983], [1442173248.0, 83820000.0, 29.74207600000001], [1442174976.0, 83840000.0, 29.70854399999999], [1442176704.0, 83860000.0, 29.675004000000015], [1442178432.0, 83880000.0, 29.641456000000005], [1442180160.0, 83900000.0, 29.607899999999987], [1442181888.0, 83920000.0, 29.574336000000002], [1442183616.0, 83940000.0, 29.540763999999996], [1442185344.0, 83960000.0, 29.50718399999998], [1442187072.0, 83980000.0, 29.473596], [1442188800.0, 84000000.0, 29.439999999999998], [1442190528.0, 84020000.0, 29.406396000000015], [1442192256.0, 84040000.0, 29.372783999999996], [1442193984.0, 84060000.0, 29.339163999999997], [1442195712.0, 84080000.0, 29.305536000000004], [1442197440.0, 84100000.0, 29.271900000000002], [1442199168.0, 84120000.0, 29.238255999999993], [1442200896.0, 84140000.0, 29.204604000000003], [1442202624.0, 84160000.0, 29.17094399999999], [1442204352.0, 84180000.0, 29.137276000000014], [1442206080.0, 84200000.0, 29.1036], [1442207808.0, 84220000.0, 29.069915999999992], [1442209536.0, 84240000.0, 29.036224000000004], [1442211264.0, 84260000.0, 29.002523999999994], [1442212992.0, 84280000.0, 28.96881599999999], [1442214720.0, 84300000.0, 28.935100000000006], [1442216448.0, 84320000.0, 28.901376], [1442218176.0, 84340000.0, 28.867644000000013], [1442219904.0, 84360000.0, 28.833904000000004], [1442221632.0, 84380000.0, 28.800155999999987], [1442223360.0, 84400000.0, 28.766400000000004], [1442225088.0, 84420000.0, 28.732636], [1442226816.0, 84440000.0, 28.698863999999986], [1442228544.0, 84460000.0, 28.665084000000007], [1442230272.0, 84480000.0, 28.631295999999992], [1442232000.0, 84500000.0, 28.59750000000001], [1442233728.0, 84520000.0, 28.563696000000007], [1442235456.0, 84540000.0, 28.529883999999996], [1442237184.0, 84560000.0, 28.496064000000004], [1442238912.0, 84580000.0, 28.46223599999999], [1442240640.0, 84600000.0, 28.428399999999982], [1442242368.0, 84620000.0, 28.39455600000001], [1442244096.0, 84640000.0, 28.360704], [1442245824.0, 84660000.0, 28.32684400000001], [1442247552.0, 84680000.0, 28.292975999999996], [1442249280.0, 84700000.0, 28.25909999999999], [1442251008.0, 84720000.0, 28.225216000000003], [1442252736.0, 84740000.0, 28.191323999999994], [1442254464.0, 84760000.0, 28.157423999999992], [1442256192.0, 84780000.0, 28.12351600000001], [1442257920.0, 84800000.0, 28.08959999999999], [1442259648.0, 84820000.0, 28.055676000000005], [1442261376.0, 84840000.0, 28.021743999999998], [1442263104.0, 84860000.0, 27.987803999999983], [1442264832.0, 84880000.0, 27.953856000000002], [1442266560.0, 84900000.0, 27.9199], [1442268288.0, 84920000.0, 27.885935999999987], [1442270016.0, 84940000.0, 27.85196400000001], [1442271744.0, 84960000.0, 27.817983999999996], [1442273472.0, 84980000.0, 27.783996000000016], [1442275200.0, 85000000.0, 27.75], [1442276928.0, 85020000.0, 27.71599599999999], [1442278656.0, 85040000.0, 27.681984000000014], [1442280384.0, 85060000.0, 27.647964], [1442282112.0, 85080000.0, 27.61393600000001], [1442283840.0, 85100000.0, 27.57990000000001], [1442285568.0, 85120000.0, 27.545855999999986], [1442287296.0, 85140000.0, 27.511804000000012], [1442289024.0, 85160000.0, 27.477744], [1442290752.0, 85180000.0, 27.443675999999982], [1442292480.0, 85200000.0, 27.40960000000001], [1442294208.0, 85220000.0, 27.37551599999999], [1442295936.0, 85240000.0, 27.341424000000018], [1442297664.0, 85260000.0, 27.30732400000001], [1442299392.0, 85280000.0, 27.27321599999999], [1442301120.0, 85300000.0, 27.239100000000008], [1442302848.0, 85320000.0, 27.204976000000002], [1442304576.0, 85340000.0, 27.17084399999999], [1442306304.0, 85360000.0, 27.13670400000001], [1442308032.0, 85380000.0, 27.102555999999993], [1442309760.0, 85400000.0, 27.06840000000001], [1442311488.0, 85420000.0, 27.034236000000007], [1442313216.0, 85440000.0, 27.000063999999995], [1442314944.0, 85460000.0, 26.965884000000017], [1442316672.0, 85480000.0, 26.931696000000002], [1442318400.0, 85500000.0, 26.897499999999994], [1442320128.0, 85520000.0, 26.863296000000005], [1442321856.0, 85540000.0, 26.829083999999995], [1442323584.0, 85560000.0, 26.794864000000018], [1442325312.0, 85580000.0, 26.760636000000005], [1442327040.0, 85600000.0, 26.726399999999998], [1442328768.0, 85620000.0, 26.69215600000001], [1442330496.0, 85640000.0, 26.657904000000002], [1442332224.0, 85660000.0, 26.623643999999985], [1442333952.0, 85680000.0, 26.589376], [1442335680.0, 85700000.0, 26.555099999999996], [1442337408.0, 85720000.0, 26.52081600000001], [1442339136.0, 85740000.0, 26.486524000000003], [1442340864.0, 85760000.0, 26.452223999999987], [1442342592.0, 85780000.0, 26.417916000000005], [1442344320.0, 85800000.0, 26.3836], [1442346048.0, 85820000.0, 26.34927599999999], [1442347776.0, 85840000.0, 26.31494400000001], [1442349504.0, 85860000.0, 26.280603999999997], [1442351232.0, 85880000.0, 26.246256000000017], [1442352960.0, 85900000.0, 26.2119], [1442354688.0, 85920000.0, 26.17753599999999], [1442356416.0, 85940000.0, 26.143164000000013], [1442358144.0, 85960000.0, 26.108784], [1442359872.0, 85980000.0, 26.074395999999993], [1442361600.0, 86000000.0, 26.040000000000006], [1442363328.0, 86020000.0, 26.005595999999997], [1442365056.0, 86040000.0, 25.971184000000008], [1442366784.0, 86060000.0, 25.936763999999997], [1442368512.0, 86080000.0, 25.90233599999999], [1442370240.0, 86100000.0, 25.867900000000006], [1442371968.0, 86120000.0, 25.833455999999998], [1442373696.0, 86140000.0, 25.799003999999982], [1442375424.0, 86160000.0, 25.764544], [1442377152.0, 86180000.0, 25.730075999999997], [1442378880.0, 86200000.0, 25.695600000000013], [1442380608.0, 86220000.0, 25.661116000000007], [1442382336.0, 86240000.0, 25.626623999999993], [1442384064.0, 86260000.0, 25.592124000000013], [1442385792.0, 86280000.0, 25.557615999999996], [1442387520.0, 86300000.0, 25.523099999999985], [1442389248.0, 86320000.0, 25.48857600000001], [1442390976.0, 86340000.0, 25.454043999999996], [1442392704.0, 86360000.0, 25.419504000000018], [1442394432.0, 86380000.0, 25.384956000000003], [1442396160.0, 86400000.0, 25.350399999999993], [1442397888.0, 86420000.0, 25.315836000000004], [1442399616.0, 86440000.0, 25.281263999999993], [1442401344.0, 86460000.0, 25.246683999999988], [1442403072.0, 86480000.0, 25.212096000000003], [1442404800.0, 86500000.0, 25.177499999999995], [1442406528.0, 86520000.0, 25.142896000000007], [1442408256.0, 86540000.0, 25.108283999999998], [1442409984.0, 86560000.0, 25.073663999999994], [1442411712.0, 86580000.0, 25.03903600000001], [1442413440.0, 86600000.0, 25.004400000000004], [1442415168.0, 86620000.0, 24.96975599999999], [1442416896.0, 86640000.0, 24.93510400000001], [1442418624.0, 86660000.0, 24.900443999999993], [1442420352.0, 86680000.0, 24.86577600000001], [1442422080.0, 86700000.0, 24.831100000000006], [1442423808.0, 86720000.0, 24.796415999999994], [1442425536.0, 86740000.0, 24.761724000000015], [1442427264.0, 86760000.0, 24.727024], [1442428992.0, 86780000.0, 24.69231599999999], [1442430720.0, 86800000.0, 24.657600000000002], [1442432448.0, 86820000.0, 24.62287599999999], [1442434176.0, 86840000.0, 24.588144000000014], [1442435904.0, 86860000.0, 24.553404], [1442437632.0, 86880000.0, 24.518655999999993], [1442439360.0, 86900000.0, 24.483900000000006], [1442441088.0, 86920000.0, 24.449135999999996], [1442442816.0, 86940000.0, 24.414363999999992], [1442444544.0, 86960000.0, 24.37958400000001], [1442446272.0, 86980000.0, 24.344795999999988], [1442448000.0, 87000000.0, 24.310000000000016], [1442449728.0, 87020000.0, 24.275195999999994], [1442451456.0, 87040000.0, 24.24038399999999], [1442453184.0, 87060000.0, 24.20556400000001], [1442454912.0, 87080000.0, 24.17073599999999], [1442456640.0, 87100000.0, 24.135899999999978], [1442458368.0, 87120000.0, 24.101056], [1442460096.0, 87140000.0, 24.066204], [1442461824.0, 87160000.0, 24.03134400000002], [1442463552.0, 87180000.0, 23.996476], [1442465280.0, 87200000.0, 23.96159999999999], [1442467008.0, 87220000.0, 23.926716000000013], [1442468736.0, 87240000.0, 23.891824], [1442470464.0, 87260000.0, 23.856923999999978], [1442472192.0, 87280000.0, 23.822016000000005], [1442473920.0, 87300000.0, 23.787099999999995], [1442475648.0, 87320000.0, 23.752176000000006], [1442477376.0, 87340000.0, 23.717243999999994], [1442479104.0, 87360000.0, 23.682303999999988], [1442480832.0, 87380000.0, 23.647356000000002], [1442482560.0, 87400000.0, 23.612399999999994], [1442484288.0, 87420000.0, 23.57743599999999], [1442486016.0, 87440000.0, 23.54246400000001], [1442487744.0, 87460000.0, 23.50748399999999], [1442489472.0, 87480000.0, 23.472496000000007], [1442491200.0, 87500000.0, 23.4375], [1442492928.0, 87520000.0, 23.402495999999985], [1442494656.0, 87540000.0, 23.367484000000005], [1442496384.0, 87560000.0, 23.332464], [1442498112.0, 87580000.0, 23.29743600000002], [1442499840.0, 87600000.0, 23.2624], [1442501568.0, 87620000.0, 23.227355999999986], [1442503296.0, 87640000.0, 23.192304000000007], [1442505024.0, 87660000.0, 23.157244000000006], [1442506752.0, 87680000.0, 23.122175999999982], [1442508480.0, 87700000.0, 23.087100000000007], [1442510208.0, 87720000.0, 23.052015999999995], [1442511936.0, 87740000.0, 23.016924000000017], [1442513664.0, 87760000.0, 22.981824000000003], [1442515392.0, 87780000.0, 22.946715999999995], [1442517120.0, 87800000.0, 22.911600000000007], [1442518848.0, 87820000.0, 22.876475999999997], [1442520576.0, 87840000.0, 22.841343999999992], [1442522304.0, 87860000.0, 22.806204000000008], [1442524032.0, 87880000.0, 22.771056], [1442525760.0, 87900000.0, 22.735900000000015], [1442527488.0, 87920000.0, 22.700736000000006], [1442529216.0, 87940000.0, 22.66556399999999], [1442530944.0, 87960000.0, 22.630384000000006], [1442532672.0, 87980000.0, 22.595196], [1442534400.0, 88000000.0, 22.559999999999988], [1442536128.0, 88020000.0, 22.52479600000001], [1442537856.0, 88040000.0, 22.489583999999994], [1442539584.0, 88060000.0, 22.454364000000012], [1442541312.0, 88080000.0, 22.41913600000001], [1442543040.0, 88100000.0, 22.383899999999997], [1442544768.0, 88120000.0, 22.348656000000005], [1442546496.0, 88140000.0, 22.313404000000006], [1442548224.0, 88160000.0, 22.278143999999983], [1442549952.0, 88180000.0, 22.24287600000001], [1442551680.0, 88200000.0, 22.2076], [1442553408.0, 88220000.0, 22.17231600000001], [1442555136.0, 88240000.0, 22.137023999999997], [1442556864.0, 88260000.0, 22.10172399999999], [1442558592.0, 88280000.0, 22.066416000000004], [1442560320.0, 88300000.0, 22.031099999999995], [1442562048.0, 88320000.0, 21.995775999999992], [1442563776.0, 88340000.0, 21.96044400000001], [1442565504.0, 88360000.0, 21.92510399999999], [1442567232.0, 88380000.0, 21.88975600000002], [1442568960.0, 88400000.0, 21.8544], [1442570688.0, 88420000.0, 21.819035999999997], [1442572416.0, 88440000.0, 21.783664000000016], [1442574144.0, 88460000.0, 21.748283999999998], [1442575872.0, 88480000.0, 21.712895999999986], [1442577600.0, 88500000.0, 21.67750000000001], [1442579328.0, 88520000.0, 21.642095999999995], [1442581056.0, 88540000.0, 21.606684000000016], [1442582784.0, 88560000.0, 21.571264], [1442584512.0, 88580000.0, 21.53583599999999], [1442586240.0, 88600000.0, 21.500400000000013], [1442587968.0, 88620000.0, 21.464956], [1442589696.0, 88640000.0, 21.42950399999998], [1442591424.0, 88660000.0, 21.394044000000008], [1442593152.0, 88680000.0, 21.358576], [1442594880.0, 88700000.0, 21.32310000000001], [1442596608.0, 88720000.0, 21.287616], [1442598336.0, 88740000.0, 21.252123999999995], [1442600064.0, 88760000.0, 21.21662400000001], [1442601792.0, 88780000.0, 21.181116000000003], [1442603520.0, 88800000.0, 21.145599999999988], [1442605248.0, 88820000.0, 21.110076000000007], [1442606976.0, 88840000.0, 21.07454399999999], [1442608704.0, 88860000.0, 21.03900400000002], [1442610432.0, 88880000.0, 21.003456], [1442612160.0, 88900000.0, 20.967899999999986], [1442613888.0, 88920000.0, 20.932336000000006], [1442615616.0, 88940000.0, 20.896764000000005], [1442617344.0, 88960000.0, 20.86118399999998], [1442619072.0, 88980000.0, 20.825596000000004], [1442620800.0, 89000000.0, 20.789999999999992], [1442622528.0, 89020000.0, 20.754396000000014], [1442624256.0, 89040000.0, 20.718784], [1442625984.0, 89060000.0, 20.68316399999999], [1442627712.0, 89080000.0, 20.647536000000002], [1442629440.0, 89100000.0, 20.61189999999999], [1442631168.0, 89120000.0, 20.576255999999987], [1442632896.0, 89140000.0, 20.540604000000002], [1442634624.0, 89160000.0, 20.504943999999995], [1442636352.0, 89180000.0, 20.469276000000008], [1442638080.0, 89200000.0, 20.4336], [1442639808.0, 89220000.0, 20.397915999999995], [1442641536.0, 89240000.0, 20.362224000000012], [1442643264.0, 89260000.0, 20.326523999999992], [1442644992.0, 89280000.0, 20.290815999999978], [1442646720.0, 89300000.0, 20.2551], [1442648448.0, 89320000.0, 20.219375999999997], [1442650176.0, 89340000.0, 20.183644000000015], [1442651904.0, 89360000.0, 20.147903999999997], [1442653632.0, 89380000.0, 20.112155999999985], [1442655360.0, 89400000.0, 20.076400000000007], [1442657088.0, 89420000.0, 20.040635999999992], [1442658816.0, 89440000.0, 20.004863999999984], [1442660544.0, 89460000.0, 19.96908400000001], [1442662272.0, 89480000.0, 19.933296], [1442664000.0, 89500000.0, 19.897500000000008], [1442665728.0, 89520000.0, 19.861695999999995], [1442667456.0, 89540000.0, 19.825883999999988], [1442669184.0, 89560000.0, 19.790064000000015], [1442670912.0, 89580000.0, 19.75423599999999], [1442672640.0, 89600000.0, 19.71839999999999], [1442674368.0, 89620000.0, 19.682556000000005], [1442676096.0, 89640000.0, 19.646703999999986], [1442677824.0, 89660000.0, 19.610844000000014], [1442679552.0, 89680000.0, 19.574976000000007], [1442681280.0, 89700000.0, 19.53909999999999], [1442683008.0, 89720000.0, 19.50321600000001], [1442684736.0, 89740000.0, 19.46732399999999], [1442686464.0, 89760000.0, 19.43142399999998], [1442688192.0, 89780000.0, 19.395516], [1442689920.0, 89800000.0, 19.359599999999986], [1442691648.0, 89820000.0, 19.323676000000006], [1442693376.0, 89840000.0, 19.287744000000004], [1442695104.0, 89860000.0, 19.251803999999993], [1442696832.0, 89880000.0, 19.215856000000002], [1442698560.0, 89900000.0, 19.17989999999999], [1442700288.0, 89920000.0, 19.143935999999982], [1442702016.0, 89940000.0, 19.10796400000001], [1442703744.0, 89960000.0, 19.071983999999986], [1442705472.0, 89980000.0, 19.03599600000001], [1442707200.0, 90000000.0, 19.0], [1442708928.0, 90020000.0, 18.963995999999995], [1442710656.0, 90040000.0, 18.92798400000001], [1442712384.0, 90060000.0, 18.891964], [1442714112.0, 90080000.0, 18.855936000000014], [1442715840.0, 90100000.0, 18.819900000000004], [1442717568.0, 90120000.0, 18.783855999999986], [1442719296.0, 90140000.0, 18.747804000000016], [1442721024.0, 90160000.0, 18.711743999999996], [1442722752.0, 90180000.0, 18.67567599999998], [1442724480.0, 90200000.0, 18.6396], [1442726208.0, 90220000.0, 18.603516], [1442727936.0, 90240000.0, 18.567424000000017], [1442729664.0, 90260000.0, 18.531323999999998], [1442731392.0, 90280000.0, 18.495215999999985], [1442733120.0, 90300000.0, 18.459100000000007], [1442734848.0, 90320000.0, 18.422976000000006], [1442736576.0, 90340000.0, 18.386843999999982], [1442738304.0, 90360000.0, 18.350704000000007], [1442740032.0, 90380000.0, 18.314555999999996], [1442741760.0, 90400000.0, 18.27840000000002], [1442743488.0, 90420000.0, 18.242236000000005], [1442745216.0, 90440000.0, 18.206063999999998], [1442746944.0, 90460000.0, 18.16988400000001], [1442748672.0, 90480000.0, 18.133696], [1442750400.0, 90500000.0, 18.097499999999982], [1442752128.0, 90520000.0, 18.061296000000013], [1442753856.0, 90540000.0, 18.025083999999993], [1442755584.0, 90560000.0, 17.98886400000002], [1442757312.0, 90580000.0, 17.952636], [1442759040.0, 90600000.0, 17.916399999999996], [1442760768.0, 90620000.0, 17.880156000000014], [1442762496.0, 90640000.0, 17.843903999999995], [1442764224.0, 90660000.0, 17.807643999999982], [1442765952.0, 90680000.0, 17.771376000000004], [1442767680.0, 90700000.0, 17.73509999999999], [1442769408.0, 90720000.0, 17.698816000000008], [1442771136.0, 90740000.0, 17.662524000000005], [1442772864.0, 90760000.0, 17.626223999999993], [1442774592.0, 90780000.0, 17.589916000000017], [1442776320.0, 90800000.0, 17.553600000000003], [1442778048.0, 90820000.0, 17.51727599999998], [1442779776.0, 90840000.0, 17.480944000000008], [1442781504.0, 90860000.0, 17.444603999999998], [1442783232.0, 90880000.0, 17.40825600000001], [1442784960.0, 90900000.0, 17.371899999999997], [1442786688.0, 90920000.0, 17.33553599999999], [1442788416.0, 90940000.0, 17.299164000000005], [1442790144.0, 90960000.0, 17.262783999999996], [1442791872.0, 90980000.0, 17.22639599999998], [1442793600.0, 91000000.0, 17.190000000000012], [1442795328.0, 91020000.0, 17.153595999999993], [1442797056.0, 91040000.0, 17.11718400000001], [1442798784.0, 91060000.0, 17.080764000000002], [1442800512.0, 91080000.0, 17.044335999999987], [1442802240.0, 91100000.0, 17.007900000000006], [1442803968.0, 91120000.0, 16.971456000000003], [1442805696.0, 91140000.0, 16.935003999999992], [1442807424.0, 91160000.0, 16.898544], [1442809152.0, 91180000.0, 16.862075999999988], [1442810880.0, 91200000.0, 16.82560000000001], [1442812608.0, 91220000.0, 16.789116000000007], [1442814336.0, 91240000.0, 16.752623999999983], [1442816064.0, 91260000.0, 16.716124000000008], [1442817792.0, 91280000.0, 16.679615999999996], [1442819520.0, 91300000.0, 16.64309999999999], [1442821248.0, 91320000.0, 16.606576000000004], [1442822976.0, 91340000.0, 16.570043999999996], [1442824704.0, 91360000.0, 16.533504000000008], [1442826432.0, 91380000.0, 16.496955999999997], [1442828160.0, 91400000.0, 16.460399999999993], [1442829888.0, 91420000.0, 16.42383600000001], [1442831616.0, 91440000.0, 16.387264000000002], [1442833344.0, 91460000.0, 16.350683999999987], [1442835072.0, 91480000.0, 16.314096000000006], [1442836800.0, 91500000.0, 16.27749999999999], [1442838528.0, 91520000.0, 16.24089600000002], [1442840256.0, 91540000.0, 16.204284], [1442841984.0, 91560000.0, 16.167663999999988], [1442843712.0, 91580000.0, 16.13103600000001], [1442845440.0, 91600000.0, 16.094399999999993], [1442847168.0, 91620000.0, 16.057755999999983], [1442848896.0, 91640000.0, 16.02110400000001], [1442850624.0, 91660000.0, 15.984443999999996], [1442852352.0, 91680000.0, 15.947776000000019], [1442854080.0, 91700000.0, 15.911100000000005], [1442855808.0, 91720000.0, 15.874415999999982], [1442857536.0, 91740000.0, 15.837724000000009], [1442859264.0, 91760000.0, 15.801023999999998], [1442860992.0, 91780000.0, 15.76431599999998], [1442862720.0, 91800000.0, 15.72760000000001], [1442864448.0, 91820000.0, 15.690875999999989], [1442866176.0, 91840000.0, 15.654144000000016], [1442867904.0, 91860000.0, 15.617404000000008], [1442869632.0, 91880000.0, 15.58065599999999], [1442871360.0, 91900000.0, 15.543900000000008], [1442873088.0, 91920000.0, 15.507136000000003], [1442874816.0, 91940000.0, 15.47036399999999], [1442876544.0, 91960000.0, 15.43358400000001], [1442878272.0, 91980000.0, 15.396795999999995], [1442880000.0, 92000000.0, 15.360000000000014], [1442881728.0, 92020000.0, 15.323195999999996], [1442883456.0, 92040000.0, 15.286383999999984], [1442885184.0, 92060000.0, 15.249564000000007], [1442886912.0, 92080000.0, 15.212735999999992], [1442888640.0, 92100000.0, 15.175899999999984], [1442890368.0, 92120000.0, 15.13905600000001], [1442892096.0, 92140000.0, 15.102203999999986], [1442893824.0, 92160000.0, 15.06534400000001], [1442895552.0, 92180000.0, 15.028475999999998], [1442897280.0, 92200000.0, 14.991599999999991], [1442899008.0, 92220000.0, 14.954716000000005], [1442900736.0, 92240000.0, 14.917823999999996], [1442902464.0, 92260000.0, 14.880923999999979], [1442904192.0, 92280000.0, 14.84401600000001], [1442905920.0, 92300000.0, 14.807099999999991], [1442907648.0, 92320000.0, 14.770176000000006], [1442909376.0, 92340000.0, 14.733244], [1442911104.0, 92360000.0, 14.696303999999984], [1442912832.0, 92380000.0, 14.659356000000002], [1442914560.0, 92400000.0, 14.622399999999999], [1442916288.0, 92420000.0, 14.585435999999987], [1442918016.0, 92440000.0, 14.54846400000001], [1442919744.0, 92460000.0, 14.511483999999996], [1442921472.0, 92480000.0, 14.474496000000016], [1442923200.0, 92500000.0, 14.4375], [1442924928.0, 92520000.0, 14.40049599999999], [1442926656.0, 92540000.0, 14.363484000000014], [1442928384.0, 92560000.0, 14.326464000000001], [1442930112.0, 92580000.0, 14.289436000000023], [1442931840.0, 92600000.0, 14.252400000000009], [1442933568.0, 92620000.0, 14.215355999999986], [1442935296.0, 92640000.0, 14.178304000000011], [1442937024.0, 92660000.0, 14.141244], [1442938752.0, 92680000.0, 14.104175999999981], [1442940480.0, 92700000.0, 14.06710000000001], [1442942208.0, 92720000.0, 14.03001599999999], [1442943936.0, 92740000.0, 13.992924000000016], [1442945664.0, 92760000.0, 13.955824000000007], [1442947392.0, 92780000.0, 13.91871599999999], [1442949120.0, 92800000.0, 13.881600000000006], [1442950848.0, 92820000.0, 13.844476], [1442952576.0, 92840000.0, 13.807343999999986], [1442954304.0, 92860000.0, 13.770204000000007], [1442956032.0, 92880000.0, 13.73305599999999], [1442957760.0, 92900000.0, 13.695900000000009], [1442959488.0, 92920000.0, 13.658736000000005], [1442961216.0, 92940000.0, 13.621563999999992], [1442962944.0, 92960000.0, 13.584384000000014], [1442964672.0, 92980000.0, 13.547196], [1442966400.0, 93000000.0, 13.509999999999991], [1442968128.0, 93020000.0, 13.472796000000002], [1442969856.0, 93040000.0, 13.435583999999992], [1442971584.0, 93060000.0, 13.398364000000015], [1442973312.0, 93080000.0, 13.361136000000002], [1442975040.0, 93100000.0, 13.323899999999995], [1442976768.0, 93120000.0, 13.286656000000008], [1442978496.0, 93140000.0, 13.249403999999998], [1442980224.0, 93160000.0, 13.21214399999998], [1442981952.0, 93180000.0, 13.174876000000012], [1442983680.0, 93200000.0, 13.137599999999992], [1442985408.0, 93220000.0, 13.10031600000002], [1442987136.0, 93240000.0, 13.063023999999999], [1442988864.0, 93260000.0, 13.025723999999997], [1442990592.0, 93280000.0, 12.988416000000015], [1442992320.0, 93300000.0, 12.951099999999997], [1442994048.0, 93320000.0, 12.913775999999984], [1442995776.0, 93340000.0, 12.876444000000006], [1442997504.0, 93360000.0, 12.839103999999992], [1442999232.0, 93380000.0, 12.801756000000012], [1443000960.0, 93400000.0, 12.764400000000009], [1443002688.0, 93420000.0, 12.727035999999984], [1443004416.0, 93440000.0, 12.689664000000008], [1443006144.0, 93460000.0, 12.652283999999995], [1443007872.0, 93480000.0, 12.614895999999987], [1443009600.0, 93500000.0, 12.5775], [1443011328.0, 93520000.0, 12.540095999999991], [1443013056.0, 93540000.0, 12.502684000000016], [1443014784.0, 93560000.0, 12.465264000000005], [1443016512.0, 93580000.0, 12.427835999999985], [1443018240.0, 93600000.0, 12.390400000000014], [1443019968.0, 93620000.0, 12.352955999999992], [1443021696.0, 93640000.0, 12.31550399999999], [1443023424.0, 93660000.0, 12.278044000000008], [1443025152.0, 93680000.0, 12.24057599999999], [1443026880.0, 93700000.0, 12.20310000000002], [1443028608.0, 93720000.0, 12.165616], [1443030336.0, 93740000.0, 12.128123999999985], [1443032064.0, 93760000.0, 12.090624000000005], [1443033792.0, 93780000.0, 12.053116000000003], [1443035520.0, 93800000.0, 12.015599999999992], [1443037248.0, 93820000.0, 11.978076000000001], [1443038976.0, 93840000.0, 11.940543999999989], [1443040704.0, 93860000.0, 11.90300400000001], [1443042432.0, 93880000.0, 11.865456000000009], [1443044160.0, 93900000.0, 11.827899999999985], [1443045888.0, 93920000.0, 11.79033600000001], [1443047616.0, 93940000.0, 11.752763999999999], [1443049344.0, 93960000.0, 11.71518399999998], [1443051072.0, 93980000.0, 11.677596000000008], [1443052800.0, 94000000.0, 11.639999999999986], [1443054528.0, 94020000.0, 11.602396000000013], [1443056256.0, 94040000.0, 11.564784000000003], [1443057984.0, 94060000.0, 11.527163999999985], [1443059712.0, 94080000.0, 11.489536000000015], [1443061440.0, 94100000.0, 11.451899999999995], [1443063168.0, 94120000.0, 11.41425599999998], [1443064896.0, 94140000.0, 11.376604], [1443066624.0, 94160000.0, 11.338943999999998], [1443068352.0, 94180000.0, 11.301276000000016], [1443070080.0, 94200000.0, 11.263599999999997], [1443071808.0, 94220000.0, 11.225915999999984], [1443073536.0, 94240000.0, 11.188224000000005], [1443075264.0, 94260000.0, 11.15052399999999], [1443076992.0, 94280000.0, 11.112815999999981], [1443078720.0, 94300000.0, 11.075100000000006], [1443080448.0, 94320000.0, 11.037375999999995], [1443082176.0, 94340000.0, 10.999644000000018], [1443083904.0, 94360000.0, 10.961904000000004], [1443085632.0, 94380000.0, 10.924155999999982], [1443087360.0, 94400000.0, 10.886400000000009], [1443089088.0, 94420000.0, 10.848635999999999], [1443090816.0, 94440000.0, 10.810863999999981], [1443092544.0, 94460000.0, 10.773084000000011], [1443094272.0, 94480000.0, 10.735295999999991], [1443096000.0, 94500000.0, 10.69750000000002], [1443097728.0, 94520000.0, 10.659695999999997], [1443099456.0, 94540000.0, 10.621883999999994], [1443101184.0, 94560000.0, 10.584064000000012], [1443102912.0, 94580000.0, 10.546235999999993], [1443104640.0, 94600000.0, 10.50839999999998], [1443106368.0, 94620000.0, 10.470556000000002], [1443108096.0, 94640000.0, 10.432703999999987], [1443109824.0, 94660000.0, 10.394844000000006], [1443111552.0, 94680000.0, 10.356976000000003], [1443113280.0, 94700000.0, 10.319099999999992], [1443115008.0, 94720000.0, 10.281216000000015], [1443116736.0, 94740000.0, 10.243324000000001], [1443118464.0, 94760000.0, 10.20542399999998], [1443120192.0, 94780000.0, 10.167516000000006], [1443121920.0, 94800000.0, 10.129599999999996], [1443123648.0, 94820000.0, 10.091676000000007], [1443125376.0, 94840000.0, 10.053743999999995], [1443127104.0, 94860000.0, 10.015803999999989], [1443128832.0, 94880000.0, 9.977856000000003], [1443130560.0, 94900000.0, 9.939899999999994], [1443132288.0, 94920000.0, 9.901935999999978], [1443134016.0, 94940000.0, 9.86396400000001], [1443135744.0, 94960000.0, 9.825983999999991], [1443137472.0, 94980000.0, 9.787996000000007], [1443139200.0, 95000000.0, 9.75], [1443140928.0, 95020000.0, 9.711995999999985], [1443142656.0, 95040000.0, 9.673984000000004], [1443144384.0, 95060000.0, 9.635964000000001], [1443146112.0, 95080000.0, 9.597936000000018], [1443147840.0, 95100000.0, 9.559899999999999], [1443149568.0, 95120000.0, 9.521855999999985], [1443151296.0, 95140000.0, 9.483804000000006], [1443153024.0, 95160000.0, 9.445744000000005], [1443154752.0, 95180000.0, 9.40767599999998], [1443156480.0, 95200000.0, 9.369600000000005], [1443158208.0, 95220000.0, 9.331515999999993], [1443159936.0, 95240000.0, 9.293424000000016], [1443161664.0, 95260000.0, 9.255324000000002], [1443163392.0, 95280000.0, 9.217215999999993], [1443165120.0, 95300000.0, 9.179100000000005], [1443166848.0, 95320000.0, 9.140975999999995], [1443168576.0, 95340000.0, 9.10284399999999], [1443170304.0, 95360000.0, 9.064704000000006], [1443172032.0, 95380000.0, 9.026556], [1443173760.0, 95400000.0, 8.988400000000013], [1443175488.0, 95420000.0, 8.950236000000004], [1443177216.0, 95440000.0, 8.912063999999987], [1443178944.0, 95460000.0, 8.873884000000018], [1443180672.0, 95480000.0, 8.835695999999999], [1443182400.0, 95500000.0, 8.797499999999985], [1443184128.0, 95520000.0, 8.759296000000006], [1443185856.0, 95540000.0, 8.72108399999999], [1443187584.0, 95560000.0, 8.68286400000001], [1443189312.0, 95580000.0, 8.644636000000006], [1443191040.0, 95600000.0, 8.606399999999994], [1443192768.0, 95620000.0, 8.568156000000016], [1443194496.0, 95640000.0, 8.529904000000002], [1443196224.0, 95660000.0, 8.49164399999998], [1443197952.0, 95680000.0, 8.453376000000006], [1443199680.0, 95700000.0, 8.415099999999995], [1443201408.0, 95720000.0, 8.37681600000002], [1443203136.0, 95740000.0, 8.338524000000007], [1443204864.0, 95760000.0, 8.300223999999986], [1443206592.0, 95780000.0, 8.261916000000014], [1443208320.0, 95800000.0, 8.223600000000005], [1443210048.0, 95820000.0, 8.185275999999988], [1443211776.0, 95840000.0, 8.146944000000005], [1443213504.0, 95860000.0, 8.108604], [1443215232.0, 95880000.0, 8.070256000000015], [1443216960.0, 95900000.0, 8.031900000000007], [1443218688.0, 95920000.0, 7.993535999999992], [1443220416.0, 95940000.0, 7.955164000000011], [1443222144.0, 95960000.0, 7.916783999999993], [1443223872.0, 95980000.0, 7.878395999999981], [1443225600.0, 96000000.0, 7.840000000000003], [1443227328.0, 96020000.0, 7.801595999999989], [1443229056.0, 96040000.0, 7.76318400000001], [1443230784.0, 96060000.0, 7.7247640000000075], [1443232512.0, 96080000.0, 7.686335999999983], [1443234240.0, 96100000.0, 7.647900000000007], [1443235968.0, 96120000.0, 7.6094559999999944], [1443237696.0, 96140000.0, 7.571003999999988], [1443239424.0, 96160000.0, 7.5325440000000015], [1443241152.0, 96180000.0, 7.494075999999993], [1443242880.0, 96200000.0, 7.455600000000018], [1443244608.0, 96220000.0, 7.417116000000007], [1443246336.0, 96240000.0, 7.378623999999988], [1443248064.0, 96260000.0, 7.340124000000017], [1443249792.0, 96280000.0, 7.301615999999996], [1443251520.0, 96300000.0, 7.26309999999998], [1443253248.0, 96320000.0, 7.224576000000013], [1443254976.0, 96340000.0, 7.186043999999995], [1443256704.0, 96360000.0, 7.147504000000012], [1443258432.0, 96380000.0, 7.108956000000006], [1443260160.0, 96400000.0, 7.070399999999992], [1443261888.0, 96420000.0, 7.031836000000013], [1443263616.0, 96440000.0, 6.993263999999996], [1443265344.0, 96460000.0, 6.954683999999986], [1443267072.0, 96480000.0, 6.91609600000001], [1443268800.0, 96500000.0, 6.877499999999998], [1443270528.0, 96520000.0, 6.83889600000002], [1443272256.0, 96540000.0, 6.800284000000005], [1443273984.0, 96560000.0, 6.761663999999982], [1443275712.0, 96580000.0, 6.723036000000008], [1443277440.0, 96600000.0, 6.684399999999997], [1443279168.0, 96620000.0, 6.645755999999977], [1443280896.0, 96640000.0, 6.607104000000007], [1443282624.0, 96660000.0, 6.5684439999999995], [1443284352.0, 96680000.0, 6.5297760000000125], [1443286080.0, 96700000.0, 6.491100000000003], [1443287808.0, 96720000.0, 6.452415999999985], [1443289536.0, 96740000.0, 6.413724000000016], [1443291264.0, 96760000.0, 6.375023999999996], [1443292992.0, 96780000.0, 6.336315999999982], [1443294720.0, 96800000.0, 6.297600000000003], [1443296448.0, 96820000.0, 6.258875999999987], [1443298176.0, 96840000.0, 6.220144000000019], [1443299904.0, 96860000.0, 6.181404000000001], [1443301632.0, 96880000.0, 6.142655999999988], [1443303360.0, 96900000.0, 6.10390000000001], [1443305088.0, 96920000.0, 6.065135999999995], [1443306816.0, 96940000.0, 6.026363999999987], [1443308544.0, 96960000.0, 5.987583999999998], [1443310272.0, 96980000.0, 5.948795999999987], [1443312000.0, 97000000.0, 5.910000000000011], [1443313728.0, 97020000.0, 5.871195999999998], [1443315456.0, 97040000.0, 5.8323839999999905], [1443317184.0, 97060000.0, 5.7935640000000035], [1443318912.0, 97080000.0, 5.754735999999994], [1443320640.0, 97100000.0, 5.715899999999976], [1443322368.0, 97120000.0, 5.677056000000007], [1443324096.0, 97140000.0, 5.638203999999988], [1443325824.0, 97160000.0, 5.599344000000016], [1443327552.0, 97180000.0, 5.560475999999994], [1443329280.0, 97200000.0, 5.521599999999992], [1443331008.0, 97220000.0, 5.482716000000011], [1443332736.0, 97240000.0, 5.443823999999992], [1443334464.0, 97260000.0, 5.40492399999998], [1443336192.0, 97280000.0, 5.366016000000002], [1443337920.0, 97300000.0, 5.327099999999987], [1443339648.0, 97320000.0, 5.288176000000007], [1443341376.0, 97340000.0, 5.2492440000000045], [1443343104.0, 97360000.0, 5.210303999999994], [1443344832.0, 97380000.0, 5.171356000000003], [1443346560.0, 97400000.0, 5.13239999999999], [1443348288.0, 97420000.0, 5.093435999999983], [1443350016.0, 97440000.0, 5.05446400000001], [1443351744.0, 97460000.0, 5.0154839999999865], [1443353472.0, 97480000.0, 4.976496000000012], [1443355200.0, 97500000.0, 4.9375], [1443356928.0, 97520000.0, 4.89849599999998], [1443358656.0, 97540000.0, 4.859484000000009], [1443360384.0, 97560000.0, 4.820464000000001], [1443362112.0, 97580000.0, 4.781436000000014], [1443363840.0, 97600000.0, 4.7424000000000035], [1443365568.0, 97620000.0, 4.703355999999985], [1443367296.0, 97640000.0, 4.6643040000000155], [1443369024.0, 97660000.0, 4.625243999999995], [1443370752.0, 97680000.0, 4.5861759999999805], [1443372480.0, 97700000.0, 4.547100000000015], [1443374208.0, 97720000.0, 4.508015999999998], [1443375936.0, 97740000.0, 4.468924000000015], [1443377664.0, 97760000.0, 4.429824000000011], [1443379392.0, 97780000.0, 4.390715999999998], [1443381120.0, 97800000.0, 4.351600000000019], [1443382848.0, 97820000.0, 4.312476000000004], [1443384576.0, 97840000.0, 4.27334399999998], [1443386304.0, 97860000.0, 4.234204000000005], [1443388032.0, 97880000.0, 4.195055999999994], [1443389760.0, 97900000.0, 4.155900000000017], [1443391488.0, 97920000.0, 4.116736000000003], [1443393216.0, 97940000.0, 4.077563999999995], [1443394944.0, 97960000.0, 4.038384000000008], [1443396672.0, 97980000.0, 3.9991959999999978], [1443398400.0, 98000000.0, 3.9599999999999795], [1443400128.0, 98020000.0, 3.92079600000001], [1443401856.0, 98040000.0, 3.8815839999999895], [1443403584.0, 98060000.0, 3.8423640000000177], [1443405312.0, 98080000.0, 3.803136000000009], [1443407040.0, 98100000.0, 3.7638999999999925], [1443408768.0, 98120000.0, 3.72465600000001], [1443410496.0, 98140000.0, 3.6854040000000055], [1443412224.0, 98160000.0, 3.6461439999999925], [1443413952.0, 98180000.0, 3.606876000000014], [1443415680.0, 98200000.0, 3.5675999999999988], [1443417408.0, 98220000.0, 3.528316000000018], [1443419136.0, 98240000.0, 3.4890240000000006], [1443420864.0, 98260000.0, 3.449723999999989], [1443422592.0, 98280000.0, 3.410416000000012], [1443424320.0, 98300000.0, 3.3710999999999984], [1443426048.0, 98320000.0, 3.3317759999999907], [1443427776.0, 98340000.0, 3.2924440000000033], [1443429504.0, 98360000.0, 3.2531039999999933], [1443431232.0, 98380000.0, 3.213756000000018], [1443432960.0, 98400000.0, 3.1744000000000057], [1443434688.0, 98420000.0, 3.1350359999999853], [1443436416.0, 98440000.0, 3.0956640000000135], [1443438144.0, 98460000.0, 3.056284000000005], [1443439872.0, 98480000.0, 3.0168959999999885], [1443441600.0, 98500000.0, 2.9775000000000063], [1443443328.0, 98520000.0, 2.9380959999999874], [1443445056.0, 98540000.0, 2.898684000000017], [1443446784.0, 98560000.0, 2.859263999999996], [1443448512.0, 98580000.0, 2.819835999999995], [1443450240.0, 98600000.0, 2.7804000000000144], [1443451968.0, 98620000.0, 2.740955999999997], [1443453696.0, 98640000.0, 2.7015039999999857], [1443455424.0, 98660000.0, 2.6620440000000087], [1443457152.0, 98680000.0, 2.622575999999995], [1443458880.0, 98700000.0, 2.583100000000016], [1443460608.0, 98720000.0, 2.543616], [1443462336.0, 98740000.0, 2.5041239999999902], [1443464064.0, 98760000.0, 2.464624000000015], [1443465792.0, 98780000.0, 2.4251160000000027], [1443467520.0, 98800000.0, 2.3855999999999824], [1443469248.0, 98820000.0, 2.3460760000000107], [1443470976.0, 98840000.0, 2.306543999999988], [1443472704.0, 98860000.0, 2.2670040000000142], [1443474432.0, 98880000.0, 2.2274560000000037], [1443476160.0, 98900000.0, 2.187899999999985], [1443477888.0, 98920000.0, 2.1483360000000147], [1443479616.0, 98940000.0, 2.1087639999999936], [1443481344.0, 98960000.0, 2.0691839999999786], [1443483072.0, 98980000.0, 2.029596000000012], [1443484800.0, 99000000.0, 1.9899999999999949], [1443486528.0, 99020000.0, 1.950396000000012], [1443488256.0, 99040000.0, 1.9107840000000067], [1443489984.0, 99060000.0, 1.8711639999999932], [1443491712.0, 99080000.0, 1.831536000000014], [1443493440.0, 99100000.0, 1.7918999999999983], [1443495168.0, 99120000.0, 1.7522559999999885], [1443496896.0, 99140000.0, 1.712603999999999], [1443498624.0, 99160000.0, 1.6729439999999869], [1443500352.0, 99180000.0, 1.6332760000000093], [1443502080.0, 99200000.0, 1.593599999999995], [1443503808.0, 99220000.0, 1.5539159999999868], [1443505536.0, 99240000.0, 1.514224000000013], [1443507264.0, 99260000.0, 1.4745240000000024], [1443508992.0, 99280000.0, 1.4348159999999837], [1443510720.0, 99300000.0, 1.3950999999999993], [1443512448.0, 99320000.0, 1.3553759999999926], [1443514176.0, 99340000.0, 1.3156440000000202], [1443515904.0, 99360000.0, 1.275903999999997], [1443517632.0, 99380000.0, 1.236155999999994], [1443519360.0, 99400000.0, 1.1964000000000112], [1443521088.0, 99420000.0, 1.1566359999999918], [1443522816.0, 99440000.0, 1.1168639999999783], [1443524544.0, 99460000.0, 1.0770839999999993], [1443526272.0, 99480000.0, 1.0372959999999978], [1443528000.0, 99500000.0, 0.9975000000000165], [1443529728.0, 99520000.0, 0.9576959999999985], [1443531456.0, 99540000.0, 0.9178839999999866], [1443533184.0, 99560000.0, 0.8780640000000091], [1443534912.0, 99580000.0, 0.8382359999999949], [1443536640.0, 99600000.0, 0.7983999999999867], [1443538368.0, 99620000.0, 0.7585559999999987], [1443540096.0, 99640000.0, 0.7187039999999882], [1443541824.0, 99660000.0, 0.6788440000000122], [1443543552.0, 99680000.0, 0.6389759999999995], [1443545280.0, 99700000.0, 0.5990999999999929], [1443547008.0, 99720000.0, 0.5592160000000064], [1443548736.0, 99740000.0, 0.5193239999999975], [1443550464.0, 99760000.0, 0.4794239999999803], [1443552192.0, 99780000.0, 0.4395160000000118], [1443553920.0, 99800000.0, 0.3995999999999924], [1443555648.0, 99820000.0, 0.35967600000000743], [1443557376.0, 99840000.0, 0.31974400000000003], [1443559104.0, 99860000.0, 0.2798039999999844], [1443560832.0, 99880000.0, 0.23985600000000318], [1443562560.0, 99900000.0, 0.19989999999999952], [1443564288.0, 99920000.0, 0.15993599999998764], [1443566016.0, 99940000.0, 0.11996400000001017], [1443567744.0, 99960000.0, 0.07998399999999606], [1443569472.0, 99980000.0, 0.03999600000001635]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/app/demo/index.html b/tensorflow/tensorboard/app/demo/index.html new file mode 100644 index 0000000000..a12b5abc26 --- /dev/null +++ b/tensorflow/tensorboard/app/demo/index.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <script> + function handleLoad() { + TF.Urls.runsUrl = function() {return "data/runs.json"}; + TF.Urls.graphUrl = function(run) { + return "data/" + run + "-graph.pbtxt"; + }; + TF.Urls.scalarsUrl = function(tag, run) { + var path = "data/" + run.split("_")[0] + ".json"; + return path; + }; + } + </script> + <link rel="import" href="../tf-tensorboard.html" onload="handleLoad(event)"> + <link rel="stylesheet" type="text/css" href="../../lib/css/global.css"> + <title>TensorBoard Demo</title> + </head> + <body> + <script>handleLoad()</script> + <tf-tensorboard id="demo"></tf-tensorboard> + </body> +</html> diff --git a/tensorflow/tensorboard/app/index.html b/tensorflow/tensorboard/app/index.html new file mode 100644 index 0000000000..7adc063452 --- /dev/null +++ b/tensorflow/tensorboard/app/index.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <script src="../lib/js/analytics.js"></script> + <link rel="import" href="tf-tensorboard.html"> + <link rel="stylesheet" type="text/css" href="../lib/css/global.css"> + <title>TensorBoard</title> + </head> + <body> + <tf-tensorboard></tf-tensorboard> + </body> +</html> diff --git a/tensorflow/tensorboard/app/tf-tensorboard-demo.html b/tensorflow/tensorboard/app/tf-tensorboard-demo.html new file mode 100644 index 0000000000..5f0ef5b00c --- /dev/null +++ b/tensorflow/tensorboard/app/tf-tensorboard-demo.html @@ -0,0 +1,72 @@ +<link rel="import" href="../bower_components/polymer/polymer.html"> +<link rel="import" href="tf-tensorboard.html"> +<!-- +tf-tensorboard-demo creates a demo instance of TensorBoard. + +It expects to load data from a folder called tensorboard/ + +The way it ensures the urls are correct is quite hacky. +TODO(danmane): Fix the url handling during cleanup. +--> +<dom-module id="tf-tensorboard-demo"> + <template> + <template is="dom-if" if="[[_urlsReady]]"> + <tf-tensorboard mode="[[mode]]"></tf-tensorboard> + </template> + <template is="dom-if" if="[[!_urlsReady]]"> + <p> + urls not ready - probably because a dataDir was not provided + </p> + </template> + <style> + :host { + display: block; + width: 100%; + height: 100%; + } + </style> + </template> + <script> + Polymer({ + is: "tf-tensorboard-demo", + properties: { + mode: { + type: String, + value: "events", + }, + dataDir: { + type: String, + }, + _urlsReady: { + type: Boolean, + value: false, + }, + }, + observers: ['_setupUrls(dataDir)'], + _setupUrls: function(dataDir) { + function router(route) { + return function(tag, run) { + run = run.replace(/[ \)\(]/g, "_"); + tag = tag.replace(/[ \)\(]/g, "_"); + return dataDir + "/" + route + "/" + run + "/" + tag + ".json"; + }; + } + TF.Urls.runsUrl = function() { + return dataDir + "/runs.json" + }; + TF.Urls.graphUrl = function(run) { + run = run.replace(/ /g, "_"); + return dataDir + "/graph/" + run + ".pbtxt"; + }; + TF.Urls.scalarsUrl = router("scalars"); + TF.Urls.histogramsUrl = router("histograms"); + TF.Urls.compressedHistogramsUrl = router("compressedHistograms"); + TF.Urls.imagesUrl = router("images"); + TF.Urls.individualImageUrl = function(query) { + return dataDir + "/individualImage/" + query + ".png"; + } + this._urlsReady = true; + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/app/tf-tensorboard.html b/tensorflow/tensorboard/app/tf-tensorboard.html new file mode 100644 index 0000000000..0f5114143e --- /dev/null +++ b/tensorflow/tensorboard/app/tf-tensorboard.html @@ -0,0 +1,135 @@ +<link rel="import" href="../bower_components/polymer/polymer.html"> +<link rel="import" href="../bower_components/paper-toolbar/paper-toolbar.html"> +<link rel="import" href="../bower_components/paper-button/paper-button.html"> +<link rel="import" href="../bower_components/paper-header-panel/paper-header-panel.html"> +<link rel="import" href="../components/tf-event-dashboard/tf-event-dashboard.html"> +<link rel="import" href="../components/tf-histogram-dashboard/tf-histogram-dashboard.html"> +<link rel="import" href="../components/tf-image-dashboard/tf-image-dashboard.html"> +<link rel="import" href="../components/tf-graph-dashboard/tf-graph-dashboard.html"> +<link rel="import" href="../components/tf-dashboard-common/tensorboard-color.html"> +<!-- +tf-tensorboard is the frontend entry point for TensorBoard. + +It implements a toolbar (via paper-header-panel and paper-toolbar) that +allows the user to toggle between various dashboards. +--> +<dom-module id="tf-tensorboard"> + <template> + <paper-header-panel> + <paper-toolbar id="toolbar"> + <div id="toolbar-content"> + <div class="toolbar-title"> + TensorBoard + </div> + <div class="right-buttons"> + <paper-button + class="link-button" + on-click="chooseEvents" + active$="[[eventDashboard(mode)]]" + noink + >Events</paper-button> + <paper-button + class="link-button" + on-click="chooseImages" + active$="[[imageDashboard(mode)]]" + noink + >Images</paper-button> + <paper-button + class="link-button" + on-click="chooseGraphs" + active$="[[graphDashboard(mode)]]" + noink + >Graph</paper-button> + <paper-button + class="link-button" + on-click="chooseHistograms" + active$="[[histogramDashboard(mode)]]" + noink + >Histograms</paper-button> + </div> + </div> + </paper-toolbar> + <div id="content" class="fit"> + <template is="dom-if" if="[[eventDashboard(mode)]]"> + <tf-event-dashboard id="eventDash"></tf-event-dashboard> + </template> + + <template is="dom-if" if="[[imageDashboard(mode)]]"> + <tf-image-dashboard id="imageDash"></tf-image-dashboard> + </template> + + <template is="dom-if" if="[[graphDashboard(mode)]]"> + <tf-graph-dashboard id="graphDash"></tf-graph-dashboard> + </template> + + <template is="dom-if" if="[[histogramDashboard(mode)]]"> + <tf-histogram-dashboard id="histogramDash"></tf-histogram-dashboard> + </template> + </div> + </paper-header-panel> + <style> + #toolbar { + background-color: var(--tb-orange-strong); + background-image: radial-gradient(ellipse, var(--tb-orange-weak), var(--tb-orange-strong)); + } + #toolbar-content { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + .toolbar-title { + font-size: 30px; + } + #content { + height: 100%; + } + .link-button { + height: 30px; + } + [active] { + font-weight: bold; + } + :host { + height: 100%; + display: block; + } + </style> + </template> + <script> + Polymer({ + is: "tf-tensorboard", + properties: { + mode: { + type: String, + value: "events", + }, + }, + chooseEvents: function() { + this.mode = "events"; + }, + chooseImages: function() { + this.mode = "images"; + }, + chooseGraphs: function() { + this.mode = "graphs"; + }, + chooseHistograms: function() { + this.mode = "histograms"; + }, + eventDashboard: function(mode) { + return mode === "events"; + }, + imageDashboard: function(mode) { + return mode === "images"; + }, + graphDashboard: function(mode) { + return mode === "graphs"; + }, + histogramDashboard: function(mode) { + return mode === "histograms"; + } + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/bower.json b/tensorflow/tensorboard/bower.json new file mode 100644 index 0000000000..bdd16d662a --- /dev/null +++ b/tensorflow/tensorboard/bower.json @@ -0,0 +1,50 @@ +{ + "name": "tf-vis", + "version": "0.0.0", + "description": "Visualizations for TensorFlow", + "authors": [ + "Google" + ], + "license": "Apache-2.0", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "private": true, + "dependencies": { + "d3": "3.5.6", + "dagre": "~0.7.4", + "es6-promise": "~3.0.2", + "graphlib": "~1.0.7", + "iron-ajax": "PolymerElements/iron-ajax#~1.0.8", + "iron-collapse": "PolymerElements/iron-collapse#~1.0.4", + "iron-list": "PolymerElements/iron-list#~1.1.5", + "paper-button": "PolymerElements/paper-button#~1.0.7", + "paper-checkbox": "PolymerElements/paper-checkbox#~1.0.6", + "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#~1.0.4", + "paper-header-panel": "PolymerElements/paper-header-panel#~1.0.5", + "paper-icon-button": "PolymerElements/paper-icon-button#~1.0.3", + "paper-input": "PolymerElements/paper-input#~1.0.15", + "paper-item": "PolymerElements/paper-item#~1.0.3", + "paper-menu": "PolymerElements/paper-menu#~1.1.1", + "paper-progress": "PolymerElements/paper-progress#~1.0.7", + "paper-radio-button": "PolymerElements/paper-radio-button#~1.0.8", + "paper-radio-group": "PolymerElements/paper-radio-group#~1.0.4", + "paper-slider": "PolymerElements/paper-slider#~1.0.4", + "paper-styles": "PolymerElements/paper-styles#~1.0.11", + "paper-toggle-button": "PolymerElements/paper-toggle-button#~1.0.6", + "paper-toolbar": "PolymerElements/paper-toolbar#~1.0.4", + "plottable": "~1.16.1", + "polymer": "~1.2.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "web-component-tester": "*" + }, + "resolutions": { + "d3": "3.5.6" + } +} diff --git a/tensorflow/tensorboard/bower/BUILD b/tensorflow/tensorboard/bower/BUILD new file mode 100644 index 0000000000..709760b312 --- /dev/null +++ b/tensorflow/tensorboard/bower/BUILD @@ -0,0 +1,76 @@ +package(default_visibility = ["//tensorflow:internal"]) + +filegroup( + name = "bower", + srcs = [ + "@accessibility-developer-tools//:accessibility-developer-tools", + "@async//:async", + "@chai//:chai", + "@d3//:d3", + "@dagre//:dagre", + "@es6-promise//:es6-promise", + "@font-roboto//:font-roboto", + "@graphlib//:graphlib", + "@hydrolysis//:hydrolysis", + "@iron-a11y-keys-behavior//:iron-a11y-keys-behavior", + "@iron-ajax//:iron-ajax", + "@iron-autogrow-textarea//:iron-autogrow-textarea", + "@iron-behaviors//:iron-behaviors", + "@iron-checked-element-behavior//:iron-checked-element-behavior", + "@iron-collapse//:iron-collapse", + "@iron-component-page//:iron-component-page", + "@iron-doc-viewer//:iron-doc-viewer", + "@iron-dropdown//:iron-dropdown", + "@iron-fit-behavior//:iron-fit-behavior", + "@iron-flex-layout//:iron-flex-layout", + "@iron-form-element-behavior//:iron-form-element-behavior", + "@iron-icon//:iron-icon", + "@iron-icons//:iron-icons", + "@iron-iconset-svg//:iron-iconset-svg", + "@iron-input//:iron-input", + "@iron-list//:iron-list", + "@iron-menu-behavior//:iron-menu-behavior", + "@iron-meta//:iron-meta", + "@iron-overlay-behavior//:iron-overlay-behavior", + "@iron-range-behavior//:iron-range-behavior", + "@iron-resizable-behavior//:iron-resizable-behavior", + "@iron-selector//:iron-selector", + "@iron-validatable-behavior//:iron-validatable-behavior", + "@lodash//:lodash", + "@marked-element//:marked-element", + "@marked//:marked", + "@mocha//:mocha", + "@neon-animation//:neon-animation", + "@paper-behaviors//:paper-behaviors", + "@paper-button//:paper-button", + "@paper-checkbox//:paper-checkbox", + "@paper-dropdown-menu//:paper-dropdown-menu", + "@paper-header-panel//:paper-header-panel", + "@paper-icon-button//:paper-icon-button", + "@paper-input//:paper-input", + "@paper-item//:paper-item", + "@paper-material//:paper-material", + "@paper-menu-button//:paper-menu-button", + "@paper-menu//:paper-menu", + "@paper-progress//:paper-progress", + "@paper-radio-button//:paper-radio-button", + "@paper-radio-group//:paper-radio-group", + "@paper-ripple//:paper-ripple", + "@paper-slider//:paper-slider", + "@paper-styles//:paper-styles", + "@paper-toggle-button//:paper-toggle-button", + "@paper-toolbar//:paper-toolbar", + "@plottable//:plottable", + "@polymer//:polymer", + "@prism-element//:prism-element", + "@prism//:prism", + "@promise-polyfill//:promise-polyfill", + "@sinon-chai//:sinon-chai", + "@sinonjs//:sinonjs", + "@stacky//:stacky", + "@svg-typewriter//:svg-typewriter", + "@web-animations-js//:web-animations-js", + "@web-component-tester//:web-component-tester", + "@webcomponentsjs//:webcomponentsjs", + ], +) diff --git a/tensorflow/tensorboard/components/hydrogen-join/demo/index.html b/tensorflow/tensorboard/components/hydrogen-join/demo/index.html new file mode 100644 index 0000000000..238cff294d --- /dev/null +++ b/tensorflow/tensorboard/components/hydrogen-join/demo/index.html @@ -0,0 +1,118 @@ +<!doctype html> +<!-- +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> + <title>tf-graph Demo</title> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../hydrogen-join.html"> + <link rel="import" href="../../../bower_components/paper-button/paper-button.html"> + <link rel="import" href="../../../bower_components/paper-slider/paper-slider.html"> + </head> + + <style> + body { + font-family: "RobotoDraft","Roboto",sans-serif; + font-size: 14; + } + </style> + + <body unresolved> + <dom-module id="button-press-counter"> + <style> + paper-button { + background-color: #4DB6AC; + color: white; + } + </style> + <template> + <paper-button raised on-click="increment"><span>[[count]]<span></paper-button> + </template> + <script> + Polymer({ + is: "button-press-counter", + properties: {count: {notify: true, value: 0}}, + increment: function() {this.count++;} + }); + </script> + </dom-module> + + <dom-module id="args-demo"> + <template> + <h1>args-demo</h1> + <button-press-counter count="{{in1}}"></button-press-counter> + <button-press-counter count="{{in2}}"></button-press-counter> + <button-press-counter count="{{in3}}"></button-press-counter> + <hydrogen-join + in1="[[in1]]" + in2="[[in2]]" + in3="[[in3]]" + out="{{out}}" + id="argsjoin" + ></hydrogen-join> + <p>Output from the hydrogen-join: <span>[[out]]</span></p> + </template> + <script> + Polymer({ + is: "args-demo", + properties: { + in1: Number, + in2: Number, + in3: Number, + out: Array, + }, + }); + </script> + </dom-module> + + <dom-module id="repeat-demo"> + <style> + .button { + padding: 3px; + margin-bottom: 4px; + display: inline-block; + } + </style> + <template> + <h1>repeat-demo</h1> + <hydrogen-join id="repeatjoin" in-join-property="count" out="{{out}}"> + <template is="dom-repeat" items="[[counters]]"> + <button-press-counter class="button" count="[[item]]"></button-press-counter> + </template> + </hydrogen-join> + <br> + <p> Move this slider to add/remove buttons. It stays synced! What magic! </p> + <paper-slider min="0" max="20" value="{{nCounters}}"></paper-slider> + <p>Output from the hydrogen-join: <span>[[out]]</span></p> + </template> + <script> + Polymer({ + is: "repeat-demo", + properties: { + nCounters: {type: Number, value: 10}, + counters: {type: Array, computed: "_makeCounters(nCounters)"}, + }, + _makeCounters: function(nCounters) { + var c = []; + for (var i=0; i<nCounters; i++) { + c.push(i); + } + return c; + } + }); + </script> + </dom-module> + + <args-demo id="argsdemo"></args-demo> + <repeat-demo id="repeatdemo"></repeat-demo> + </body> +</html> diff --git a/tensorflow/tensorboard/components/hydrogen-join/hydrogen-join.html b/tensorflow/tensorboard/components/hydrogen-join/hydrogen-join.html new file mode 100644 index 0000000000..9f8dcfe2af --- /dev/null +++ b/tensorflow/tensorboard/components/hydrogen-join/hydrogen-join.html @@ -0,0 +1,118 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> + +<!-- +A plumber component which joins a number of input bindings. It outputs a list +consisting of all of the inputs that are not null or undefined. + +It can take explicit arguments [in0...in98] or it can pull its arguments from +a dom-repeat template, provided that it is given the property name it is looking +for on the repeated children, and that property has {notify: true}. The repeat +binding involves some magic and may not be totally reliable; ping danmane@ if +something goes wrong. + +Example: + <hydrogen-join + in1="[[foo1]]" + in2="[[foo2]]" + in3="[[foo3]]" + out="{{foos}}" // equivalent to [foo1].push(foo2).push(foo3) + ></hydrogen-join> + + <hydrogen-join out="{{foo}}" in-join-property="out"> + <template is="dom-repeat" items="[[foos]]"> + <foo item="[[item]]"></foo> //foo has a property out: {type: Array, notify: true} + </template> + </hydrogen-join> + +Swapping the inJoinProperty is not currently supported, it will warn if you try. + +There's a possible bug in repeat mode if an element is removed from the dom-repeat, +but continues to exist somewhere else, and continues to fire property-changed events. +Then the hydrogen-join will inappropriately record its value, even though it is not +still connected in hydrogen-join's DOM. + +@demo +--> +<dom-module id="hydrogen-join"> + <script> + var declaration = { + is: 'hydrogen-join', + properties: { + out: {type: Array, readOnly: true, notify: true}, + _items: {type: Array, value: function() {return [];}}, + /* Property to pull from dom-repeated child nodes and then pull and join */ + inJoinProperty: {type: String, observer: "_modifyJoinProperty"}, + }, + listeners: { + "dom-change": "_syncListenersAndState", + }, + /* If we are in repeat-mode, ensure all event listeners are setup, and pull + * items out of whatever children currently exist + */ + _syncListenersAndState: function() { + if (this.inJoinProperty == null) { + // this codepath is for pulling properties out of children in a repeat + return; + } + function repeatUpdateFunction(i) { + return function(e) { + this._items[i] = e.detail.value; + // Debounce just in case something else thrashes + this.debounce("updateOut", this._updateOutput) + } + } + // create a new items array to replace the old one, otherwise old items + // might never get removed when their corresponding element leaves + this._items = []; + // Sadly, we need to bind an update function onto every child node, + // because the property-changed event does not bubble. + for (var i=0; i<this.childNodes.length; i++) { + var child = this.childNodes[i]; + if (child.properties != null && child.properties[this.inJoinProperty] != null) { + child.addEventListener(this.inJoinProperty + "-changed", repeatUpdateFunction(i).bind(this)); + this._items[i] = child[this.inJoinProperty]; + } + } + this._updateOutput(); + }, + _modifyJoinProperty: function(newJoinProperty, oldJoinProperty) { + if (oldJoinProperty != null) { + console.warning("Changing the join property may be unsafe. Have fun!"); + } + this._syncListenersAndState(); + }, + _updateOutput: function() { + var out = []; + for (var i=0; i<99; i++) { + if (this._items[i] != null) { + out.push(this._items[i]); + } + } + this._setOut(out); + } + }; + + /* Programatically add properties in0-in98, with associated observers */ + function argsUpdateFunction(i) { + return function(newval) { + this._items[i] = newval; + if (i === 98) { + console.warn("You're updating the last arg (98). Possibly some values are being lost"); + } + if (this.inJoinProperty != null) { + console.warn("It looks like you're providing a join property and also arguments. This is not supported.") + } + this.debounce("updateOut", this._updateOutput) + } + } + // I got 99 arguments and ain't off by 1! + for (var i = 0; i < 99; i++) { + var propName = "in" + i; + var updateName = "_update" + i; + var property = {type: Object, observer: updateName}; + declaration.properties[propName] = property; + declaration[updateName] = argsUpdateFunction(i); + } + Polymer(declaration); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/hydrogen-set/demo/index.html b/tensorflow/tensorboard/components/hydrogen-set/demo/index.html new file mode 100644 index 0000000000..6a1735a699 --- /dev/null +++ b/tensorflow/tensorboard/components/hydrogen-set/demo/index.html @@ -0,0 +1,106 @@ +<!doctype html> +<!-- +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> + <title>hydrogen-set demo</title> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../hydrogen-set.html"> + <link rel="import" href="../../../bower_components/paper-checkbox/paper-checkbox.html"> + </head> + + <style> + body { + margin: 0; + font-family: "RobotoDraft","Roboto",sans-serif; + font-size: 14; + } + </style> + + <body unresolved> + <dom-module id="x-a"> + <template> + <template is="dom-repeat" items="[[items]]"> + <span>[[item]]</span> + <paper-checkbox + name="[[item]]" + on-iron-change="_onChange" + checked="[[_isSelected(item, selected.*)]]" + ></paper-checkbox> + </template> + </template> + </dom-module> + <script> + Polymer({ + is: 'x-a', + properties: { + selected: { + type: Array + }, + items: { + type: Array, + value: function() { + return ["a","b","c","d","e"]; + } + } + }, + _onChange: function(e) { + var name = e.srcElement.name; + if (name) { + if (e.srcElement.checked) { + this.fire('select', name); + } else { + this.fire('unselect', name); + } + } + }, + _isSelected: function(item, selected) { + return selected.base.indexOf(item) >= 0; + } + }); + </script> + <template is="dom-bind"> + <hydrogen-set + id="set" + event-add="{{add}}" + event-delete="{{del}}" + out-value="{{selected}}" + ></hydrogen-set> + <div> + Mutate the two sets below. + </div> + <br/> + <div>First Set</div> + <x-a + id="a" + on-select="add" + on-unselect="del" + selected="[[selected]]" + ></x-a> + <br/> + <br/> + <div>Second Set</div> + <x-a + id="b" + on-select="add" + on-unselect="del" + selected="[[selected]]" + ></x-a> + <br/> + <br/> + <div>List Selected:</div> + <template is="dom-repeat" items="[[selected]]"> + <div>[[item]]</div> + </template> + </template> + </body> +</html> diff --git a/tensorflow/tensorboard/components/hydrogen-set/hydrogen-set.html b/tensorflow/tensorboard/components/hydrogen-set/hydrogen-set.html new file mode 100644 index 0000000000..28fb8bd2a1 --- /dev/null +++ b/tensorflow/tensorboard/components/hydrogen-set/hydrogen-set.html @@ -0,0 +1,174 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> + +<!-- +hydrogen-set is a plumber component that is driven by events +and produces data in the form of an upward-bindable set. +It provides event handler functions like event-add and +event-del, which may be attached elsewhere as event listeners. +The hydrogen-set then captures those events and adds or +removes their details to an internal set, which it +publishes as out-value. + +As an example, you may have a list of input widgets that +generate strings by firing an event. If you attach +the hydrogen-set `event-add` function as the handler +for the input widgets' input event, then the hydrogen-set +will collect and deduplicate all of the strings the +user generated. + +Thus, hydrogen-set is useful for capturing semantic +events from across an application, and organizing +the data generated into a single store. + +Example: + + <hydrogen-set + event-add="{{add}} + event-delete="{{del}} + out-value="{{selected}}" + ></hydrogen-set> + <element-one + selected="{{selected}}" + on-select="add" + on-deselect="del" + ></element-one> + <element-two + selected="{{selected}}" + on-select="add" + on-deselect="del" + ></element-two> + +@demo demo/index.html +--> +<script> +Polymer({ + is: 'hydrogen-set', + properties: { + /** + * A function to bind to event callback where + * the detail value is the item to add. + * + * @property eventAdd + * @type Function + */ + eventAdd: { + readOnly: true, + notify: true, + type: Function, + value: function() { + return function(e) { + this.add(e.detail); + }.bind(this); + } + }, + /** + * A function to bind to event callback where + * the detail value is the item to remove. + * + * @property eventDelete + * @type Function + */ + eventDelete: { + readOnly: true, + notify: true, + type: Function, + value: function() { + return function(e) { + this.delete(e.detail); + }.bind(this); + } + }, + /** + * A function to bind to event callback where + * the detail value is the list of items that should + * replace the current set. + * + * @property eventUpdate + * @type Function + */ + eventUpdate: { + readOnly: true, + notify: true, + type: Function, + value: function() { + return function(e) { + this.update(e.detail); + }.bind(this); + } + }, + /** + * A function to bind to event callback + * which when called reset the set to the + * empty set ([]). + * + * @property eventClear + * @type Function + */ + eventClear: { + readOnly: true, + notify: true, + type: Function, + value: function() { + return function(e) { + this.clear(e.detail); + }.bind(this); + } + }, + /** + * The read-only array representing the set of + * items in this set. + * + * @property outValue + * @type Array + * @default [] + */ + outValue: { + type: Array, + readOnly: true, + notify: true, + value: function() { + return []; + } + } + }, + /** + * Adds an item to the set. + */ + add: function(value) { + if (this.outValue.indexOf(value) >= 0) { return; } + this.push('outValue', value); + }, + /** + * Removes an item from the set. + */ + delete: function(value) { + var i = this.outValue.indexOf(value); + if (i < 0) { return; } + this.splice('outValue', i, 1); + }, + /** + * Sets the set to a specific array of items. + */ + update: function(value) { + if (value.constructor === Array) { + var uniq = {}; + var list = []; + for (var i=0, l = value.length; i < l; ++i) { + var item = value[i]; + if (uniq.hasOwnProperty(item)) { + continue; + } + list.push(item); + uniq[item] = true; + } + this._setOutValue(list) + } + }, + /** + * Resets the set to the empty set. + */ + clear: function() { + this.update([]); + } +}); +</script> diff --git a/tensorflow/tensorboard/components/imports/d3.html b/tensorflow/tensorboard/components/imports/d3.html new file mode 100644 index 0000000000..d63c480fd9 --- /dev/null +++ b/tensorflow/tensorboard/components/imports/d3.html @@ -0,0 +1 @@ +<script src="../../bower_components/d3/d3.min.js"></script> diff --git a/tensorflow/tensorboard/components/imports/lodash.html b/tensorflow/tensorboard/components/imports/lodash.html new file mode 100644 index 0000000000..1e94d2c1c4 --- /dev/null +++ b/tensorflow/tensorboard/components/imports/lodash.html @@ -0,0 +1 @@ +<script src="../../bower_components/lodash/lodash.min.js"></script> diff --git a/tensorflow/tensorboard/components/imports/plottable.html b/tensorflow/tensorboard/components/imports/plottable.html new file mode 100644 index 0000000000..08e636886a --- /dev/null +++ b/tensorflow/tensorboard/components/imports/plottable.html @@ -0,0 +1,3 @@ +<link rel="import" href="d3.html"> +<script src="../../bower_components/plottable/plottable.min.js"></script> +<link rel="stylesheet" type="text/css" href="../../bower_components/plottable/plottable.css"> diff --git a/tensorflow/tensorboard/components/tf-categorizer/categorizer.ts b/tensorflow/tensorboard/components/tf-categorizer/categorizer.ts new file mode 100644 index 0000000000..e05078279e --- /dev/null +++ b/tensorflow/tensorboard/components/tf-categorizer/categorizer.ts @@ -0,0 +1,133 @@ +/// <reference path="../../typings/tsd.d.ts" /> + +module Categorizer { + /** + * This module contains methods that allow sorting tags into "categories". + * A category contains a name and a list of tags. + * The sorting strategy is defined by a "CustomCategorization", which contains + * "categoryDefinitions" which are regex rules used to construct a category. + * E.g. the regex rule "xent" will create a category called "xent" that + * contains values whose tags match the regex. + * + * After custom categories are evaluated, the tags are sorted by a hardcoded + * fallback categorizer, which may, for example, group tags into categories + * based on their top namespace. + */ + + export interface Category { + // Categories that data is sorted into + name: string; + tags: string[]; + } + + export interface CustomCategorization { + // Defines a categorization strategy + categoryDefinitions: string[]; + fallbackCategorizer: string; + /* {"TopLevelNamespaceCategorizer", + "LegacyUnderscoreCategorizer"} */ + } + + export interface Categorizer { + // Function that generates categories + (tags: string[]): Category[]; + } + + /* Canonical TensorFlow ops are namespaced using forward slashes. + * This fallback categorizer categorizes by the top-level namespace. + */ + export var topLevelNamespaceCategorizer: Categorizer = splitCategorizer(/\//); + + // Try to produce good categorizations on legacy graphs, which often + // are namespaced like l1_foo/bar or l2_baz/bam. + // If there is no leading underscore before the first forward slash, + // then it behaves the same as topLevelNamespaceCategorizer + export var legacyUnderscoreCategorizer: Categorizer = splitCategorizer(/[\/_]/); + + export function fallbackCategorizer(s: string): Categorizer { + switch (s) { + case "TopLevelNamespaceCategorizer": + return topLevelNamespaceCategorizer; + case "LegacyUnderscoreCategorizer": + return legacyUnderscoreCategorizer; + default: + throw new Error("Unrecognized categorization strategy: " + s); + } + } + + /* An "extractor" is a function that takes a tag name, and "extracts" a category name. + * This function takes an extractor, and produces a categorizer. + * Currently, it is just used for the fallbackCategorizer, but we may want to + * refactor the general categorization logic to use the concept of extractors. + */ + function extractorToCategorizer(extractor: (s: string) => string): Categorizer { + return (tags: string[]): Category[] => { + if (tags.length === 0) { + return []; + } + var sortedTags = tags.slice().sort(); + var categories: Category[] = []; + var currentCategory = { + name: extractor(sortedTags[0]), + tags: [], + }; + sortedTags.forEach((t: string) => { + var topLevel = extractor(t); + if (currentCategory.name !== topLevel) { + categories.push(currentCategory); + currentCategory = { + name: topLevel, + tags: [], + }; + } + currentCategory.tags.push(t); + }); + categories.push(currentCategory); + return categories; + }; + } + + function splitCategorizer(r: RegExp): Categorizer { + var extractor = (t: string) => { + return t.split(r)[0]; + }; + return extractorToCategorizer(extractor); + } + + export interface CategoryDefinition { + name: string; + matches: (t: string) => boolean; + } + + export function defineCategory(ruledef: string): CategoryDefinition { + var r = new RegExp(ruledef); + var f = function(tag: string): boolean { + return r.test(tag); + }; + return { name: ruledef, matches: f }; + } + + export function _categorizer(rules: CategoryDefinition[], fallback: Categorizer) { + return function(tags: string[]): Category[] { + var remaining: d3.Set = d3.set(tags); + var userSpecified = rules.map((def: CategoryDefinition) => { + var tags: string[] = []; + remaining.forEach((t: string) => { + if (def.matches(t)) { + tags.push(t); + } + }); + var cat = { name: def.name, tags: tags.sort() }; + return cat; + }); + var defaultCategories = fallback(remaining.values()); + return userSpecified.concat(defaultCategories); + }; + } + + export function categorizer(s: CustomCategorization): Categorizer { + var rules = s.categoryDefinitions.map(defineCategory); + var fallback = fallbackCategorizer(s.fallbackCategorizer); + return _categorizer(rules, fallback); + }; +} diff --git a/tensorflow/tensorboard/components/tf-categorizer/demo/index.html b/tensorflow/tensorboard/components/tf-categorizer/demo/index.html new file mode 100644 index 0000000000..ea3f162aa5 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-categorizer/demo/index.html @@ -0,0 +1,97 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <script src="../../../bower_components/d3/d3.js"></script> + <link rel="import" href="../tf-categorizer.html"> + <link rel="import" href="../../../bower_components/iron-flex-layout/classes/iron-flex-layout.html"> + + </head> + <body> + <style> + </style> + <dom-module id="x-demo"> + <style> + .container { + width: 255px; + padding: 10px; + border: 1px solid var(--paper-indigo-900); + border-radius: 5px; + position: fixed; + } + :host { + margin: 0px; + } + + .categories { + font-family: "RobotoDraft",Helvetica; + margin-left: 300px; + width: 500px; + border: 1px solid var(--paper-indigo-500); + border-radius: 5px; + } + + .category { + background-color: var(--paper-indigo-50); + margin: 20px; + padding: 20px; + border-radius: 5px; + } + + .cat-name { + font-size: 20px; + } + + .tag { + border-radius: 5px; + padding: 5px; + margin: 5px; + background-color: var(--paper-indigo-900); + color: white; + } + </style> + <template> + <div class="container"> + <tf-categorizer categories="{{categories}}" tags="[[tags]]" id="demo"></tf-categorizer> + </div> + <div class="categories"> + <template is="dom-repeat" items="[[categories]]"> + <div class="category"> + <p class="cat-name">Category: <span>[[item.name]]</span></p> + <div class="tags-container layout horizontal wrap"> + <template is="dom-repeat" items="[[item.tags]]"> + <span class="tag layout vertical center-center">[[item]]</span> + </template> + </div> + </template> + </div> + </template> + <script> + + function tagsGenerator() { + var tags = ["special1", "special2", "special3", "special4", "special5"]; + ["l1", "l2", "l3", "l4", "l5"].forEach(function(l) { + ["foo", "bar", "baz", "boink", "zod", "specialx"].forEach(function(x) { + tags.push(l + "/" + x); + }); + }); + return tags; + } + + Polymer({ + is: "x-demo", + properties: { + tags: { type: Array, value: tagsGenerator }, + }, + }); + </script> + </dom-module> + + <x-demo id="demo"></x-demo> + </body> + <script> + HTMLImports.whenReady(function() { + window.demo = document.getElementById("demo"); + }) + </script> +</html> diff --git a/tensorflow/tensorboard/components/tf-categorizer/index.html b/tensorflow/tensorboard/components/tf-categorizer/index.html new file mode 100644 index 0000000000..f08a125f7c --- /dev/null +++ b/tensorflow/tensorboard/components/tf-categorizer/index.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> +<head> + + <title>tf-categorizer</title> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../../bower_components/iron-component-page/iron-component-page.html"> + +</head> +<body> + + <iron-component-page></iron-component-page> + +</body> +</html> diff --git a/tensorflow/tensorboard/components/tf-categorizer/test/categorizerTest.ts b/tensorflow/tensorboard/components/tf-categorizer/test/categorizerTest.ts new file mode 100644 index 0000000000..be09c56c41 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-categorizer/test/categorizerTest.ts @@ -0,0 +1,139 @@ +/// <reference path="../../../typings/tsd.d.ts" /> +/// <reference path="../categorizer.ts" /> +var assert = chai.assert; + +module Categorizer { + describe("categorizer", () => { + describe("topLevelNamespaceCategorizer", () => { + it("returns empty array on empty tags", () => { + assert.lengthOf(topLevelNamespaceCategorizer([]), 0); + }); + + it("handles a simple case", () => { + var simple = ["foo1/bar", "foo1/zod", "foo2/bar", "foo2/zod", + "gosh/lod/mar", "gosh/lod/ned"]; + var expected = [ + { name: "foo1", tags: ["foo1/bar", "foo1/zod"] }, + { name: "foo2", tags: ["foo2/bar", "foo2/zod"] }, + { name: "gosh", tags: ["gosh/lod/mar", "gosh/lod/ned"] }, + ]; + assert.deepEqual(topLevelNamespaceCategorizer(simple), expected); + }); + + it("orders the categories", () => { + var test = ["e", "f", "g", "a", "b", "c"]; + var expected = [ + { name: "a", tags: ["a"] }, + { name: "b", tags: ["b"] }, + { name: "c", tags: ["c"] }, + { name: "e", tags: ["e"] }, + { name: "f", tags: ["f"] }, + { name: "g", tags: ["g"] }, + ]; + assert.deepEqual(topLevelNamespaceCategorizer(test), expected); + }); + + it("handles cases where category names overlap node names", () => { + var test = ["a", "a/a", "a/b", "a/c", "b", "b/a"]; + var actual = topLevelNamespaceCategorizer(test); + var expected = [ + { name: "a", tags: ["a", "a/a", "a/b", "a/c"] }, + { name: "b", tags: ["b", "b/a"] }, + ]; + assert.deepEqual(actual, expected); + }); + + it("handles singleton case", () => { + assert.deepEqual(topLevelNamespaceCategorizer(["a"]), [{ name: "a", tags: ["a"] }]); + }); + }); + + describe("legacyUnderscoreCategorizer", () => { + it("splits by shorter of first _ or /", () => { + var tags = ["l0_bar/foo", "l0_bar/baz", "l0_foo/wob", "l1_zoink/bla", + "l1_wibble/woz", "l1/foo_woink", "l2/wozzle_wizzle"]; + var actual = legacyUnderscoreCategorizer(tags); + var expected = [ + { name: "l0", tags: ["l0_bar/baz", "l0_bar/foo", "l0_foo/wob"] }, + { name: "l1", tags: ["l1/foo_woink", "l1_wibble/woz", "l1_zoink/bla"] }, + { name: "l2", tags: ["l2/wozzle_wizzle"] }, + ]; + assert.deepEqual(actual, expected); + }); + }); + + describe("customCategorizer", () => { + function noFallbackCategorizer(tags: string[]): Category[] { + return []; + } + + function testCategorizer(defs: string[], + fallback: Categorizer, tags: string[]): Category[] { + var catDefs = defs.map(defineCategory); + return _categorizer(catDefs, fallback)(tags); + } + + it("categorizes by regular expression", () => { + var defs = ["foo..", "bar.."]; + var tags = ["fooab", "fooxa", "barts", "barms"]; + var actual = testCategorizer(defs, noFallbackCategorizer, tags); + var expected = [ + { name: "foo..", tags: ["fooab", "fooxa"] }, + { name: "bar..", tags: ["barms", "barts"] }, + ]; + assert.deepEqual(actual, expected); + }); + + it("matches non-exclusively", () => { + var tags = ["abc", "bar", "zod"]; + var actual = testCategorizer(["...", "bar"], noFallbackCategorizer, tags); + var expected = [ + { name: "...", tags: ["abc", "bar", "zod"] }, + { name: "bar", tags: ["bar"] }, + ]; + assert.deepEqual(actual, expected); + }); + + it("creates categories for unmatched rules", () => { + var actual = testCategorizer(["a", "b", "c"], noFallbackCategorizer, []); + var expected = [ + { name: "a", tags: [] }, + { name: "b", tags: [] }, + { name: "c", tags: [] }, + ]; + assert.deepEqual(actual, expected); + }); + + it("category regexs work with special characters", () => { + var defs = ["^\\w+$", "^\\d+$", "^\\/..$"]; + var tags = ["foo", "3243", "/xa"]; + var actual = testCategorizer(defs, noFallbackCategorizer, tags); + var expected = [ + { name: "^\\w+$", tags: ["3243", "foo"] }, + { name: "^\\d+$", tags: ["3243"] }, + { name: "^\\/..$", tags: ["/xa"] }, + ]; + assert.deepEqual(actual, expected); + }); + + it("category tags are sorted", () => { + var tags = ["a", "z", "c", "d", "e", "x", "f", "y", "g"]; + var sorted = tags.slice().sort(); + var expected = [{ name: ".*", tags: sorted}]; + var actual = testCategorizer([".*"], noFallbackCategorizer, tags); + assert.deepEqual(actual, expected); + }); + + it("if nonexclusive: all tags passed to fallback", () => { + var passedToDefault = null; + function defaultCategorizer(tags: string[]): Category[] { + passedToDefault = tags; + return []; + } + var tags = ["foo", "bar", "foo123"]; + testCategorizer(["foo"], defaultCategorizer, tags); + assert.deepEqual(passedToDefault, tags); + }); + }); + }); +} diff --git a/tensorflow/tensorboard/components/tf-categorizer/tf-categorizer.html b/tensorflow/tensorboard/components/tf-categorizer/tf-categorizer.html new file mode 100644 index 0000000000..3672db38a2 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-categorizer/tf-categorizer.html @@ -0,0 +1,103 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-toggle-button/paper-toggle-button.html"> + +<link rel="import" href="../tf-regex-group/tf-regex-group.html"> +<link rel="import" href="../tf-dashboard-common/tensorboard-color.html"> + +<!-- +`tf-categorizer` turns an array of tags into an array of categories + +The transformation from tags to categories is controlled by the user, through +interacting with the categorizer widget. + +(See type signatures in categorizer.ts) + +Example: + <tf-categorizer tags="[[tags]]" categories="{{categories}}"></tf-categorizer> + +Public Properties: +`tags` - Array of strings that are the tags to categorize. Should be one-way bound downward. +`categories` - Array of Categorizer.Category objects that are generated by the Categorizer. + Are readOnly and notify: True. Expected to be one-way bound upward. + +The categorizer provides inputs for adding regular expression rules and toggling whether +categories are exclusive. +--> +<dom-module id="tf-categorizer"> + <template> + <div class="inputs"> + <tf-regex-group id="regex-group" regexes="{{regexes}}"></tf-regex-group> + </div> + <div id="underscore-categorization"> + <span>Split On Underscores:</span> + <paper-toggle-button checked="{{splitOnUnderscore}}"></paper-toggle-button> + </div> + <style> + :host { + display: block; + padding-bottom: 5px; + padding-top: 5px; + } + + .inputs { + padding-left: 5px; + } + + paper-toggle-button { + --paper-toggle-button-checked-button-color: var(--tb-orange-strong); + --paper-toggle-button-checked-bar-color: var(--tb-orange-weak); + } + #underscore-categorization { + padding-left: 94px; + color: var(--paper-grey-700); + font-size: 14px; + } + </style> + </template> + <script src="categorizer.js"></script> + <script> + Polymer({ + is: "tf-categorizer", + properties: { + regexes: {type: Array}, + tags: {type: Array}, + categoriesAreExclusive: {type: Boolean, value: true}, + fallbackCategorizer: { + type: String, + computed: "chooseFallbackCategorizer(splitOnUnderscore)" + }, + splitOnUnderscore: { + type: Boolean, + value: false, + }, + categorizer: { + type: Object, + computed: "computeCategorization(regexes.*, categoriesAreExclusive, fallbackCategorizer)", + }, + categories: {type: Array, value: function() {return [];}, notify: true, readOnly: true}, + }, + observers: ['recategorize(tags.*, categorizer)'], + computeCategorization: function(regexes, categoriesAreExclusive, fallbackCategorizer) { + var categorizationStrategy = { + categoryDefinitions: regexes.base, + categoriesAreExclusive: categoriesAreExclusive, + fallbackCategorizer: fallbackCategorizer, + }; + return Categorizer.categorizer(categorizationStrategy); + }, + recategorize: function() { + this.debounce("tf-categorizer-recategorize", function (){ + var categories = this.categorizer(this.tags); + this._setCategories(categories); + }) + }, + chooseFallbackCategorizer: function(splitOnUnderscore) { + if (splitOnUnderscore) { + return "LegacyUnderscoreCategorizer"; + } else { + return "TopLevelNamespaceCategorizer"; + } + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-collapsable-pane/demo/index.html b/tensorflow/tensorboard/components/tf-collapsable-pane/demo/index.html new file mode 100644 index 0000000000..8906b0f3da --- /dev/null +++ b/tensorflow/tensorboard/components/tf-collapsable-pane/demo/index.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../tf-collapsable-pane.html"> + </head> + <body> + <style> + </style> + <tf-collapsable-pane name="foo"> + <h1>This is content inside the pane.</h1> + </tf-collapsable-pane> + </body> + <script> + + </script> +</html> diff --git a/tensorflow/tensorboard/components/tf-collapsable-pane/index.html b/tensorflow/tensorboard/components/tf-collapsable-pane/index.html new file mode 100644 index 0000000000..032e5be8c8 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-collapsable-pane/index.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> +<head> + + <title>tf-collapsable-pane</title> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../../bower_components/iron-component-page/iron-component-page.html"> + +</head> +<body> + + <iron-component-page></iron-component-page> + +</body> +</html> diff --git a/tensorflow/tensorboard/components/tf-collapsable-pane/tf-collapsable-pane.html b/tensorflow/tensorboard/components/tf-collapsable-pane/tf-collapsable-pane.html new file mode 100644 index 0000000000..c06d40a2ec --- /dev/null +++ b/tensorflow/tensorboard/components/tf-collapsable-pane/tf-collapsable-pane.html @@ -0,0 +1,90 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html"> + +<dom-module id="tf-collapsable-pane"> + <template> + <button + class="heading" + on-tap="togglePane" + open-button$="[[opened]]" + > + <span class="name">[[name]]</span> + <span class="hackpadding"></span> + <span class="count"> + (<span>[[count]]</span>) + </span> + </button> + <iron-collapse opened="[[opened]]"> + <div class="content"> + <template is="dom-if" if="[[opened]]" restamp="[[restamp]]"> + <content></content> + </template> + </div> + </iron-collapse> + <style> + .heading { + margin-top: 10px; + padding-left: 15px; + background-color: #f3f3f3; + border: 1px solid #dedede; + border-radius: 5px; + font-size: 18px; + cursor: pointer; + -webkit-tap-highlight-color: rgba(0,0,0,0); + width: 100%; + height: 30px; + box-sizing: border-box; + font-size: 16px; + display: inline-flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + line-height: 1; + padding-top: 2px; + padding-bottom: 2px; + } + + .content { + padding: 15px; + border: 1px solid #dedede; + border-top: none; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } + [open-button] { + border-bottom-left-radius: 0px !important; + border-bottom-right-radius: 0px !important; + } + .name { + flex-grow: 0; + } + .count { + flex-grow: 0; + float: right; + font-size: 12px; + } + .hackpadding { + /* An obnoxious hack, but I can't get justify-content: space-between to work */ + flex-grow: 1; + } + </style> + </template> + <script> + Polymer({ + is: "tf-collapsable-pane", + properties: { + opened: {type: Boolean, value: false}, + restamp: {type: Boolean, value: true}, + name: {type: String, observer: "hide"}, + count: {type: Number}, + }, + hide: function() { + this.opened = false; + }, + togglePane: function() { + this.opened = !this.opened; + } + }); + </script> + +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/dashboard-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/dashboard-style.html new file mode 100644 index 0000000000..795cbbcac3 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/dashboard-style.html @@ -0,0 +1,97 @@ +<link rel="import" href="../../bower_components/paper-styles/paper-styles.html"> +<link rel="import" href="../tf-dashboard-common/tensorboard-color.html"> + +<dom-module id="dashboard-style"> + <template> + <style> + .card { + height: 200px; + width: 300px; + display: flex; + flex-direction: column; + margin: 5px 5px; + padding: 5px; + border: 1px solid var(--paper-grey-500); + border-radius: 3px; + -webkit-user-select: none; + -moz-user-select: none; + position: relative; + } + + .card .card-title { + flex-grow: 0; + flex-shrink: 0; + margin-bottom: 2px; + font-size: 14px; + font-weight: bold; + text-overflow: ellipsis; + overflow: hidden; + } + + .card .card-content { + flex-grow: 1; + flex-shrink: 1; + display: flex; + } + .card .card-bottom-row { + flex-grow: 0; + flex-shrink: 0; + padding-left: 10px; + padding-right: 10px; + } + + .card.selected { + height: 400px; + width: 100%; + } + + [shift] { + bottom: 20px !important; + } + + .expand-button { + position: absolute; + left: 0px; + bottom: 0px; + color: #2196F3; + display: block; + } + + #content-container{ + display: block; + } + + .sidebar { + display: flex; + flex-direction: column; + height: 100%; + } + + #categorizer { + flex-shrink: 0; + } + + #xTypeSelector { + flex-shrink: 0; + margin: 20px 0; + } + + #runSelector { + flex-shrink: 1; + flex-grow: 1; + } + + #download-option { + padding-left: 55px; + color: var(--paper-grey-700); + font-size: 14px; + } + + #download-option paper-toggle-button { + --paper-toggle-button-checked-button-color: var(--tb-orange-strong); + --paper-toggle-button-checked-bar-color: var(--tb-orange-weak); + + } + </style> + </template> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/run-color-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/run-color-style.html new file mode 100644 index 0000000000..d9b12f366a --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/run-color-style.html @@ -0,0 +1,62 @@ +<link rel="import" href="../../bower_components/paper-styles/paper-styles.html"> + +<dom-module id="run-color-style"> + <template> + <style> + [color-class="light-blue"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-light-blue-500); + --paper-checkbox-checked-ink-color: var(--paper-light-blue-500); + --paper-checkbox-unchecked-color: var(--paper-light-blue-900); + --paper-checkbox-unchecked-ink-color: var(--paper-light-blue-900); + } + [color-class="red"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-red-500); + --paper-checkbox-checked-ink-color: var(--paper-red-500); + --paper-checkbox-unchecked-color: var(--paper-red-900); + --paper-checkbox-unchecked-ink-color: var(--paper-red-900); + } + [color-class="green"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-green-500); + --paper-checkbox-checked-ink-color: var(--paper-green-500); + --paper-checkbox-unchecked-color: var(--paper-green-900); + --paper-checkbox-unchecked-ink-color: var(--paper-green-900); + } + [color-class="purple"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-purple-500); + --paper-checkbox-checked-ink-color: var(--paper-purple-500); + --paper-checkbox-unchecked-color: var(--paper-purple-900); + --paper-checkbox-unchecked-ink-color: var(--paper-purple-900); + } + [color-class="teal"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-teal-500); + --paper-checkbox-checked-ink-color: var(--paper-teal-500); + --paper-checkbox-unchecked-color: var(--paper-teal-900); + --paper-checkbox-unchecked-ink-color: var(--paper-teal-900); + } + [color-class="pink"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-pink-500); + --paper-checkbox-checked-ink-color: var(--paper-pink-500); + --paper-checkbox-unchecked-color: var(--paper-pink-900); + --paper-checkbox-unchecked-ink-color: var(--paper-pink-900); + } + [color-class="orange"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-orange-500); + --paper-checkbox-checked-ink-color: var(--paper-orange-500); + --paper-checkbox-unchecked-color: var(--paper-orange-900); + --paper-checkbox-unchecked-ink-color: var(--paper-orange-900); + } + [color-class="brown"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-brown-500); + --paper-checkbox-checked-ink-color: var(--paper-brown-500); + --paper-checkbox-unchecked-color: var(--paper-brown-900); + --paper-checkbox-unchecked-ink-color: var(--paper-brown-900); + } + [color-class="indigo"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-indigo-500); + --paper-checkbox-checked-ink-color: var(--paper-indigo-500); + --paper-checkbox-unchecked-color: var(--paper-indigo-900); + --paper-checkbox-unchecked-ink-color: var(--paper-indigo-900); + } + </style> + </template> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/scrollbar-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/scrollbar-style.html new file mode 100644 index 0000000000..90fc184e8d --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/scrollbar-style.html @@ -0,0 +1,28 @@ +<link rel="import" href="../../bower_components/paper-styles/paper-styles.html"> + +<dom-module id="scrollbar-style"> + <template> + <style> + .scrollbar::-webkit-scrollbar-track + { + visibility: hidden; + } + + .scrollbar::-webkit-scrollbar + { + width: 10px; + } + + .scrollbar::-webkit-scrollbar-thumb + { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,.3); + background-color: var(--paper-grey-500); + color: var(--paper-grey-900); + } + .scrollbar { + box-sizing: border-box; + } + </style> + </template> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tensorboard-color.html b/tensorflow/tensorboard/components/tf-dashboard-common/tensorboard-color.html new file mode 100644 index 0000000000..c3a59b7a31 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/tensorboard-color.html @@ -0,0 +1,11 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<style is="custom-style"> + + :root { + --tb-orange-weak: #fcb938; + --tb-orange-strong: #f3913e; + --tb-grey-darker: #e2e2e2; + --tb-grey-lighter: #f3f3f3; + } + +</style> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-dashboard-layout.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-dashboard-layout.html new file mode 100644 index 0000000000..89c51342fe --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-dashboard-layout.html @@ -0,0 +1,50 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="scrollbar-style.html"> +<link rel="import" href="tensorboard-color.html"> +<!-- +Generic layout for a dashboard. +--> +<dom-module id="tf-dashboard-layout"> + <template> + <div id="sidebar"> + <content select=".sidebar"></content> + </div> + + <div id="center" class="scrollbar"> + <content select=".center"></content> + </div> + <style include="scrollbar-style"></style> + <style> + #sidebar { + width: inherit; + height: 100%; + background-color: var(--tb-grey-darker); + background-image: linear-gradient(to right, var(--tb-grey-lighter), var(--tb-grey-lighter)); + overflow: ellipsis; + padding-left: 10px; + padding-right: 10px; + flex-grow: 0; + flex-shrink: 0; + } + + #center { + margin: 0 10px; + height: 100%; + overflow-y: scroll; + padding-right: 12px; + flex-grow: 1; + flex-shrink: 1; + } + :host { + display: flex; + flex-direction: row; + height: 100%; + } + </style> + </template> + <script> + Polymer({ + is: "tf-dashboard-layout", + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-downloader.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-downloader.html new file mode 100644 index 0000000000..c7251ec578 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-downloader.html @@ -0,0 +1,85 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html"> +<link rel="import" href="../../bower_components/paper-menu/paper-menu.html"> +<link rel="import" href="../../bower_components/paper-item/paper-item.html"> + +<dom-module id="tf-downloader"> + <template> + <paper-dropdown-menu + no-label-float="true" + label="run to download" + selected-item-label="{{_run}}" + > + <paper-menu class="dropdown-content"> + <template is="dom-repeat" items="[[_runs]]"> + <paper-item no-label-float=true>[[item]]</paper-item> + </template> + </paper-menu> + </paper-dropdown-menu> + <a + download="[[_csvName(_run)]]" + href="[[_csvUrl(_run, urlFn)]]" + >CSV</a> + <a + download="[[_jsonName(_run)]]" + href="[[_jsonUrl(_run, urlFn)]]" + >JSON</a> + <style> + :host { + display: block; + } + paper-dropdown-menu { + width: 220px; + --paper-input-container-label: { + font-size: 10px; + } + --paper-input-container-input: { + font-size: 10px; + } + } + a { + font-size: 10px; + border-radius: 3px; + border: 1px solid #EEE; + } + paper-input { + font-size: 22px; + } + </style> + </template> + <script> + Polymer({ + is: "tf-downloader", + properties: { + _run: String, + _runs: { + type: Array, + computed: "_computeRuns(runToTag.*, selectedRuns.*)", + }, + selectedRuns: Array, + runToTag: Object, + tag: String, + urlFn: Function, + }, + _computeRuns: function(runToTagChange, selectedRunsChange) { + var runToTag = this.runToTag; + var tag = this.tag; + return this.selectedRuns.filter(function(x) { + return runToTag[x].indexOf(tag) !== -1; + }) + }, + _csvUrl: function(_run, urlFn) { + return urlFn(this.tag, _run) + "&format=csv"; + }, + _jsonUrl: function(_run, urlFn) { + return urlFn(this.tag, _run); + }, + _csvName: function(_run) { + return "run_" + _run + ",tag_" + this.tag + ".csv"; + }, + _jsonName: function(_run) { + return "run-" + _run + "-tag-" + this.tag + ".json"; + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-run-generator.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-run-generator.html new file mode 100644 index 0000000000..4d72552049 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-run-generator.html @@ -0,0 +1,97 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/iron-ajax/iron-ajax.html"> +<link rel="import" href="../imports/lodash.html"> + +<!-- +tf-run-generator is a plumbing component that takes in a url to load runs from, and + produces the following upward-bindable properties: + + outRunToScalars: Maps from run name (string) to an array of scalar tags (strings). + outRunToHistograms: Maps from run name (string) to an array of histogram tags (strings). + outRunToImages: Maps from run name (string) to an array of image tags (strings). +--> +<dom-module id="tf-run-generator"> + <template> + <iron-ajax + id="ajax" + auto + url="[[url]]" + handle-as="json" + debounce="300" + on-response="_setResponse" + verbose=true + > + </iron-ajax> + </template> + <script> + Polymer({ + is: "tf-run-generator", + properties: { + url: String, + _runToTag: { + type: Object, + readOnly: true, + }, + outRunToScalars: { + // {[runName: string]: string[]} + // the names of scalar tags. + type: Object, + computed: "_scalars(_runToTag.*)", + notify: true, + }, + outRunToHistograms: { + // {[runName: string]: string[]} + // the names of histogram tags. + type: Object, + computed: "_histograms(_runToTag.*)", + notify: true, + }, + outRunToCompressedHistograms: { + // {[runName: string]: string[]} + // the names of histogram tags. + type: Object, + computed: "_compressedHistograms(_runToTag.*)", + notify: true, + }, + outRunToImages: { + // {[runName: string]: string[]} + // the names of image tags. + type: Object, + computed: "_images(_runToTag.*)", + notify: true, + }, + outRunsWithGraph: { + // ["run1", "run2", ...] + // array of run names that have an associated graph definition. + type: Array, + computed: "_graphs(_runToTag.*)", + notify: true + } + }, + _scalars: function(_runToTag) { + return _.mapValues(_runToTag.base, "scalars"); + }, + _histograms: function(_runToTag) { + return _.mapValues(_runToTag.base, "histograms"); + }, + _compressedHistograms: function(_runToTag) { + return _.mapValues(_runToTag.base, "compressedHistograms"); + }, + _images: function(_runToTag) { + return _.mapValues(_runToTag.base, "images"); + }, + _graphs: function(_runToTag) { + var runsWithGraph = []; + _.each(_runToTag.base, function(runInfo, runName) { + if (runInfo.graph === true) { + runsWithGraph.push(runName); + } + }); + return runsWithGraph; + }, + _setResponse: function(event) { + this._set_runToTag(event.detail.response); + } + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-url-generator.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-url-generator.html new file mode 100644 index 0000000000..803998daeb --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-url-generator.html @@ -0,0 +1,50 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> + +<!-- tf-url-generator is a plumbing component that provides two upward bindable properties: + outRunsUrl and outValuesUrlGenerator. These may be used by the rest of the application to communicate + with the backend, and by overriding the TF.Urls code that backs it, can be modified to load data from + a demo data source instead. + --> +<dom-module id="tf-url-generator"> + <script src="urlGenerator.js"></script> + <script> + var polymerObject = { + is: "tf-url-generator", + properties: { + outRunsUrl: { + type: String, + value: function() { + return TF.Urls.runsUrl(); + }, + readOnly: true, + notify: true, + }, + }, + }; + TF.Urls.routes.forEach(function(route) { + /* for each route (other than runs, handled seperately): + * out`RouteName`: { + * type: Function, + * readOnly: true, + * notify: true, + * value: function() { + * return TF.Urls.`routeName`Url; + * } + */ + if (route === "runs") { + return; + } + var urlName = route + "Url"; + var propertyName = Polymer.CaseMap.dashToCamelCase("out-" + urlName + "Generator"); + polymerObject.properties[propertyName] = { + type: Function, + value: function() { + return TF.Urls[urlName]; + }, + notify: true, + readOnly: true, + } + }); + Polymer(polymerObject); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/urlGenerator.ts b/tensorflow/tensorboard/components/tf-dashboard-common/urlGenerator.ts new file mode 100644 index 0000000000..c7bbcbf434 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/urlGenerator.ts @@ -0,0 +1,33 @@ +/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> + +module TF { + export module Urls { + + export var routes = ["runs", "scalars", "histograms", + "compressedHistograms", "images", + "individualImage", "graph"]; + + function router(route: string): ((tag: string, run: string) => string) { + return function(tag: string, run: string): string { + return "/" + route + "?tag=" + encodeURIComponent(tag) + + "&run=" + encodeURIComponent(run); + }; + } + + export function runsUrl() { + return "/runs"; + } + export var scalarsUrl = router("scalars"); + export var histogramsUrl = router("histograms"); + export var compressedHistogramsUrl = router("compressedHistograms"); + export var imagesUrl = router("images"); + export function individualImageUrl(query: string) { + return "/individualImage?" + query; + } + export function graphUrl(run: string) { + return "/graph?run=" + encodeURIComponent(run); + } + + } +} diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/warning-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/warning-style.html new file mode 100644 index 0000000000..c4103a7248 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-dashboard-common/warning-style.html @@ -0,0 +1,10 @@ +<dom-module id="warning-style"> + <template> + <style> + .warning { + max-width: 540px; + margin: 80px auto 0 auto; + } + </style> + </template> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/dataCoordinator.ts b/tensorflow/tensorboard/components/tf-event-dashboard/dataCoordinator.ts new file mode 100644 index 0000000000..c489eca17c --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/dataCoordinator.ts @@ -0,0 +1,57 @@ +/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> + +module TF { + + /* The DataCoordinator generates TF.Datasets for each run/tag combination, + * and is responsible for communicating with the backend to load data into them. + * A key fact about this design is that when Datasets modify their data, they + * automatically notify all dependent Plottable charts. + */ + export class DataCoordinator { + private urlGenerator: (tag: string, run: string) => string; + private datasets: {[key: string]: TF.Dataset}; + private runToTag: {[run: string]: string[]}; + + constructor(urlGenerator: (tag: string, run: string) => string, + runToTag: {[run: string]: string[]}) { + this.datasets = {}; + this.urlGenerator = urlGenerator; + this.runToTag = runToTag; + } + + /* Create or return an array of Datasets for the given + * tag and runs. It filters which runs it uses by checking + * that data exists for each tag-run combination. + * Calling this triggers a load on the dataset. + */ + public getDatasets(tag: string, runs: string[]) { + var usableRuns = runs.filter((r) => { + var tags = this.runToTag[r]; + return tags.indexOf(tag) !== -1; + }); + return usableRuns.map((r) => this.getDataset(tag, r)); + } + + /* Create or return a Dataset for given tag and run. + * Calling this triggers a load on the dataset. + */ + public getDataset(tag: string, run: string): TF.Dataset { + var dataset = this._getDataset(tag, run); + dataset.load(); + return dataset; + } + + private _getDataset(tag: string, run: string): TF.Dataset { + var key = [tag, run].toString(); + var dataset: TF.Dataset; + if (this.datasets[key] != null) { + dataset = this.datasets[key]; + } else { + dataset = new TF.Dataset(tag, run, this.urlGenerator); + this.datasets[key] = dataset; + } + return dataset; + } + } +} diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/dataset.ts b/tensorflow/tensorboard/components/tf-event-dashboard/dataset.ts new file mode 100644 index 0000000000..de814583d3 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/dataset.ts @@ -0,0 +1,41 @@ +/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> + +module TF { + /* An extension of Plottable.Dataset that knows how to load data from a backend. + */ + export class Dataset extends Plottable.Dataset { + public tag: string; + public run: string; + private lastLoadTime: number; + private lastRequest; + private urlGenerator: Function; + + constructor(tag: string, run: string, urlGenerator: (run: string, tag: string) => string) { + super([], {tag: tag, run: run}); + this.tag = tag; + this.run = run; + this.urlGenerator = urlGenerator; + } + + public load = _.debounce(this._load, 10); + + private _load() { + var url = this.urlGenerator(this.tag, this.run); + if (this.lastRequest != null) { + this.lastRequest.abort(); + } + this.lastRequest = d3.json(url, (error, json) => { + this.lastRequest = null; + if (error) { + /* tslint:disable */ + console.log(error); + /* tslint:enable */ + throw new Error("Failure loading JSON at url: \"" + url + "\""); + } else { + this.data(json); + } + }); + } + } +} diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d1.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d1.json new file mode 100644 index 0000000000..af17f5c328 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d1.json @@ -0,0 +1 @@ +[[1436926051.074826, 84, 0.6990088224411011], [1436926530.99861, 2289, 6.9384379386901855], [1436927011.134076, 7611, 13.698328971862793], [1436927490.984256, 16147, 20.168190002441406], [1436927970.957234, 26087, 20.877344131469727], [1436928450.977514, 36241, 21.269058227539062], [1436928930.989548, 46432, 21.329505920410156], [1436929410.976308, 56629, 21.220420837402344], [1436929890.966395, 66791, 21.190065383911133], [1436930370.958199, 76936, 21.108604431152344], [1436930850.985301, 87083, 21.157001495361328], [1436931331.009261, 97161, 21.02127456665039], [1436931810.966042, 107210, 20.891658782958984], [1436932290.955417, 117262, 20.930112838745117], [1436932770.964496, 127333, 20.986324310302734], [1436933250.962592, 137430, 20.981359481811523], [1436933730.992022, 147528, 21.083036422729492], [1436934210.959831, 157635, 21.092649459838867], [1436934690.97072, 167749, 21.11568832397461], [1436935170.957944, 177869, 21.145965576171875], [1436935650.959987, 188025, 21.215585708618164], [1436936130.997541, 198206, 21.227184295654297], [1436936610.965526, 208395, 21.226459503173828], [1436937090.965581, 218592, 21.264968872070312], [1436937570.964874, 228818, 21.335866928100586], [1436938050.965706, 239021, 21.286521911621094], [1436938531.013159, 249210, 21.20963478088379], [1436939010.957926, 259415, 21.28431510925293], [1436939490.96341, 269637, 21.326831817626953], [1436939970.959372, 279876, 21.38308334350586], [1436940450.963802, 290127, 21.355499267578125], [1436940931.004537, 300349, 21.31337547302246], [1436941410.979614, 310601, 21.405778884887695], [1436941890.979674, 320872, 21.368688583374023], [1436942370.975153, 331131, 21.39077377319336], [1436942850.980459, 341399, 21.41745948791504], [1436943331.000808, 351651, 21.384023666381836], [1436943810.968736, 361904, 21.326438903808594], [1436944290.95947, 372158, 21.367351531982422], [1436944770.955783, 382430, 21.476247787475586], [1436945250.966321, 392684, 21.36678695678711], [1436945731.008667, 402950, 21.349145889282227], [1436946210.977922, 413210, 21.373897552490234], [1436946690.975303, 423463, 21.322399139404297], [1436947170.964596, 433723, 21.341150283813477], [1436947650.955017, 443991, 21.366348266601562], [1436948130.992501, 454271, 21.43844223022461], [1436948610.960555, 464519, 21.36829948425293], [1436949090.961079, 474758, 21.266357421875], [1436949570.971528, 484987, 21.316511154174805], [1436950050.977787, 495228, 21.356050491333008], [1436950531.020035, 505458, 21.31462860107422], [1436951010.959775, 515682, 21.277490615844727], [1436951490.967418, 525910, 21.289737701416016], [1436951970.969778, 536112, 21.2515811920166], [1436952450.956291, 546320, 21.254491806030273], [1436952931.005547, 556541, 21.297870635986328], [1436953410.955758, 566755, 21.320045471191406], [1436953890.959151, 576957, 21.23529624938965], [1436954370.959553, 587165, 21.25132179260254], [1436954850.960546, 597371, 21.23470115661621], [1436955330.989932, 607582, 21.19434356689453], [1436955810.957128, 617790, 21.258535385131836], [1436956290.9763, 627991, 21.221921920776367], [1436956770.957785, 638208, 21.309843063354492], [1436957250.974143, 648404, 21.252185821533203], [1436957731.012441, 658613, 21.265626907348633], [1436958210.980787, 668824, 21.239660263061523], [1436958690.973474, 679034, 21.2642765045166], [1436959170.95825, 689249, 21.303138732910156], [1436959650.959345, 699454, 21.24073600769043], [1436960131.008682, 709664, 21.217615127563477], [1436960610.958074, 719876, 21.251184463500977], [1436961090.963638, 730100, 21.290971755981445], [1436961570.979029, 740316, 21.305265426635742], [1436962050.974645, 750534, 21.27857208251953], [1436962531.055479, 760757, 21.329837799072266], [1436963010.975299, 770964, 21.248849868774414], [1436963490.963107, 781164, 21.19978904724121], [1436963970.965936, 791382, 21.30535888671875], [1436964450.959947, 801590, 21.226255416870117], [1436964931.00587, 811785, 21.242237091064453], [1436965410.977997, 821977, 21.226497650146484], [1436965890.988465, 832189, 21.31219482421875], [1436966370.965612, 842399, 21.283390045166016], [1436966850.965794, 852612, 21.273908615112305], [1436967331.009476, 862825, 21.260452270507812], [1436967810.96767, 873037, 21.315444946289062], [1436968290.959107, 883248, 21.28677749633789], [1436968770.9681, 893452, 21.265335083007812], [1436969250.959332, 903655, 21.252891540527344], [1436969731.055609, 913856, 21.233684539794922], [1436970210.961426, 924047, 21.191429138183594], [1436970690.962999, 934250, 21.23288345336914], [1436971170.989107, 944430, 21.17190170288086], [1436971650.956015, 954634, 21.275972366333008], [1436972131.006841, 964844, 21.278474807739258], [1436972610.981754, 975045, 21.25553321838379], [1436973090.961548, 985239, 21.21686553955078], [1436973570.960013, 995439, 21.26004981994629], [1436974050.975653, 1005642, 21.25356101989746], [1436974530.988571, 1015842, 21.23944664001465], [1436975010.95851, 1026048, 21.293363571166992], [1436975490.97355, 1036253, 21.277101516723633], [1436975970.960916, 1046451, 21.242155075073242], [1436976450.990263, 1056636, 21.182037353515625], [1436976930.999578, 1066834, 21.21113395690918], [1436977410.962637, 1077031, 21.230762481689453], [1436977890.970389, 1087222, 21.232444763183594], [1436978370.959059, 1097405, 21.202342987060547], [1436978850.956562, 1107601, 21.23992156982422], [1436979331.021134, 1117786, 21.197628021240234], [1436979810.958593, 1127973, 21.2270565032959], [1436980290.958763, 1138163, 21.250303268432617], [1436980770.967171, 1148348, 21.215538024902344], [1436981250.960473, 1158540, 21.277185440063477], [1436981731.009465, 1168733, 21.268449783325195], [1436982210.960797, 1178930, 21.268077850341797], [1436982690.959709, 1189129, 21.243141174316406], [1436983170.961963, 1199327, 21.21793556213379], [1436983650.958504, 1209524, 21.2817440032959], [1436984130.998057, 1219726, 21.261478424072266], [1436984610.958945, 1229936, 21.300107955932617], [1436985090.978825, 1240145, 21.326183319091797], [1436985570.993741, 1250311, 21.115875244140625], [1436986050.965608, 1260436, 21.19010353088379], [1436986531.026713, 1270611, 21.183719635009766], [1436987010.969056, 1280784, 21.273176193237305], [1436987490.975071, 1290959, 21.182931900024414], [1436987970.96007, 1301147, 21.260244369506836], [1436988450.966092, 1311328, 21.225025177001953], [1436988931.004917, 1321514, 21.242164611816406], [1436989410.980351, 1331709, 21.19801139831543], [1436989890.975192, 1341910, 21.273555755615234], [1436990370.964941, 1352090, 21.175983428955078], [1436990850.973647, 1362240, 21.13412094116211], [1436991330.999346, 1372396, 21.153064727783203], [1436991811.003573, 1382550, 21.155475616455078], [1436992290.962706, 1392710, 21.17011833190918], [1436992770.999149, 1402862, 21.128713607788086], [1436993250.965124, 1413020, 21.1361026763916], [1436993731.020464, 1423164, 21.157777786254883], [1436994210.966935, 1433312, 21.119478225708008], [1436994690.962803, 1443468, 21.161104202270508], [1436995170.972952, 1453657, 21.11492919921875], [1436995650.976233, 1463820, 21.194231033325195], [1436996130.990524, 1473980, 21.169816970825195], [1436996610.97302, 1484152, 21.18223762512207], [1436997090.958457, 1494308, 21.1954402923584], [1436997570.980333, 1504463, 21.140769958496094], [1436998050.969869, 1514618, 21.162744522094727], [1436998530.99688, 1524770, 21.139591217041016], [1436999010.970375, 1534905, 21.107114791870117], [1436999490.960775, 1545070, 21.233396530151367], [1436999970.965087, 1555223, 21.201074600219727], [1437000450.969008, 1565370, 21.147083282470703], [1437000931.007425, 1575517, 21.108510971069336], [1437001410.962798, 1585666, 21.11674690246582], [1437001890.966192, 1595826, 21.17819595336914], [1437002370.961814, 1605980, 21.157669067382812], [1437002850.962206, 1616145, 21.212690353393555], [1437003330.994816, 1626291, 21.177446365356445], [1437003810.966017, 1636448, 21.17884063720703], [1437004290.959479, 1646599, 21.150310516357422], [1437004770.965083, 1656754, 21.21011734008789], [1437005250.958234, 1666902, 21.14912986755371], [1437005731.003528, 1677043, 21.125459671020508], [1437006210.961371, 1687192, 21.124374389648438], [1437006690.962663, 1697338, 21.150362014770508], [1437007170.961639, 1707484, 21.16637420654297], [1437007650.972242, 1717625, 21.163259506225586], [1437008131.003191, 1727767, 21.167280197143555], [1437008610.962644, 1737913, 21.174945831298828], [1437009090.964129, 1748068, 21.17894172668457], [1437009570.962582, 1758219, 21.116622924804688], [1437010050.984863, 1768384, 21.23469352722168], [1437010531.002295, 1778534, 21.143510818481445], [1437011010.961803, 1788677, 21.159791946411133], [1437011490.974074, 1798822, 21.119792938232422], [1437011970.959982, 1808958, 21.10943603515625], [1437012450.95932, 1819091, 21.123899459838867], [1437012931.004909, 1829227, 21.094532012939453], [1437013410.957751, 1839374, 21.200057983398438], [1437013890.960506, 1849509, 21.10895538330078], [1437014370.96113, 1859653, 21.108680725097656], [1437014850.962876, 1869791, 21.141136169433594], [1437015331.009875, 1879944, 21.160165786743164], [1437015810.960671, 1890090, 21.158742904663086], [1437016290.970743, 1900242, 21.16562271118164], [1437016770.961673, 1910391, 21.141860961914062], [1437017250.96735, 1920551, 21.19420051574707], [1437017731.000324, 1930702, 21.16814422607422], [1437018210.967878, 1940856, 21.125978469848633], [1437018690.962742, 1951005, 21.15043067932129], [1437019170.975774, 1961158, 21.157419204711914], [1437019650.964573, 1971309, 21.150177001953125], [1437020130.999343, 1981461, 21.124492645263672], [1437020610.960696, 1991611, 21.109933853149414], [1437021090.958597, 2001766, 21.169754028320312], [1437021570.964477, 2011919, 21.13479995727539], [1437022050.966522, 2022063, 21.131561279296875], [1437022531.005607, 2032219, 21.135629653930664], [1437023010.970667, 2042380, 21.207313537597656], [1437023490.964885, 2052534, 21.108623504638672], [1437023970.965596, 2062691, 21.14097023010254], [1437024450.962296, 2072837, 21.129037857055664], [1437024931.00395, 2082982, 21.077030181884766], [1437025410.96602, 2093128, 21.13152503967285], [1437025890.961753, 2103274, 21.117740631103516], [1437026370.962022, 2113424, 21.141584396362305], [1437026850.975475, 2123570, 21.143577575683594], [1437027331.009277, 2133721, 21.175586700439453], [1437027810.97206, 2143857, 21.099014282226562], [1437028290.961523, 2154015, 21.141523361206055], [1437028770.964366, 2164168, 21.141345977783203], [1437029250.962109, 2174320, 21.14827537536621], [1437029731.003068, 2184453, 21.086946487426758], [1437030210.960946, 2194602, 21.1590576171875], [1437030690.966681, 2204754, 21.17353057861328], [1437031170.961207, 2214899, 21.133989334106445], [1437031650.962809, 2225062, 21.14800453186035], [1437032130.997644, 2235215, 21.15397834777832], [1437032610.962999, 2245366, 21.15763282775879], [1437033090.962192, 2255521, 21.133577346801758], [1437033570.963341, 2265657, 21.058490753173828], [1437034050.979501, 2275787, 21.079614639282227], [1437034531.003514, 2285923, 21.12677574157715], [1437035010.960984, 2296058, 21.100793838500977], [1437035490.97325, 2306176, 21.10753059387207], [1437035970.969759, 2316297, 21.100393295288086], [1437036450.962305, 2326428, 21.041208267211914], [1437036931.001785, 2336571, 21.15167999267578], [1437037410.967681, 2346709, 21.09291648864746], [1437037890.963194, 2356854, 21.18524932861328], [1437038370.96445, 2366985, 21.116247177124023], [1437038850.960718, 2377124, 21.125469207763672], [1437039331.003148, 2387259, 21.132274627685547], [1437039810.974007, 2397400, 21.119945526123047], [1437040290.983415, 2407539, 21.154672622680664], [1437040770.961836, 2417667, 21.066741943359375], [1437041250.964281, 2427791, 21.126564025878906], [1437041731.0196, 2437923, 21.1062068939209], [1437042210.962927, 2448056, 21.124549865722656], [1437042690.964392, 2458193, 21.13232421875], [1437043170.972024, 2468318, 21.066423416137695], [1437043650.966111, 2478449, 21.123788833618164], [1437044131.030028, 2488576, 21.138349533081055], [1437044610.962532, 2498717, 21.11895179748535], [1437045090.965094, 2508839, 21.019609451293945], [1437045570.963352, 2518972, 21.079254150390625], [1437046050.96194, 2529106, 21.15033531188965], [1437046530.995016, 2539243, 21.11912727355957], [1437047010.963313, 2549369, 21.08464813232422], [1437047490.963943, 2559509, 21.133895874023438], [1437047970.958612, 2569646, 21.108659744262695], [1437048450.962392, 2579776, 21.084848403930664], [1437048931.005408, 2589906, 21.092708587646484], [1437049410.984115, 2600033, 21.130634307861328], [1437049890.964103, 2610162, 21.074010848999023], [1437050370.960886, 2620282, 21.086149215698242], [1437050850.959795, 2630402, 21.08969497680664], [1437051331.008292, 2640533, 21.134498596191406], [1437051810.96622, 2650643, 21.065444946289062], [1437052290.98584, 2660774, 21.120830535888672], [1437052770.967707, 2670900, 21.085134506225586], [1437053250.978851, 2681021, 21.037155151367188], [1437053731.021686, 2691151, 21.09203338623047], [1437054210.971744, 2701273, 21.048450469970703], [1437054690.966686, 2711425, 21.048809051513672], [1437055170.964463, 2721564, 21.13330078125], [1437055650.97301, 2731694, 21.097095489501953], [1437056130.997053, 2741810, 21.031536102294922], [1437056610.968681, 2751927, 21.04400634765625], [1437057090.976676, 2762049, 21.114444732666016], [1437057570.962334, 2772169, 21.06243896484375], [1437058050.969524, 2782292, 21.12563133239746], [1437058531.012918, 2792420, 21.12433433532715], [1437059010.972868, 2802545, 21.067407608032227], [1437059490.96188, 2812684, 21.099285125732422], [1437059970.965083, 2822806, 21.08357810974121], [1437060450.964845, 2832940, 21.142192840576172], [1437060931.011947, 2843080, 21.109895706176758], [1437061410.963414, 2853223, 21.13360023498535], [1437061890.969303, 2863361, 21.152849197387695], [1437062370.963703, 2873490, 21.08356285095215], [1437062850.964392, 2883627, 21.115087509155273], [1437063331.025516, 2893758, 21.13198471069336], [1437063810.962087, 2903877, 21.084623336791992], [1437064290.973818, 2914013, 21.14010238647461], [1437064770.967792, 2924145, 21.108346939086914], [1437065250.95886, 2934291, 21.1142635345459], [1437065731.01002, 2944434, 21.17418670654297], [1437066210.959306, 2954576, 21.084075927734375], [1437066690.960644, 2964724, 21.125164031982422], [1437067170.969539, 2974890, 21.200775146484375], [1437067650.960018, 2985036, 21.14740562438965], [1437068130.990731, 2995179, 21.11964225769043], [1437068610.960429, 3005322, 21.141313552856445], [1437069090.95752, 3015461, 21.082963943481445], [1437069570.974879, 3025595, 21.12288475036621], [1437070050.95761, 3035734, 21.107513427734375], [1437070531.0013, 3045868, 21.171630859375], [1437071010.961705, 3056004, 21.066505432128906], [1437071490.961495, 3066137, 21.10834312438965], [1437071970.978122, 3076267, 21.08027458190918], [1437072450.963299, 3086399, 21.089733123779297], [1437072931.018382, 3096524, 21.133176803588867], [1437073050.962102, 3099048, 21.041847229003906], [1437073170.96983, 3101584, 21.131967544555664], [1437073290.957895, 3104118, 21.118793487548828]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d2.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d2.json new file mode 100644 index 0000000000..92bb414348 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d2.json @@ -0,0 +1 @@ +[[1436925978.257845, 7, 0.04500000178813934], [1436926413.945391, 1476, 0.04500000178813934], [1436926893.945037, 6006, 0.04500000178813934], [1436927373.995472, 13786, 0.04500000178813934], [1436927853.989794, 23650, 0.04500000178813934], [1436928334.132361, 33755, 0.04500000178813934], [1436928813.973288, 43941, 0.04500000178813934], [1436929293.975949, 54146, 0.04500000178813934], [1436929773.992781, 64316, 0.04500000178813934], [1436930253.997415, 74465, 0.04500000178813934], [1436930734.203004, 84611, 0.04230000078678131], [1436931214.03644, 94700, 0.04230000078678131], [1436931694.094564, 104766, 0.04230000078678131], [1436932174.114955, 114817, 0.04230000078678131], [1436932654.161382, 124880, 0.04230000078678131], [1436933133.960214, 134977, 0.04230000078678131], [1436933614.044337, 145062, 0.04230000078678131], [1436934094.166206, 155169, 0.04230000078678131], [1436934574.106036, 165284, 0.03976200148463249], [1436935054.150647, 175402, 0.03976200148463249], [1436935533.819562, 185538, 0.03976200148463249], [1436936013.710422, 195712, 0.03976200148463249], [1436936493.609025, 205906, 0.03976200148463249], [1436936973.683892, 216099, 0.03976200148463249], [1436937454.138383, 226331, 0.03976200148463249], [1436937933.838475, 236532, 0.03976200148463249], [1436938413.89688, 246724, 0.0373762808740139], [1436938894.018652, 256925, 0.0373762808740139], [1436939373.69067, 267137, 0.0373762808740139], [1436939853.673692, 277369, 0.0373762808740139], [1436940333.651346, 287620, 0.0373762808740139], [1436940813.599579, 297848, 0.0373762808740139], [1436941293.596313, 308088, 0.0373762808740139], [1436941773.659172, 318362, 0.0373762808740139], [1436942253.648479, 328621, 0.03513370454311371], [1436942733.752284, 338892, 0.03513370454311371], [1436943213.621881, 349144, 0.03513370454311371], [1436943693.698743, 359399, 0.03513370454311371], [1436944173.578463, 369649, 0.03513370454311371], [1436944653.692217, 379912, 0.03513370454311371], [1436945133.677298, 390180, 0.03513370454311371], [1436945613.572411, 400445, 0.03302568197250366], [1436946093.56123, 410703, 0.03302568197250366], [1436946573.542364, 420958, 0.03302568197250366], [1436947053.616578, 431216, 0.03302568197250366], [1436947533.636973, 441483, 0.03302568197250366], [1436948013.541574, 451751, 0.03302568197250366], [1436948493.560223, 462015, 0.03302568197250366], [1436948973.512541, 472260, 0.03302568197250366], [1436949453.550055, 482483, 0.031044140458106995], [1436949933.828011, 492731, 0.031044140458106995], [1436950413.603177, 502957, 0.031044140458106995], [1436950893.563009, 513185, 0.031044140458106995], [1436951373.620887, 523410, 0.031044140458106995], [1436951853.61941, 533618, 0.031044140458106995], [1436952333.694447, 543828, 0.031044140458106995], [1436952813.621004, 554042, 0.031044140458106995], [1436953293.588156, 564251, 0.02918149158358574], [1436953773.599734, 574464, 0.02918149158358574], [1436954253.621309, 584672, 0.02918149158358574], [1436954733.738119, 594882, 0.02918149158358574], [1436955213.56617, 605091, 0.02918149158358574], [1436955693.585366, 615296, 0.02918149158358574], [1436956173.626395, 625501, 0.02918149158358574], [1436956653.601937, 635705, 0.02918149158358574], [1436957133.665878, 645915, 0.02743060328066349], [1436957613.584762, 656116, 0.02743060328066349], [1436958093.549783, 666331, 0.02743060328066349], [1436958573.646778, 676543, 0.02743060328066349], [1436959053.585655, 686750, 0.02743060328066349], [1436959533.679696, 696961, 0.02743060328066349], [1436960013.633292, 707173, 0.02743060328066349], [1436960493.578778, 717383, 0.02743060328066349], [1436960973.596715, 727598, 0.025784766301512718], [1436961453.625644, 737818, 0.025784766301512718], [1436961933.740339, 748040, 0.025784766301512718], [1436962413.573845, 758252, 0.025784766301512718], [1436962893.610678, 768470, 0.025784766301512718], [1436963373.642878, 778674, 0.025784766301512718], [1436963853.558388, 788877, 0.025784766301512718], [1436964333.658419, 799099, 0.025784766301512718], [1436964813.573319, 809289, 0.024237681180238724], [1436965293.542098, 819484, 0.024237681180238724], [1436965773.545453, 829687, 0.024237681180238724], [1436966253.586517, 839901, 0.024237681180238724], [1436966733.639348, 850120, 0.024237681180238724], [1436967213.697288, 860330, 0.024237681180238724], [1436967693.617172, 870539, 0.024237681180238724], [1436968173.593885, 880748, 0.024237681180238724], [1436968653.560836, 890955, 0.022783419117331505], [1436969133.676337, 901164, 0.022783419117331505], [1436969613.506638, 911358, 0.022783419117331505], [1436970093.595964, 921560, 0.022783419117331505], [1436970573.541227, 931756, 0.022783419117331505], [1436971053.624316, 941945, 0.022783419117331505], [1436971533.655543, 952138, 0.022783419117331505], [1436972013.604738, 962349, 0.02141641452908516], [1436972493.613199, 972551, 0.02141641452908516], [1436972973.501155, 982746, 0.02141641452908516], [1436973453.64842, 992945, 0.02141641452908516], [1436973933.689516, 1003147, 0.02141641452908516], [1436974413.577769, 1013350, 0.02141641452908516], [1436974893.542281, 1023545, 0.02141641452908516], [1436975373.638453, 1033759, 0.02141641452908516], [1436975853.524388, 1043955, 0.02013142965734005], [1436976333.625792, 1054148, 0.02013142965734005], [1436976813.610661, 1064342, 0.02013142965734005], [1436977293.601581, 1074539, 0.02013142965734005], [1436977773.575627, 1084733, 0.02013142965734005], [1436978253.564972, 1094914, 0.02013142965734005], [1436978733.673144, 1105109, 0.02013142965734005], [1436979213.540585, 1115293, 0.02013142965734005], [1436979693.699591, 1125483, 0.018923543393611908], [1436980173.613012, 1135670, 0.018923543393611908], [1436980653.575769, 1145862, 0.018923543393611908], [1436981133.719264, 1156045, 0.018923543393611908], [1436981613.563551, 1166236, 0.018923543393611908], [1436982093.553233, 1176436, 0.018923543393611908], [1436982573.577846, 1186636, 0.018923543393611908], [1436983053.605749, 1196837, 0.018923543393611908], [1436983533.684994, 1207025, 0.017788130789995193], [1436984013.561492, 1217233, 0.017788130789995193], [1436984493.629873, 1227437, 0.017788130789995193], [1436984973.606714, 1237643, 0.017788130789995193], [1436985453.690084, 1247835, 0.017788130789995193], [1436985933.711388, 1257951, 0.017788130789995193], [1436986413.598807, 1268125, 0.017788130789995193], [1436986893.631797, 1278290, 0.017788130789995193], [1436987373.596962, 1288473, 0.016720842570066452], [1436987853.555549, 1298650, 0.016720842570066452], [1436988333.722032, 1308841, 0.016720842570066452], [1436988813.55697, 1319018, 0.016720842570066452], [1436989293.756905, 1329221, 0.016720842570066452], [1436989773.665141, 1339417, 0.016720842570066452], [1436990253.768302, 1349610, 0.016720842570066452], [1436990733.708919, 1359759, 0.016720842570066452], [1436991213.663033, 1369914, 0.01571759209036827], [1436991693.730925, 1380074, 0.01571759209036827], [1436992173.751791, 1390224, 0.01571759209036827], [1436992653.758682, 1400383, 0.01571759209036827], [1436993133.835604, 1410542, 0.01571759209036827], [1436993613.674655, 1420684, 0.01571759209036827], [1436994093.747454, 1430832, 0.01571759209036827], [1436994573.768973, 1440986, 0.01571759209036827], [1436995053.666661, 1451174, 0.014774537645280361], [1436995533.83439, 1461345, 0.014774537645280361], [1436996013.556996, 1471495, 0.014774537645280361], [1436996493.635477, 1481663, 0.014774537645280361], [1436996973.668684, 1491822, 0.014774537645280361], [1436997453.59326, 1501979, 0.014774537645280361], [1436997933.774019, 1512139, 0.014774537645280361], [1436998413.575162, 1522290, 0.01388806477189064], [1436998893.640468, 1532431, 0.01388806477189064], [1436999373.551661, 1542579, 0.01388806477189064], [1436999853.57906, 1552734, 0.01388806477189064], [1437000333.680409, 1562888, 0.01388806477189064], [1437000813.602383, 1573037, 0.01388806477189064], [1437001293.610337, 1583190, 0.01388806477189064], [1437001773.618199, 1593341, 0.01388806477189064], [1437002253.572966, 1603497, 0.013054781593382359], [1437002733.67994, 1613657, 0.013054781593382359], [1437003213.583266, 1623809, 0.013054781593382359], [1437003693.639943, 1633966, 0.013054781593382359], [1437004173.568287, 1644113, 0.013054781593382359], [1437004653.610772, 1654268, 0.013054781593382359], [1437005133.663045, 1664424, 0.013054781593382359], [1437005613.580984, 1674567, 0.013054781593382359], [1437006093.601019, 1684715, 0.01227149460464716], [1437006573.625314, 1694857, 0.01227149460464716], [1437007053.584514, 1704999, 0.01227149460464716], [1437007533.719303, 1715150, 0.01227149460464716], [1437008013.604962, 1725282, 0.01227149460464716], [1437008493.655091, 1735432, 0.01227149460464716], [1437008973.640165, 1745584, 0.01227149460464716], [1437009453.715067, 1755742, 0.01227149460464716], [1437009933.765712, 1765896, 0.011535204015672207], [1437010413.632128, 1776052, 0.011535204015672207], [1437010893.66766, 1786195, 0.011535204015672207], [1437011373.636164, 1796346, 0.011535204015672207], [1437011853.631224, 1806481, 0.011535204015672207], [1437012333.706205, 1816617, 0.011535204015672207], [1437012813.61987, 1826754, 0.011535204015672207], [1437013293.479904, 1836883, 0.011535204015672207], [1437013773.604574, 1847029, 0.010843091644346714], [1437014253.618884, 1857175, 0.010843091644346714], [1437014733.756419, 1867312, 0.010843091644346714], [1437015213.638607, 1877459, 0.010843091644346714], [1437015693.625763, 1887608, 0.010843091644346714], [1437016173.63194, 1897759, 0.010843091644346714], [1437016653.609074, 1907909, 0.010843091644346714], [1437017133.717601, 1918074, 0.010843091644346714], [1437017613.716011, 1928220, 0.010192506946623325], [1437018093.626005, 1938377, 0.010192506946623325], [1437018573.626522, 1948523, 0.010192506946623325], [1437019053.648174, 1958678, 0.010192506946623325], [1437019533.803011, 1968831, 0.010192506946623325], [1437020013.667751, 1978978, 0.010192506946623325], [1437020493.659028, 1989133, 0.010192506946623325], [1437020973.657346, 1999287, 0.010192506946623325], [1437021453.650634, 2009437, 0.00958095584064722], [1437021933.848661, 2019588, 0.00958095584064722], [1437022413.674963, 2029736, 0.00958095584064722], [1437022893.69086, 2039894, 0.00958095584064722], [1437023373.68883, 2050054, 0.00958095584064722], [1437023853.686116, 2060205, 0.00958095584064722], [1437024333.763876, 2070362, 0.00958095584064722], [1437024813.707845, 2080507, 0.00958095584064722], [1437025293.483294, 2090645, 0.009006098844110966], [1437025773.695712, 2100793, 0.009006098844110966], [1437026253.672994, 2110943, 0.009006098844110966], [1437026733.780775, 2121094, 0.009006098844110966], [1437027213.617849, 2131235, 0.009006098844110966], [1437027693.694451, 2141382, 0.009006098844110966], [1437028173.68596, 2151537, 0.009006098844110966], [1437028653.584833, 2161685, 0.009006098844110966], [1437029133.792483, 2171839, 0.00846573244780302], [1437029613.661672, 2181977, 0.00846573244780302], [1437030093.641009, 2192118, 0.00846573244780302], [1437030573.656274, 2202268, 0.00846573244780302], [1437031053.643631, 2212416, 0.00846573244780302], [1437031533.777478, 2222583, 0.00846573244780302], [1437032013.704008, 2232736, 0.00846573244780302], [1437032493.638393, 2242882, 0.007957788184285164], [1437032973.684986, 2253041, 0.007957788184285164], [1437033453.699562, 2263183, 0.007957788184285164], [1437033933.918074, 2273320, 0.007957788184285164], [1437034413.596351, 2283443, 0.007957788184285164], [1437034893.640496, 2293579, 0.007957788184285164], [1437035373.637761, 2303701, 0.007957788184285164], [1437035853.669947, 2313823, 0.007957788184285164], [1437036333.78905, 2323961, 0.0074803209863603115], [1437036813.699727, 2334089, 0.0074803209863603115], [1437037293.662592, 2344235, 0.0074803209863603115], [1437037773.66716, 2354364, 0.0074803209863603115], [1437038253.603687, 2364507, 0.0074803209863603115], [1437038733.78864, 2374644, 0.0074803209863603115], [1437039213.641799, 2384782, 0.0074803209863603115], [1437039693.687078, 2394923, 0.0074803209863603115], [1437040173.635717, 2405058, 0.0070315017364919186], [1437040653.673331, 2415194, 0.0070315017364919186], [1437041133.764768, 2425322, 0.0070315017364919186], [1437041613.629279, 2435449, 0.0070315017364919186], [1437042093.703985, 2445575, 0.0070315017364919186], [1437042573.496029, 2455712, 0.0070315017364919186], [1437043053.686022, 2465844, 0.0070315017364919186], [1437043533.731929, 2475974, 0.0070315017364919186], [1437044013.636245, 2486095, 0.006609611678868532], [1437044493.69923, 2496238, 0.006609611678868532], [1437044973.652155, 2506373, 0.006609611678868532], [1437045453.691467, 2516497, 0.006609611678868532], [1437045933.935804, 2526637, 0.006609611678868532], [1437046413.635583, 2536770, 0.006609611678868532], [1437046893.626337, 2546896, 0.006609611678868532], [1437047373.67437, 2557029, 0.006609611678868532], [1437047853.652939, 2567169, 0.0062130349688231945], [1437048333.778436, 2577306, 0.0062130349688231945], [1437048813.654248, 2587433, 0.0062130349688231945], [1437049293.610609, 2597552, 0.0062130349688231945], [1437049773.646573, 2607690, 0.0062130349688231945], [1437050253.667925, 2617808, 0.0062130349688231945], [1437050733.735291, 2627933, 0.0062130349688231945], [1437051213.620222, 2638053, 0.0062130349688231945], [1437051693.601978, 2648171, 0.005840253084897995], [1437052173.634985, 2658299, 0.005840253084897995], [1437052653.687176, 2668425, 0.005840253084897995], [1437053133.762819, 2678556, 0.005840253084897995], [1437053613.643698, 2688671, 0.005840253084897995], [1437054093.673047, 2698804, 0.005840253084897995], [1437054573.667371, 2708956, 0.005840253084897995], [1437055053.650441, 2719087, 0.005840253084897995], [1437055533.778469, 2729219, 0.005489837843924761], [1437056013.694082, 2739343, 0.005489837843924761], [1437056493.674871, 2749458, 0.005489837843924761], [1437056973.700234, 2759575, 0.005489837843924761], [1437057453.666129, 2769697, 0.005489837843924761], [1437057933.848506, 2779821, 0.005489837843924761], [1437058413.643799, 2789941, 0.005489837843924761], [1437058893.715386, 2800076, 0.005489837843924761], [1437059373.62596, 2810207, 0.005160447675734758], [1437059853.650848, 2820334, 0.005160447675734758], [1437060333.792248, 2830465, 0.005160447675734758], [1437060813.682955, 2840600, 0.005160447675734758], [1437061293.681795, 2850745, 0.005160447675734758], [1437061773.691182, 2860880, 0.005160447675734758], [1437062253.662987, 2871013, 0.005160447675734758], [1437062733.760419, 2881153, 0.005160447675734758], [1437063213.651969, 2891278, 0.004850820638239384], [1437063693.723523, 2901406, 0.004850820638239384], [1437064173.68663, 2911533, 0.004850820638239384], [1437064653.547643, 2921667, 0.004850820638239384], [1437065133.62645, 2931813, 0.004850820638239384], [1437065613.566569, 2941947, 0.004850820638239384], [1437066093.537804, 2952102, 0.004850820638239384], [1437066573.529332, 2962243, 0.004850820638239384], [1437067053.520098, 2972400, 0.004559771623462439], [1437067533.605733, 2982561, 0.004559771623462439], [1437068013.535467, 2992698, 0.004559771623462439], [1437068493.559976, 3002839, 0.004559771623462439], [1437068973.558743, 3012983, 0.004559771623462439], [1437069453.562661, 3023116, 0.004559771623462439], [1437069933.627071, 3033256, 0.004559771623462439], [1437070413.574131, 3043386, 0.004286185372620821], [1437070893.658803, 3053528, 0.004286185372620821], [1437071373.638711, 3063659, 0.004286185372620821], [1437071853.621384, 3073794, 0.004286185372620821], [1437072333.665269, 3083926, 0.004286185372620821], [1437072813.584388, 3094040, 0.004286185372620821], [1437073293.569178, 3104172, 0.004286185372620821]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d3.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d3.json new file mode 100644 index 0000000000..69191b9154 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d3.json @@ -0,0 +1 @@ +[[1436925978.257845, 7, 0.0], [1436927853.989794, 23650, 7360.0], [1436929773.992781, 64316, 7360.0], [1436931694.094564, 104766, 7360.0], [1436933614.044337, 145062, 7360.0], [1436935533.819562, 185538, 7360.0], [1436937454.138383, 226331, 7360.0], [1436939373.69067, 267137, 7360.0], [1436941293.596313, 308088, 7360.0], [1436943213.621881, 349144, 7360.0], [1436945133.677298, 390180, 7360.0], [1436947053.616578, 431216, 7360.0], [1436948973.512541, 472260, 7360.0], [1436950893.563009, 513185, 7360.0], [1436952813.621004, 554042, 7360.0], [1436954733.738119, 594882, 7360.0], [1436956653.601937, 635705, 7360.0], [1436958573.646778, 676543, 7360.0], [1436960493.578778, 717383, 7360.0], [1436962413.573845, 758252, 7360.0], [1436964333.658419, 799099, 7360.0], [1436966253.586517, 839901, 7360.0], [1436968173.593885, 880748, 7360.0], [1436970093.595964, 921560, 7360.0], [1436972013.604738, 962349, 7360.0], [1436973933.689516, 1003147, 7360.0], [1436975853.524388, 1043955, 7360.0], [1436977773.575627, 1084733, 7360.0], [1436979693.699591, 1125483, 7360.0], [1436981613.563551, 1166236, 7360.0], [1436983533.684994, 1207025, 7360.0], [1436985453.690084, 1247835, 7360.0], [1436987373.596962, 1288473, 7360.0], [1436989293.756905, 1329221, 7360.0], [1436991213.663033, 1369914, 7360.0], [1436993133.835604, 1410542, 7360.0], [1436995053.666661, 1451174, 7360.0], [1436996973.668684, 1491822, 7360.0], [1436998893.640468, 1532431, 7360.0], [1437000813.602383, 1573037, 7360.0], [1437002733.67994, 1613657, 7360.0], [1437004653.610772, 1654268, 7360.0], [1437006573.625314, 1694857, 7360.0], [1437008493.655091, 1735432, 7360.0], [1437010413.632128, 1776052, 7360.0], [1437012333.706205, 1816617, 7360.0], [1437014253.618884, 1857175, 7360.0], [1437016173.63194, 1897759, 7360.0], [1437018093.626005, 1938377, 7360.0], [1437020013.667751, 1978978, 7360.0], [1437021933.848661, 2019588, 7360.0], [1437023853.686116, 2060205, 7360.0], [1437025773.695712, 2100793, 7360.0], [1437027693.694451, 2141382, 7360.0], [1437029613.661672, 2181977, 7360.0], [1437031533.777478, 2222583, 7360.0], [1437033453.699562, 2263183, 7360.0], [1437035373.637761, 2303701, 7360.0], [1437037293.662592, 2344235, 7360.0], [1437039213.641799, 2384782, 7360.0], [1437041133.764768, 2425322, 7360.0], [1437043053.686022, 2465844, 7360.0], [1437044973.652155, 2506373, 7360.0], [1437046893.626337, 2546896, 7862.0], [1437048813.654248, 2587433, 7862.0], [1437050733.735291, 2627933, 7862.0], [1437052653.687176, 2668425, 7862.0], [1437054573.667371, 2708956, 7862.0], [1437056493.674871, 2749458, 7862.0], [1437058413.643799, 2789941, 7862.0], [1437060333.792248, 2830465, 7862.0], [1437062253.662987, 2871013, 7862.0], [1437064173.68663, 2911533, 7862.0], [1437066093.537804, 2952102, 7862.0], [1437068013.535467, 2992698, 7862.0], [1437069933.627071, 3033256, 7862.0], [1437071853.621384, 3073794, 7862.0], [1437072333.665269, 3083926, 7862.0], [1437072813.584388, 3094040, 7862.0], [1437073293.569178, 3104172, 7862.0]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d4.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d4.json new file mode 100644 index 0000000000..caf1ae6e7f --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d4.json @@ -0,0 +1 @@ +[[1436925978.257845, 7, 2.461352825164795], [1436926413.945391, 1476, 12.772720336914062], [1436926893.945037, 6006, 12.195232391357422], [1436927373.995472, 13786, 11.528279304504395], [1436927853.989794, 23650, 10.722719192504883], [1436928334.132361, 33755, 10.215253829956055], [1436928813.973288, 43941, 9.730447769165039], [1436929293.975949, 54146, 9.399007797241211], [1436929773.992781, 64316, 9.1018648147583], [1436930253.997415, 74465, 8.961446762084961], [1436930734.203004, 84611, 8.757476806640625], [1436931214.03644, 94700, 8.4615478515625], [1436931694.094564, 104766, 8.506814956665039], [1436932174.114955, 114817, 8.246719360351562], [1436932654.161382, 124880, 8.329349517822266], [1436933133.960214, 134977, 7.90853214263916], [1436933614.044337, 145062, 8.192558288574219], [1436934094.166206, 155169, 7.865443229675293], [1436934574.106036, 165284, 7.910976886749268], [1436935054.150647, 175402, 7.925509929656982], [1436935533.819562, 185538, 7.866455078125], [1436936013.710422, 195712, 7.9123406410217285], [1436936493.609025, 205906, 7.748654842376709], [1436936973.683892, 216099, 7.849164009094238], [1436937454.138383, 226331, 7.784902572631836], [1436937933.838475, 236532, 7.749933242797852], [1436938413.89688, 246724, 7.777050971984863], [1436938894.018652, 256925, 7.663984775543213], [1436939373.69067, 267137, 7.602056980133057], [1436939853.673692, 277369, 7.539070129394531], [1436940333.651346, 287620, 7.575552463531494], [1436940813.599579, 297848, 7.47900390625], [1436941293.596313, 308088, 7.403858184814453], [1436941773.659172, 318362, 7.589539527893066], [1436942253.648479, 328621, 7.511919975280762], [1436942733.752284, 338892, 7.31054162979126], [1436943213.621881, 349144, 7.261094570159912], [1436943693.698743, 359399, 7.552957534790039], [1436944173.578463, 369649, 7.449452877044678], [1436944653.692217, 379912, 7.177209854125977], [1436945133.677298, 390180, 7.308793067932129], [1436945613.572411, 400445, 7.229344844818115], [1436946093.56123, 410703, 7.129981994628906], [1436946573.542364, 420958, 7.127549171447754], [1436947053.616578, 431216, 7.538583755493164], [1436947533.636973, 441483, 7.030594825744629], [1436948013.541574, 451751, 6.98097038269043], [1436948493.560223, 462015, 7.213271141052246], [1436948973.512541, 472260, 7.1727519035339355], [1436949453.550055, 482483, 6.985068321228027], [1436949933.828011, 492731, 7.051283836364746], [1436950413.603177, 502957, 7.082402229309082], [1436950893.563009, 513185, 7.1637864112854], [1436951373.620887, 523410, 7.193849086761475], [1436951853.61941, 533618, 7.1212921142578125], [1436952333.694447, 543828, 7.208009719848633], [1436952813.621004, 554042, 7.28671932220459], [1436953293.588156, 564251, 6.941026210784912], [1436953773.599734, 574464, 7.230144500732422], [1436954253.621309, 584672, 6.815900802612305], [1436954733.738119, 594882, 7.060589790344238], [1436955213.56617, 605091, 7.079995155334473], [1436955693.585366, 615296, 7.300849437713623], [1436956173.626395, 625501, 6.927395343780518], [1436956653.601937, 635705, 6.893837928771973], [1436957133.665878, 645915, 6.965301990509033], [1436957613.584762, 656116, 6.902514457702637], [1436958093.549783, 666331, 7.2444868087768555], [1436958573.646778, 676543, 6.784783840179443], [1436959053.585655, 686750, 6.800273418426514], [1436959533.679696, 696961, 6.743415355682373], [1436960013.633292, 707173, 7.012747764587402], [1436960493.578778, 717383, 6.548677921295166], [1436960973.596715, 727598, 6.638228416442871], [1436961453.625644, 737818, 6.884350776672363], [1436961933.740339, 748040, 6.797428607940674], [1436962413.573845, 758252, 6.815422058105469], [1436962893.610678, 768470, 6.7392377853393555], [1436963373.642878, 778674, 6.8375959396362305], [1436963853.558388, 788877, 6.7254252433776855], [1436964333.658419, 799099, 6.765130996704102], [1436964813.573319, 809289, 6.7060980796813965], [1436965293.542098, 819484, 6.63279390335083], [1436965773.545453, 829687, 6.587352752685547], [1436966253.586517, 839901, 6.4957275390625], [1436966733.639348, 850120, 6.765798091888428], [1436967213.697288, 860330, 6.681786060333252], [1436967693.617172, 870539, 6.696804523468018], [1436968173.593885, 880748, 6.571035385131836], [1436968653.560836, 890955, 6.29492712020874], [1436969133.676337, 901164, 6.679598331451416], [1436969613.506638, 911358, 6.548522472381592], [1436970093.595964, 921560, 6.585646629333496], [1436970573.541227, 931756, 6.589619159698486], [1436971053.624316, 941945, 6.333208084106445], [1436971533.655543, 952138, 6.582470417022705], [1436972013.604738, 962349, 6.289045810699463], [1436972493.613199, 972551, 6.360206127166748], [1436972973.501155, 982746, 6.567287921905518], [1436973453.64842, 992945, 6.246123313903809], [1436973933.689516, 1003147, 6.44004487991333], [1436974413.577769, 1013350, 6.315634727478027], [1436974893.542281, 1023545, 6.289544105529785], [1436975373.638453, 1033759, 6.412042140960693], [1436975853.524388, 1043955, 6.165371894836426], [1436976333.625792, 1054148, 6.403027534484863], [1436976813.610661, 1064342, 6.37597131729126], [1436977293.601581, 1074539, 6.336863994598389], [1436977773.575627, 1084733, 6.377552032470703], [1436978253.564972, 1094914, 6.28995943069458], [1436978733.673144, 1105109, 6.28420352935791], [1436979213.540585, 1115293, 6.277828216552734], [1436979693.699591, 1125483, 6.185207843780518], [1436980173.613012, 1135670, 6.186310768127441], [1436980653.575769, 1145862, 5.922095775604248], [1436981133.719264, 1156045, 6.141305923461914], [1436981613.563551, 1166236, 6.10508394241333], [1436982093.553233, 1176436, 5.967081069946289], [1436982573.577846, 1186636, 5.960882186889648], [1436983053.605749, 1196837, 6.2222185134887695], [1436983533.684994, 1207025, 6.051136493682861], [1436984013.561492, 1217233, 6.087917804718018], [1436984493.629873, 1227437, 5.95945405960083], [1436984973.606714, 1237643, 5.971570014953613], [1436985453.690084, 1247835, 5.969781398773193], [1436985933.711388, 1257951, 6.040994644165039], [1436986413.598807, 1268125, 6.142050743103027], [1436986893.631797, 1278290, 6.03120231628418], [1436987373.596962, 1288473, 5.921470642089844], [1436987853.555549, 1298650, 5.921937942504883], [1436988333.722032, 1308841, 6.050085067749023], [1436988813.55697, 1319018, 5.837893486022949], [1436989293.756905, 1329221, 5.927487850189209], [1436989773.665141, 1339417, 6.117348670959473], [1436990253.768302, 1349610, 6.052918434143066], [1436990733.708919, 1359759, 5.8977789878845215], [1436991213.663033, 1369914, 5.903198719024658], [1436991693.730925, 1380074, 5.85245418548584], [1436992173.751791, 1390224, 5.902153968811035], [1436992653.758682, 1400383, 5.822136878967285], [1436993133.835604, 1410542, 5.88037633895874], [1436993613.674655, 1420684, 5.778636932373047], [1436994093.747454, 1430832, 5.876591682434082], [1436994573.768973, 1440986, 6.196285724639893], [1436995053.666661, 1451174, 5.7718634605407715], [1436995533.83439, 1461345, 5.931266784667969], [1436996013.556996, 1471495, 5.9706597328186035], [1436996493.635477, 1481663, 5.589694023132324], [1436996973.668684, 1491822, 5.787637233734131], [1436997453.59326, 1501979, 5.634321689605713], [1436997933.774019, 1512139, 5.699962615966797], [1436998413.575162, 1522290, 5.807012557983398], [1436998893.640468, 1532431, 5.559602737426758], [1436999373.551661, 1542579, 5.918235778808594], [1436999853.57906, 1552734, 5.745569229125977], [1437000333.680409, 1562888, 5.59443473815918], [1437000813.602383, 1573037, 5.703190326690674], [1437001293.610337, 1583190, 5.468636512756348], [1437001773.618199, 1593341, 5.610755920410156], [1437002253.572966, 1603497, 5.4396867752075195], [1437002733.67994, 1613657, 5.7537946701049805], [1437003213.583266, 1623809, 5.7613725662231445], [1437003693.639943, 1633966, 5.439754009246826], [1437004173.568287, 1644113, 5.4889116287231445], [1437004653.610772, 1654268, 5.39843225479126], [1437005133.663045, 1664424, 5.576738357543945], [1437005613.580984, 1674567, 5.662004470825195], [1437006093.601019, 1684715, 5.3926777839660645], [1437006573.625314, 1694857, 5.464866638183594], [1437007053.584514, 1704999, 5.40261173248291], [1437007533.719303, 1715150, 5.23733377456665], [1437008013.604962, 1725282, 5.448479652404785], [1437008493.655091, 1735432, 5.684703826904297], [1437008973.640165, 1745584, 5.400024890899658], [1437009453.715067, 1755742, 5.378822326660156], [1437009933.765712, 1765896, 5.45297384262085], [1437010413.632128, 1776052, 5.248030185699463], [1437010893.66766, 1786195, 5.3377580642700195], [1437011373.636164, 1796346, 5.292956352233887], [1437011853.631224, 1806481, 5.438100814819336], [1437012333.706205, 1816617, 5.148743629455566], [1437012813.61987, 1826754, 5.319127559661865], [1437013293.479904, 1836883, 5.1646199226379395], [1437013773.604574, 1847029, 5.494720458984375], [1437014253.618884, 1857175, 5.17764949798584], [1437014733.756419, 1867312, 5.14331579208374], [1437015213.638607, 1877459, 5.309914588928223], [1437015693.625763, 1887608, 5.542352676391602], [1437016173.63194, 1897759, 5.075393199920654], [1437016653.609074, 1907909, 5.249225616455078], [1437017133.717601, 1918074, 5.392384052276611], [1437017613.716011, 1928220, 5.38590669631958], [1437018093.626005, 1938377, 5.229607105255127], [1437018573.626522, 1948523, 5.287610054016113], [1437019053.648174, 1958678, 5.2798333168029785], [1437019533.803011, 1968831, 5.151246070861816], [1437020013.667751, 1978978, 5.118294715881348], [1437020493.659028, 1989133, 5.327050685882568], [1437020973.657346, 1999287, 5.174264430999756], [1437021453.650634, 2009437, 5.1660661697387695], [1437021933.848661, 2019588, 5.089689254760742], [1437022413.674963, 2029736, 5.06661319732666], [1437022893.69086, 2039894, 5.031608581542969], [1437023373.68883, 2050054, 4.874476432800293], [1437023853.686116, 2060205, 5.107512474060059], [1437024333.763876, 2070362, 5.135380268096924], [1437024813.707845, 2080507, 5.087984561920166], [1437025293.483294, 2090645, 5.240448474884033], [1437025773.695712, 2100793, 4.930302619934082], [1437026253.672994, 2110943, 4.914392471313477], [1437026733.780775, 2121094, 5.182378768920898], [1437027213.617849, 2131235, 4.93843412399292], [1437027693.694451, 2141382, 4.924433708190918], [1437028173.68596, 2151537, 4.957921028137207], [1437028653.584833, 2161685, 5.040386199951172], [1437029133.792483, 2171839, 5.01956033706665], [1437029613.661672, 2181977, 4.987490177154541], [1437030093.641009, 2192118, 4.960195064544678], [1437030573.656274, 2202268, 5.0094523429870605], [1437031053.643631, 2212416, 4.83445930480957], [1437031533.777478, 2222583, 4.922268390655518], [1437032013.704008, 2232736, 5.113382339477539], [1437032493.638393, 2242882, 4.881488800048828], [1437032973.684986, 2253041, 4.953296661376953], [1437033453.699562, 2263183, 4.865671157836914], [1437033933.918074, 2273320, 4.829331874847412], [1437034413.596351, 2283443, 4.777036190032959], [1437034893.640496, 2293579, 4.864566326141357], [1437035373.637761, 2303701, 4.988693714141846], [1437035853.669947, 2313823, 5.016432285308838], [1437036333.78905, 2323961, 4.651939868927002], [1437036813.699727, 2334089, 4.767807960510254], [1437037293.662592, 2344235, 4.628738880157471], [1437037773.66716, 2354364, 4.929834842681885], [1437038253.603687, 2364507, 4.739555835723877], [1437038733.78864, 2374644, 4.821824073791504], [1437039213.641799, 2384782, 4.853730201721191], [1437039693.687078, 2394923, 4.581423759460449], [1437040173.635717, 2405058, 4.452754497528076], [1437040653.673331, 2415194, 4.837629318237305], [1437041133.764768, 2425322, 4.752482891082764], [1437041613.629279, 2435449, 4.730231761932373], [1437042093.703985, 2445575, 4.5618896484375], [1437042573.496029, 2455712, 4.673112869262695], [1437043053.686022, 2465844, 4.565918922424316], [1437043533.731929, 2475974, 4.7191481590271], [1437044013.636245, 2486095, 4.589008331298828], [1437044493.69923, 2496238, 4.599475383758545], [1437044973.652155, 2506373, 4.544175624847412], [1437045453.691467, 2516497, 4.4221673011779785], [1437045933.935804, 2526637, 4.44448709487915], [1437046413.635583, 2536770, 4.647110939025879], [1437046893.626337, 2546896, 4.768988609313965], [1437047373.67437, 2557029, 4.5318827629089355], [1437047853.652939, 2567169, 4.501277923583984], [1437048333.778436, 2577306, 4.6167216300964355], [1437048813.654248, 2587433, 4.66096305847168], [1437049293.610609, 2597552, 4.529193878173828], [1437049773.646573, 2607690, 4.455351829528809], [1437050253.667925, 2617808, 4.51211404800415], [1437050733.735291, 2627933, 4.803231716156006], [1437051213.620222, 2638053, 4.645476341247559], [1437051693.601978, 2648171, 4.419768810272217], [1437052173.634985, 2658299, 4.48175048828125], [1437052653.687176, 2668425, 4.397725582122803], [1437053133.762819, 2678556, 4.188413619995117], [1437053613.643698, 2688671, 4.291479110717773], [1437054093.673047, 2698804, 4.321218013763428], [1437054573.667371, 2708956, 4.311710834503174], [1437055053.650441, 2719087, 4.481810092926025], [1437055533.778469, 2729219, 4.452049255371094], [1437056013.694082, 2739343, 4.455989360809326], [1437056493.674871, 2749458, 4.415104866027832], [1437056973.700234, 2759575, 4.259828567504883], [1437057453.666129, 2769697, 4.510563373565674], [1437057933.848506, 2779821, 4.221935272216797], [1437058413.643799, 2789941, 4.437899112701416], [1437058893.715386, 2800076, 4.302872657775879], [1437059373.62596, 2810207, 4.228428363800049], [1437059853.650848, 2820334, 4.220061779022217], [1437060333.792248, 2830465, 4.138088703155518], [1437060813.682955, 2840600, 4.2196125984191895], [1437061293.681795, 2850745, 4.1594085693359375], [1437061773.691182, 2860880, 4.179514408111572], [1437062253.662987, 2871013, 4.202476978302002], [1437062733.760419, 2881153, 4.282044887542725], [1437063213.651969, 2891278, 4.200533866882324], [1437063693.723523, 2901406, 4.263350486755371], [1437064173.68663, 2911533, 4.378939628601074], [1437064653.547643, 2921667, 4.202810287475586], [1437065133.62645, 2931813, 4.193121910095215], [1437065613.566569, 2941947, 4.132870197296143], [1437066093.537804, 2952102, 4.35767936706543], [1437066573.529332, 2962243, 4.211732864379883], [1437067053.520098, 2972400, 4.020431041717529], [1437067533.605733, 2982561, 4.342063903808594], [1437068013.535467, 2992698, 4.197565078735352], [1437068493.559976, 3002839, 3.8806259632110596], [1437068973.558743, 3012983, 3.871702194213867], [1437069453.562661, 3023116, 4.064865589141846], [1437069933.627071, 3033256, 3.817744731903076], [1437070413.574131, 3043386, 4.106888294219971], [1437070893.658803, 3053528, 4.235474586486816], [1437071373.638711, 3063659, 4.127055644989014], [1437071853.621384, 3073794, 4.176018238067627], [1437072333.665269, 3083926, 4.048959732055664], [1437072813.584388, 3094040, 4.178991794586182], [1437073293.569178, 3104172, 3.8385396003723145]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d1.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d1.json new file mode 100644 index 0000000000..27ff64e5dd --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d1.json @@ -0,0 +1 @@ +[[1436925978.257845, 7, 1.009283951483666897], [1436926413.945391, 1476, 0.932567862421274185], [1436926893.945037, 6006, 0.02773338556289673], [1436927373.995472, 13786, 0.021291319280862808], [1436927853.989794, 23650, 0.515582754276692867], [1436928334.132361, 33755, 0.011689444072544575], [1436928813.973288, 43941, 0.009183925576508045], [1436929293.975949, 54146, 0.007850822061300278], [1436929773.992781, 64316, 0.007189035415649414], [1436930253.997415, 74465, 0.007230754010379314], [1436930734.203004, 84611, 0.007685001939535141], [1436931214.03644, 94700, 0.008264732547104359], [1436931694.094564, 104766, 0.008946491405367851], [1436932174.114955, 114817, 0.00966302677989006], [1436932654.161382, 124880, 0.010994276031851768], [1436933133.960214, 134977, 0.01196141354739666], [1436933614.044337, 145062, 0.012673594057559967], [1436934094.166206, 155169, 0.013639944605529308], [1436934574.106036, 165284, 0.014305333606898785], [1436935054.150647, 175402, 0.014946178533136845], [1436935533.819562, 185538, 0.015736915171146393], [1436936013.710422, 195712, 0.01633097417652607], [1436936493.609025, 205906, 0.01669587567448616], [1436936973.683892, 216099, 0.017459288239479065], [1436937454.138383, 226331, 0.018532060086727142], [1436937933.838475, 236532, 0.01949254982173443], [1436938413.89688, 246724, 0.01951725408434868], [1436938894.018652, 256925, 0.019763393327593803], [1436939373.69067, 267137, 0.02008610963821411], [1436939853.673692, 277369, 0.021090799942612648], [1436940333.651346, 287620, 0.021408839151263237], [1436940813.599579, 297848, 0.021988894790410995], [1436941293.596313, 308088, 0.02236073836684227], [1436941773.659172, 318362, 0.022547174245119095], [1436942253.648479, 328621, 0.02303086407482624], [1436942733.752284, 338892, 0.023787079378962517], [1436943213.621881, 349144, 0.024007514119148254], [1436943693.698743, 359399, 0.02414763905107975], [1436944173.578463, 369649, 0.024576496332883835], [1436944653.692217, 379912, 0.02469169721007347], [1436945133.677298, 390180, 0.024951916188001633], [1436945613.572411, 400445, 0.025548970326781273], [1436946093.56123, 410703, 0.025769377127289772], [1436946573.542364, 420958, 0.02602097950875759], [1436947053.616578, 431216, 0.026028109714388847], [1436947533.636973, 441483, 0.026348495855927467], [1436948013.541574, 451751, 0.02621930092573166], [1436948493.560223, 462015, 0.02671053633093834], [1436948973.512541, 472260, 0.0272178016602993], [1436949453.550055, 482483, 0.02734796144068241], [1436949933.828011, 492731, 0.027217809110879898], [1436950413.603177, 502957, 0.027318621054291725], [1436950893.563009, 513185, 0.027304155752062798], [1436951373.620887, 523410, 0.027759933844208717], [1436951853.61941, 533618, 0.028056234121322632], [1436952333.694447, 543828, 0.028620803728699684], [1436952813.621004, 554042, 0.028957637026906013], [1436953293.588156, 564251, 0.029187509790062904], [1436953773.599734, 574464, 0.028960268944501877], [1436954253.621309, 584672, 0.02891424670815468], [1436954733.738119, 594882, 0.029211293905973434], [1436955213.56617, 605091, 0.029444213956594467], [1436955693.585366, 615296, 0.02974688820540905], [1436956173.626395, 625501, 0.03026159666478634], [1436956653.601937, 635705, 0.03039497137069702], [1436957133.665878, 645915, 0.03041839227080345], [1436957613.584762, 656116, 0.030588043853640556], [1436958093.549783, 666331, 0.030284974724054337], [1436958573.646778, 676543, 0.030354496091604233], [1436959053.585655, 686750, 0.030551007017493248], [1436959533.679696, 696961, 0.03068561479449272], [1436960013.633292, 707173, 0.030921893194317818], [1436960493.578778, 717383, 0.031080031767487526], [1436960973.596715, 727598, 0.030773505568504333], [1436961453.625644, 737818, 0.03084484674036503], [1436961933.740339, 748040, 0.03110458515584469], [1436962413.573845, 758252, 0.03114113211631775], [1436962893.610678, 768470, 0.03101053647696972], [1436963373.642878, 778674, 0.03110116347670555], [1436963853.558388, 788877, 0.031342316418886185], [1436964333.658419, 799099, 0.03130127117037773], [1436964813.573319, 809289, 0.031288161873817444], [1436965293.542098, 819484, 0.031435444951057434], [1436965773.545453, 829687, 0.03166936710476875], [1436966253.586517, 839901, 0.03169429674744606], [1436966733.639348, 850120, 0.03191458433866501], [1436967213.697288, 860330, 0.03205746412277222], [1436967693.617172, 870539, 0.03206293657422066], [1436968173.593885, 880748, 0.031957853585481644], [1436968653.560836, 890955, 0.0316658616065979], [1436969133.676337, 901164, 0.031929533928632736], [1436969613.506638, 911358, 0.03174331784248352], [1436970093.595964, 921560, 0.03157960623502731], [1436970573.541227, 931756, 0.03176721930503845], [1436971053.624316, 941945, 0.031810544431209564], [1436971533.655543, 952138, 0.031946416944265366], [1436972013.604738, 962349, 0.03205405920743942], [1436972493.613199, 972551, 0.031924981623888016], [1436972973.501155, 982746, 0.03199697285890579], [1436973453.64842, 992945, 0.03204970061779022], [1436973933.689516, 1003147, 0.032020214945077896], [1436974413.577769, 1013350, 0.03207497298717499], [1436974893.542281, 1023545, 0.03221454098820686], [1436975373.638453, 1033759, 0.032191887497901917], [1436975853.524388, 1043955, 0.03240729123353958], [1436976333.625792, 1054148, 0.032219529151916504], [1436976813.610661, 1064342, 0.03200426697731018], [1436977293.601581, 1074539, 0.03198647499084473], [1436977773.575627, 1084733, 0.0320645235478878], [1436978253.564972, 1094914, 0.0322980061173439], [1436978733.673144, 1105109, 0.032482605427503586], [1436979213.540585, 1115293, 0.032628435641527176], [1436979693.699591, 1125483, 0.032744552940130234], [1436980173.613012, 1135670, 0.03268158435821533], [1436980653.575769, 1145862, 0.0324023962020874], [1436981133.719264, 1156045, 0.03237328305840492], [1436981613.563551, 1166236, 0.03202575817704201], [1436982093.553233, 1176436, 0.03216284513473511], [1436982573.577846, 1186636, 0.03232415020465851], [1436983053.605749, 1196837, 0.0324099175632], [1436983533.684994, 1207025, 0.03245137259364128], [1436984013.561492, 1217233, 0.032246463000774384], [1436984493.629873, 1227437, 0.032042667269706726], [1436984973.606714, 1237643, 0.0318642184138298], [1436985453.690084, 1247835, 0.03191140666604042], [1436985933.711388, 1257951, 0.032287366688251495], [1436986413.598807, 1268125, 0.03226638585329056], [1436986893.631797, 1278290, 0.03252791240811348], [1436987373.596962, 1288473, 0.03241675719618797], [1436987853.555549, 1298650, 0.032103829085826874], [1436988333.722032, 1308841, 0.031904906034469604], [1436988813.55697, 1319018, 0.03179024159908295], [1436989293.756905, 1329221, 0.03168707340955734], [1436989773.665141, 1339417, 0.03160175681114197], [1436990253.768302, 1349610, 0.03161788731813431], [1436990733.708919, 1359759, 0.031772397458553314], [1436991213.663033, 1369914, 0.031758904457092285], [1436991693.730925, 1380074, 0.031629469245672226], [1436992173.751791, 1390224, 0.03154703974723816], [1436992653.758682, 1400383, 0.031527940183877945], [1436993133.835604, 1410542, 0.03169580549001694], [1436993613.674655, 1420684, 0.03182605654001236], [1436994093.747454, 1430832, 0.03185024857521057], [1436994573.768973, 1440986, 0.03199737146496773], [1436995053.666661, 1451174, 0.03156095743179321], [1436995533.83439, 1461345, 0.03150693327188492], [1436996013.556996, 1471495, 0.031496383249759674], [1436996493.635477, 1481663, 0.0313432440161705], [1436996973.668684, 1491822, 0.031145794317126274], [1436997453.59326, 1501979, 0.03106667660176754], [1436997933.774019, 1512139, 0.03143244981765747], [1436998413.575162, 1522290, 0.03142988309264183], [1436998893.640468, 1532431, 0.03132546320557594], [1436999373.551661, 1542579, 0.03125471621751785], [1436999853.57906, 1552734, 0.03098788857460022], [1437000333.680409, 1562888, 0.0308846328407526], [1437000813.602383, 1573037, 0.03082612156867981], [1437001293.610337, 1583190, 0.030793681740760803], [1437001773.618199, 1593341, 0.03087364137172699], [1437002253.572966, 1603497, 0.030839646235108376], [1437002733.67994, 1613657, 0.030705047771334648], [1437003213.583266, 1623809, 0.03071814589202404], [1437003693.639943, 1633966, 0.0304812490940094], [1437004173.568287, 1644113, 0.03030412085354328], [1437004653.610772, 1654268, 0.03032425045967102], [1437005133.663045, 1664424, 0.030430471524596214], [1437005613.580984, 1674567, 0.03036225587129593], [1437006093.601019, 1684715, 0.03056645393371582], [1437006573.625314, 1694857, 0.03043070062994957], [1437007053.584514, 1704999, 0.030224520713090897], [1437007533.719303, 1715150, 0.03024231642484665], [1437008013.604962, 1725282, 0.03009769506752491], [1437008493.655091, 1735432, 0.030214866623282433], [1437008973.640165, 1745584, 0.030181538313627243], [1437009453.715067, 1755742, 0.03017231822013855], [1437009933.765712, 1765896, 0.030141284689307213], [1437010413.632128, 1776052, 0.030052203685045242], [1437010893.66766, 1786195, 0.030078601092100143], [1437011373.636164, 1796346, 0.029969291761517525], [1437011853.631224, 1806481, 0.02999536693096161], [1437012333.706205, 1816617, 0.030100464820861816], [1437012813.61987, 1826754, 0.03008824959397316], [1437013293.479904, 1836883, 0.029995709657669067], [1437013773.604574, 1847029, 0.02995096519589424], [1437014253.618884, 1857175, 0.02980179339647293], [1437014733.756419, 1867312, 0.029607007279992104], [1437015213.638607, 1877459, 0.02952035330235958], [1437015693.625763, 1887608, 0.02937002293765545], [1437016173.63194, 1897759, 0.029285306110978127], [1437016653.609074, 1907909, 0.029194746166467667], [1437017133.717601, 1918074, 0.029153630137443542], [1437017613.716011, 1928220, 0.029063496738672256], [1437018093.626005, 1938377, 0.028990253806114197], [1437018573.626522, 1948523, 0.0290801040828228], [1437019053.648174, 1958678, 0.029026925563812256], [1437019533.803011, 1968831, 0.029071522876620293], [1437020013.667751, 1978978, 0.02911040186882019], [1437020493.659028, 1989133, 0.02908971533179283], [1437020973.657346, 1999287, 0.028982823714613914], [1437021453.650634, 2009437, 0.028793631121516228], [1437021933.848661, 2019588, 0.02868799678981304], [1437022413.674963, 2029736, 0.028585929423570633], [1437022893.69086, 2039894, 0.028488371521234512], [1437023373.68883, 2050054, 0.028293771669268608], [1437023853.686116, 2060205, 0.028227869421243668], [1437024333.763876, 2070362, 0.0280953086912632], [1437024813.707845, 2080507, 0.02794187143445015], [1437025293.483294, 2090645, 0.0278786551207304], [1437025773.695712, 2100793, 0.02786232903599739], [1437026253.672994, 2110943, 0.02783624827861786], [1437026733.780775, 2121094, 0.027756746858358383], [1437027213.617849, 2131235, 0.027644069865345955], [1437027693.694451, 2141382, 0.02752004750072956], [1437028173.68596, 2151537, 0.0274327602237463], [1437028653.584833, 2161685, 0.027434347197413445], [1437029133.792483, 2171839, 0.02731819450855255], [1437029613.661672, 2181977, 0.027138520032167435], [1437030093.641009, 2192118, 0.027088932693004608], [1437030573.656274, 2202268, 0.02713087759912014], [1437031053.643631, 2212416, 0.027159670367836952], [1437031533.777478, 2222583, 0.027089878916740417], [1437032013.704008, 2232736, 0.026989545673131943], [1437032493.638393, 2242882, 0.02692277729511261], [1437032973.684986, 2253041, 0.026783647015690804], [1437033453.699562, 2263183, 0.026735099032521248], [1437033933.918074, 2273320, 0.02665248140692711], [1437034413.596351, 2283443, 0.02659791149199009], [1437034893.640496, 2293579, 0.026540575549006462], [1437035373.637761, 2303701, 0.02647154964506626], [1437035853.669947, 2313823, 0.02645135670900345], [1437036333.78905, 2323961, 0.026429900899529457], [1437036813.699727, 2334089, 0.026324935257434845], [1437037293.662592, 2344235, 0.026287639513611794], [1437037773.66716, 2354364, 0.02626391313970089], [1437038253.603687, 2364507, 0.026225272566080093], [1437038733.78864, 2374644, 0.026248561218380928], [1437039213.641799, 2384782, 0.026243599131703377], [1437039693.687078, 2394923, 0.026255469769239426], [1437040173.635717, 2405058, 0.026186810806393623], [1437040653.673331, 2415194, 0.02606010064482689], [1437041133.764768, 2425322, 0.026031550019979477], [1437041613.629279, 2435449, 0.02595149166882038], [1437042093.703985, 2445575, 0.025885630398988724], [1437042573.496029, 2455712, 0.025858554989099503], [1437043053.686022, 2465844, 0.0257696695625782], [1437043533.731929, 2475974, 0.02574242651462555], [1437044013.636245, 2486095, 0.025741754099726677], [1437044493.69923, 2496238, 0.02561314031481743], [1437044973.652155, 2506373, 0.02550213597714901], [1437045453.691467, 2516497, 0.025422468781471252], [1437045933.935804, 2526637, 0.025300107896327972], [1437046413.635583, 2536770, 0.02533198893070221], [1437046893.626337, 2546896, 0.025261884555220604], [1437047373.67437, 2557029, 0.025176096707582474], [1437047853.652939, 2567169, 0.025054505094885826], [1437048333.778436, 2577306, 0.024978378787636757], [1437048813.654248, 2587433, 0.024952610954642296], [1437049293.610609, 2597552, 0.02484666183590889], [1437049773.646573, 2607690, 0.024764036759734154], [1437050253.667925, 2617808, 0.024689028039574623], [1437050733.735291, 2627933, 0.024599267169833183], [1437051213.620222, 2638053, 0.024585112929344177], [1437051693.601978, 2648171, 0.024474989622831345], [1437052173.634985, 2658299, 0.024343013763427734], [1437052653.687176, 2668425, 0.024294432252645493], [1437053133.762819, 2678556, 0.024164099246263504], [1437053613.643698, 2688671, 0.024035055190324783], [1437054093.673047, 2698804, 0.024000361561775208], [1437054573.667371, 2708956, 0.023914529010653496], [1437055053.650441, 2719087, 0.023955287411808968], [1437055533.778469, 2729219, 0.023859601467847824], [1437056013.694082, 2739343, 0.023759596049785614], [1437056493.674871, 2749458, 0.02367720566689968], [1437056973.700234, 2759575, 0.023645451292395592], [1437057453.666129, 2769697, 0.023565715178847313], [1437057933.848506, 2779821, 0.023514313623309135], [1437058413.643799, 2789941, 0.023489659652113914], [1437058893.715386, 2800076, 0.023429812863469124], [1437059373.62596, 2810207, 0.023344023153185844], [1437059853.650848, 2820334, 0.023226741701364517], [1437060333.792248, 2830465, 0.023134270682930946], [1437060813.682955, 2840600, 0.02305578999221325], [1437061293.681795, 2850745, 0.02298513427376747], [1437061773.691182, 2860880, 0.022913720458745956], [1437062253.662987, 2871013, 0.022864067927002907], [1437062733.760419, 2881153, 0.02278953418135643], [1437063213.651969, 2891278, 0.02276339940726757], [1437063693.723523, 2901406, 0.022675812244415283], [1437064173.68663, 2911533, 0.022622767835855484], [1437064653.547643, 2921667, 0.02255198359489441], [1437065133.62645, 2931813, 0.022431762889027596], [1437065613.566569, 2941947, 0.022368362173438072], [1437066093.537804, 2952102, 0.022323831915855408], [1437066573.529332, 2962243, 0.02226843684911728], [1437067053.520098, 2972400, 0.022210361436009407], [1437067533.605733, 2982561, 0.022118505090475082], [1437068013.535467, 2992698, 0.022013112902641296], [1437068493.559976, 3002839, 0.02197197824716568], [1437068973.558743, 3012983, 0.02191166952252388], [1437069453.562661, 3023116, 0.021851476281881332], [1437069933.627071, 3033256, 0.021762533113360405], [1437070413.574131, 3043386, 0.021733969449996948], [1437070893.658803, 3053528, 0.021669406443834305], [1437071373.638711, 3063659, 0.02159426547586918], [1437071853.621384, 3073794, 0.02153114229440689], [1437072333.665269, 3083926, 0.021499117836356163], [1437072813.584388, 3094040, 0.021457014605402946], [1437073293.569178, 3104172, 0.021365314722061157]] diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d2.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d2.json new file mode 100644 index 0000000000..fb5a18d53a --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d2.json @@ -0,0 +1 @@ +[[1436925978.257845, 7, 0.01034154836088419], [1436926413.945391, 1476, 0.03646053001284599], [1436926893.945037, 6006, 0.031110260635614395], [1436927373.995472, 13786, 0.024214591830968857], [1436927853.989794, 23650, 0.01820789836347103], [1436928334.132361, 33755, 0.01442798599600792], [1436928813.973288, 43941, 0.012150184251368046], [1436929293.975949, 54146, 0.011141776107251644], [1436929773.992781, 64316, 0.010859030298888683], [1436930253.997415, 74465, 0.011160558089613914], [1436930734.203004, 84611, 0.011997541412711143], [1436931214.03644, 94700, 0.01278648804873228], [1436931694.094564, 104766, 0.014073861762881279], [1436932174.114955, 114817, 0.01523376815021038], [1436932654.161382, 124880, 0.016527879983186722], [1436933133.960214, 134977, 0.01782997138798237], [1436933614.044337, 145062, 0.019055265933275223], [1436934094.166206, 155169, 0.02028629370033741], [1436934574.106036, 165284, 0.02116803079843521], [1436935054.150647, 175402, 0.022192901000380516], [1436935533.819562, 185538, 0.022869590669870377], [1436936013.710422, 195712, 0.023398980498313904], [1436936493.609025, 205906, 0.02443159930408001], [1436936973.683892, 216099, 0.025154944509267807], [1436937454.138383, 226331, 0.025802481919527054], [1436937933.838475, 236532, 0.027000702917575836], [1436938413.89688, 246724, 0.02752412110567093], [1436938894.018652, 256925, 0.0278119258582592], [1436939373.69067, 267137, 0.027698883786797523], [1436939853.673692, 277369, 0.028744956478476524], [1436940333.651346, 287620, 0.029281964525580406], [1436940813.599579, 297848, 0.03002205118536949], [1436941293.596313, 308088, 0.030467400327324867], [1436941773.659172, 318362, 0.03132195770740509], [1436942253.648479, 328621, 0.031431782990694046], [1436942733.752284, 338892, 0.03147844970226288], [1436943213.621881, 349144, 0.032013144344091415], [1436943693.698743, 359399, 0.03241390734910965], [1436944173.578463, 369649, 0.03261363133788109], [1436944653.692217, 379912, 0.033306822180747986], [1436945133.677298, 390180, 0.03390969708561897], [1436945613.572411, 400445, 0.03396527096629143], [1436946093.56123, 410703, 0.03388286381959915], [1436946573.542364, 420958, 0.03399669751524925], [1436947053.616578, 431216, 0.03394070267677307], [1436947533.636973, 441483, 0.03419327735900879], [1436948013.541574, 451751, 0.0342416949570179], [1436948493.560223, 462015, 0.034808479249477386], [1436948973.512541, 472260, 0.03552314639091492], [1436949453.550055, 482483, 0.036012329161167145], [1436949933.828011, 492731, 0.035826291888952255], [1436950413.603177, 502957, 0.03600003197789192], [1436950893.563009, 513185, 0.03563224524259567], [1436951373.620887, 523410, 0.03584449738264084], [1436951853.61941, 533618, 0.03587675839662552], [1436952333.694447, 543828, 0.036698292940855026], [1436952813.621004, 554042, 0.03698749095201492], [1436953293.588156, 564251, 0.03712376952171326], [1436953773.599734, 574464, 0.03729996830224991], [1436954253.621309, 584672, 0.03730553761124611], [1436954733.738119, 594882, 0.037479378283023834], [1436955213.56617, 605091, 0.03754287213087082], [1436955693.585366, 615296, 0.0377657376229763], [1436956173.626395, 625501, 0.038117796182632446], [1436956653.601937, 635705, 0.03822959586977959], [1436957133.665878, 645915, 0.03776161000132561], [1436957613.584762, 656116, 0.03816362842917442], [1436958093.549783, 666331, 0.03853853791952133], [1436958573.646778, 676543, 0.03826189786195755], [1436959053.585655, 686750, 0.0381099209189415], [1436959533.679696, 696961, 0.03844142332673073], [1436960013.633292, 707173, 0.03868117928504944], [1436960493.578778, 717383, 0.0390009842813015], [1436960973.596715, 727598, 0.0383562371134758], [1436961453.625644, 737818, 0.0382055900990963], [1436961933.740339, 748040, 0.03806299716234207], [1436962413.573845, 758252, 0.03807120397686958], [1436962893.610678, 768470, 0.03795558586716652], [1436963373.642878, 778674, 0.038018494844436646], [1436963853.558388, 788877, 0.038447774946689606], [1436964333.658419, 799099, 0.03842216357588768], [1436964813.573319, 809289, 0.03840547427535057], [1436965293.542098, 819484, 0.038492728024721146], [1436965773.545453, 829687, 0.0387515053153038], [1436966253.586517, 839901, 0.03869732841849327], [1436966733.639348, 850120, 0.03907460719347], [1436967213.697288, 860330, 0.0395859070122242], [1436967693.617172, 870539, 0.039280518889427185], [1436968173.593885, 880748, 0.0392826572060585], [1436968653.560836, 890955, 0.03899630531668663], [1436969133.676337, 901164, 0.03888440132141113], [1436969613.506638, 911358, 0.038790252059698105], [1436970093.595964, 921560, 0.03851785138249397], [1436970573.541227, 931756, 0.03913348540663719], [1436971053.624316, 941945, 0.038978900760412216], [1436971533.655543, 952138, 0.03925086557865143], [1436972013.604738, 962349, 0.039124101400375366], [1436972493.613199, 972551, 0.0390220545232296], [1436972973.501155, 982746, 0.039025235921144485], [1436973453.64842, 992945, 0.03877083212137222], [1436973933.689516, 1003147, 0.03902769833803177], [1436974413.577769, 1013350, 0.038719139993190765], [1436974893.542281, 1023545, 0.03872331231832504], [1436975373.638453, 1033759, 0.03927341103553772], [1436975853.524388, 1043955, 0.03930830955505371], [1436976333.625792, 1054148, 0.039153918623924255], [1436976813.610661, 1064342, 0.03932590410113335], [1436977293.601581, 1074539, 0.03922765702009201], [1436977773.575627, 1084733, 0.039390794932842255], [1436978253.564972, 1094914, 0.03935663774609566], [1436978733.673144, 1105109, 0.03939087316393852], [1436979213.540585, 1115293, 0.039371199905872345], [1436979693.699591, 1125483, 0.03982992097735405], [1436980173.613012, 1135670, 0.03941287472844124], [1436980653.575769, 1145862, 0.03933672979474068], [1436981133.719264, 1156045, 0.03919614478945732], [1436981613.563551, 1166236, 0.03906407952308655], [1436982093.553233, 1176436, 0.038837045431137085], [1436982573.577846, 1186636, 0.039009105414152145], [1436983053.605749, 1196837, 0.039010051637887955], [1436983533.684994, 1207025, 0.03891472890973091], [1436984013.561492, 1217233, 0.038610219955444336], [1436984493.629873, 1227437, 0.03866511583328247], [1436984973.606714, 1237643, 0.03865685313940048], [1436985453.690084, 1247835, 0.038945719599723816], [1436985933.711388, 1257951, 0.03925580158829689], [1436986413.598807, 1268125, 0.039332933723926544], [1436986893.631797, 1278290, 0.03918297216296196], [1436987373.596962, 1288473, 0.03883613646030426], [1436987853.555549, 1298650, 0.038776978850364685], [1436988333.722032, 1308841, 0.03888171166181564], [1436988813.55697, 1319018, 0.038825325667858124], [1436989293.756905, 1329221, 0.03864298388361931], [1436989773.665141, 1339417, 0.03865634649991989], [1436990253.768302, 1349610, 0.03898858651518822], [1436990733.708919, 1359759, 0.03906260430812836], [1436991213.663033, 1369914, 0.03911694139242172], [1436991693.730925, 1380074, 0.03875250369310379], [1436992173.751791, 1390224, 0.03882621228694916], [1436992653.758682, 1400383, 0.03877855837345123], [1436993133.835604, 1410542, 0.03870398923754692], [1436993613.674655, 1420684, 0.03887751325964928], [1436994093.747454, 1430832, 0.03915301710367203], [1436994573.768973, 1440986, 0.03938450664281845], [1436995053.666661, 1451174, 0.03919720649719238], [1436995533.83439, 1461345, 0.038862887769937515], [1436996013.556996, 1471495, 0.03901274502277374], [1436996493.635477, 1481663, 0.0388539656996727], [1436996973.668684, 1491822, 0.038732752203941345], [1436997453.59326, 1501979, 0.03879735246300697], [1436997933.774019, 1512139, 0.038524042814970016], [1436998413.575162, 1522290, 0.03869651257991791], [1436998893.640468, 1532431, 0.0383637398481369], [1436999373.551661, 1542579, 0.038300249725580215], [1436999853.57906, 1552734, 0.03799160569906235], [1437000333.680409, 1562888, 0.03759683296084404], [1437000813.602383, 1573037, 0.037678662687540054], [1437001293.610337, 1583190, 0.037575822323560715], [1437001773.618199, 1593341, 0.0376887246966362], [1437002253.572966, 1603497, 0.037922415882349014], [1437002733.67994, 1613657, 0.03766244649887085], [1437003213.583266, 1623809, 0.03754705190658569], [1437003693.639943, 1633966, 0.03738937899470329], [1437004173.568287, 1644113, 0.037347543984651566], [1437004653.610772, 1654268, 0.037374842911958694], [1437005133.663045, 1664424, 0.037443988025188446], [1437005613.580984, 1674567, 0.037457264959812164], [1437006093.601019, 1684715, 0.037874478846788406], [1437006573.625314, 1694857, 0.037644676864147186], [1437007053.584514, 1704999, 0.03743988648056984], [1437007533.719303, 1715150, 0.03739031031727791], [1437008013.604962, 1725282, 0.037301771342754364], [1437008493.655091, 1735432, 0.03735104575753212], [1437008973.640165, 1745584, 0.037282250821590424], [1437009453.715067, 1755742, 0.03729768097400665], [1437009933.765712, 1765896, 0.03717759624123573], [1437010413.632128, 1776052, 0.03691410645842552], [1437010893.66766, 1786195, 0.036807890981435776], [1437011373.636164, 1796346, 0.036659423261880875], [1437011853.631224, 1806481, 0.03682238608598709], [1437012333.706205, 1816617, 0.036776404827833176], [1437012813.61987, 1826754, 0.036672260612249374], [1437013293.479904, 1836883, 0.03666841238737106], [1437013773.604574, 1847029, 0.036642514169216156], [1437014253.618884, 1857175, 0.03654393553733826], [1437014733.756419, 1867312, 0.03638240322470665], [1437015213.638607, 1877459, 0.03610989451408386], [1437015693.625763, 1887608, 0.036011870950460434], [1437016173.63194, 1897759, 0.03607400134205818], [1437016653.609074, 1907909, 0.03581620752811432], [1437017133.717601, 1918074, 0.035680998116731644], [1437017613.716011, 1928220, 0.03547567501664162], [1437018093.626005, 1938377, 0.035375215113162994], [1437018573.626522, 1948523, 0.03534447029232979], [1437019053.648174, 1958678, 0.03535373508930206], [1437019533.803011, 1968831, 0.03541970252990723], [1437020013.667751, 1978978, 0.03534942492842674], [1437020493.659028, 1989133, 0.035337116569280624], [1437020973.657346, 1999287, 0.03519223630428314], [1437021453.650634, 2009437, 0.0350094810128212], [1437021933.848661, 2019588, 0.03481736779212952], [1437022413.674963, 2029736, 0.03482922539114952], [1437022893.69086, 2039894, 0.03482965752482414], [1437023373.68883, 2050054, 0.034710027277469635], [1437023853.686116, 2060205, 0.03447446599602699], [1437024333.763876, 2070362, 0.034356746822595596], [1437024813.707845, 2080507, 0.03430519998073578], [1437025293.483294, 2090645, 0.03412580490112305], [1437025773.695712, 2100793, 0.03409077599644661], [1437026253.672994, 2110943, 0.0340830534696579], [1437026733.780775, 2121094, 0.03400549292564392], [1437027213.617849, 2131235, 0.033846043050289154], [1437027693.694451, 2141382, 0.03379584103822708], [1437028173.68596, 2151537, 0.033618565648794174], [1437028653.584833, 2161685, 0.03352222591638565], [1437029133.792483, 2171839, 0.03338197246193886], [1437029613.661672, 2181977, 0.03323192894458771], [1437030093.641009, 2192118, 0.03313163295388222], [1437030573.656274, 2202268, 0.0331595316529274], [1437031053.643631, 2212416, 0.03310840204358101], [1437031533.777478, 2222583, 0.03298124670982361], [1437032013.704008, 2232736, 0.03288085386157036], [1437032493.638393, 2242882, 0.03281677886843681], [1437032973.684986, 2253041, 0.03261971473693848], [1437033453.699562, 2263183, 0.03251069411635399], [1437033933.918074, 2273320, 0.03243493288755417], [1437034413.596351, 2283443, 0.03251812607049942], [1437034893.640496, 2293579, 0.03244208171963692], [1437035373.637761, 2303701, 0.03246922418475151], [1437035853.669947, 2313823, 0.032652080059051514], [1437036333.78905, 2323961, 0.032621122896671295], [1437036813.699727, 2334089, 0.03248974680900574], [1437037293.662592, 2344235, 0.032404426485300064], [1437037773.66716, 2354364, 0.03240393102169037], [1437038253.603687, 2364507, 0.03238365799188614], [1437038733.78864, 2374644, 0.03244389593601227], [1437039213.641799, 2384782, 0.03239350765943527], [1437039693.687078, 2394923, 0.032426562160253525], [1437040173.635717, 2405058, 0.032403264194726944], [1437040653.673331, 2415194, 0.03231978043913841], [1437041133.764768, 2425322, 0.03223187103867531], [1437041613.629279, 2435449, 0.03213196247816086], [1437042093.703985, 2445575, 0.032153598964214325], [1437042573.496029, 2455712, 0.03199320286512375], [1437043053.686022, 2465844, 0.03188605234026909], [1437043533.731929, 2475974, 0.03178738057613373], [1437044013.636245, 2486095, 0.03171614184975624], [1437044493.69923, 2496238, 0.031645938754081726], [1437044973.652155, 2506373, 0.03155189007520676], [1437045453.691467, 2516497, 0.03144536912441254], [1437045933.935804, 2526637, 0.031432293355464935], [1437046413.635583, 2536770, 0.03129834309220314], [1437046893.626337, 2546896, 0.031195342540740967], [1437047373.67437, 2557029, 0.031033318489789963], [1437047853.652939, 2567169, 0.030938012525439262], [1437048333.778436, 2577306, 0.030827201902866364], [1437048813.654248, 2587433, 0.03068169392645359], [1437049293.610609, 2597552, 0.030520914122462273], [1437049773.646573, 2607690, 0.030437452718615532], [1437050253.667925, 2617808, 0.03041636385023594], [1437050733.735291, 2627933, 0.030291059985756874], [1437051213.620222, 2638053, 0.030283397063612938], [1437051693.601978, 2648171, 0.030193043872714043], [1437052173.634985, 2658299, 0.03004123829305172], [1437052653.687176, 2668425, 0.0299222432076931], [1437053133.762819, 2678556, 0.029762346297502518], [1437053613.643698, 2688671, 0.02970775216817856], [1437054093.673047, 2698804, 0.029604140669107437], [1437054573.667371, 2708956, 0.02949359640479088], [1437055053.650441, 2719087, 0.02943229116499424], [1437055533.778469, 2729219, 0.029304414987564087], [1437056013.694082, 2739343, 0.029147598892450333], [1437056493.674871, 2749458, 0.029033908620476723], [1437056973.700234, 2759575, 0.028886595740914345], [1437057453.666129, 2769697, 0.028734514489769936], [1437057933.848506, 2779821, 0.02874554693698883], [1437058413.643799, 2789941, 0.028716085478663445], [1437058893.715386, 2800076, 0.028669510036706924], [1437059373.62596, 2810207, 0.028530430048704147], [1437059853.650848, 2820334, 0.02839958481490612], [1437060333.792248, 2830465, 0.028364405035972595], [1437060813.682955, 2840600, 0.0282796248793602], [1437061293.681795, 2850745, 0.02820495329797268], [1437061773.691182, 2860880, 0.028159918263554573], [1437062253.662987, 2871013, 0.028104742988944054], [1437062733.760419, 2881153, 0.028099438175559044], [1437063213.651969, 2891278, 0.02802356891334057], [1437063693.723523, 2901406, 0.027945902198553085], [1437064173.68663, 2911533, 0.027897505089640617], [1437064653.547643, 2921667, 0.027821676805615425], [1437065133.62645, 2931813, 0.02770490199327469], [1437065613.566569, 2941947, 0.02761264331638813], [1437066093.537804, 2952102, 0.027557073161005974], [1437066573.529332, 2962243, 0.027522796764969826], [1437067053.520098, 2972400, 0.027469975873827934], [1437067533.605733, 2982561, 0.027299631386995316], [1437068013.535467, 2992698, 0.027225365862250328], [1437068493.559976, 3002839, 0.027095869183540344], [1437068973.558743, 3012983, 0.027036350220441818], [1437069453.562661, 3023116, 0.02693818509578705], [1437069933.627071, 3033256, 0.02687198854982853], [1437070413.574131, 3043386, 0.02687297947704792], [1437070893.658803, 3053528, 0.026770537719130516], [1437071373.638711, 3063659, 0.026667704805731773], [1437071853.621384, 3073794, 0.026571234688162804], [1437072333.665269, 3083926, 0.026447603479027748], [1437072813.584388, 3094040, 0.026389220729470253], [1437073293.569178, 3104172, 0.026299258694052696]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d3.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d3.json new file mode 100644 index 0000000000..e489130ea7 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d3.json @@ -0,0 +1 @@ +[[1436925978.257845, 7, 0.03425809368491173], [1436926413.945391, 1476, 0.032557398080825806], [1436926893.945037, 6006, 0.0277252234518528], [1436927373.995472, 13786, 0.021282576024532318], [1436927853.989794, 23650, 0.015578101389110088], [1436928334.132361, 33755, 0.011687012389302254], [1436928813.973288, 43941, 0.00918175745755434], [1436929293.975949, 54146, 0.00784988235682249], [1436929773.992781, 64316, 0.007188988849520683], [1436930253.997415, 74465, 0.0072308750823140144], [1436930734.203004, 84611, 0.007685060612857342], [1436931214.03644, 94700, 0.008267422206699848], [1436931694.094564, 104766, 0.008946981281042099], [1436932174.114955, 114817, 0.009664506651461124], [1436932654.161382, 124880, 0.010994983837008476], [1436933133.960214, 134977, 0.011961394920945168], [1436933614.044337, 145062, 0.012674711644649506], [1436934094.166206, 155169, 0.013640021905303001], [1436934574.106036, 165284, 0.014305224642157555], [1436935054.150647, 175402, 0.014946703799068928], [1436935533.819562, 185538, 0.015737954527139664], [1436936013.710422, 195712, 0.016330912709236145], [1436936493.609025, 205906, 0.016695979982614517], [1436936973.683892, 216099, 0.017458846792578697], [1436937454.138383, 226331, 0.018533164635300636], [1436937933.838475, 236532, 0.01949200965464115], [1436938413.89688, 246724, 0.019517479464411736], [1436938894.018652, 256925, 0.019764307886362076], [1436939373.69067, 267137, 0.02008572220802307], [1436939853.673692, 277369, 0.021091068163514137], [1436940333.651346, 287620, 0.02140945754945278], [1436940813.599579, 297848, 0.021988170221447945], [1436941293.596313, 308088, 0.0223606675863266], [1436941773.659172, 318362, 0.022547796368598938], [1436942253.648479, 328621, 0.023031413555145264], [1436942733.752284, 338892, 0.023786410689353943], [1436943213.621881, 349144, 0.024008480831980705], [1436943693.698743, 359399, 0.024148935452103615], [1436944173.578463, 369649, 0.02457556128501892], [1436944653.692217, 379912, 0.02469060942530632], [1436945133.677298, 390180, 0.024952523410320282], [1436945613.572411, 400445, 0.02554873190820217], [1436946093.56123, 410703, 0.025771528482437134], [1436946573.542364, 420958, 0.02602078951895237], [1436947053.616578, 431216, 0.02602880820631981], [1436947533.636973, 441483, 0.026351822540163994], [1436948013.541574, 451751, 0.0262188371270895], [1436948493.560223, 462015, 0.026711203157901764], [1436948973.512541, 472260, 0.027218565344810486], [1436949453.550055, 482483, 0.02734719216823578], [1436949933.828011, 492731, 0.027217986062169075], [1436950413.603177, 502957, 0.027318857610225677], [1436950893.563009, 513185, 0.027305351570248604], [1436951373.620887, 523410, 0.027760380879044533], [1436951853.61941, 533618, 0.0280567966401577], [1436952333.694447, 543828, 0.028621215373277664], [1436952813.621004, 554042, 0.028958816081285477], [1436953293.588156, 564251, 0.029186993837356567], [1436953773.599734, 574464, 0.028960207477211952], [1436954253.621309, 584672, 0.028913332149386406], [1436954733.738119, 594882, 0.02921229600906372], [1436955213.56617, 605091, 0.029444556683301926], [1436955693.585366, 615296, 0.029747728258371353], [1436956173.626395, 625501, 0.030260732397437096], [1436956653.601937, 635705, 0.030394721776247025], [1436957133.665878, 645915, 0.03041674755513668], [1436957613.584762, 656116, 0.03058660589158535], [1436958093.549783, 666331, 0.030284838750958443], [1436958573.646778, 676543, 0.030354052782058716], [1436959053.585655, 686750, 0.030551131814718246], [1436959533.679696, 696961, 0.030686482787132263], [1436960013.633292, 707173, 0.030921922996640205], [1436960493.578778, 717383, 0.031079748645424843], [1436960973.596715, 727598, 0.03077232837677002], [1436961453.625644, 737818, 0.03084420971572399], [1436961933.740339, 748040, 0.03110562451183796], [1436962413.573845, 758252, 0.031141508370637894], [1436962893.610678, 768470, 0.031010067090392113], [1436963373.642878, 778674, 0.031100917607545853], [1436963853.558388, 788877, 0.03134296461939812], [1436964333.658419, 799099, 0.031301673501729965], [1436964813.573319, 809289, 0.031290579587221146], [1436965293.542098, 819484, 0.031435515731573105], [1436965773.545453, 829687, 0.031667787581682205], [1436966253.586517, 839901, 0.03169453889131546], [1436966733.639348, 850120, 0.03191617131233215], [1436967213.697288, 860330, 0.03205711767077446], [1436967693.617172, 870539, 0.03206227719783783], [1436968173.593885, 880748, 0.03195691108703613], [1436968653.560836, 890955, 0.03166574612259865], [1436969133.676337, 901164, 0.031929291784763336], [1436969613.506638, 911358, 0.031744007021188736], [1436970093.595964, 921560, 0.0315803587436676], [1436970573.541227, 931756, 0.031766779720783234], [1436971053.624316, 941945, 0.03181062266230583], [1436971533.655543, 952138, 0.0319465771317482], [1436972013.604738, 962349, 0.032054755836725235], [1436972493.613199, 972551, 0.03192495182156563], [1436972973.501155, 982746, 0.0319976881146431], [1436973453.64842, 992945, 0.03205036744475365], [1436973933.689516, 1003147, 0.032020118087530136], [1436974413.577769, 1013350, 0.03207429125905037], [1436974893.542281, 1023545, 0.032214779406785965], [1436975373.638453, 1033759, 0.03219134360551834], [1436975853.524388, 1043955, 0.0324082113802433], [1436976333.625792, 1054148, 0.03221917897462845], [1436976813.610661, 1064342, 0.03200480341911316], [1436977293.601581, 1074539, 0.03198748826980591], [1436977773.575627, 1084733, 0.032064300030469894], [1436978253.564972, 1094914, 0.032298240810632706], [1436978733.673144, 1105109, 0.03248215466737747], [1436979213.540585, 1115293, 0.03262820467352867], [1436979693.699591, 1125483, 0.032745134085416794], [1436980173.613012, 1135670, 0.032681502401828766], [1436980653.575769, 1145862, 0.03240214288234711], [1436981133.719264, 1156045, 0.03237201273441315], [1436981613.563551, 1166236, 0.03202598914504051], [1436982093.553233, 1176436, 0.032163310796022415], [1436982573.577846, 1186636, 0.03232435882091522], [1436983053.605749, 1196837, 0.032410554587841034], [1436983533.684994, 1207025, 0.03245232254266739], [1436984013.561492, 1217233, 0.03224659338593483], [1436984493.629873, 1227437, 0.03204221650958061], [1436984973.606714, 1237643, 0.03186390548944473], [1436985453.690084, 1247835, 0.031911786645650864], [1436985933.711388, 1257951, 0.032286882400512695], [1436986413.598807, 1268125, 0.032266560941934586], [1436986893.631797, 1278290, 0.03252791985869408], [1436987373.596962, 1288473, 0.03241678699851036], [1436987853.555549, 1298650, 0.03210347890853882], [1436988333.722032, 1308841, 0.031904902309179306], [1436988813.55697, 1319018, 0.03179018944501877], [1436989293.756905, 1329221, 0.0316874124109745], [1436989773.665141, 1339417, 0.03160090371966362], [1436990253.768302, 1349610, 0.03161816671490669], [1436990733.708919, 1359759, 0.0317724235355854], [1436991213.663033, 1369914, 0.03175821527838707], [1436991693.730925, 1380074, 0.031629402190446854], [1436992173.751791, 1390224, 0.031547073274850845], [1436992653.758682, 1400383, 0.031528495252132416], [1436993133.835604, 1410542, 0.03169562667608261], [1436993613.674655, 1420684, 0.031826674938201904], [1436994093.747454, 1430832, 0.03185039013624191], [1436994573.768973, 1440986, 0.03199826925992966], [1436995053.666661, 1451174, 0.03156091645359993], [1436995533.83439, 1461345, 0.031506411731243134], [1436996013.556996, 1471495, 0.031495608389377594], [1436996493.635477, 1481663, 0.03134337440133095], [1436996973.668684, 1491822, 0.031145554035902023], [1436997453.59326, 1501979, 0.031068041920661926], [1436997933.774019, 1512139, 0.031432390213012695], [1436998413.575162, 1522290, 0.03142932057380676], [1436998893.640468, 1532431, 0.03132513165473938], [1436999373.551661, 1542579, 0.03125539794564247], [1436999853.57906, 1552734, 0.0309873279184103], [1437000333.680409, 1562888, 0.03088490664958954], [1437000813.602383, 1573037, 0.0308260228484869], [1437001293.610337, 1583190, 0.030793415382504463], [1437001773.618199, 1593341, 0.03087344579398632], [1437002253.572966, 1603497, 0.0308389812707901], [1437002733.67994, 1613657, 0.03070608340203762], [1437003213.583266, 1623809, 0.0307186096906662], [1437003693.639943, 1633966, 0.03048117645084858], [1437004173.568287, 1644113, 0.03030446544289589], [1437004653.610772, 1654268, 0.030324051156640053], [1437005133.663045, 1664424, 0.03043009154498577], [1437005613.580984, 1674567, 0.030361991375684738], [1437006093.601019, 1684715, 0.030566193163394928], [1437006573.625314, 1694857, 0.030430208891630173], [1437007053.584514, 1704999, 0.030224468559026718], [1437007533.719303, 1715150, 0.030241932719945908], [1437008013.604962, 1725282, 0.030097855255007744], [1437008493.655091, 1735432, 0.030217904597520828], [1437008973.640165, 1745584, 0.030181601643562317], [1437009453.715067, 1755742, 0.030172593891620636], [1437009933.765712, 1765896, 0.030141659080982208], [1437010413.632128, 1776052, 0.030052196234464645], [1437010893.66766, 1786195, 0.03007938154041767], [1437011373.636164, 1796346, 0.02996920794248581], [1437011853.631224, 1806481, 0.029995175078511238], [1437012333.706205, 1816617, 0.03010040894150734], [1437012813.61987, 1826754, 0.030088385567069054], [1437013293.479904, 1836883, 0.029996229335665703], [1437013773.604574, 1847029, 0.029950618743896484], [1437014253.618884, 1857175, 0.029801754280924797], [1437014733.756419, 1867312, 0.029606210067868233], [1437015213.638607, 1877459, 0.029520301148295403], [1437015693.625763, 1887608, 0.02937021106481552], [1437016173.63194, 1897759, 0.02928493171930313], [1437016653.609074, 1907909, 0.029194936156272888], [1437017133.717601, 1918074, 0.029153617098927498], [1437017613.716011, 1928220, 0.029063349589705467], [1437018093.626005, 1938377, 0.02899051643908024], [1437018573.626522, 1948523, 0.02908063493669033], [1437019053.648174, 1958678, 0.029026903212070465], [1437019533.803011, 1968831, 0.029071694239974022], [1437020013.667751, 1978978, 0.029110101982951164], [1437020493.659028, 1989133, 0.02908976934850216], [1437020973.657346, 1999287, 0.028982611373066902], [1437021453.650634, 2009437, 0.028793690726161003], [1437021933.848661, 2019588, 0.02868787571787834], [1437022413.674963, 2029736, 0.028585631400346756], [1437022893.69086, 2039894, 0.02848806604743004], [1437023373.68883, 2050054, 0.028294002637267113], [1437023853.686116, 2060205, 0.02822807803750038], [1437024333.763876, 2070362, 0.02809525839984417], [1437024813.707845, 2080507, 0.027941878885030746], [1437025293.483294, 2090645, 0.02787884697318077], [1437025773.695712, 2100793, 0.027862509712576866], [1437026253.672994, 2110943, 0.027835993096232414], [1437026733.780775, 2121094, 0.027756690979003906], [1437027213.617849, 2131235, 0.027644263580441475], [1437027693.694451, 2141382, 0.02752007730305195], [1437028173.68596, 2151537, 0.027432529255747795], [1437028653.584833, 2161685, 0.027434471994638443], [1437029133.792483, 2171839, 0.027317894622683525], [1437029613.661672, 2181977, 0.027138294652104378], [1437030093.641009, 2192118, 0.027088705450296402], [1437030573.656274, 2202268, 0.027131302282214165], [1437031053.643631, 2212416, 0.02715957537293434], [1437031533.777478, 2222583, 0.027089620009064674], [1437032013.704008, 2232736, 0.026989320293068886], [1437032493.638393, 2242882, 0.026922713965177536], [1437032973.684986, 2253041, 0.02678370475769043], [1437033453.699562, 2263183, 0.0267350971698761], [1437033933.918074, 2273320, 0.026652036234736443], [1437034413.596351, 2283443, 0.0265977680683136], [1437034893.640496, 2293579, 0.02654072269797325], [1437035373.637761, 2303701, 0.026471523568034172], [1437035853.669947, 2313823, 0.026451298967003822], [1437036333.78905, 2323961, 0.026429779827594757], [1437036813.699727, 2334089, 0.026324886828660965], [1437037293.662592, 2344235, 0.026287589222192764], [1437037773.66716, 2354364, 0.026264755055308342], [1437038253.603687, 2364507, 0.026225194334983826], [1437038733.78864, 2374644, 0.02624845691025257], [1437039213.641799, 2384782, 0.02624380588531494], [1437039693.687078, 2394923, 0.026255516335368156], [1437040173.635717, 2405058, 0.026186630129814148], [1437040653.673331, 2415194, 0.026059549301862717], [1437041133.764768, 2425322, 0.02603207901120186], [1437041613.629279, 2435449, 0.025951188057661057], [1437042093.703985, 2445575, 0.025885486975312233], [1437042573.496029, 2455712, 0.0258584376424551], [1437043053.686022, 2465844, 0.02576967515051365], [1437043533.731929, 2475974, 0.02574247308075428], [1437044013.636245, 2486095, 0.025741368532180786], [1437044493.69923, 2496238, 0.025613142177462578], [1437044973.652155, 2506373, 0.025502001866698265], [1437045453.691467, 2516497, 0.025422129780054092], [1437045933.935804, 2526637, 0.02530006691813469], [1437046413.635583, 2536770, 0.02533203549683094], [1437046893.626337, 2546896, 0.025261884555220604], [1437047373.67437, 2557029, 0.02517615258693695], [1437047853.652939, 2567169, 0.025054262951016426], [1437048333.778436, 2577306, 0.024978358298540115], [1437048813.654248, 2587433, 0.024952327832579613], [1437049293.610609, 2597552, 0.024846646934747696], [1437049773.646573, 2607690, 0.024763893336057663], [1437050253.667925, 2617808, 0.024688972160220146], [1437050733.735291, 2627933, 0.024599123746156693], [1437051213.620222, 2638053, 0.024585271254181862], [1437051693.601978, 2648171, 0.024474715813994408], [1437052173.634985, 2658299, 0.0243435837328434], [1437052653.687176, 2668425, 0.024294523522257805], [1437053133.762819, 2678556, 0.024163981899619102], [1437053613.643698, 2688671, 0.024034887552261353], [1437054093.673047, 2698804, 0.024000374600291252], [1437054573.667371, 2708956, 0.023914175108075142], [1437055053.650441, 2719087, 0.02395522966980934], [1437055533.778469, 2729219, 0.023859599605202675], [1437056013.694082, 2739343, 0.02375946193933487], [1437056493.674871, 2749458, 0.023677179589867592], [1437056973.700234, 2759575, 0.023645443841814995], [1437057453.666129, 2769697, 0.02356558106839657], [1437057933.848506, 2779821, 0.023514214903116226], [1437058413.643799, 2789941, 0.023489613085985184], [1437058893.715386, 2800076, 0.023429814726114273], [1437059373.62596, 2810207, 0.023343827575445175], [1437059853.650848, 2820334, 0.02322673238813877], [1437060333.792248, 2830465, 0.023134106770157814], [1437060813.682955, 2840600, 0.023055672645568848], [1437061293.681795, 2850745, 0.022985080257058144], [1437061773.691182, 2860880, 0.02291373908519745], [1437062253.662987, 2871013, 0.022864071652293205], [1437062733.760419, 2881153, 0.0227896086871624], [1437063213.651969, 2891278, 0.02276325598359108], [1437063693.723523, 2901406, 0.022676151245832443], [1437064173.68663, 2911533, 0.022622840479016304], [1437064653.547643, 2921667, 0.022551873698830605], [1437065133.62645, 2931813, 0.022431621327996254], [1437065613.566569, 2941947, 0.022368427366018295], [1437066093.537804, 2952102, 0.022323856130242348], [1437066573.529332, 2962243, 0.022268367931246758], [1437067053.520098, 2972400, 0.022210223600268364], [1437067533.605733, 2982561, 0.022118542343378067], [1437068013.535467, 2992698, 0.022013003006577492], [1437068493.559976, 3002839, 0.021971898153424263], [1437068973.558743, 3012983, 0.021911533549427986], [1437069453.562661, 3023116, 0.021851375699043274], [1437069933.627071, 3033256, 0.021762363612651825], [1437070413.574131, 3043386, 0.021733952686190605], [1437070893.658803, 3053528, 0.021669508889317513], [1437071373.638711, 3063659, 0.021594204008579254], [1437071853.621384, 3073794, 0.021531015634536743], [1437072333.665269, 3083926, 0.021499203518033028], [1437072813.584388, 3094040, 0.021456807851791382], [1437073293.569178, 3104172, 0.02136526256799698]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d4.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d4.json new file mode 100644 index 0000000000..434b78cd0f --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d4.json @@ -0,0 +1 @@ +[[1436925978.257845, 7, 0.5028539896011353], [1436926413.945391, 1476, 0.4976981580257416], [1436926893.945037, 6006, 0.5092837810516357], [1436927373.995472, 13786, 0.5118998885154724], [1436927853.989794, 23650, 0.5314905643463135], [1436928334.132361, 33755, 0.550969123840332], [1436928813.973288, 43941, 0.5487659573554993], [1436929293.975949, 54146, 0.5263530015945435], [1436929773.992781, 64316, 0.5077286958694458], [1436930253.997415, 74465, 0.5120566487312317], [1436930734.203004, 84611, 0.5140185952186584], [1436931214.03644, 94700, 0.5133042335510254], [1436931694.094564, 104766, 0.5233010053634644], [1436932174.114955, 114817, 0.5230671763420105], [1436932654.161382, 124880, 0.5250263810157776], [1436933133.960214, 134977, 0.5088120698928833], [1436933614.044337, 145062, 0.5097426176071167], [1436934094.166206, 155169, 0.5103482007980347], [1436934574.106036, 165284, 0.5021579265594482], [1436935054.150647, 175402, 0.49785494804382324], [1436935533.819562, 185538, 0.4970649182796478], [1436936013.710422, 195712, 0.5023221373558044], [1436936493.609025, 205906, 0.5063169002532959], [1436936973.683892, 216099, 0.50455641746521], [1436937454.138383, 226331, 0.5104150772094727], [1436937933.838475, 236532, 0.5066487193107605], [1436938413.89688, 246724, 0.5183079838752747], [1436938894.018652, 256925, 0.5163102746009827], [1436939373.69067, 267137, 0.5216323733329773], [1436939853.673692, 277369, 0.5153006315231323], [1436940333.651346, 287620, 0.5240126252174377], [1436940813.599579, 297848, 0.5263218879699707], [1436941293.596313, 308088, 0.5236956477165222], [1436941773.659172, 318362, 0.534295916557312], [1436942253.648479, 328621, 0.540306031703949], [1436942733.752284, 338892, 0.5359382033348083], [1436943213.621881, 349144, 0.540198564529419], [1436943693.698743, 359399, 0.5404431819915771], [1436944173.578463, 369649, 0.5429667234420776], [1436944653.692217, 379912, 0.5415231585502625], [1436945133.677298, 390180, 0.54068922996521], [1436945613.572411, 400445, 0.5396349430084229], [1436946093.56123, 410703, 0.5486253499984741], [1436946573.542364, 420958, 0.5451043248176575], [1436947053.616578, 431216, 0.5478819608688354], [1436947533.636973, 441483, 0.5503379106521606], [1436948013.541574, 451751, 0.5534676313400269], [1436948493.560223, 462015, 0.5574610829353333], [1436948973.512541, 472260, 0.5558810234069824], [1436949453.550055, 482483, 0.5529404878616333], [1436949933.828011, 492731, 0.5618430972099304], [1436950413.603177, 502957, 0.5641138553619385], [1436950893.563009, 513185, 0.5707159638404846], [1436951373.620887, 523410, 0.5676558613777161], [1436951853.61941, 533618, 0.5637813806533813], [1436952333.694447, 543828, 0.5682924389839172], [1436952813.621004, 554042, 0.5690237283706665], [1436953293.588156, 564251, 0.5655006766319275], [1436953773.599734, 574464, 0.553955614566803], [1436954253.621309, 584672, 0.5558924674987793], [1436954733.738119, 594882, 0.5603042840957642], [1436955213.56617, 605091, 0.5625290870666504], [1436955693.585366, 615296, 0.5668522715568542], [1436956173.626395, 625501, 0.5736584663391113], [1436956653.601937, 635705, 0.5693879723548889], [1436957133.665878, 645915, 0.576599657535553], [1436957613.584762, 656116, 0.5648065805435181], [1436958093.549783, 666331, 0.5632508397102356], [1436958573.646778, 676543, 0.5660487413406372], [1436959053.585655, 686750, 0.568809449672699], [1436959533.679696, 696961, 0.5667826533317566], [1436960013.633292, 707173, 0.5637232661247253], [1436960493.578778, 717383, 0.5675314664840698], [1436960973.596715, 727598, 0.5714674592018127], [1436961453.625644, 737818, 0.564845085144043], [1436961933.740339, 748040, 0.5700833797454834], [1436962413.573845, 758252, 0.5702976584434509], [1436962893.610678, 768470, 0.5745863914489746], [1436963373.642878, 778674, 0.5763651728630066], [1436963853.558388, 788877, 0.5721960067749023], [1436964333.658419, 799099, 0.5714120864868164], [1436964813.573319, 809289, 0.5687000155448914], [1436965293.542098, 819484, 0.5728974938392639], [1436965773.545453, 829687, 0.5738612413406372], [1436966253.586517, 839901, 0.5702064037322998], [1436966733.639348, 850120, 0.5715107321739197], [1436967213.697288, 860330, 0.5695001482963562], [1436967693.617172, 870539, 0.5783872008323669], [1436968173.593885, 880748, 0.5758792161941528], [1436968653.560836, 890955, 0.572809636592865], [1436969133.676337, 901164, 0.5752230286598206], [1436969613.506638, 911358, 0.5861247181892395], [1436970093.595964, 921560, 0.5834078788757324], [1436970573.541227, 931756, 0.5814791321754456], [1436971053.624316, 941945, 0.5803619623184204], [1436971533.655543, 952138, 0.5765199065208435], [1436972013.604738, 962349, 0.5693190693855286], [1436972493.613199, 972551, 0.5720453262329102], [1436972973.501155, 982746, 0.5741620063781738], [1436973453.64842, 992945, 0.5705713629722595], [1436973933.689516, 1003147, 0.5657351613044739], [1436974413.577769, 1013350, 0.5685256123542786], [1436974893.542281, 1023545, 0.5698860287666321], [1436975373.638453, 1033759, 0.5801734328269958], [1436975853.524388, 1043955, 0.577880322933197], [1436976333.625792, 1054148, 0.5780594348907471], [1436976813.610661, 1064342, 0.5804633498191833], [1436977293.601581, 1074539, 0.5842364430427551], [1436977773.575627, 1084733, 0.5745837092399597], [1436978253.564972, 1094914, 0.5848771333694458], [1436978733.673144, 1105109, 0.5795935392379761], [1436979213.540585, 1115293, 0.583346426486969], [1436979693.699591, 1125483, 0.5840965509414673], [1436980173.613012, 1135670, 0.5807850360870361], [1436980653.575769, 1145862, 0.5843925476074219], [1436981133.719264, 1156045, 0.5828814506530762], [1436981613.563551, 1166236, 0.5873864889144897], [1436982093.553233, 1176436, 0.5896572470664978], [1436982573.577846, 1186636, 0.5887367725372314], [1436983053.605749, 1196837, 0.5841871500015259], [1436983533.684994, 1207025, 0.5867579579353333], [1436984013.561492, 1217233, 0.5940297842025757], [1436984493.629873, 1227437, 0.5925037860870361], [1436984973.606714, 1237643, 0.5981529951095581], [1436985453.690084, 1247835, 0.5954598188400269], [1436985933.711388, 1257951, 0.5903756022453308], [1436986413.598807, 1268125, 0.5837404131889343], [1436986893.631797, 1278290, 0.583182156085968], [1436987373.596962, 1288473, 0.5860618352890015], [1436987853.555549, 1298650, 0.5829544067382812], [1436988333.722032, 1308841, 0.5798720121383667], [1436988813.55697, 1319018, 0.589148998260498], [1436989293.756905, 1329221, 0.5905702710151672], [1436989773.665141, 1339417, 0.5900465250015259], [1436990253.768302, 1349610, 0.5893078446388245], [1436990733.708919, 1359759, 0.589722752571106], [1436991213.663033, 1369914, 0.5907371640205383], [1436991693.730925, 1380074, 0.5939858555793762], [1436992173.751791, 1390224, 0.5906378626823425], [1436992653.758682, 1400383, 0.5876493453979492], [1436993133.835604, 1410542, 0.5912420153617859], [1436993613.674655, 1420684, 0.5887293219566345], [1436994093.747454, 1430832, 0.589107096195221], [1436994573.768973, 1440986, 0.5928497910499573], [1436995053.666661, 1451174, 0.5916265845298767], [1436995533.83439, 1461345, 0.5911784768104553], [1436996013.556996, 1471495, 0.5890726447105408], [1436996493.635477, 1481663, 0.5914839506149292], [1436996973.668684, 1491822, 0.5915400385856628], [1436997453.59326, 1501979, 0.591564416885376], [1436997933.774019, 1512139, 0.5926578640937805], [1436998413.575162, 1522290, 0.5942149758338928], [1436998893.640468, 1532431, 0.5931802988052368], [1436999373.551661, 1542579, 0.587592601776123], [1436999853.57906, 1552734, 0.5877953171730042], [1437000333.680409, 1562888, 0.590681791305542], [1437000813.602383, 1573037, 0.5924896001815796], [1437001293.610337, 1583190, 0.5913501381874084], [1437001773.618199, 1593341, 0.5952408909797668], [1437002253.572966, 1603497, 0.5953922271728516], [1437002733.67994, 1613657, 0.6002237200737], [1437003213.583266, 1623809, 0.6042569875717163], [1437003693.639943, 1633966, 0.6017740368843079], [1437004173.568287, 1644113, 0.6037994623184204], [1437004653.610772, 1654268, 0.6037947535514832], [1437005133.663045, 1664424, 0.6028310060501099], [1437005613.580984, 1674567, 0.603211522102356], [1437006093.601019, 1684715, 0.6052727699279785], [1437006573.625314, 1694857, 0.6032628417015076], [1437007053.584514, 1704999, 0.5978461503982544], [1437007533.719303, 1715150, 0.602828323841095], [1437008013.604962, 1725282, 0.6063790917396545], [1437008493.655091, 1735432, 0.6047347784042358], [1437008973.640165, 1745584, 0.6031648516654968], [1437009453.715067, 1755742, 0.6067507863044739], [1437009933.765712, 1765896, 0.6062817573547363], [1437010413.632128, 1776052, 0.609245240688324], [1437010893.66766, 1786195, 0.6066284775733948], [1437011373.636164, 1796346, 0.6102170944213867], [1437011853.631224, 1806481, 0.609173595905304], [1437012333.706205, 1816617, 0.6035751104354858], [1437012813.61987, 1826754, 0.604059636592865], [1437013293.479904, 1836883, 0.6039224863052368], [1437013773.604574, 1847029, 0.5974730849266052], [1437014253.618884, 1857175, 0.6040806174278259], [1437014733.756419, 1867312, 0.6017186045646667], [1437015213.638607, 1877459, 0.5987159609794617], [1437015693.625763, 1887608, 0.6047909259796143], [1437016173.63194, 1897759, 0.6033824682235718], [1437016653.609074, 1907909, 0.6038352847099304], [1437017133.717601, 1918074, 0.6083348989486694], [1437017613.716011, 1928220, 0.6044996380805969], [1437018093.626005, 1938377, 0.6009799242019653], [1437018573.626522, 1948523, 0.60047847032547], [1437019053.648174, 1958678, 0.6019382476806641], [1437019533.803011, 1968831, 0.6007305383682251], [1437020013.667751, 1978978, 0.6025127172470093], [1437020493.659028, 1989133, 0.6051828861236572], [1437020973.657346, 1999287, 0.6085876822471619], [1437021453.650634, 2009437, 0.6065122485160828], [1437021933.848661, 2019588, 0.6084572076797485], [1437022413.674963, 2029736, 0.6065473556518555], [1437022893.69086, 2039894, 0.6075063347816467], [1437023373.68883, 2050054, 0.6095973253250122], [1437023853.686116, 2060205, 0.6047213077545166], [1437024333.763876, 2070362, 0.6034210324287415], [1437024813.707845, 2080507, 0.6008927822113037], [1437025293.483294, 2090645, 0.604469895362854], [1437025773.695712, 2100793, 0.6068717837333679], [1437026253.672994, 2110943, 0.6099737882614136], [1437026733.780775, 2121094, 0.6105009317398071], [1437027213.617849, 2131235, 0.611957311630249], [1437027693.694451, 2141382, 0.6141949892044067], [1437028173.68596, 2151537, 0.6135279536247253], [1437028653.584833, 2161685, 0.6111017465591431], [1437029133.792483, 2171839, 0.6135671138763428], [1437029613.661672, 2181977, 0.6112024188041687], [1437030093.641009, 2192118, 0.6097264289855957], [1437030573.656274, 2202268, 0.6097284555435181], [1437031053.643631, 2212416, 0.6121350526809692], [1437031533.777478, 2222583, 0.6147991418838501], [1437032013.704008, 2232736, 0.6118316054344177], [1437032493.638393, 2242882, 0.6191433072090149], [1437032973.684986, 2253041, 0.6188027262687683], [1437033453.699562, 2263183, 0.6163974404335022], [1437033933.918074, 2273320, 0.6144159436225891], [1437034413.596351, 2283443, 0.6123769879341125], [1437034893.640496, 2293579, 0.6139131188392639], [1437035373.637761, 2303701, 0.6150627136230469], [1437035853.669947, 2313823, 0.6149951219558716], [1437036333.78905, 2323961, 0.6155945658683777], [1437036813.699727, 2334089, 0.613308310508728], [1437037293.662592, 2344235, 0.6153736114501953], [1437037773.66716, 2354364, 0.6160987615585327], [1437038253.603687, 2364507, 0.611574113368988], [1437038733.78864, 2374644, 0.6145234107971191], [1437039213.641799, 2384782, 0.6117951273918152], [1437039693.687078, 2394923, 0.6129845380783081], [1437040173.635717, 2405058, 0.6095831394195557], [1437040653.673331, 2415194, 0.6110679507255554], [1437041133.764768, 2425322, 0.6099690198898315], [1437041613.629279, 2435449, 0.6105908155441284], [1437042093.703985, 2445575, 0.6124749779701233], [1437042573.496029, 2455712, 0.6118302345275879], [1437043053.686022, 2465844, 0.6094756722450256], [1437043533.731929, 2475974, 0.6094986796379089], [1437044013.636245, 2486095, 0.6114639639854431], [1437044493.69923, 2496238, 0.6101082563400269], [1437044973.652155, 2506373, 0.6105718612670898], [1437045453.691467, 2516497, 0.6115666627883911], [1437045933.935804, 2526637, 0.6128115653991699], [1437046413.635583, 2536770, 0.6122986078262329], [1437046893.626337, 2546896, 0.6142017245292664], [1437047373.67437, 2557029, 0.6111341714859009], [1437047853.652939, 2567169, 0.611350417137146], [1437048333.778436, 2577306, 0.6126709580421448], [1437048813.654248, 2587433, 0.6111524105072021], [1437049293.610609, 2597552, 0.6135894060134888], [1437049773.646573, 2607690, 0.6136029362678528], [1437050253.667925, 2617808, 0.6141685843467712], [1437050733.735291, 2627933, 0.6170881390571594], [1437051213.620222, 2638053, 0.6189730167388916], [1437051693.601978, 2648171, 0.6157540678977966], [1437052173.634985, 2658299, 0.6178646683692932], [1437052653.687176, 2668425, 0.6164441108703613], [1437053133.762819, 2678556, 0.6175132393836975], [1437053613.643698, 2688671, 0.6158696413040161], [1437054093.673047, 2698804, 0.6162974238395691], [1437054573.667371, 2708956, 0.6160892844200134], [1437055053.650441, 2719087, 0.6176281571388245], [1437055533.778469, 2729219, 0.6165231466293335], [1437056013.694082, 2739343, 0.6171510219573975], [1437056493.674871, 2749458, 0.6124134659767151], [1437056973.700234, 2759575, 0.6120688319206238], [1437057453.666129, 2769697, 0.6126770377159119], [1437057933.848506, 2779821, 0.6126595139503479], [1437058413.643799, 2789941, 0.616513729095459], [1437058893.715386, 2800076, 0.6130264401435852], [1437059373.62596, 2810207, 0.6114044785499573], [1437059853.650848, 2820334, 0.6077002882957458], [1437060333.792248, 2830465, 0.6086235046386719], [1437060813.682955, 2840600, 0.6084680557250977], [1437061293.681795, 2850745, 0.6094310879707336], [1437061773.691182, 2860880, 0.6066345572471619], [1437062253.662987, 2871013, 0.6094250082969666], [1437062733.760419, 2881153, 0.609106719493866], [1437063213.651969, 2891278, 0.6080747246742249], [1437063693.723523, 2901406, 0.6081057786941528], [1437064173.68663, 2911533, 0.6066460609436035], [1437064653.547643, 2921667, 0.6057829856872559], [1437065133.62645, 2931813, 0.6092885136604309], [1437065613.566569, 2941947, 0.6089289784431458], [1437066093.537804, 2952102, 0.6070758700370789], [1437066573.529332, 2962243, 0.6096142530441284], [1437067053.520098, 2972400, 0.609714925289154], [1437067533.605733, 2982561, 0.6116167306900024], [1437068013.535467, 2992698, 0.6119107007980347], [1437068493.559976, 3002839, 0.6119140386581421], [1437068973.558743, 3012983, 0.6115538477897644], [1437069453.562661, 3023116, 0.6126777529716492], [1437069933.627071, 3033256, 0.6146017909049988], [1437070413.574131, 3043386, 0.6119789481163025], [1437070893.658803, 3053528, 0.6139205694198608], [1437071373.638711, 3063659, 0.612362802028656], [1437071853.621384, 3073794, 0.6109192371368408], [1437072333.665269, 3083926, 0.6141091585159302], [1437072813.584388, 3094040, 0.6132751703262329], [1437073293.569178, 3104172, 0.6132386922836304]]
\ No newline at end of file diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/runs.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/runs.json new file mode 100644 index 0000000000..90fb0cbb09 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/runs.json @@ -0,0 +1,22 @@ +{ + "alpha": { + "scalars": [ + "d1", + "d2", + "d3", + "d4" + ], + "histograms": [], + "images": [] + }, + "beta": { + "scalars": [ + "d1", + "d2", + "d3", + "d4" + ], + "histograms": [], + "images": [] + } +} diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/index.html b/tensorflow/tensorboard/components/tf-event-dashboard/demo/index.html new file mode 100644 index 0000000000..34ad6a7263 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/index.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../tf-event-dashboard.html"> + <link rel="stylesheet" type="text/css" href="../../../lib/css/global.css"> + <title>Event Dashboard Demo Demo</title> + </head> + <body> + <script> + TF.Urls.runsUrl = function() {return "data/runs.json"}; + TF.Urls.scalarsUrl = function(tag, run) {return "data/" + run + "/" + tag + ".json";}; + </script> + + <tf-event-dashboard id="demo"></tf-event-dashboard> + </body> +</html> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/dragZoomInteraction.ts b/tensorflow/tensorboard/components/tf-event-dashboard/dragZoomInteraction.ts new file mode 100644 index 0000000000..bf9f7b70e2 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/dragZoomInteraction.ts @@ -0,0 +1,150 @@ +module Plottable { +export class DragZoomLayer extends Components.SelectionBoxLayer { + private _dragInteraction: Interactions.Drag; + private _doubleClickInteraction: Interactions.DoubleClick; + private xDomainToRestore: any[]; + private yDomainToRestore: any[]; + private isZoomed = false; + private easeFn: (t: number) => number = d3.ease("cubic-in-out"); + private _animationTime = 750; + + /* Constructs a SelectionBoxLayer with an attached DragInteraction and ClickInteraction. + * On drag, it triggers an animated zoom into the box that was dragged. + * On double click, it zooms back out to the original view, before any zooming. + * The zoom animation uses an easing function (default d3.ease("cubic-in-out")) and is customizable. + * Usage: Construct the selection box layer and attach x and y scales, and then add the layer + * over the plot you are zooming on using a Component Group. + * TODO(danmane) - merge this into Plottable + */ + constructor(xScale: QuantitativeScale<number | { valueOf(): number }>, + yScale: QuantitativeScale<number | { valueOf(): number }>) { + super(); + this.xScale(xScale); + this.yScale(yScale); + this._dragInteraction = new Interactions.Drag(); + this._dragInteraction.attachTo(this); + this._doubleClickInteraction = new Interactions.DoubleClick(); + this._doubleClickInteraction.attachTo(this); + this.setupCallbacks(); + } + + private setupCallbacks() { + let dragging = false; + this._dragInteraction.onDragStart((startPoint: Point) => { + this.bounds({ + topLeft: startPoint, + bottomRight: startPoint, + }); + }); + this._dragInteraction.onDrag((startPoint, endPoint) => { + this.bounds({topLeft: startPoint, bottomRight: endPoint}); + this.boxVisible(true); + dragging = true; + }); + this._dragInteraction.onDragEnd((startPoint, endPoint) => { + this.boxVisible(false); + this.bounds({topLeft: startPoint, bottomRight: endPoint}); + if (dragging) { + this.zoom(); + } + dragging = false; + }); + + this._doubleClickInteraction.onDoubleClick(this.unzoom.bind(this)); + } + + /* Set the time (in ms) over which the zoom will interpolate. + * 0 implies no interpolation. (ie zoom is instant) + */ + public animationTime(): number; + public animationTime(animationTime: number): DragZoomLayer; + public animationTime(animationTime?: number): any { + if (animationTime == null) { + return this._animationTime; + } + if (animationTime < 0) { + throw new Error("animationTime cannot be negative"); + } + this._animationTime = animationTime; + return this; + } + + /* Set the easing function, which determines how the zoom interpolates over time. */ + public ease(fn: (t: number) => number): DragZoomLayer { + if (typeof(fn) !== "function") { + throw new Error("ease function must be a function"); + } + if (fn(0) !== 0 || fn(1) !== 1) { + Utils.Window.warn("Easing function does not maintain invariant f(0)==0 && f(1)==1. Bad behavior may result."); + } + this.easeFn = fn; + return this; + } + + // Zoom into extent of the selection box bounds + private zoom() { + let x0: number = this.xExtent()[0].valueOf(); + let x1: number = this.xExtent()[1].valueOf(); + let y0: number = this.yExtent()[1].valueOf(); + let y1: number = this.yExtent()[0].valueOf(); + + if (x0 === x1 || y0 === y1) { + return; + } + + if (!this.isZoomed) { + this.isZoomed = true; + this.xDomainToRestore = this.xScale().domain(); + this.yDomainToRestore = this.yScale().domain(); + } + this.interpolateZoom(x0, x1, y0, y1); + } + + // Restore the scales to their state before any zoom + private unzoom() { + if (!this.isZoomed) { + return; + } + this.isZoomed = false; + this.interpolateZoom(this.xDomainToRestore[0], this.xDomainToRestore[1], + this.yDomainToRestore[0], this.yDomainToRestore[1]); + } + + // If we are zooming, disable interactions, to avoid contention + private isZooming(isZooming: boolean) { + this._dragInteraction.enabled(!isZooming); + this._doubleClickInteraction.enabled(!isZooming); + } + + private interpolateZoom(x0f: number, x1f: number, y0f: number, y1f: number) { + let x0s: number = this.xScale().domain()[0].valueOf(); + let x1s: number = this.xScale().domain()[1].valueOf(); + let y0s: number = this.yScale().domain()[0].valueOf(); + let y1s: number = this.yScale().domain()[1].valueOf(); + + // Copy a ref to the ease fn, so that changing ease wont affect zooms in progress + let ease = this.easeFn; + let interpolator = (a: number, b: number, p: number) => d3.interpolateNumber(a, b)(ease(p)); + + this.isZooming(true); + let start = Date.now(); + let draw = () => { + let now = Date.now(); + let passed = now - start; + let p = this._animationTime === 0 ? 1 : Math.min(1, passed / this._animationTime); + let x0 = interpolator(x0s, x0f, p); + let x1 = interpolator(x1s, x1f, p); + let y0 = interpolator(y0s, y0f, p); + let y1 = interpolator(y1s, y1f, p); + this.xScale().domain([x0, x1]); + this.yScale().domain([y0, y1]); + if (p < 1) { + Utils.DOM.requestAnimationFramePolyfill(draw); + } else { + this.isZooming(false); + } + }; + draw(); + } +} +} diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.html new file mode 100644 index 0000000000..39ca9704c3 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.html @@ -0,0 +1,101 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../imports/plottable.html"> +<link rel="import" href="../imports/lodash.html"> + +<!-- +tf-chart (TFChart) creates an element that draws a line chart for dispalying event values. +It has the following settable properties: + tag: (required, string) - the name of the tag to load for this chart + selectedRuns: (required, string[]) - the runs the chart should display + xType: (required, string) - the way to display x values - allows "step" or "wall_time" + dataCoordinator: (required, TF.DataCoordinator) - the data coordinator for talking to backend + colorScale: (required, Plottable.Scales.Color) - maps from runs to colors + tooltipUpdater: (required, function) - allows the chart to modify tooltips + +It exposes the following methods: + redraw() - cause the chart to re-render (useful if e.g. container size changed) + +The data is expected to be an array of [wall_time, step, value] arrays. +The wall_time is serialized as seconds since epoch. +--> +<dom-module id="tf-chart"> + <template> + <svg id="chartsvg"></svg> + <style> + :host { + -webkit-user-select: none; + -moz-user-select: none; + display: flex; + flex-direction: column; + flex-grow: 1; + flex-shrink: 1; + } + svg { + -webkit-user-select: none; + -moz-user-select: none; + flex-grow: 1; + flex-shrink: 1; + } + .plottable .crosshairs line.guide-line { + stroke: #777; + } + </style> + </template> + <script src="dragZoomInteraction.js"></script> + <script src="tf-chart.js"></script> + <script> + Polymer({ + is: "tf-chart", + properties: { + type: String, // "scalar" or "compressedHistogram" + _chart: Object, + colorScale: Object, + tag: String, + selectedRuns: Array, + xType: String, + dataCoordinator: Object, + tooltipUpdater: Function, + _initialized: Boolean, + }, + observers: [ + "_makeChart(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized)", + "_changeRuns(_chart, selectedRuns.*)" + ], + _changeRuns: function(chart, change) { + this._chart.changeRuns(this.selectedRuns); + this.redraw(); + }, + redraw: function() { + this._chart.redraw(); + }, + _constructor: function(type) { + if (type === "scalar") { + return TF.LineChart; + } else if (type === "compressedHistogram") { + return TF.HistogramChart; + } else { + throw new Error("Unrecognized chart type"); + } + }, + _makeChart: function(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized) { + if (!_initialized) { + return; + } + if (this._chart) this._chart.destroy(); + var cns = this._constructor(type); + var chart = new cns(tag, dataCoordinator, tooltipUpdater, xType, colorScale); + var svg = d3.select(this.$.chartsvg); + this.async(function() { + chart.renderTo(svg); + this._chart = chart; + }, 350); + }, + attached: function() { + this._initialized = true; + }, + detached: function() { + this._initialized = false; + } + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.ts b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.ts new file mode 100644 index 0000000000..0b0103d697 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.ts @@ -0,0 +1,327 @@ +/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> + +module TF { + type TFDatum = [number, number, number]; + type tooltipMap = {[run: string]: string}; + type TooltipUpdater = (tooltipMap, xValue, closestRun) => void; + + let Y_TOOLTIP_FORMATTER_PRECISION = 4; + let STEP_AXIS_FORMATTER_PRECISION = 4; + let Y_AXIS_FORMATTER_PRECISION = 3; + + export class BaseChart { + protected dataCoordinator: TF.DataCoordinator; + protected tag: string; + protected tooltipUpdater: TooltipUpdater; + + protected xAccessor: Plottable.Accessor<number | Date>; + protected xScale: Plottable.QuantitativeScale<number | Date>; + protected yScale: Plottable.QuantitativeScale<number>; + protected gridlines: Plottable.Components.Gridlines; + protected center: Plottable.Components.Group; + protected xAxis: Plottable.Axes.Numeric | Plottable.Axes.Time; + protected yAxis: Plottable.Axes.Numeric; + protected xLabel: Plottable.Components.AxisLabel; + protected yLabel: Plottable.Components.AxisLabel; + protected outer: Plottable.Components.Table; + protected colorScale: Plottable.Scales.Color; + protected xTooltipFormatter: (d: number) => string; + constructor( + tag: string, + dataCoordinator: TF.DataCoordinator, + tooltipUpdater: TooltipUpdater, + xType: string, + colorScale: Plottable.Scales.Color + ) { + this.dataCoordinator = dataCoordinator; + this.tag = tag; + this.colorScale = colorScale; + this.tooltipUpdater = tooltipUpdater; + this.buildChart(xType); + } + + public changeRuns(runs: string[]) { + throw new Error("Abstract method not implemented"); + } + + protected addCrosshairs(plot: Plottable.XYPlot<number | Date, number>, yAccessor): Plottable.Components.Group { + var pi = new Plottable.Interactions.Pointer(); + pi.attachTo(plot); + let xGuideLine = new Plottable.Components.GuideLineLayer<void>("vertical"); + let yGuideLine = new Plottable.Components.GuideLineLayer<void>("horizontal"); + xGuideLine.addClass("crosshairs"); + yGuideLine.addClass("crosshairs"); + var group = new Plottable.Components.Group([plot, xGuideLine, yGuideLine]); + let yfmt = multiscaleFormatter(Y_TOOLTIP_FORMATTER_PRECISION); + + pi.onPointerMove((p: Plottable.Point) => { + let run2val: {[run: string]: string} = {}; + let x: number = this.xScale.invert(p.x).valueOf(); + let yMin: number = this.yScale.domain()[0]; + let yMax: number = this.yScale.domain()[1]; + let closestRun: string = null; + let minYDistToRun: number = Infinity; + let yValueForCrosshairs: number = p.y; + plot.datasets().forEach((dataset) => { + let run: string = dataset.metadata().run; + let data: TFDatum[] = dataset.data(); + let xs: number[] = data.map((d, i) => this.xAccessor(d, i, dataset).valueOf()); + let idx: number = _.sortedIndex(xs, x); + if (idx === 0 || idx === data.length) { + // Only find a point when the cursor is inside the range of the data + // if the cursor is to the left or right of all the data, dont attach. + return; + } + let previous = data[idx - 1]; + let next = data[idx]; + let x0: number = this.xAccessor(previous, idx - 1, dataset).valueOf(); + let x1: number = this.xAccessor(next, idx, dataset).valueOf(); + let y0: number = yAccessor(previous, idx - 1, dataset).valueOf(); + let y1: number = yAccessor(next, idx, dataset).valueOf(); + let slope: number = (y1 - y0) / (x1 - x0); + let y: number = y0 + slope * (x - x0); + + if (y < yMin || y > yMax || y !== y) { + // don't find data that is off the top or bottom of the plot. + // also don't find data if it is NaN + return; + } + let dist = Math.abs(this.yScale.scale(y) - p.y); + if (dist < minYDistToRun) { + minYDistToRun = dist; + closestRun = run; + yValueForCrosshairs = this.yScale.scale(y); + } + // Note this tooltip will display linearly interpolated values + // e.g. will display a y=0 value halfway between [y=-1, y=1], even + // though there is not actually any 0 datapoint. This could be misleading + run2val[run] = yfmt(y); + }); + xGuideLine.pixelPosition(p.x); + yGuideLine.pixelPosition(yValueForCrosshairs); + this.tooltipUpdater(run2val, this.xTooltipFormatter(x), closestRun); + + }); + + pi.onPointerExit(() => { + this.tooltipUpdater(null, null, null); + xGuideLine.pixelPosition(-1); + yGuideLine.pixelPosition(-1); + }); + + return group; + + } + + protected buildChart(xType: string) { + if (this.outer) { + this.outer.destroy(); + } + var xComponents = getXComponents(xType); + this.xAccessor = xComponents.accessor; + this.xScale = xComponents.scale; + this.xAxis = xComponents.axis; + this.xAxis.margin(0).tickLabelPadding(3); + this.xTooltipFormatter = xComponents.tooltipFormatter; + this.yScale = new Plottable.Scales.Linear(); + this.yAxis = new Plottable.Axes.Numeric(this.yScale, "left"); + let yFormatter = multiscaleFormatter(Y_AXIS_FORMATTER_PRECISION); + this.yAxis.margin(0).tickLabelPadding(5).formatter(yFormatter); + this.yAxis.usesTextWidthApproximation(true); + + var center = this.buildPlot(this.xAccessor, this.xScale, this.yScale); + + this.gridlines = new Plottable.Components.Gridlines(this.xScale, this.yScale); + + var dzl = new Plottable.DragZoomLayer(this.xScale, this.yScale); + + this.center = new Plottable.Components.Group([center, this.gridlines, dzl]); + this.outer = new Plottable.Components.Table([ + [this.yAxis, this.center], + [null, this.xAxis] + ]); + } + + protected buildPlot(xAccessor, xScale, yScale): Plottable.Component { + throw new Error("Abstract method not implemented."); + } + + public renderTo(target: d3.Selection<any>) { + this.outer.renderTo(target); + } + + public redraw() { + this.outer.redraw(); + } + + protected destroy() { + this.outer.destroy(); + } + } + + export class LineChart extends BaseChart { + private plot: Plottable.Plots.Line<number | Date>; + protected buildPlot(xAccessor, xScale, yScale): Plottable.Component { + var yAccessor = accessorize("2"); + var plot = new Plottable.Plots.Line<number | Date>(); + plot.x(xAccessor, xScale); + plot.y(yAccessor, yScale); + plot.attr("stroke", (d: any, i: number, m: any) => m.run, this.colorScale); + this.plot = plot; + var group = this.addCrosshairs(plot, yAccessor); + return group; + } + + public changeRuns(runs: string[]) { + var datasets = this.dataCoordinator.getDatasets(this.tag, runs); + this.plot.datasets(datasets); + } + + } + + export class HistogramChart extends BaseChart { + private plots: Plottable.XYPlot<number | Date, number>[]; + + public changeRuns(runs: string[]) { + var datasets = this.dataCoordinator.getDatasets(this.tag, runs); + this.plots.forEach((p) => p.datasets(datasets)); + } + + protected buildPlot(xAccessor, xScale, yScale): Plottable.Component { + var percents = [0, 228, 1587, 3085, 5000, 6915, 8413, 9772, 10000]; + var opacities = _.range(percents.length - 1).map((i) => (percents[i + 1] - percents[i]) / 2500); + var accessors = percents.map((p, i) => (datum) => datum[2][i][1]); + var median = 4; + var medianAccessor = accessors[median]; + + var plots = _.range(accessors.length - 1).map((i) => { + var p = new Plottable.Plots.Area<number | Date>(); + p.x(xAccessor, xScale); + + var y0 = i > median ? accessors[i] : accessors[i + 1]; + var y = i > median ? accessors[i + 1] : accessors[i]; + p.y(y, yScale); + p.y0(y0); + p.attr("fill", (d: any, i: number, m: any) => m.run, this.colorScale); + p.attr("stroke", (d: any, i: number, m: any) => m.run, this.colorScale); + p.attr("stroke-weight", (d: any, i: number, m: any) => "0.5px"); + p.attr("stroke-opacity", () => opacities[i]); + p.attr("fill-opacity", () => opacities[i]); + return p; + }); + + var medianPlot = new Plottable.Plots.Line<number | Date>(); + medianPlot.x(xAccessor, xScale); + medianPlot.y(medianAccessor, yScale); + medianPlot.attr("stroke", (d: any, i: number, m: any) => m.run, this.colorScale); + + this.plots = plots; + var group = this.addCrosshairs(medianPlot, medianAccessor); + return new Plottable.Components.Group([new Plottable.Components.Group(plots), group]); + } + } + + /* Create a formatter function that will switch between exponential and + * regular display depending on the scale of the number being formatted, + * and show `digits` significant digits. + */ + function multiscaleFormatter(digits: number): ((v: number) => string) { + return (v: number) => { + var absv = Math.abs(v); + if (absv < 1E-15) { + // Sometimes zero-like values get an annoying representation + absv = 0; + } + var f: (x: number) => string; + if (absv >= 1E4) { + f = d3.format("." + digits + "e"); + } else if (absv > 0 && absv < 0.01) { + f = d3.format("." + digits + "e"); + } else { + f = d3.format("." + digits + "g"); + } + return f(v); + }; + } + + function accessorize(key: string): Plottable.Accessor<number> { + return (d: any, index: number, dataset: Plottable.Dataset) => d[key]; + } + + interface XComponents { + /* tslint:disable */ + scale: Plottable.Scales.Linear | Plottable.Scales.Time, + axis: Plottable.Axes.Numeric | Plottable.Axes.Time, + accessor: Plottable.Accessor<number | Date>, + tooltipFormatter: (d: number) => string; + /* tslint:enable */ + } + + function stepX(): XComponents { + var scale = new Plottable.Scales.Linear(); + var axis = new Plottable.Axes.Numeric(scale, "bottom"); + var formatter = Plottable.Formatters.siSuffix(STEP_AXIS_FORMATTER_PRECISION); + axis.formatter(formatter); + return { + scale: scale, + axis: axis, + accessor: accessorize("1"), + tooltipFormatter: formatter, + }; + } + + function wallX(): XComponents { + var scale = new Plottable.Scales.Time(); + var formatter = Plottable.Formatters.time("%a %b %e, %H:%M:%S"); + return { + scale: scale, + axis: new Plottable.Axes.Time(scale, "bottom"), + accessor: (d: any, index: number, dataset: Plottable.Dataset) => { + return d[0] * 1000; // convert seconds to ms + }, + tooltipFormatter: (d: number) => formatter(new Date(d)), + }; + } + + function relativeX(): XComponents { + var scale = new Plottable.Scales.Linear(); + var formatter = (n: number) => { + var days = Math.floor(n / 24); + n -= (days * 24); + var hours = Math.floor(n); + n -= hours; + n *= 60; + var minutes = Math.floor(n); + n -= minutes; + n *= 60; + var seconds = Math.floor(n); + return days + "d " + hours + "h " + minutes + "m " + seconds + "s"; + }; + return { + scale: scale, + axis: new Plottable.Axes.Numeric(scale, "bottom"), + accessor: (d: any, index: number, dataset: Plottable.Dataset) => { + var data = dataset && dataset.data(); + // I can't imagine how this function would be called when the data is empty + // (after all, it iterates over the data), but lets guard just to be safe. + var first = data.length > 0 ? data[0][0] : 0; + return (d[0] - first) / (60 * 60); // convert seconds to hours + }, + tooltipFormatter: formatter, + }; + } + + function getXComponents(xType: string): XComponents { + switch (xType) { + case "step": + return stepX(); + case "wall_time": + return wallX(); + case "relative": + return relativeX(); + default: + throw new Error("invalid xType: " + xType); + } + } +} diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-color-scale.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-color-scale.html new file mode 100644 index 0000000000..b559cab9cd --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-color-scale.html @@ -0,0 +1,69 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../imports/lodash.html"> +<link rel="import" href="../imports/plottable.html"> + +<!-- +tf-color-scale is a plumbing component that takes in an array of runs, and produces +an upward-bindable outColorScale, which is a color scale mapping from those runs to +a set of colors. + +Right now, the colors are hard-coded and must be manually synchronized with the colors expected in +tf-run-selector. TODO(danmane): we should enshrine the mapping elsewhere. +--> +<dom-module id="tf-color-scale"> + <script> + (function() { + // TODO(danmane) - get Plottable team to make an API point for this + Plottable.Scales.Color._LOOP_LIGHTEN_FACTOR = 0; + var classColorPairs = [ + ["light-blue", "#03A9F4"], + ["red" , "#f44366"], + ["green" , "#4CAF50"], + ["purple" , "#9c27b0"], + ["teal" , "#009688"], + ["pink" , "#e91e63"], + ["orange" , "#ff9800"], + ["brown" , "#795548"], + ["indigo" , "#3f51b5"], + ]; + var classes = _.pluck(classColorPairs, 0); + var colors = _.pluck(classColorPairs, 1); + Polymer({ + is: "tf-color-scale", + properties: { + runs: Array, + outClassScale: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return new d3.scale.ordinal().range(classes); + }, + // TODO(danmane): the class scale will not update if the domain changes. + // this behavior is inconsistent with the ColorScale. + // in practice we don't change runs after initial load so it's not currently an issue + }, + outColorScale: { + type: Object, + notify: true, + readOnly: true, + value: function() { + var scale = new Plottable.Scales.Color().range(colors); + scale.onUpdate(this._notifyColorScaleDomainChange.bind(this)); + return scale; + }, + }, + }, + observers: ["_changeRuns(runs.*)"], + _changeRuns: function(runs) { + this.outClassScale.domain(this.runs); + this.outColorScale.domain(this.runs); + }, + _notifyColorScaleDomainChange: function() { + this.notifyPath("outColorScale.domain_path", this.outColorScale.domain()); + this.outColorScale.domain_path = null; + }, + }); + })(); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-data-coordinator.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-data-coordinator.html new file mode 100644 index 0000000000..454dff4a9e --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-data-coordinator.html @@ -0,0 +1,29 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../imports/plottable.html"> +<link rel="import" href="../imports/lodash.html"> + +<!-- +tf-data-coordinator is a simple plumbing component that takes in a value url generator +(a function that takes a tag and a run and returns a url), and produces an upward-bindable +TF.DataCoordinator for consumption elsewhere. +--> +<dom-module id="tf-data-coordinator"> + <script src="dataCoordinator.js"></script> + <script src="dataset.js"></script> + <script> + Polymer({ + is: "tf-data-coordinator", + properties: { + urlGenerator: Object, + outDataCoordinator: { + type: Object, + computed: "getCoordinator(urlGenerator, runToTag)", + notify: true, + }, + }, + getCoordinator: function(generator, runToTag) { + return new TF.DataCoordinator(generator, runToTag); + } + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-event-dashboard.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-event-dashboard.html new file mode 100644 index 0000000000..534f62072f --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-event-dashboard.html @@ -0,0 +1,208 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="tf-data-coordinator.html"> +<link rel="import" href="tf-tooltip-coordinator.html"> +<link rel="import" href="tf-run-selector.html"> +<link rel="import" href="tf-x-type-selector.html"> +<link rel="import" href="../tf-dashboard-common/tf-run-generator.html"> +<link rel="import" href="tf-color-scale.html"> +<link rel="import" href="../tf-dashboard-common/tf-url-generator.html"> +<link rel="import" href="../tf-dashboard-common/tf-dashboard-layout.html"> +<link rel="import" href="../tf-dashboard-common/tensorboard-color.html"> +<link rel="import" href="../tf-dashboard-common/dashboard-style.html"> +<link rel="import" href="../tf-dashboard-common/tf-downloader.html"> +<link rel="import" href="../tf-categorizer/tf-categorizer.html"> +<link rel="import" href="tf-chart.html"> +<link rel="import" href="../tf-collapsable-pane/tf-collapsable-pane.html"> +<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html"> +<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html"> +<link rel="import" href="../imports/lodash.html"> +<link rel="import" href="../tf-dashboard-common/warning-style.html"> + +<!-- +tf-event-dashboard is a complete frontend that loads runs from a backend, +and creates chart panes that display data for those runs. + +It provides a categorizer, run selector, and x type selector, by which the user +can customize how data is organized and displayed. + +Each chart has a button that can toggle whether it is "selected"; selectedRuns +charts are larger. + +Organizationally, the #plumbing div contains components that have no concrete +manifestation and just effect data bindings or data loading. The #sidebar contains +shared controls like the tf-categorizer, tf-run-selector, and tf-x-type-selector. +The #center div contains tf-charts embedded inside tf-collapsable-panes. +--> +<dom-module id="tf-event-dashboard"> + <template> + <div id="plumbing"> + <tf-url-generator + out-runs-url="{{runsUrl}}" + out-scalars-url-generator="{{scalarsUrlGen}}" + id="urlGenerator" + ></tf-url-generator> + + <tf-data-coordinator + id="dataCoordinator" + url-generator="[[scalarsUrlGen]]" + run-to-tag="[[runToScalars]]" + color-scale="[[colorScale]]" + out-data-coordinator="{{dataCoordinator}}" + /></tf-data-coordinator> + + <tf-run-generator + id="runGenerator" + url="[[runsUrl]]" + out-run-to-scalars="{{runToScalars}}" + /></tf-run-generator> + + <tf-color-scale + id="colorScale" + runs="[[_runs]]" + out-color-scale="{{colorScale}}" + out-class-scale="{{classScale}}" + ></tf-color-scale> + + <tf-tooltip-coordinator + id="tooltipCoordinator" + out-tooltip-updater="{{tooltipUpdater}}" + out-tooltip-map="{{tooltipMap}}" + out-x-value="{{tooltipXValue}}" + out-closest-run="{{closestRun}}" + ></tf-tooltip-coordinator> + + </div> + + <tf-dashboard-layout> + <div class="sidebar"> + <tf-categorizer + id="categorizer" + tags="[[_visibleTags]]" + categories="{{categories}}" + ></tf-categorizer> + <span id="download-option"> + Show Data Download Links: + <paper-toggle-button checked="{{_show_download_links}}"></paper-toggle-button> + </span> + + <tf-x-type-selector + id="xTypeSelector" + out-x-type="{{xType}}" + ></tf-x-type-selector> + + <tf-run-selector + id="runSelector" + runs="[[_runs]]" + class-scale="[[classScale]]" + out-selected="{{selectedRuns}}" + tooltips="[[tooltipMap]]" + closest-run="[[closestRun]]" + x-value="[[tooltipXValue]]" + x-type="[[xType]]" + ></tf-run-selector> + + </div> + <div class="center"> + <template is="dom-if" if="[[!categories.length]]"> + <div class="warning"> + <p> + No scalar summary tags were found. + </p> + <p> + Maybe data hasn't loaded yet, or maybe you need + to add some <code>tf.scalar_summary</code> ops to your graph, and + serialize them using the <code>tf.training.summary_io.SummaryWriter</code>. + </p> + </div> + </template> + <template is="dom-repeat" items="[[categories]]"> + <tf-collapsable-pane name="[[item.name]]" count="[[item.tags.length]]"> + <div class="layout horizontal wrap"> + <template is="dom-repeat" items="[[item.tags]]" as="tag"> + <div class="card"> + <span class="card-title">[[tag]]</span> + <div class="card-content"> + <tf-chart + tag="[[tag]]" + type="scalar" + id="chart" + selected-runs="[[selectedRuns]]" + x-type="[[xType]]" + data-coordinator="[[dataCoordinator]]" + color-scale="[[colorScale]]" + on-keyup="toggleSelected" + tabindex="2" + tooltip-updater="[[tooltipUpdater]]" + ></tf-chart> + <paper-icon-button + class="expand-button" + shift$="[[_show_download_links]]" + icon="fullscreen" + on-tap="toggleSelected" + ></paper-icon-button> + </div> + <template is="dom-if" if="[[_show_download_links]]"> + <div class="card-bottom-row"> + <tf-downloader + selected-runs="[[selectedRuns]]" + tag="[[tag]]" + url-fn="[[scalarsUrlGen]]" + run-to-tag="[[runToScalars]]" + > + </tf-downloader> + </div> + </template> + </div> + </template> + </div> + </tf-collapsable-pane> + </template> + </div> + </tf-dashboard-layout> + + <style include="dashboard-style"></style> + <style include="warning-style"></style> + + </template> + + <script> + Polymer({ + is: "tf-event-dashboard", + properties: { + _runs: { + type: Array, + computed: "_getRuns(runToScalars)", + }, + _visibleTags: { + type: Array, + computed: "_getVisibleTags(selectedRuns.*, runToScalars.*)" + }, + _show_download_links: Boolean, + }, + observers: ['redraw(_show_download_links)'], + redraw: function(_show_download_links) { + var els = this.getElementsByTagName("tf-chart"); + for (var i=0; i<els.length; i++) { + els[i].redraw(); + } + }, + _getRuns: function(runToScalars) { + return _.keys(runToScalars); + }, + _getVisibleTags: function(selectedRunsChange, runsToScalarsChange) { + var keys = selectedRunsChange.base; + var dict = runsToScalarsChange.base; + return _.union.apply(null, keys.map(function(k) {return dict[k]})); + }, + toggleSelected: function(e) { + var currentTarget = Polymer.dom(e.currentTarget); + var parentDiv = currentTarget.parentNode.parentNode; + parentDiv.classList.toggle("selected"); + var chart = currentTarget.previousElementSibling; + if (chart) { + chart.redraw(); + } + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-run-selector.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-run-selector.html new file mode 100644 index 0000000000..92cecb2e5a --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-run-selector.html @@ -0,0 +1,104 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-checkbox/paper-checkbox.html"> +<link rel="import" href="../imports/lodash.html"> +<link rel="import" href="../tf-dashboard-common/scrollbar-style.html"> +<link rel="import" href="../tf-multi-checkbox/tf-multi-checkbox.html"> + +<!-- +tf-run-selector creates a set of checkboxes to display which runs are selected. +It also displays tooltips. + +Properties in: +- runs: Array of strings representing the runs that may be selected +- tooltips: An object that maps from a run to the associated tooltip string. +When tooltips are available, runs that have no associated tooltip will be +hidden. When tooltips are available, the runs will be sorted by their tooltip. +- closestRun: The name of the run that is closest to the cursor (present when +tooltips are active). It will be highlighted +- classScale: An object (generated by tf-dashboard-common/tf-color-scale) that +maps from a run name to a class name, which will be used to color the run. +- xValue: The string that represents the x-value associated with the tooltips. +- xType: The string that describes what kind of data is displayed on the x axis. + +Properties out: +- outSelected: The array of run names that are currently checked by the user. + +--> +<dom-module id="tf-run-selector"> + <template> + <div id="top-text"> + <template is="dom-if" if="[[xValue]]"> + <div class="x-tooltip tooltip-container"> + <div class="x-tooltip-label">[[xType]]</div> + <div class="x-tooltip-value">[[xValue]]</div> + </div> + </template> + <template is="dom-if" if="[[!xValue]]"> + <div id="tooltip-help" class="tooltip-container"> + Selected Runs: + </div> + </template> + </div> + <tf-multi-checkbox + names="[[runs]]" + tooltips="[[tooltips]]" + highlights="[[_arrayify(closestRun)]]" + out-selected="{{outSelected}}" + class-scale="[[classScale]]" + hide-missing-tooltips + ></tf-multi-checkbox> + <style> + :host { + display: flex; + flex-direction: column; + padding-bottom: 10px; + box-sizing: border-box; + } + #top-text { + width: 100%; + flex-grow: 0; + flex-shrink: 0; + padding-left: 35px; + padding-right: 16px; + padding-bottom: 6px; + box-sizing: border-box; + color: var(--paper-grey-800); + } + tf-multi-checkbox { + display: flex; + flex-grow: 1; + flex-shrink: 1; + height: 0px; /* hackhack So the flex-grow takes over and gives it space */ + } + .x-tooltip { + display: flex; + flex-direction: row; + } + .x-tooltip-label { + flex-grow: 1; + align-self: flex-start; + } + .x-tooltip-value { + align-self: flex-end; + } + </style> + </template> + <script> + Polymer({ + is: "tf-run-selector", + properties: { + outSelected: {type: Array, notify: true}, + // runs: an array of strings, representing the run names that may be chosen + runs: Array, + tooltips: {type: Object, value: null}, // {[run: string]: string} + xValue: {type: String, value: null}, // the string representing run's x val + xType: String, // string: relative, stpe, wall_time + classScale: Object, // map from run name to color class (css) + closestRun: {type: String, value: null}, // which run has a value closest to mouse coordinate + }, + _arrayify: function(item) { + return [item]; + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-tooltip-coordinator.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-tooltip-coordinator.html new file mode 100644 index 0000000000..23b0cba87a --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-tooltip-coordinator.html @@ -0,0 +1,48 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> + +<!-- tf-tooltip-coordinator is a plumbing component that provides a TooltipUpdater, +which is a function that allows modification of the values within the tooltip-coordinator +from javascript logic elsewhere. It then propagates the values to other Polymer components. + +Thus, the tooltip-coordinator allows many JS pieces of the application to modify a single +piece of shared state. + --> +<dom-module id="tf-tooltip-coordinator"> + <script> + Polymer({ + is: "tf-tooltip-coordinator", + properties: { + outTooltipUpdater: { + type: Function, + value: function() { + return (function(tooltipMap, xValue, closestRun) { + this._setOutTooltipMap(tooltipMap); + this._setOutXValue(xValue); + this._setOutClosestRun(closestRun); + }).bind(this); + }, + notify: true, + readOnly: true, + }, + outTooltipMap: { + // a {runName: tooltipValue} map, where runName and tooltipValue are strings. + type: Object, + notify: true, + readOnly: true, + }, + outXValue: { + // a string representation of the closest x value for the tooltips + type: Number, + notify: true, + readOnly: true, + }, + outClosestRun: { + // the name of the run that is closest to the user cursor (if any) + type: String, + notify: true, + readOnly: true, + }, + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-x-type-selector.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-x-type-selector.html new file mode 100644 index 0000000000..078e456a0d --- /dev/null +++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-x-type-selector.html @@ -0,0 +1,75 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-button/paper-button.html"> +<link rel="import" href="../tf-dashboard-common/tensorboard-color.html"> + +<!-- +tf-x-type-selector is a simple component that creates buttons labeled "step" and "wall", + and provides (as upward bindable) an outXType property that is either "step" or "wall_time". +--> +<dom-module id="tf-x-type-selector"> + <template> + <div id="buttons"> + <p>X Type: </p> + <paper-button + class="x-button selected" + id="step" + on-tap="_select" + raised + > + step + </paper-button> + <paper-button + class="x-button" + id="relative" + on-tap="_select" + > + relative + </paper-button> + <paper-button + class="x-button" + id="wall_time" + on-tap="_select" + > + wall + </paper-button> + </div> + <style> + .x-button { + width: 29%; + font-size: 14px; + background-color: var(--paper-grey-500); + margin-top: 5px; + color: white; + } + + .x-button.selected { + font-weight: bold; + background-color: var(--tb-orange-strong) !important; + } + + #buttons p { + text-align: center; + font-size: 12px; + margin: 0; + } + </style> + </template> + <script> + Polymer({ + is: "tf-x-type-selector", + properties: { + outXType: {type: String, notify: true, readOnly: true, value: "step"}, + }, + _select: function(e) { + var _this = this; + ["step", "wall_time", "relative"].forEach(function(id) { + _this.$[id].raised = false; + _this.$[id].classList.remove("selected"); + }); + e.currentTarget.raised = true; + this._setOutXType(e.currentTarget.id); + e.currentTarget.classList.add("selected"); + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph-board/tf-graph-board.html b/tensorflow/tensorboard/components/tf-graph-board/tf-graph-board.html new file mode 100644 index 0000000000..c053d6f7a7 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-board/tf-graph-board.html @@ -0,0 +1,152 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../tf-graph/tf-graph.html"> +<link rel="import" href="../tf-graph-info/tf-graph-info.html"> +<link rel="import" href="../../bower_components/paper-progress/paper-progress.html"> +<!-- Element for putting tf-graph and tf-graph-info side by side. + +Example + +<tf-graph-board graph=[[graph]]></tf-graph-board> + +--> + +<dom-module id="tf-graph-board"> +<template> +<style> +::host { + display: block; +} + +/deep/ .close { + position: absolute; + cursor: pointer; + left: 15px; + bottom: 15px; +} + +.container { + width: 100%; + height: 100%; + opacity: 1; +} + +.container.loading { + cursor: progress; + opacity: 0.1; +} + +.container.loading.error { + cursor: auto; +} + +#info { + position: absolute; + right: 5px; + top: 5px; + padding: 0px; + max-width: 380px; + min-width: 320px; + background-color: rgba(255,255,255,0.9); + @apply(--shadow-elevation-2dp); +} + +#main { + width: 100%; + height: 100%; +} + +#progress-bar { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + position: absolute; + top: 40px; + left: 0; + font-size: 13px; +} + +#progress-msg { + width: 400px; + margin-bottom: 5px; +} + +paper-progress { + width: 400px; + --paper-progress-height: 6px; + --paper-progress-active-color: #f3913e; +} +</style> +<template is="dom-if" if="[[_isNotComplete(progress)]]"> + <div id="progress-bar"> + <div id="progress-msg">[[progress.msg]]</div> + <paper-progress value="[[progress.value]]"></paper-progress> + </div> +</template> +<div class$="[[_getContainerClass(progress)]]"> + <div id="main"> + <tf-graph id="graph" + graph-hierarchy="[[graphHierarchy]]" + selected-node="{{_selectedNode}}" + highlighted-node="{{_highlightedNode}}" + color-by="[[colorBy]]" + color-by-params="{{colorByParams}}" + graph-name="[[graphName]]" + progress="[[progress]]" + ></tf-graph> + </div> + <div id="info"> + <tf-graph-info id="graph-info" + title="selected" + graph-hierarchy="[[graphHierarchy]]" + graph="[[graph]]" + selected-node="{{_selectedNode}}" + highlighted-node="{{_highlightedNode}}" + ></tf-graph-info> + </div> +</div> +</template> +</dom-module> + +<script> +Polymer({ + is: 'tf-graph-board', + properties: { + // Public API. + graphHierarchy: Object, + graph: Object, + graphName: String, + // True if the graph data has also run-time stats. + hasStats: Boolean, + /** + * @type {value: number, msg: string} + * + * A number between 0 and 100 denoting the % of progress + * for the progress bar and the displayed message. + */ + progress: Object, + colorByParams: { + type: Object, + notify: true, + }, + // Private API: Data routing between child components. + _selectedNode: String, + _highlightedNode: String, + }, + /** True if the progress is not complete yet (< 100 %). */ + _isNotComplete: function(progress) { + return progress.value < 100; + }, + _getContainerClass: function(progress) { + var result = 'container'; + if (progress.error) { + result += ' error'; + } + if (this._isNotComplete(progress)) { + result += ' loading'; + } + return result; + } +}); +</script> diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/colors.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/colors.ts new file mode 100644 index 0000000000..8912483c09 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/colors.ts @@ -0,0 +1,133 @@ +module tf { + +/** + * Mapping from color palette name to color pallette, which contains + * exact colors for multiple states of a single color pallette. + */ +export let COLORS = [ + { + "name": "Google Blue", + "color": "#4184f3", + "active": "#3a53c5", + "disabled": "#cad8fc" + }, + { + "name": "Google Red", + "color": "#db4437", + "active": "#8f2a0c", + "disabled": "#e8c6c1" + }, + { + "name": "Google Yellow", + "color": "#f4b400", + "active": "#db9200", + "disabled": "#f7e8b0" + }, + { + "name": "Google Green", + "color": "#0f9d58", + "active": "#488046", + "disabled": "#c2e1cc" + }, + { + "name": "Purple", + "color": "#aa46bb", + "active": "#5c1398", + "disabled": "#d7bce6" + }, + { + "name": "Teal", + "color": "#00abc0", + "active": "#47828e", + "disabled": "#c2eaf2" + }, + { + "name": "Deep Orange", + "color": "#ff6f42", + "active": "#ca4a06", + "disabled": "#f2cbba" + }, + { + "name": "Lime", + "color": "#9d9c23", + "active": "#7f771d", + "disabled": "#f1f4c2" + }, + { + "name": "Indigo", + "color": "#5b6abf", + "active": "#3e47a9", + "disabled": "#c5c8e8" + }, + { + "name": "Pink", + "color": "#ef6191", + "active": "#ca1c60", + "disabled": "#e9b9ce" + }, + { + "name": "Deep Teal", + "color": "#00786a", + "active": "#2b4f43", + "disabled": "#bededa" + }, + { + "name": "Deep Pink", + "color": "#c1175a", + "active": "#75084f", + "disabled": "#de8cae" + }, + { + "name": "Gray", + "color": "#9E9E9E", // 500 + "active": "#424242", // 800 + "disabled": "F5F5F5" // 100 + } +].reduce((m, c) => { + m[c.name] = c; + return m; +}, {}); + +/** + * Mapping from op category to color palette name + * e.g., OP_GROUP_COLORS["state_ops"] = "Google Blue"; + */ +export let OP_GROUP_COLORS = [ + { + color: "Google Red", + groups: ["gen_legacy_ops", "legacy_ops", "legacy_flogs_input", + "legacy_image_input", "legacy_input_example_input", + "legacy_sequence_input", "legacy_seti_input_input"] + }, { + color: "Deep Orange", + groups: ["constant_ops"] + }, { + color: "Indigo", + groups: ["state_ops"] + }, { + color: "Purple", + groups: ["nn_ops", "nn"] + }, { + color: "Google Green", + groups: ["math_ops"] + }, { + color: "Lime", + groups: ["array_ops"] + }, { + color: "Teal", + groups: ["control_flow_ops", "data_flow_ops"] + }, { + color: "Pink", + groups: ["summary_ops"] + }, { + color: "Deep Pink", + groups: ["io_ops"] + } +].reduce((m, c) => { + c.groups.forEach(function(group) { + m[group] = c.color; + }); + return m; +}, {}); + +} diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/common.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/common.ts new file mode 100644 index 0000000000..ed148bf719 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/common.ts @@ -0,0 +1,236 @@ +/// <reference path="../../../typings/tsd.d.ts" /> + +declare module graphlib { + + interface GraphOptions { + name: string; + /** + * Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, + * B = bottom, L = left, and R = right. + */ + rankdir: string; + type: string|number; + /** Number of pixels between each rank in the layout. */ + ranksep?: number; + /** Number of pixels that separate nodes horizontally in the layout. */ + nodesep?: number; + } + + export interface EdgeObject { + v: string; + w: string; + name?: string; + } + + export class Graph<N, E> { + constructor(opt?: Object); + setNode(name: string, value?: N): void; + hasNode(name: string): boolean; + setEdge(fromName: string, toName: string, value?: E): void; + hasEdge(fromName: string, toName: string): boolean; + edge(fromName: string, toName: string): E; + edge(edgeObject: EdgeObject): E; + removeEdge(v: string, w: string): void; + nodes(): string[]; + node(name: string): N; + removeNode(name: string): void; + setGraph(graphOptions: GraphOptions): void; + graph(): GraphOptions; + nodeCount(): number; + neighbors(name: string): string[]; + successors(name: string): string[]; + predecessors(name: string): string[]; + edges(): EdgeObject[]; + outEdges(name: string): E[]; + inEdges(name: string): E[]; + /** Returns those nodes in the graph that have no in-edges. Takes O(|V|) time. */ + sources(): string[]; + /** + * Remove the node with the id v in the graph or do nothing if + * the node is not in the graph. If the node was removed this + * function also removes any incident edges. Returns the graph, + * allowing this to be chained with other functions. Takes O(|E|) time. + */ + removeNode(name: string): Graph<N, E>; + setParent(name: string, parentName: string): void; + } +} + +module tf { +/** + * Recommended delay (ms) when running an expensive task asynchronously + * that gives enough time for the progress bar to update its UI. + */ +const ASYNC_TASK_DELAY = 20; + +export function time<T>(msg: string, task: () => T) { + let start = Date.now(); + let result = task(); + /* tslint:disable */ + console.log(msg, ":", Date.now() - start, "ms"); + /* tslint:enable */ + return result; +} + +/** + * Tracks task progress. Each task being passed a progress tracker needs + * to call the below-defined methods to notify the caller about the gradual + * progress of the task. + */ +export interface ProgressTracker { + updateProgress(incrementValue: number): void; + setMessage(msg: string): void; + reportError(msg: string): void; +} + +/** + * Creates a tracker for a subtask given the parent tracker, the total progress + * of the subtask and the subtask message. The parent task should pass a + * subtracker to its subtasks. The subtask reports its own progress which + * becames relative to the main task. + */ +export function getSubtaskTracker(parentTracker: ProgressTracker, + impactOnTotalProgress: number, subtaskMsg: string): ProgressTracker { + return { + setMessage: function(progressMsg) { + // The parent should show a concatenation of its message along with + // its subtask tracker message. + parentTracker.setMessage(subtaskMsg + " : " + progressMsg); + }, + updateProgress: function(incrementValue) { + // Update the parent progress relative to the child progress. + // For example, if the sub-task progresses by 30%, and the impact on the + // total progress is 50%, then the task progresses by 30% * 50% = 15%. + parentTracker + .updateProgress(incrementValue * impactOnTotalProgress / 100); + }, + reportError: function(errorMsg) { + // The parent should show a concatenation of its message along with + // its subtask error message. + parentTracker.reportError(subtaskMsg + " : " + errorMsg); + } + }; +} + +/** + * Runs an expensive task asynchronously and returns a promise of the result. + */ +export function runAsyncTask<T>(msg: string, incProgressValue: number, + task: () => T, tracker: ProgressTracker): Promise<T> { + return new Promise((resolve, reject) => { + // Update the progress message to say the current running task. + tracker.setMessage(msg); + // Run the expensive task with a delay that gives enough time for the + // UI to update. + setTimeout(function() { + try { + var result = tf.time(msg, task); + // Update the progress value. + tracker.updateProgress(incProgressValue); + // Return the result to be used by other tasks. + resolve(result); + } catch (e) { + reject(result); + } + }, ASYNC_TASK_DELAY); + }); +} + +/** + * Returns a query selector with escaped special characters that are not + * allowed in a query selector. + */ +export function escapeQuerySelector(querySelector: string): string { + return querySelector.replace( /([:.\[\],/\\\(\)])/g, "\\$1" ); +} + +/** + * TensorFlow node definition as definied in the graph proto file. + */ +export interface TFNode { + /** Name of the node */ + name: string; + /** List of nodes that are inputs for this node. */ + input: string[]; + /** The name of the device where the computation will run. */ + device: string; + /** The name of the operation associated with this node. */ + op: string; + /** List of attributes that describe/modify the operation. */ + attr: {key: string, value: Object}[]; +} + +/** + * TensorFlow stats file definition as defined in the stats proto file. + */ +export interface TFStats { + devStats: {device: string, nodeStats: TFNodeStats[]}[]; +} + +/** + * TensorFlow stats for a node as defined in the stats proto file. + */ +export interface TFNodeStats { + nodeName: string; + // The next 4 properties are currently stored as string in json + // and must be parsed. + allStartMicros: number; + opStartRelMicros: number; + opEndRelMicros: number; + allEndRelMicros: number; + memory: { + allocatorName: string; + totalBytes: number; // Stored as string in json and should be parsed. + peakBytes: number; // Stored as string in json and should be parsed. + }[]; + /** Output sizes recorded for a single execution of a graph node */ + output: TFNodeOutput[]; + timelineLabel: string; + scheduledMicros: string; + threadId: string; +} + +/** + * Description for the output tensor(s) of an operation in the graph. + */ +export interface TFNodeOutput { + slot: number; // Stored as string in json and should be parsed. + /** Was the tensor allocated by this Op or a previous computation */ + allocationType: string; + tensorDescription: { + /** Data type of tensor elements */ + dtype: string; + /** Shape of the tensor */ + shape: { + /** + * Dimensions of the tensor, such as [{name: "input", size: 30}, + * {name: "output", size: 40}] for a 30 x 40 2D tensor. The names + * are optional. The order of entries in "dim" matters: It indicates + * the layout of the values in the tensor in-memory representation. + */ + dim: { + /** Size of the tensor in that dimension */ + size: number, // Stored as string in json and should be parsed. + /** Optional name of the tensor dimension */ + name?: string + }[]; + }; + /** Information about the size and allocator used for the data */ + allocationDescription: { + // The next 2 properties are stored as string in json and + // should be parsed. + /** Total number of bytes requested */ + requestedBytes: number; + /** Total number of bytes allocated, if known */ + allocatedBytes?: number; + /** Name of the allocator used */ + allocatorName: string; + }; + }; +} +} // close module tf + +/** + * Declaring dagre var used for dagre layout. + */ +declare var dagre: { layout(graph: graphlib.Graph<any, any>): void; }; diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/graph.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/graph.ts new file mode 100644 index 0000000000..64e537154b --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/graph.ts @@ -0,0 +1,889 @@ +/// <reference path="../../../typings/tsd.d.ts" /> +/// <reference path="common.ts" /> +module tf.graph { + +/** Delimiter used in node names to denote namespaces. */ +export const NAMESPACE_DELIM = "/"; +const FULL_GRAPH_NAME = "fullGraph"; +export const ROOT_NAME = "__root__"; + +// Separator between the source and the destination name of the edge. +export const EDGE_KEY_DELIM = "--"; + +export enum GraphType {FULL, EMBEDDED, META, SERIES, CORE, SHADOW, BRIDGE, + EDGE}; +export enum NodeType {META, OP, SERIES, BRIDGE, ELLIPSIS}; + +/** + * A BaseEdge is the label object (in the graphlib sense) for an edge in the + * original, full graph produced after parsing. Subsequent graphs, like those + * which belong to Metanodes, should not use BaseEdge objects, but instead + * contain Metaedges (which in turn may contain any number of BaseEdges). + */ +export interface BaseEdge extends graphlib.EdgeObject { + isControlDependency: boolean; + isReferenceEdge: boolean; +} + +/** + * A SlimGraph is inspired by graphlib.Graph, but having only the functionality + * that we need. + */ +export class SlimGraph { + nodes: { [nodeName: string]: OpNode }; + edges: BaseEdge[]; + + constructor() { + this.nodes = {}; + this.edges = []; + } +} + +interface NormalizedInput { + name: string; + hasNumberPart: boolean; + isControlDependency: boolean; +} + +interface BuildParams { + enableEmbedding: boolean; + inEmbeddingTypes: string[]; + outEmbeddingTypes: string[]; + refEdges: { [inputEdge: string]: boolean }; +} + +/** + * The most basic information about a node in the hierarchical graph. + */ +export interface Node { + /** The name of the node, used frequently to look up nodes by name. */ + name: string; + /** Which type of node this is. */ + type: NodeType; + /** + * Whether this node is a type that may contain other nodes. Those types + * should extend from GroupNode. + * + * For an OpNode, isGroupNode will be false, even though it may have + * embeddings. These embedding Nodes will have their parentNode set to the + * OpNode. However, embeddings are later rendered as annotations, not as + * children to be made visible on expansion (like a Metanode or SeriesNode). + */ + isGroupNode: boolean; + /** + * The number of nodes this node represents. For OpNodes, this will be 1, and + * for GroupNodes it will be a count of the total number of descendents it + * contains. + */ + cardinality: number; + /** + * The Node which is this Node's parent. This is of type Node and not + * GroupNode because of embeddings, which will have a parent OpNode. + */ + parentNode: Node; + /** Runtime execution stats for this node, if available */ + stats: NodeStats; +} + +export interface OpNode extends Node { + op: string; + device: string; + attr: {key: string, value: Object}[]; + inputs: NormalizedInput[]; + inEmbeddings: OpNode[]; + outEmbeddings: OpNode[]; +} + +export interface BridgeNode extends Node { + /** + * Whether this bridge node represents edges coming into its parent node. + */ + inbound: boolean; +} + +/** + * A node that is used when there are more than the maximum number of allowed + * annotations hanging off of a node. This node represents an ellipsis + * annotation, indicating a number of additional annotations. + */ +export interface EllipsisNode extends Node { + /** + * The number of nodes this ellipsis represents. + */ + numMoreNodes: number; + + /** + * Sets the number of nodes this ellipsis represents and changes the node + * name accordingly. + */ + setNumMoreNodes(numNodes: number); +} + +export interface GroupNode extends Node { + /** + * The metagraph contains nodes and metaedges between the immediate children + * of this group. The node label objects may be other GroupNodes (like + * SeriesNodes and Metanodes) or individual OpNodes. All edge label objects + * are Metaedges, each of which contains references to the original + * BaseEdge(s) from which it was created. + */ + metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>; + + /** + * The bridgegraph contains only edges which link immediate children of this + * group with nodes outside of the metagraph. As in the metagraph, all edge + * label objects are Metaedges which contain references to the original + * BaseEdge(s) that contribute to it. + * + * For a Metaedge in the bridgegraph, its external endpoint will be the same + * as the metagraph edge from which it came. This is most easily explained + * by example. + * + * Consider an original graph that contains a BaseEdge A/B/C->Z/Y/X. + * + * +-------+ (BaseEdge) +-------+ + * | A/B/C |>----------------->| Z/Y/X | + * +-------+ +-------+ + * + * When we construct the Root's metagraph, it will contain nodes for A and Z, + * and a Metaedge A->Z. The A->Z Metaedge will contain the original BaseEdge + * A/B/C->Z/Y/X in its baseEdgeGraph. The Root's bridgegraph will always be + * empty. + * + * +---+ (Root.metagraph edge) +---+ + * | A |>--------------------------->| Z | + * +---+ +---+ + * + * Now consider the Metanode A. Its metagraph will contain a Metanode for A/B + * and no edges. A's bridgegraph will have one Metaedge from A/B->Z, which + * was derived from the Root's Metaedge A->Z. That Metaedge will contain the + * original BaseEdge in its baseEdgeGraph. + * + * +---------+ + * | A | + * | +---+ | (A.bridgegraph edge) +---+ + * | | B |>---------------------------->| Z | + * | +---+ | +---+ + * +---------+ + * + * Finally, consider the Metanode A/B. Its metagraph will contain a Metanode + * for A/B/C and again no edges. A/B's bridgegraph will have one Metaedge + * from A/B/C->Z, which was derived from A's bridgegraph Metaedge A/B->Z. + * As before, the A/B/C->Z Metaedge will contain the original BaseEdge in its + * baseEdgeGraph. + * + * +---------------+ + * | A | + * | +---------+ | + * | | B | | + * | | +---+ | | (A/B.bridgegraph edge) +---+ + * | | | C |>----------------------------------->| Z | + * | | +---+ | | +---+ + * | +---------+ | + * +---------------+ + * + * Likewise, under the Metanode Z and Z/Y, to compute the bridgegraph, we'll + * end up with Metaedges A->Z/Y and A->Z/Y/X respectively. So the original + * BaseEdge A/B/C->Z/Y/X becomes four different Metaedges in four different + * bridgegraphs: + * + * + A/B->Z in GroupNode A's bridgegraph, + * + A/B/C->Z in GroupNode A/B's bridgegraph, + * + A->Z/Y in GroupNode Z's bridgegraph, and + * + A->Z/Y/X in GroupNode Z/Y's bridgegraph. + * + * Considering any BaseEdge then, if N is the number of path segments in the + * source and M is the number of path semgents in the destination, then the + * total number of bridgegraph edges you could create would be (N-1)(M-1). + * + * For this reason, it is computationally expensive to generate all the + * bridgegraphs for all the Metanodes, and instead they should be computed + * on demand as needed. + */ + bridgegraph: graphlib.Graph<GroupNode|OpNode, Metaedge>; + + /** + * Stores how many times each device name appears in its children + * op nodes. Used to color group nodes by devices. + */ + deviceHistogram: {[device: string]: number}; + + /** + * Flag indicating whether this GroupNode's metagraph contains any edges that + * are not control edges. Used to quickly determine how to draw a collapsed + * series (vertically or horizontally). + */ + hasNonControlEdges: boolean; +} + +export interface Metanode extends GroupNode { + depth: number; + templateId: string; + opHistogram: {[op: string]: number}; + getFirstChild(): GroupNode|OpNode; + getRootOp(): OpNode; + /** Return name of all leaves inside a metanode. */ + leaves(): string[]; +} + +export interface SeriesNode extends GroupNode { + hasLoop: boolean; + prefix: string; + suffix: string; + clusterId: number; + ids: number[]; + parent: string; +} + +export class EllipsisNodeImpl implements EllipsisNode { + name: string; + numMoreNodes: number; + stats: NodeStats; + type: NodeType; + isGroupNode: boolean; + cardinality: number; + parentNode: Node; + + /** + * Constructs a new ellipsis annotation node. + * + * @param numNodes The number of additional annotations this node represents. + */ + constructor(numNodes: number) { + this.type = NodeType.ELLIPSIS; + this.isGroupNode = false; + this.cardinality = 1; + this.parentNode = null; + this.stats = null; + this.setNumMoreNodes(numNodes); + } + + setNumMoreNodes(numNodes: number) { + this.numMoreNodes = numNodes; + this.name = "... " + numNodes + " more"; + } +}; + +/** + * A label object for nodes in the full graph and leaf nodes in the render + * graph. + */ +class OpNodeImpl implements OpNode { + name: string; + op: string; + device: string; + stats: NodeStats; + attr: {key: string, value: Object}[]; + inputs: NormalizedInput[]; + type: NodeType; + isGroupNode: boolean; + cardinality: number; + inEmbeddings: OpNode[]; + outEmbeddings: OpNode[]; + parentNode: Node; + + /** + * Constructs a new Op node. + * + * @param rawNode The raw node. + * @param normalizedInputs An array of normalized + * inputs that denote the incoming edges to the current node. Each input + * contains the normalized name of the source node, whether it has a number + * part and whether it is a control dependency. + */ + constructor(rawNode: tf.TFNode, normalizedInputs: NormalizedInput[]) { + this.op = rawNode.op; + this.name = rawNode.name; + this.device = rawNode.device; + this.attr = rawNode.attr; + this.inputs = normalizedInputs; + // additional properties + this.type = NodeType.OP; + this.isGroupNode = false; + this.cardinality = 1; + this.inEmbeddings = []; + this.outEmbeddings = []; + this.parentNode = null; + } +}; + +export function createMetanode(name: string, opt = {}): Metanode { + return new MetanodeImpl(name, opt); +} + +/** + * Joins the information from the stats file (memory, compute time) with the graph + * information. + */ +export function joinStatsInfoWithGraph(graph: SlimGraph, + statsJson: TFStats): void { + _.each(statsJson.devStats, stats => { + _.each(stats.nodeStats, nodeStats => { + // Lookup the node in the graph by its original name, e.g. A. If not + // found, lookup by the rewritten name A/(A) in case the name is both + // a namespace and a node name. + let nodeName = nodeStats.nodeName in graph.nodes ? + nodeStats.nodeName : + nodeStats.nodeName + NAMESPACE_DELIM + "(" + nodeStats.nodeName + ")"; + if (nodeName in graph.nodes) { + // Compute the total bytes used. + let totalBytes = 0; + if (nodeStats.memory) { + _.each(nodeStats.memory, alloc => { + if (alloc.totalBytes) { + totalBytes += Number(alloc.totalBytes); + } + }); + } + let outputSize: number[][] = null; + if (nodeStats.output) { + outputSize = _.map(nodeStats.output, output => { + return _.map(output.tensorDescription.shape.dim, + dim => Number(dim.size)); + }); + } + graph.nodes[nodeName].stats = new NodeStats(totalBytes, + Number(nodeStats.allEndRelMicros), outputSize); + } + }); + }); +} + +/** + * Execution stats for the node. + */ +class NodeStats { + constructor(totalBytes: number, totalMicros: number, outputSize: number[][]) { + this.totalBytes = totalBytes; + this.totalMicros = totalMicros; + this.outputSize = outputSize; + } + + /** + * Total number of bytes used for the node. Sum of all childen + * if it is a Group node. + */ + totalBytes: number; + /** + * Total number of compute time in microseconds used for the node. + * Sum of all children if it is a Group node. + */ + totalMicros: number; + /** + * The shape of each output tensors, if there are any. + * Empty if it is a Group node. + */ + outputSize: number[][]; + + /** + * Combines the specified stats with the current stats. + * Modifies the current object. This methos is used to + * compute aggregate stats for group nodes. + */ + combine(stats: NodeStats): void { + if (stats.totalBytes != null) { + this.totalBytes += stats.totalBytes; + } + if (stats.totalMicros != null) { + this.totalMicros += stats.totalMicros; + } + } +} + +class MetanodeImpl implements Metanode { + name: string; + stats: NodeStats; + type: NodeType; + depth: number; + isGroupNode: boolean; + cardinality: number; + metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>; + bridgegraph: graphlib.Graph<GroupNode|OpNode, Metaedge>; + templateId: string; + opHistogram: {[op: string]: number}; + deviceHistogram: {[op: string]: number}; + parentNode: Node; + hasNonControlEdges: boolean; + + /** A label object for meta-nodes in the graph hierarchy */ + constructor(name: string, opt = {}) { + this.name = name; + this.type = NodeType.META; + /** number of levels under this group */ + this.depth = 1; + this.isGroupNode = true; + /** # of leaf nodes (including embedded ones) */ + this.cardinality = 0; + /** graph contains metanodes, nodes, edges + * and metaedges for main items within this metanode + */ + this.metagraph = + createGraph<GroupNode|OpNode, Metaedge>(name, GraphType.META, opt); + /** bridgegraph must be constructed lazily-see hierarchy.getBridgegraph() */ + this.bridgegraph = null; + /** + * A dictionary that count ops type of nodes in this metanode + * (op type => count). + */ + this.opHistogram = {}; + this.deviceHistogram = {}; + /** unique id for a metanode of similar subgraph */ + this.templateId = null; + /** Metanode which contains this node, if any */ + this.parentNode = null; + this.stats = new NodeStats(0, 0, null); + this.hasNonControlEdges = false; + } + + getFirstChild(): GroupNode|OpNode { + return this.metagraph.node(this.metagraph.nodes()[0]); + } + + /** + * Returns the op node associated with the metanode. + * For example, if the metanode is "sgd", the associated + * op node is sgd/(sgd). + */ + getRootOp(): OpNode { + let nameSplit = this.name.split("/"); + let rootOpName = this.name + "/(" + nameSplit[nameSplit.length - 1] + ")"; + return <OpNode>this.metagraph.node(rootOpName); + } + + /** + * Return an array of the names of all the leaves (non-GroupNodes) inside + * this metanode. This performs a breadth-first search of the tree, so + * immediate child leaves will appear earlier in the output array than + * descendant leaves. + */ + leaves(): string[] { + let leaves = []; + let queue = [<Node> this]; + let metagraph; // Defined here due to a limitation of ES6->5 compilation. + while (queue.length) { + let node = queue.shift(); + if (node.isGroupNode) { + metagraph = (<GroupNode> node).metagraph; + _.each(metagraph.nodes(), name => queue.push(metagraph.node(name))); + } else { + leaves.push(node.name); + } + } + return leaves; + } +}; + +export interface Metaedge extends graphlib.EdgeObject { + + /** + * Stores the original BaseEdges represented by this Metaedge. + */ + baseEdgeList: BaseEdge[]; + + /** + * Whether this edge represents a relationship that is inbound (or outbound) + * to the object which contains this information. For example, in a Metanode's + * bridgegraph, each edge connects an immediate child to something outside + * the Metanode. If the destination of the edge is inside the Metanode, then + * its inbound property should be true. If the destination is outside the + * Metanode, then its inbound property should be false. + * + * The property is optional because not all edges can be described as + * inbound/outbound. For example, in a Metanode's metagraph, all of the edges + * connect immediate children of the Metanode. None should have an inbound + * property, or they should be null/undefined. + */ + inbound?: boolean; + + /** + * Number of regular edges (not control dependency edges). + */ + numRegularEdges: number; + + /** + * Number of control dependency edges. + */ + numControlEdges: number; + + /** + * Number of reference edges, which is an edge to an operation + * that takes a reference to its input and changes its value. + */ + numRefEdges: number; + + addBaseEdge(edge: BaseEdge): void; +} + +export function createMetaedge(v: string, w: string): Metaedge { + return new MetaedgeImpl(v, w); +} + +/** + * A label object for edges between metanodes of subgraphs in the render graph. + */ +class MetaedgeImpl implements Metaedge { + v: string; + w: string; + baseEdgeList: BaseEdge[]; + inbound: boolean; + numRegularEdges: number; + numControlEdges: number; + numRefEdges: number; + + constructor(v: string, w: string) { + this.v = v; + this.w = w; + this.baseEdgeList = []; + this.inbound = null; + this.numRegularEdges = 0; + this.numControlEdges = 0; + this.numRefEdges = 0; + } + + addBaseEdge(edge: BaseEdge): void { + this.baseEdgeList.push(edge); + if (edge.isControlDependency) { + this.numControlEdges += 1; + } else { + this.numRegularEdges += 1; + } + if (edge.isReferenceEdge) { + this.numRefEdges += 1; + } + } +} + +export function createSeriesNode(prefix: string, suffix: string, + parent: string, clusterId: number, name: string): SeriesNode { + return new SeriesNodeImpl(prefix, suffix, parent, clusterId, name); +} + +export function getSeriesNodeName(prefix: string, suffix: string, + parent: string, startId?: number, endId?: number): string { + let numRepresentation = + (typeof startId !== "undefined" && typeof endId !== "undefined") ? + "[" + startId + "-" + endId + "]" : "#"; + let pattern = prefix + numRepresentation + suffix; + return (parent ? parent + "/" : "") + pattern; +} + +class SeriesNodeImpl implements SeriesNode { + name: string; + type: NodeType; + stats: NodeStats; + hasLoop: boolean; + prefix: string; + suffix: string; + clusterId: number; + ids: number[]; + parent: string; + isGroupNode: boolean; + cardinality: number; + metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>; + bridgegraph: graphlib.Graph<GroupNode|OpNode, Metaedge>; + parentNode: Node; + deviceHistogram: {[op: string]: number}; + hasNonControlEdges: boolean; + + constructor(prefix: string, suffix: string, parent: string, + clusterId: number, name: string) { + this.name = name || getSeriesNodeName(prefix, suffix, parent); + this.type = NodeType.SERIES; + this.hasLoop = false; + this.prefix = prefix; + this.suffix = suffix; + this.clusterId = clusterId; + this.ids = []; + this.parent = parent; + this.isGroupNode = true; + this.cardinality = 0; + this.metagraph = createGraph<Metanode, Metaedge>(name, GraphType.SERIES); + // bridgegraph must be constructed lazily-see hierarchy.getBridgegraph() + this.bridgegraph = null; + this.parentNode = null; + this.deviceHistogram = {}; + this.hasNonControlEdges = false; + this.stats = new NodeStats(0, 0, null); + } +} + +/** + * Normalizes the inputs and extracts associated metadata: + * 1) Inputs can contain a colon followed by a number at the end + * (e.g. inputName:1) and we remove this from the input name, and take note + * that the input was numbered. + * 2) Control dependency inputs contain caret at the beginning and we + * remove this and annotate the edge as a control dependency. + * @param inputs Array of unnormalized names of input nodes. + */ +function normalizeInputs(inputs: string[]): NormalizedInput[] { + return _.reduce(inputs, function(normalizedInputs, inputName) { + let start = inputName[0] === "^"; + let colon = inputName.lastIndexOf(":"); + let end = colon !== -1 && + inputName.length - colon > 1 && + !(/\D/).test(inputName.substring(colon + 1)) ? + colon : inputName.length; + let name = inputName.substring(start ? 1 : 0, end); + if (normalizedInputs.length === 0 || + name !== normalizedInputs[normalizedInputs.length - 1].name) { + normalizedInputs.push({ + name: name, + hasNumberPart: end !== inputName.length, + isControlDependency: start + }); + } + return normalizedInputs; + }, []); +} + +export function build(rawNodes: tf.TFNode[], params: BuildParams, + tracker: ProgressTracker): Promise<SlimGraph|void> { + /** + * A dictionary that maps each in-embedding node name to its host node label + * object. + */ + let inEmbedding: {[nodeName: string]: OpNode} = {}; + /** + * A dictionary that maps each node name to an array of the node's + * out-embedding node label objects. + */ + let outEmbeddings: {[inputName: string]: OpNode[]} = {}; + let isInEmbeddedPred = getEmbedPredicate(params.inEmbeddingTypes); + let isOutEmbeddedPred = getEmbedPredicate(params.outEmbeddingTypes); + let embeddingNodeNames: string[] = []; + /** + * A list of all the non-embedding node names which appear in the processed + * list of raw nodes. Here we pre-allocate enough room for all the rawNodes, + * even though there will some number of embeddings. The excess array length + * is spliced off later. + * + * Experimentation shows that around 30% of the array will go unused, and + * even for very large networks that amounts to less than 10k spaces. + */ + let nodeNames = new Array<string>(rawNodes.length); + + return runAsyncTask("Normalizing names", 30, () => { + let opNodes = new Array<OpNode>(rawNodes.length); + let index = 0; + _.each(rawNodes, rawNode => { + let normalizedInputs = normalizeInputs(rawNode.input); + let opNode = new OpNodeImpl(rawNode, normalizedInputs); + if (isInEmbeddedPred(opNode)) { + embeddingNodeNames.push(opNode.name); + inEmbedding[opNode.name] = opNode; + return; + } + + if (isOutEmbeddedPred(opNode)) { + embeddingNodeNames.push(opNode.name); + _.each(opNode.inputs, input => { + let inputName = input.name; + outEmbeddings[inputName] = outEmbeddings[inputName] || []; + outEmbeddings[inputName].push(opNode); + }); + return; + } + // The node is not an embedding, so add it to the names and nodes lists. + opNodes[index] = opNode; + nodeNames[index] = opNode.name; + index++; + }); + opNodes.splice(index); + nodeNames.splice(index); + return opNodes; + }, tracker) + .then((opNodes) => { + // Create the graph data structure from the graphlib library. + return runAsyncTask("Building the data structure", 70, () => { + let normalizedNameDict = mapStrictHierarchy(nodeNames, + embeddingNodeNames); + let graph = new SlimGraph; + + // Add the nodes to the graph. + _.each(opNodes, opNode => { + let normalizedName = normalizedNameDict[opNode.name] || opNode.name; + graph.nodes[normalizedName] = opNode; + // Check if the node has out-embeddings. If yes, add them to to the + // node. + if (opNode.name in outEmbeddings) { + opNode.outEmbeddings = outEmbeddings[opNode.name]; + // Normalize the names of the out-embeddings. + _.each(opNode.outEmbeddings, node => { + node.name = normalizedNameDict[node.name] || node.name; + }); + } + // Update the name of the node. + opNode.name = normalizedName; + }); + + // Visit each node's inputs to add the edges to the graph. If the input + // is an in-embedding, then add it to the node's in-embeddings instead. + _.each(opNodes, opNode => { + _.each(opNode.inputs, (input, i) => { + let inputName = input.name; + if (inputName in inEmbedding) { + opNode.inEmbeddings.push(inEmbedding[inputName]); + } else { + graph.edges.push({ + v: normalizedNameDict[inputName] || inputName, + w: opNode.name, + isControlDependency: input.isControlDependency, + // Check if this op type and input number corresponds to a + // reference edge using the refEdges dictionary in the params. + isReferenceEdge: (params.refEdges[opNode.op + " " + i] === true) + }); + } + }); + }); + + // Normalize the names of in-embeddings. + _.each(inEmbedding, (node, name) => { + node.name = normalizedNameDict[node.name] || node.name; + }); + + return graph; + }, tracker); + }) + .catch(function(reason) { + throw new Error("Failure creating graph"); + }); +}; + +/** + * Create a new graphlib.Graph() instance with default parameters + */ +export function createGraph<N, E>(name: string, type, opt = {}): + graphlib.Graph<N, E> { + let graph = new graphlib.Graph<N, E>(opt); + graph.setGraph({ + name: name, + rankdir: "BT", // BT,TB,LR,RL + type: type + }); + return graph; +}; + +/** + * Create a predicate for checking whether a node should be embedded based on + * the specified types. + */ +function getEmbedPredicate(types: string[]) { + return function(node) { + // check types + for (let i = 0; i < types.length; i++) { + let regExp = new RegExp(types[i]); + if (node.op.match(regExp)) { return true; } + } + return false; + }; +}; + +/** + * Returns a strict node name (name => name/(name)) to avoid conflicts + * where the node name is also a namespace. + */ +function getStrictName(name: string): string { + let parts = name.split(NAMESPACE_DELIM); + return name + NAMESPACE_DELIM + "(" + parts[parts.length - 1] + ")"; +} + +/** + * For each op node (embedding or non-embedding), rename it if there is a + * non-embedding node under its namespace. For example, assume node name "A". + * If there is a non-embedding node under its namespace (e.g. "A/B"), "A" will + * be renamed to "A/(A)". Then the namespace "A" will contain 2 nodes: "(A)" + * and "B". If all the nodes under "A" are embedding nodes (e.g. constant and + * summary), keep "A" as an Op node and don't create a namespace. + * + * @param nodeNames An array of regular (non-embedding) node names. + * @param embeddingNodeNames An array of embedding node names. + * @return Dictionary object mapping names that need to be renamed to + * new names. + */ +function mapStrictHierarchy(nodeNames: string[], + embeddingNodeNames: string[]): {[oldName: string]: string} { + /** Dictionary that maps the old new to the new name */ + let newNameDictionary: {[oldName: string]: string} = {}; + /** Set used to store all namespaces. */ + let namespaceSet: {[namespace: string]: boolean} = {}; + // sort the nodes to make prefix check faster + nodeNames.sort(); + // look for nodes with a prefix a,a/b -> a/(a),a/b + for (let i = 0; i < nodeNames.length - 1; ++i) { + let a = nodeNames[i]; + // Get all the parent namespaces of the current node + // and add them in the namespace set. + _.each(getHierarchicalPath(a).slice(0, -1), ns => { + namespaceSet[ns] = true; + }); + let b = nodeNames[i + 1]; + if (_.startsWith(b, a + NAMESPACE_DELIM)) { + newNameDictionary[a] = getStrictName(a); + } + } + // Go through all the embedding node names and rename them in case they + // collide with namespaces. + _.each(embeddingNodeNames, embeddingName => { + if (embeddingName in namespaceSet) { + // Rename to follow strict hierarchy. + newNameDictionary[embeddingName] = getStrictName(embeddingName); + } + }); + return newNameDictionary; +}; + +/** + * Returns a list of the degrees of each node in the graph. + */ +function degreeSequence(graph: graphlib.Graph<any, any>): number[] { + let degrees = graph.nodes().map(function(name) { + return graph.neighbors(name).length; + }); + degrees.sort(); + return degrees; +}; + +/** + * Returns if the degree sequence of the two graphs is the same. + */ +export function hasSimilarDegreeSequence(graph1: graphlib.Graph<any, any>, + graph2: graphlib.Graph<any, any>): boolean { + let dg1 = degreeSequence(graph1); + let dg2 = degreeSequence(graph2); + + for (let i = 0; i < dg1.length; i++) { + if (dg1[i] !== dg2[i]) { + return false; + } + } + return true; +}; + +/** + * Returns the hierarchical path of the current node, based on the node's name. + * For example, if the name is 'a/b/c', the returned path is ['a', 'a/b', 'a/b/c']. + */ +export function getHierarchicalPath(name: string, + seriesNames?: { [name: string]: string }): string[] { + let path: string[] = []; + let i = name.indexOf(NAMESPACE_DELIM); + // Push all parent portions of the path. + while (i >= 0) { + path.push(name.substring(0, i)); + i = name.indexOf(NAMESPACE_DELIM, i + 1); + } + // If the node's path is under a series, then add the series node name to the + // hierarchical path as the parent of the leaf. + if (seriesNames) { + let seriesName = seriesNames[name]; + if (seriesName) { + path.push(seriesName); + } + } + // Push the leaf of the path. + path.push(name); + return path; +}; + +} // close module tf.graph diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/hierarchy.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/hierarchy.ts new file mode 100644 index 0000000000..6c9333de4c --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/hierarchy.ts @@ -0,0 +1,715 @@ +/// <reference path="graph.ts" /> +/// <reference path="template.ts" /> + +/** + * Package for the Graph Hierarchy for TensorFlow graph. + */ +module tf.graph.hierarchy { + +const LOG_PREFIX_MSG = "Graph hierarchy: "; + +/** + * Class used as output for getPredecessors and getSuccessors methods + */ +interface Edges { + control: string[]; + regular: string[]; +} + +export interface Hierarchy { + root: Metanode; + templates: {[templateId: string]: string[]}; + /** List of all device names */ + devices: string[]; + getNodeMap(): {[nodeName: string]: GroupNode|OpNode}; + node(name: string): GroupNode|OpNode; + setNode(name: string, node: GroupNode|OpNode): void; + getBridgegraph(nodeName: string): graphlib.Graph<GroupNode|OpNode, Metaedge>; + getPredecessors(nodeName: string): Edges; + getSuccessors(nodeName: string): Edges; + getTopologicalOrdering(nodeName: string): { [childName: string]: number }; +} + +/** + * Class for the Graph Hierarchy for TensorFlow graph. + */ +class HierarchyImpl implements Hierarchy { + root: Metanode; + templates: {[templateId: string]: string[]}; + private index: {[nodeName: string]: GroupNode|OpNode}; + devices: string[]; + orderings: { [nodeName: string]: { [childName: string]: number } }; + + constructor() { + this.root = createMetanode(ROOT_NAME, {compound: true}); + this.templates = null; + this.devices = null; + /** + * @type {Object} Dictionary object that maps node name to the node + * (could be op-node, metanode, or series-node) + */ + this.index = {}; + this.index[ROOT_NAME] = this.root; + this.orderings = {}; + } + + getNodeMap(): {[nodeName: string]: GroupNode|OpNode} { + return this.index; + } + + node(name: string): GroupNode|OpNode { + return this.index[name]; + } + + setNode(name: string, node: GroupNode|OpNode): void { + this.index[name] = node; + } + + /** + * Given the name of a node in this hierarchy, get its bridgegraph, creating + * it on the fly if necessary. If the node is not a GroupNode, then this + * method returns null. If the provided name does not map to a node in the + * hierarchy, an error will be thrown. + */ + getBridgegraph(nodeName: string): graphlib.Graph<GroupNode|OpNode, Metaedge> { + let node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node in hierarchy: " + nodeName); + } + if (!("metagraph" in node)) { + return null; + } + let groupNode = <GroupNode> node; + if (groupNode.bridgegraph) { + return groupNode.bridgegraph; + } + let bridgegraph = groupNode.bridgegraph = + createGraph<GroupNode|OpNode, Metaedge>( + "BRIDGEGRAPH", GraphType.BRIDGE); + if (!node.parentNode || !("metagraph" in node.parentNode)) { + return bridgegraph; + } + + let parentNode = <GroupNode>node.parentNode; + let parentMetagraph = parentNode.metagraph; + let parentBridgegraph = this.getBridgegraph(parentNode.name); + + // For each of the parent node's two Metaedge containing graphs, process + // each Metaedge involving this node. + _.each([parentMetagraph, parentBridgegraph], parentGraph => { + _(parentGraph.edges()) + .filter(e => e.v === nodeName || e.w === nodeName) + .each(parentEdgeObj => { + + let inbound = parentEdgeObj.w === nodeName; + let parentMetaedge = parentGraph.edge(parentEdgeObj); + + // The parent's Metaedge represents some number of underlying + // BaseEdges from the original full graph. For each of those, we need + // to determine which immediate child is involved and make sure + // there's a Metaedge in the bridgegraph that covers it. + _.each(parentMetaedge.baseEdgeList, baseEdge => { + + // Based on the direction, figure out which is the descendant node + // and which is the "other" node (sibling of parent or ancestor). + let [descendantName, otherName] = + inbound ? + [baseEdge.w, parentEdgeObj.v] : + [baseEdge.v, parentEdgeObj.w]; + + // Determine the immediate child containing this descendant node. + let childName = this.getChildName(nodeName, descendantName); + + // Look for an existing Metaedge in the bridgegraph (or create a + // new one) that covers the relationship between child and other. + let bridgeEdgeObj = <graphlib.EdgeObject> { + v: inbound ? otherName : childName, + w: inbound ? childName : otherName, + }; + let bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj); + if (!bridgeMetaedge) { + bridgeMetaedge = createMetaedge(bridgeEdgeObj.v, bridgeEdgeObj.w); + bridgeMetaedge.inbound = inbound; + bridgegraph.setEdge(bridgeEdgeObj.v, bridgeEdgeObj.w, + bridgeMetaedge); + } + + // Copy the BaseEdge from the parent's Metaedge into this + // bridgegraph Metaedge. + bridgeMetaedge.addBaseEdge(baseEdge); + }); + }) + .value(); // force lodash chain execution. + }); + + return bridgegraph; + } + + /** + * Utility function for determining the name of the immediate child under a + * node for a given descendant path. If the descendant corresponds to no + * immediate child, an error is thrown. + */ + getChildName(nodeName: string, descendantName: string): string { + // Walk up the hierarchy from the descendant to find the child. + let currentNode: Node = this.index[descendantName]; + while (currentNode) { + if (currentNode.parentNode && currentNode.parentNode.name === nodeName) { + return currentNode.name; + } + currentNode = currentNode.parentNode; + } + throw Error("Could not find immediate child for descendant: " + + descendantName); + }; + + /** + * Given the name of a node, return the names of its predecssors. + * For an OpNode, this will contain the targets from the underlying BaseEdges. + * For a GroupNode, this will contain the targets truncated to siblings of + * the shared ancestor. + * + * For example, consider an original non-control BaseEdge A/B/C->Z/Y/X. Their + * shared ancestor is the ROOT node. A and Z are the highest siblings. Here + * are the results of calling getPredecessors(): + * + * - getPredecessors("Z/Y/X") === {regular: ["A/B/C"], control: []}; + * - getPredecessors("Z/Y") === {regular: ["A"], control: []}; + * - getPredecessors("Z") === {regular: ["A"], control: []}; + * + * The reason getPredecessors("Z/Y") returns ["A"] (and not ["A/B"] as you + * might intuitively expect) is because it's not clear how far down the + * other end of the hierarchy to traverse in the general case. + * + * Continuing this example, say there was another BaseEdge A/K->Z/Y/W. When + * we look at Z/Y's predecessors, the best we can say is ["A"] without getting + * into the details of which of of Z/Y's descendant nodes have predecessors to + * which of A's descendants. + * + * On the other hand, for an OpNode it's clear what the final predecssors + * ought to be. There is no ambiguity. + */ + getPredecessors(nodeName: string): Edges { + let node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node with name: " + nodeName); + } + + let predecessors = this.getOneWayEdges(node, true); + + // Add embedded predecessors, such as constants. + if (!node.isGroupNode) { + _.each((<OpNode>node).inEmbeddings, embeddedNode => { + predecessors.regular.push(embeddedNode.name); + }); + } + return predecessors; + } + + /** + * Given the name of a node, return an array of the names of its successors. + * For an OpNode, this will contain the targets from the underlying BaseEdges. + * For a GroupNode, this will contain the targets truncated to sibling of + * the shared ancestor. + * + * This is the inverse of getPredecessors(). See that method's documentation + * for an in-depth example. + */ + getSuccessors(nodeName: string): Edges { + let node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node with name: " + nodeName); + } + + let successors = this.getOneWayEdges(node, false); + + // Add embedded successors, such as summaries. + if (!node.isGroupNode) { + _.each((<OpNode>node).outEmbeddings, embeddedNode => { + successors.regular.push(embeddedNode.name); + }); + } + return successors; + } + + /** Helper method for getPredeccessors and getSuccessors */ + getOneWayEdges(node: GroupNode|OpNode, inEdges: boolean) { + let edges = { control: [], regular: [] }; + // A node with no parent cannot have any edges. + if (!node.parentNode) { + return edges; + } + if (node.parentNode.isGroupNode) { + let parentNode = <GroupNode>node.parentNode; + let metagraph = parentNode.metagraph; + let bridgegraph = this.getBridgegraph(parentNode.name); + findEdgeTargetsInGraph(metagraph, node, inEdges, edges); + findEdgeTargetsInGraph(bridgegraph, node, inEdges, edges); + } + return edges; + } + + /** + * For a given GroupNode, get or calculate an object which describes a + * topological ordering of child nodes within that GroupNode's metagraph. + * + * This ordering is used when rendering bridge control edges which are + * sometimes backwards relative to the dataflow. + * + * For example, say we have a graph with two edges A->B and A->C, and we're + * interested in the ordering under ROOT. In this case, any of the following + * would be legitimate return values: + * + * - { "A": 0, "B": 1, "C": 2 } -- most likely + * - { "A": 0, "B": 2, "C": 1 } -- less likely + * - { "A": 12, "B": 100, "C": 99 } -- unlikely, but still OK + * + * The algorithm does not guarantee that all numbers from 0-N (where N is + * the number of nodes) appear exactly once. Rather it guarantees that if + * there is a path between two nodes, the earlier one will have a lower + * number in the ordering hash. + * + * When generating the ordering, we ignore control Metaedges (those which + * represent only BaseEdges that have isControlDependency set to true). + * + * If there is no node with the specified name, an error is thrown. If the + * node with the specified name is not a group node, null is returned. + */ + getTopologicalOrdering(nodeName: string): { [childName: string]: number } { + let node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node with name: " + nodeName); + } + if (!node.isGroupNode) { + return null; + } + if (nodeName in this.orderings) { + return this.orderings[nodeName]; + } + + // Mapping of a child node names to lists of their successors. + let successors: { [childName: string]: string[] } = {}; + + // Set of node names which have appeared as a destination. + let destinations: { [childName: string]: boolean } = {}; + + let metagraph = (<GroupNode> node).metagraph; + _.each(metagraph.edges(), (e: graphlib.EdgeObject) => { + if (!metagraph.edge(e).numRegularEdges) { + return; // Skip control edges. + } + + // Keep track of successors and destinations. + if (!(e.v in successors)) { + successors[e.v] = []; + } + successors[e.v].push(e.w); + destinations[e.w] = true; + }); + + // Seed the queue with true sources (those that are not destinations). + let queue: string[] = + _.difference(_.keys(successors), _.keys(destinations)); + + // Produce an ordering by traversing the graph breadth first. + let ordering = this.orderings[nodeName] = {}; + let index = 0; + while (queue.length) { + let childName = queue.shift(); + ordering[childName] = index++; + _.each(successors[childName], succName => queue.push(succName)); + delete successors[childName]; // Prevent cycles from infinite looping. + } + return ordering; + } + +} + +/** + * Internal utility function - given a graph (should be either a metagraph or a + * bridgegraph) and a node which is known to be in that graph, determine + * the other ends of edges that involve that node in the direction specified + * by whether it's inbound. + * + * For example if you wanted to find the predecessors of a node, you'd call + * this method for the parent's metagraph and bridgegraph, specifying inbound + * as true (look at the source of inbound edges to the specified node). + * + * Discovered target names are appended to the targets array. + */ +function findEdgeTargetsInGraph( + graph: graphlib.Graph<GroupNode|OpNode, Metaedge>, + node: Node, inbound: boolean, targets: Edges): void { + _.each(<Metaedge[]> graph.edges(), e => { + let [selfName, otherName] = inbound ? [e.w, e.v] : [e.v, e.w]; + if (selfName === node.name) { + if (node.isGroupNode) { + let targetList = graph.edge(e).numRegularEdges + ? targets.regular : targets.control; + targetList.push(otherName); + } else { + _.each(graph.edge(e).baseEdgeList, baseEdge => { + let targetList = baseEdge.isControlDependency + ? targets.control : targets.regular; + targetList.push(inbound ? baseEdge.v : baseEdge.w); + }); + } + } + }); +} + +interface HierarchyParams { + verifyTemplate: boolean; + groupSeries: boolean; +} + +/** + * @param graph The raw graph. + * @param params Parameters used when building a hierarchy. + */ +export function build(graph: tf.graph.SlimGraph, params: HierarchyParams, + tracker: ProgressTracker): Promise<Hierarchy|void> { + let h = new HierarchyImpl(); + let seriesNames: { [name: string]: string } = {}; + return runAsyncTask("Adding nodes", 20, () => { + // Get all the possible device names. + let deviceNames = {}; + _.each(graph.nodes, (node, nodeName) => { + if (node.device != null) { + deviceNames[node.device] = true; + } + }); + h.devices = _.keys(deviceNames); + addNodes(h, graph); + }, tracker) + .then(() => { + return runAsyncTask("Detect series", 20, () => { + if (params.groupSeries) { + groupSeries(h.root, h, seriesNames); + } + }, tracker); + }) + .then(() => { + return runAsyncTask("Adding edges", 30, () => { + addEdges(h, graph, seriesNames); + }, tracker); + }) + .then(() => { + return runAsyncTask("Finding similar subgraphs", 30, () => { + h.templates = template.detect(h, params.verifyTemplate); + }, tracker); + }) + .then(() => { + return h; + }).catch(function(reason) { + throw new Error("Failure creating graph hierarchy"); + }); +}; + +/** + * Creates the metanodes in the hierarchical graph and assigns parent-child + * relationship between them. + */ +function addNodes(h: Hierarchy, graph: SlimGraph) { + _.each(graph.nodes, (node, nodeName) => { + let path = getHierarchicalPath(node.name); + let parent: Metanode = h.root; + + parent.depth = Math.max(path.length, parent.depth); + + // Create parent metanodes for each depth. For example if the node name + // is 'a/b/c', then create metanodes 'a' and 'a/b', where 'a/b' is a child + // of a. + for (let i = 0; i < path.length; i++) { + parent.depth = Math.max(parent.depth, path.length - i); + parent.cardinality += node.cardinality; + parent.opHistogram[node.op] = (parent.opHistogram[node.op] || 0) + 1; + if (node.stats) { + parent.stats.combine(node.stats); + } + if (node.device != null) { + parent.deviceHistogram[node.device] = + (parent.deviceHistogram[node.device] || 0) + 1; + } + if (i === path.length - 1) { break; } + let name = path[i]; + let child = <Metanode>h.node(name); + if (!child) { + child = createMetanode(name); + child.parentNode = parent; + h.setNode(name, child); + parent.metagraph.setNode(name, child); + } + parent = child; + } + // Assuming node name is 'a/b/c', assign the OpNode as a child of the metanode 'a/b'. + h.setNode(node.name, node); + node.parentNode = parent; + parent.metagraph.setNode(node.name, node); + + // Add each of the in-embeddings and out-embeddings in the hierarchy. + _.each(node.inEmbeddings, function(embedding) { + h.setNode(embedding.name, embedding); + embedding.parentNode = node; + }); + _.each(node.outEmbeddings, function(embedding) { + h.setNode(embedding.name, embedding); + embedding.parentNode = node; + }); + }); +}; + +/** + * For each metanode in the hierarchical graph, this method adds: + * the edges in the metagraph. These are edges between nodes + * that share the same parent. + */ +function addEdges(h: Hierarchy, graph: SlimGraph, + seriesNames: { [name: string]: string }) { + + let nodeIndex = h.getNodeMap(); + + // Ancestor paths for the source and destination nodes of an edge. These are + // reused for each edge rather than allocating new ones. It's about 10% faster + // than allocating new ones on each pass through the loop. + let sourcePath: string[] = []; + let destPath: string[] = []; + + // Insert the ancestor path for a node into the provided array, including the + // node itself. Return the index of the last node inserted (always ROOT). + let getPath = (node: Node, path: string[]): number => { + let i = 0; + while (node) { + path[i++] = node.name; + node = node.parentNode; + } + return i - 1; + }; + + _.each(graph.edges, baseEdge => { + + // Get the hierarchical paths for the source and destination of the edge. + let sourceAncestorIndex = getPath(graph.nodes[baseEdge.v], sourcePath); + let destAncestorIndex = getPath(graph.nodes[baseEdge.w], destPath); + + // Find the lowest shared ancestor between source and dest by looking for + // the highest nodes that differ between their ancestor paths. + while (sourcePath[sourceAncestorIndex] === destPath[destAncestorIndex]) { + sourceAncestorIndex--; + destAncestorIndex--; + if (sourceAncestorIndex < 0 || destAncestorIndex < 0) { + // This would only occur if the two nodes were the same (a cycle in the + // graph), or if one endpoint was a strict ancestor of the other. The + // latter shouldn't happen because we rename nodes which are both + // metanodes and op nodes. E.g. "A/B" becomes "A/B/(B)". + throw Error("No difference found between ancestor paths."); + } + } + + let sharedAncestorNode = + <GroupNode>nodeIndex[sourcePath[sourceAncestorIndex + 1]]; + let sourceAncestorName = sourcePath[sourceAncestorIndex]; + let destAncestorName = destPath[destAncestorIndex]; + + // Find or create the Metaedge which should contain this BaseEdge inside + // the shared ancestor. + let metaedge = + sharedAncestorNode.metagraph.edge(sourceAncestorName, destAncestorName); + if (!metaedge) { + metaedge = createMetaedge(sourceAncestorName, destAncestorName); + sharedAncestorNode.metagraph + .setEdge(sourceAncestorName, destAncestorName, metaedge); + } + if (!sharedAncestorNode.hasNonControlEdges && + !baseEdge.isControlDependency) { + sharedAncestorNode.hasNonControlEdges = true; + } + metaedge.addBaseEdge(baseEdge); + + }); + +}; + +/** + * Using the hierarchy template information, detect series in the provided + * metanode. For each detected series, create a new SeriesNode + * and remove series members from the metanode's metagraph and move them to + * the new series node's metagraph. + * + * @param metanode + * @param hierarchy + * @return A dictionary from node name to series node name that contains the node + */ +function groupSeries(metanode: Metanode, hierarchy: Hierarchy, + seriesNames: { [name: string]: string }) { + let metagraph = metanode.metagraph; + _.each(metagraph.nodes(), n => { + let child = metagraph.node(n); + if (child.type === tf.graph.NodeType.META) { + groupSeries(<Metanode>child, hierarchy, seriesNames); + } + }); + + let clusters = clusterNodes(metagraph); + let seriesDict = detectSeries(clusters, metagraph); + + // Add each series node to the graph and add its grouped children to its own + // metagraph. + _.each(seriesDict, function(seriesNode: SeriesNode, seriesName: string) { + let nodeMemberNames = seriesNode.metagraph.nodes(); + let firstMember = seriesNode.metagraph.node(nodeMemberNames[0]); + let seriesType = firstMember.type; + + hierarchy.setNode(seriesName, seriesNode); // add to the index + metagraph.setNode(seriesName, seriesNode); + _.each(nodeMemberNames, n => { + let child = <OpNode> metagraph.node(n); + seriesNode.metagraph.setNode(n, child); + seriesNode.parentNode = child.parentNode; + seriesNode.cardinality++; + if (child.device != null) { + seriesNode.deviceHistogram[child.device] = + (seriesNode.deviceHistogram[child.device] || 0) + 1; + } + child.parentNode = seriesNode; + seriesNames[n] = seriesName; + + if (child.stats) { + seriesNode.stats.combine(child.stats); + } + + // Remove now-grouped node from its original parent's metagraph. + metagraph.removeNode(n); + }); + }); +}; + +/** cluster op-nodes with similar op */ +function clusterNodes(metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>): + {[clusterId: string]: string[]} { + let result: {[clusterId: string]: string[]} = {}; + return _.reduce(metagraph.nodes(), function(clusters: {[clusterId: string]: string[]}, n: string) { + let child = metagraph.node(n); + if (child.type === NodeType.META) { + // skip metanodes + return clusters; + } + let template = (<OpNode>child).op; + if (template) { + clusters[template] = clusters[template] || []; + clusters[template].push(child.name); + } + return clusters; + }, result); +} + +/** + * For each cluster of op-nodes based op type, try to detect groupings. + * Infer series name using by trying to find pattern "<number>" in the node + * name. + * + * @param clusters Dictionary output from clusterNodes(). + * @param metagraph + * @return A dictionary from series name => seriesNode + */ +function detectSeries(clusters: {[clusterId: string]: string[]}, + metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>): + {[seriesName: string]: SeriesNode} { + let seriesDict: {[seriesName: string]: SeriesNode} = {}; + _.each(clusters, function(members, clusterId: string) { + if (members.length <= 1) { return; } // isolated clusters can't make series + + /** @type {Object} A dictionary mapping seriesName to seriesInfoArray, + * which is an array that contains objects with name, id, prefix, suffix, + * and parent properties. + */ + let candidatesDict = {}; + + // Group all nodes that have the same name, with the exception of a + // number at the end of the name after an underscore, which is allowed to + // vary. + _.each(members, function(name: string) { + let isGroup = name.charAt(name.length - 1) === "*"; + let namepath = name.split("/"); + let leaf = namepath[namepath.length - 1]; + let parent = namepath.slice(0, namepath.length - 1).join("/"); + let matches = leaf.match(/^(\D*)_(\d+)$/); + + let prefix; + let id; + let suffix = ""; + if (matches) { // if found "<number>" in the name, assign id. + prefix = matches[1]; // the front non-numeric characters + id = matches[2]; // the digits + } else { // for node without "_<number>", make them zero-th items. + prefix = isGroup ? leaf.substr(0, leaf.length - 1) : leaf; + if (prefix.charAt(prefix.length - 1) !== "_") { + prefix += "_"; + } + id = 0; + suffix = isGroup ? "*" : ""; + } + let seriesName = getSeriesNodeName(prefix, suffix, parent); + candidatesDict[seriesName] = candidatesDict[seriesName] || []; + let seriesNode = createSeriesNode(prefix, suffix, parent, +id, name); + candidatesDict[seriesName].push(seriesNode); + }); + + // In each group of nodes, group nodes in bunches that have monotonically + // increasing numbers in their names. Each of these bunches is a series. + _.each(candidatesDict, function(seriesInfoArray: SeriesNode[], seriesName) { + if (seriesInfoArray.length < 2) { + return; + } + seriesInfoArray.sort(function(a, b) { + return (+a.clusterId) - (+b.clusterId); + }); + + // Loop through the nodes sorted by its detected series number, grouping + // all nodes with monotonically-increasing series numbers. + let seriesNodes = [seriesInfoArray[0]]; + for (let index = 1; index < seriesInfoArray.length; index++) { + let nextNode = seriesInfoArray[index]; + if (nextNode.clusterId === seriesNodes[seriesNodes.length - 1].clusterId + 1) { + seriesNodes.push(nextNode); + continue; + } + addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph); + seriesNodes = [nextNode]; + } + addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph); + }); + }); + return seriesDict; +} + +/** + * Add a series to the provided dictionary mapping series names to series. + * + * @param seriesNodes the nodes in the series. Contains + * name, id, prefix, suffix and parent properties of the node. + * @param seriesDict the dictionary of series + * @param clusterId ID of the template of the nodes of the series + * @param metagraph + */ +function addSeriesToDict(seriesNodes: SeriesNode[], + seriesDict: {[seriesName: string] : SeriesNode}, + clusterId: number, + metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>) { + if (seriesNodes.length > 1) { + let curSeriesName = getSeriesNodeName( + seriesNodes[0].prefix, seriesNodes[0].suffix, + seriesNodes[0].parent, seriesNodes[0].clusterId, + seriesNodes[seriesNodes.length - 1].clusterId); + let curSeriesNode = createSeriesNode(seriesNodes[0].prefix, + seriesNodes[0].suffix, seriesNodes[0].parent, clusterId, + curSeriesName); + _.each(seriesNodes, function(node) { + curSeriesNode.ids.push(node.clusterId); + curSeriesNode.metagraph.setNode(node.name, metagraph.node(node.name)); + }); + seriesDict[curSeriesName] = curSeriesNode; + } +} + +} // close module tf.graph.hierarchy diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/layout.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/layout.ts new file mode 100644 index 0000000000..4eb3cab011 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/layout.ts @@ -0,0 +1,628 @@ +/// <reference path="graph.ts" /> +/// <reference path="render.ts" /> + +module tf.graph.layout { + +/** Set of parameters that define the look and feel of the graph. */ +export const PARAMS = { + animation: { + /** Default duration for graph animations in ms. */ + duration: 250 + }, + graph: { + /** Graph parameter for metanode. */ + meta: { + /** + * Dagre's nodesep param - number of pixels that + * separate nodes horizontally in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + nodeSep: 110, + /** + * Dagre's ranksep param - number of pixels + * between each rank in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + rankSep: 25 + }, + /** Graph parameter for metanode. */ + series: { + /** + * Dagre's nodesep param - number of pixels that + * separate nodes horizontally in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + nodeSep: 90, + /** + * Dagre's ranksep param - number of pixels + * between each rank in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + rankSep: 25, + }, + /** + * Padding is used to correctly position the graph SVG inside of its parent + * element. The padding amounts are applied using an SVG transform of X and + * Y coordinates. + */ + padding: { + paddingTop: 40, + paddingLeft: 20 + } + }, + subscene: { + meta: { + paddingTop: 10, + paddingBottom: 10, + paddingLeft: 10, + paddingRight: 10, + /** + * Used to leave room for the label on top of the highest node in + * the core graph. + */ + labelHeight: 20, + /** X-space between each extracted node and the core graph. */ + extractXOffset: 50, + /** Y-space between each extracted node. */ + extractYOffset: 20 + }, + series: { + paddingTop: 10, + paddingBottom: 10, + paddingLeft: 10, + paddingRight: 10, + labelHeight: 10 + } + }, + nodeSize: { + /** Size of meta nodes. */ + meta: { + radius: 5, + width: 60, + /** A scale for the node's height based on number of nodes inside */ + height: d3.scale.linear().domain([1, 200]).range([15, 60]).clamp(true), + /** The radius of the circle denoting the expand button. */ + expandButtonRadius: 3 + }, + /** Size of op nodes. */ + op: { + width: 15, + height: 6, + radius: 3, // for making annotation touching ellipse + labelOffset: -8 + }, + /** Size of series nodes. */ + series: { + expanded: { + // For expanded series nodes, width and height will be + // computed to account for the subscene. + radius: 10, + labelOffset: 0, + }, + vertical: { + // When unexpanded, series whose underlying metagraphs contain + // one or more non-control edges will show as a vertical stack + // of ellipses. + width: 16, + height: 13, + labelOffset: -13, + }, + horizontal: { + // When unexpanded, series whose underlying metagraphs contain + // no non-control edges will show as a horizontal stack of + // ellipses. + width: 24, + height: 8, + radius: 10, // Forces annotations to center line. + labelOffset: -10, + }, + }, + /** Size of bridge nodes. */ + bridge: { + // NOTE: bridge nodes will normally be invisible, but they must + // take up some space so that the layout step leaves room for + // their edges. + width: 20, + height: 20, + radius: 2, + labelOffset: 0 + } + }, + shortcutSize: { + /** Size of shortcuts for op nodes */ + op: { + width: 10, + height: 4 + }, + /** Size of shortcuts for meta nodes */ + meta: { + width: 12, + height: 4, + radius: 1 + }, + /** Size of shortcuts for series nodes */ + series: { + width: 14, + height: 4, + } + }, + annotations: { + /** X-space between the shape and each annotation-node. */ + xOffset: 10, + /** Y-space between each annotation-node. */ + yOffset: 3, + /** X-space between each annotation-node and its label. */ + labelOffset: 2, + /** Estimate max width for annotation label */ + labelWidth: 35 + }, + constant: { + size: { + width: 4, + height: 4 + } + }, + series: { + /** Maximum number of repeated item for unexpanded series node. */ + maxStackCount: 3, + /** + * Positioning offset ratio for collapsed stack + * of parallel series (series without edges between its members). + */ + parallelStackOffsetRatio: 0.2, + /** + * Positioning offset ratio for collapsed stack + * of tower series (series with edges between its members). + */ + towerStackOffsetRatio: 0.5 + }, + minimap : { + /** The maximum width/height the minimap can have. */ + size: 150 + } +}; + +/** Calculate layout for a scene of a group node. */ +export function scene(renderNodeInfo: render.RenderGroupNodeInformation) + : void { + // Update layout, size, and annotations of its children nodes and edges. + if (renderNodeInfo.node.isGroupNode) { + layoutChildren(renderNodeInfo); + } + + // Update position of its children nodes and edges + if (renderNodeInfo.node.type === NodeType.META) { + layoutMetanode(renderNodeInfo); + } else if (renderNodeInfo.node.type === NodeType.SERIES) { + layoutSeriesNode(renderNodeInfo); + } +}; + +/** + * Update layout, size, and annotations of its children nodes and edges. + */ +function layoutChildren(renderNodeInfo: render.RenderGroupNodeInformation) + : void { + let children = renderNodeInfo.coreGraph.nodes().map(n => { + return renderNodeInfo.coreGraph.node(n); + }).concat(renderNodeInfo.isolatedInExtract, + renderNodeInfo.isolatedOutExtract); + + _.each(children, childNodeInfo => { + // Set size of each child + switch (childNodeInfo.node.type) { + case NodeType.OP: + _.extend(childNodeInfo, PARAMS.nodeSize.op); + break; + case NodeType.BRIDGE: + _.extend(childNodeInfo, PARAMS.nodeSize.bridge); + break; + case NodeType.META: + if (!childNodeInfo.expanded) { + // set fixed width and scalable height based on cardinality + _.extend(childNodeInfo, PARAMS.nodeSize.meta); + childNodeInfo.height = + PARAMS.nodeSize.meta.height(childNodeInfo.node.cardinality); + } else { + let childGroupNodeInfo = + <render.RenderGroupNodeInformation>childNodeInfo; + scene(childGroupNodeInfo); // Recursively layout its subscene. + } + break; + case NodeType.SERIES: + if (childNodeInfo.expanded) { + _.extend(childNodeInfo, PARAMS.nodeSize.series.expanded); + let childGroupNodeInfo = + <render.RenderGroupNodeInformation>childNodeInfo; + scene(childGroupNodeInfo); // Recursively layout its subscene. + } else { + let childGroupNodeInfo = + <render.RenderGroupNodeInformation>childNodeInfo; + let seriesParams = + childGroupNodeInfo.node.hasNonControlEdges ? + PARAMS.nodeSize.series.vertical : + PARAMS.nodeSize.series.horizontal; + _.extend(childNodeInfo, seriesParams); + } + break; + default: + throw Error("Unrecognized node type: " + childNodeInfo.node.type); + } + + // Layout each child's annotations + layoutAnnotation(childNodeInfo); + }); +} + +/** + * Calculate layout for a graph using dagre + * @param graph the graph to be laid out + * @param params layout parameters + * @return width and height of the core graph + */ +function dagreLayout(graph: graphlib.Graph<any, any>, params) + : {height: number, width: number} { + _.extend(graph.graph(), { + nodeSep: params.nodeSep, + rankSep: params.rankSep + }); + + let bridgeNodeNames = []; + let nonBridgeNodeNames = []; + + // Split out nodes into bridge and non-bridge nodes, and calculate the total + // width we should use for bridge nodes. + _.each(graph.nodes(), nodeName => { + let nodeInfo = graph.node(nodeName); + if (nodeInfo.node.type === NodeType.BRIDGE) { + bridgeNodeNames.push(nodeName); + } else { + nonBridgeNodeNames.push(nodeName); + } + }); + + // If there are no non-bridge nodes, then the graph has zero size. + if (!nonBridgeNodeNames.length) { + return { + width: 0, + height: 0, + }; + } + + dagre.layout(graph); + + let graphLabel = graph.graph(); + + // Calculate the true bounding box of the graph by iterating over nodes and + // edges rather than accepting dagre's word for it. In particular, we should + // ignore the extra-wide bridge nodes and bridge edges, and allow for + // annotation boxes and labels. + let minX = Infinity; + let minY = Infinity; + let maxX = -Infinity; + let maxY = -Infinity; + _.each(nonBridgeNodeNames, nodeName => { + let nodeInfo = graph.node(nodeName); + let w = 0.5 * nodeInfo.width; + let x1 = nodeInfo.x - w - nodeInfo.inboxWidth; + let x2 = nodeInfo.x + w + nodeInfo.outboxWidth; + minX = x1 < minX ? x1 : minX; + maxX = x2 > maxX ? x2 : maxX; + let labelLength = + nodeName.length - nodeName.lastIndexOf(NAMESPACE_DELIM); + // TODO(jimbo): Account for font width rather than using a magic number. + let charWidth = 3; // 3 pixels per character. + let lw = 0.5 * labelLength * charWidth; + let lx1 = nodeInfo.x - lw; + let lx2 = nodeInfo.x + lw; + minX = lx1 < minX ? lx1 : minX; + maxX = lx2 > maxX ? lx2 : maxX; + // TODO(jimbo): Account for the height of labels above op nodes here. + let h = 0.5 * nodeInfo.outerHeight; + let y1 = nodeInfo.y - h; + let y2 = nodeInfo.y + h; + minY = y1 < minY ? y1 : minY; + maxY = y2 > maxY ? y2 : maxY; + }); + _.each(graph.edges(), edgeObj => { + let renderMetaedgeInfo = graph.edge(edgeObj); + if (renderMetaedgeInfo.structural) { + return; // Skip structural edges from min/max calculations. + } + _.each(renderMetaedgeInfo.points, + (point: { x: number, y: number }) => { + minX = point.x < minX ? point.x : minX; + maxX = point.x > maxX ? point.x : maxX; + minY = point.y < minY ? point.y : minY; + maxY = point.y > maxY ? point.y : maxY; + }); + }); + + // Shift all nodes and edge points to account for the left-padding amount, + // and the invisble bridge nodes. + _.each(graph.nodes(), nodeName => { + let nodeInfo = graph.node(nodeName); + nodeInfo.x -= minX; + nodeInfo.y -= minY; + }); + _.each(graph.edges(), edgeObj => { + _.each(graph.edge(edgeObj).points, + (point: { x: number, y: number }) => { + point.x -= minX; + point.y -= minY; + }); + }); + + return { + width: maxX - minX, + height: maxY - minY, + }; +} + +/** Layout a metanode. */ +function layoutMetanode(renderNodeInfo): void { + // First, copy params specific to meta nodes onto this render info object. + let params = PARAMS.subscene.meta; + renderNodeInfo = _.extend(renderNodeInfo, params); + + // Invoke dagre.layout() on the core graph and record the bounding box + // dimensions. + _.extend(renderNodeInfo.coreBox, + dagreLayout(renderNodeInfo.coreGraph, PARAMS.graph.meta)); + + // Calculate the position of nodes in isolatedInExtract relative to the + // top-left corner of inExtractBox (the bounding box for all inExtract nodes) + // and calculate the size of the inExtractBox. + let hasInExtract = renderNodeInfo.isolatedInExtract.length > 0; + + renderNodeInfo.inExtractBox.width = hasInExtract ? + _(renderNodeInfo.isolatedInExtract).pluck("outerWidth").max() : 0; + + renderNodeInfo.inExtractBox.height = + _.reduce(renderNodeInfo.isolatedInExtract, (height, child: any, i) => { + let yOffset = i > 0 ? params.extractYOffset : 0; + // use outerWidth/Height here to avoid overlaps between extracts + child.x = renderNodeInfo.inExtractBox.width / 2; + child.y = height + yOffset + child.outerHeight / 2; + return height + yOffset + child.outerHeight; + }, 0); + + // Calculate the position of nodes in isolatedOutExtract relative to the + // top-left corner of outExtractBox (the bounding box for all outExtract + // nodes) and calculate the size of the outExtractBox. + let hasOutExtract = renderNodeInfo.isolatedOutExtract.length > 0; + renderNodeInfo.outExtractBox.width = hasOutExtract ? + _(renderNodeInfo.isolatedOutExtract).pluck("outerWidth").max() : 0; + + renderNodeInfo.outExtractBox.height = + _.reduce(renderNodeInfo.isolatedOutExtract, (height, child: any, i) => { + let yOffset = i > 0 ? params.extractYOffset : 0; + // use outerWidth/Height here to avoid overlaps between extracts + child.x = renderNodeInfo.outExtractBox.width / 2; + child.y = height + yOffset + child.outerHeight / 2; + return height + yOffset + child.outerHeight; + }, 0); + + // Determine the whole metanode's width (from left to right). + renderNodeInfo.width = + params.paddingLeft + renderNodeInfo.coreBox.width + params.paddingRight + + (hasInExtract ? + renderNodeInfo.inExtractBox.width + params.extractXOffset : 0) + + (hasOutExtract ? + params.extractXOffset + renderNodeInfo.outExtractBox.width : 0); + + // TODO(jimbo): Remove labelHeight and instead incorporate into box sizes. + // Determine the whole metanode's height (from top to bottom). + renderNodeInfo.height = + renderNodeInfo.labelHeight + + params.paddingTop + + Math.max( + renderNodeInfo.inExtractBox.height, + renderNodeInfo.coreBox.height, + renderNodeInfo.outExtractBox.height + ) + + params.paddingBottom; +} + +/** + * Calculate layout for series node's core graph. Only called for an expanded + * series. + */ +function layoutSeriesNode(node: render.RenderGroupNodeInformation): void { + let graph = node.coreGraph; + + let params = PARAMS.subscene.series; + _.extend(node, params); + + // Layout the core. + _.extend(node.coreBox, + dagreLayout(node.coreGraph, PARAMS.graph.series)); + + _.each(graph.nodes(), nodeName => { + graph.node(nodeName).excluded = false; + }); + + // Series do not have in/outExtractBox so no need to include them here. + node.width = node.coreBox.width + params.paddingLeft + params.paddingRight; + node.height = node.coreBox.height + params.paddingTop + params.paddingBottom; +} + +/** + * Calculate layout for annotations of a given node. + * This will modify positions of the the given node and its annotations. + * + * @see tf.graph.render.Node and tf.graph.render.Annotation + * for description of each property of each render node. + * + */ + function layoutAnnotation(renderNodeInfo: render.RenderNodeInformation): void { + // If the render node is an expanded metanode, then its annotations will not + // be visible and we should skip the annotation calculations. + if (renderNodeInfo.expanded) { + _.extend(renderNodeInfo, { + inboxWidth: 0, + inboxHeight: 0, + outboxWidth: 0, + outboxHeight: 0, + outerWidth: renderNodeInfo.width, + outerHeight: renderNodeInfo.height + }); + return; + } + + let inAnnotations = renderNodeInfo.inAnnotations.list; + let outAnnotations = renderNodeInfo.outAnnotations.list; + + // Calculate size for in-annotations + _.each(inAnnotations, a => sizeAnnotation(a)); + + // Calculate size for out-annotations + _.each(outAnnotations, a => sizeAnnotation(a)); + + let params = PARAMS.annotations; + renderNodeInfo.inboxWidth = + inAnnotations.length > 0 ? + (<any>_(inAnnotations).pluck("width").max()) + + params.xOffset + params.labelWidth + params.labelOffset : + 0; + + renderNodeInfo.outboxWidth = + outAnnotations.length > 0 ? + (<any>_(outAnnotations).pluck("width").max()) + + params.xOffset + params.labelWidth + params.labelOffset : + 0; + + // Calculate annotation node position (a.dx, a.dy) + // and total height for in-annotations + // After this chunk of code: + // inboxHeight = sum of annotation heights+ (annotation.length - 1 * yOffset) + let inboxHeight = _.reduce(inAnnotations, + (height, a: any, i) => { + let yOffset = i > 0 ? params.yOffset : 0; + a.dx = -(renderNodeInfo.width + a.width) / 2 - params.xOffset; + a.dy = height + yOffset + a.height / 2; + return height + yOffset + a.height; + }, 0); + + _.each(inAnnotations, (a: any) => { + a.dy -= inboxHeight / 2; + + a.labelOffset = params.labelOffset; + }); + + // Calculate annotation node position position (a.dx, a.dy) + // and total height for out-annotations + // After this chunk of code: + // outboxHeight = sum of annotation heights + + // (annotation.length - 1 * yOffset) + let outboxHeight = _.reduce(outAnnotations, + (height, a: any, i) => { + let yOffset = i > 0 ? params.yOffset : 0; + a.dx = (renderNodeInfo.width + a.width) / 2 + params.xOffset; + a.dy = height + yOffset + a.height / 2; + return height + yOffset + a.height; + }, 0); + + _.each(outAnnotations, (a: any) => { + // adjust by (half of ) the total height + // so dy is relative to the host node's center. + a.dy -= outboxHeight / 2; + + a.labelOffset = params.labelOffset; + }); + + // Creating scales for touch point between the in-annotation edges + // and their hosts. + + let inTouchHeight = + Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, + inboxHeight / 2); + inTouchHeight = inTouchHeight < 0 ? 0 : inTouchHeight; + + let inY = d3.scale.linear() + .domain([0, inAnnotations.length - 1]) + .range([-inTouchHeight, inTouchHeight]); + + // Calculate annotation edge position + _.each(inAnnotations, (a: any, i) => { + a.points = [ + // The annotation node end + { + dx: a.dx + a.width / 2, + dy: a.dy + }, + + // The host node end + { + dx: - renderNodeInfo.width / 2, + // only use scale if there are more than one, + // otherwise center it vertically + dy: inAnnotations.length > 1 ? inY(i) : 0 + } + ]; + }); + + // Creating scales for touch point between the out-annotation edges + // and their hosts. + let outTouchHeight = + Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, + outboxHeight / 2); + outTouchHeight = outTouchHeight < 0 ? 0 : outTouchHeight; + let outY = d3.scale.linear() + .domain([0, outAnnotations.length - 1]) + .range([-outTouchHeight, outTouchHeight]); + + _.each(outAnnotations, (a: any, i) => { + // Add point from the border of the annotation node + a.points = [ + // The host node end + { + dx: renderNodeInfo.width / 2, + // only use scale if there are more than one, + // otherwise center it vertically + dy: outAnnotations.length > 1 ? outY(i) : 0 + }, + // The annotation node end + { + dx: a.dx - a.width / 2, + dy: a.dy + } + ]; + }); + + renderNodeInfo.outerWidth = renderNodeInfo.width + renderNodeInfo.inboxWidth + + renderNodeInfo.outboxWidth; + renderNodeInfo.outerHeight = + Math.max(renderNodeInfo.height, inboxHeight, outboxHeight); +} + +/** + * Set size of an annotation node. + */ +function sizeAnnotation(a: render.Annotation): void { + switch (a.annotationType) { + case render.AnnotationType.CONSTANT: + _.extend(a, PARAMS.constant.size); + break; + case render.AnnotationType.SHORTCUT: + if (a.node.type === NodeType.OP) { + _.extend(a, PARAMS.shortcutSize.op); + } else if (a.node.type === NodeType.META) { + _.extend(a, PARAMS.shortcutSize.meta); + } else if (a.node.type === NodeType.SERIES) { + _.extend(a, PARAMS.shortcutSize.series); + } else { + throw Error("Invalid node type: " + a.node.type); + } + break; + case render.AnnotationType.SUMMARY: + _.extend(a, PARAMS.constant.size); + break; + } +} + +} // close module diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/parser.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/parser.ts new file mode 100644 index 0000000000..b4864738a9 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/parser.ts @@ -0,0 +1,189 @@ +/// <reference path="../../../typings/tsd.d.ts" /> +/// <reference path="common.ts" /> +module tf.graph.parser { + +/** + * Parses a native js value, which can be either a string, boolean or number. + * + * @param value The value to be parsed. + */ +function parseValue(value: string): string|number|boolean { + if (value === "true") { + return true; + } + if (value === "false") { + return false; + } + let firstChar = value[0]; + if (firstChar === "\"") { + return value.substring(1, value.length - 1); + } + let num = parseFloat(value); + return isNaN(num) ? value : num; +} + +/** + * Fetches a text file and returns a promise of the result. + */ +export function readPbTxt(filepath: string): Promise<string> { + return new Promise<string>(function(resolve, reject) { + d3.text(filepath, function(error, text) { + if (error) { + reject(error); + return; + } + resolve(text); + }); + }); +} + +/** + * Fetches and parses a json file and returns a promise of the result. + */ +export function readJson(filepath: string): Promise<Object> { + return new Promise<Object>(function(resolve, reject) { + d3.json(filepath, function(error, text) { + if (error) { + reject(error); + return; + } + resolve(text); + }); + }); +} + +/** + * Reads the graph and stats file (if available), parses them and returns a + * promise of the result. + */ +export function readAndParseData(dataset: {path: string, statsPath: string}, + pbTxtContent: string, tracker: ProgressTracker): + Promise<{ nodes: TFNode[], statsJson: Object }|void> { + let graphPbTxt; + let statsJson; + return runAsyncTask("Reading graph.pbtxt", 20, () => { + return pbTxtContent || readPbTxt(dataset.path); + }, tracker) + .then(function(text) { + graphPbTxt = text; + return runAsyncTask("Reading stats.pbtxt", 20, () => { + return (dataset != null && dataset.statsPath != null) ? + readJson(dataset.statsPath) : null; + }, tracker); + }) + .then(function(json) { + statsJson = json; + return runAsyncTask("Parsing graph.pbtxt", 60, () => { + return parsePbtxt(graphPbTxt); + }, tracker); + }) + .then(function(nodes) { + return { + nodes: nodes, + statsJson: statsJson + }; + }) + .catch(function(reason) { + throw new Error("Failure parsing graph definition"); + }); +} + +/** + * Parses a proto txt file into a javascript object. + * + * @param input The string contents of the proto txt file. + * @return The parsed object. + */ +export function parsePbtxt(input: string): TFNode[] { + let output: { [name: string]: any; } = { node: [] }; + let stack = []; + let path: string[] = []; + let current: { [name: string]: any; } = output; + + function splitNameAndValueInAttribute(line: string) { + let colonIndex = line.indexOf(":"); + let name = line.substring(0, colonIndex).trim(); + let value = parseValue(line.substring(colonIndex + 2).trim()); + return { + name: name, + value: value + }; + } + + /** + * Since proto-txt doesn't explicitly say whether an attribute is repeated + * (an array) or not, we keep a hard-coded list of attributes that are known + * to be repeated. This list is used in parsing time to convert repeated + * attributes into arrays even when the attribute only shows up once in the + * object. + */ + let ARRAY_ATTRIBUTES: {[attrPath: string] : boolean} = { + "node": true, + "node.input": true, + "node.attr": true, + "node.attr.value.list.type": true, + "node.attr.value.shape.dim": true, + "node.attr.value.tensor.string_val": true, + "node.attr.value.tensor.tensor_shape.dim": true + }; + + /** + * Adds a value, given the attribute name and the host object. If the + * attribute already exists, but is not an array, it will convert it to an + * array of values. + * + * @param obj The host object that holds the attribute. + * @param name The attribute name (key). + * @param value The attribute value. + * @param path A path that identifies the attribute. Used to check if + * an attribute is an array or not. + */ + function addAttribute(obj: Object, name: string, + value: Object|string|number|boolean, path: string[]): void { + // We treat "node" specially since it is done so often. + let existingValue = obj[name]; + if (existingValue == null) { + obj[name] = path.join(".") in ARRAY_ATTRIBUTES ? [value] : value; + } else if (Array.isArray(existingValue)) { + existingValue.push(value); + } else { + obj[name] = [existingValue, value]; + } + } + + // Run through the file a line at a time. + let startPos = 0; + while (startPos < input.length) { + let endPos = input.indexOf("\n", startPos); + if (endPos === -1) { + endPos = input.length; + } + let line = input.substring(startPos, endPos); + startPos = endPos + 1; + if (!line) { + continue; + } + switch (line[line.length - 1]) { + case "{": // create new object + let name = line.substring(0, line.length - 2).trim(); + let newValue: { [name: string]: any; } = {}; + stack.push(current); + path.push(name); + addAttribute(current, name, newValue, path); + current = newValue; + break; + case "}": + current = stack.pop(); + path.pop(); + break; + default: + let x = splitNameAndValueInAttribute(line); + addAttribute(current, x.name, x.value, path.concat(x.name)); + break; + } + } + + return output["node"]; +} + +} // Close module tf.graph.parser. diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/render.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/render.ts new file mode 100644 index 0000000000..363f006fd5 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/render.ts @@ -0,0 +1,1360 @@ +/// <reference path="graph.ts" /> +/// <reference path="hierarchy.ts" /> + +/** + * Package for the Render Hierarchy for TensorFlow graph. + */ + +module tf.graph.render { + +/** + * Color parameters for node encoding. + * @type {Object} + */ +export let MetanodeColors = { + SATURATION: 0.6, + LIGHTNESS: 0.85, + /** + * Neutral color to use when the node is expanded (used when coloring by + * compute time, memory and device). + */ + EXPANDED_COLOR: "#f0f0f0", + /** + * Standard hue values for node color palette. + */ + HUES: [220, 100, 180, 40, 20, 340, 260, 300, 140, 60], + STRUCTURE_PALETTE: function(id: number, lightened? : boolean) { + // The code below is a flexible way to computationally create a set + // of colors that go well together. + let hues = MetanodeColors.HUES; + let n = hues.length; + let hue = hues[id % n]; + let m = Math.sin(hue * Math.PI / 360); + let sat = lightened ? 30 : 90 - 60 * m; + let light = lightened ? 95 : 80; + return d3.hsl(hue, .01 * sat, .01 * light).toString(); + }, + DEVICE_PALETTE: function (index: number): string { + return MetanodeColors.STRUCTURE_PALETTE(index); + }, + UNKNOWN: "#eee", + GRADIENT_OUTLINE: "#888" +}; + +/** + * Parameters that affect how the graph is rendered on the screen. + */ +interface RenderGraphParams { + /** + * Whether to extract high degree nodes from the core part of the graph. + */ + enableExtraction: boolean; + /** + * Maximum in-degree that a node can have without being considered as + * high in-degree node. + */ + maxInDegree: number; + /** + * Maximum out-degree that a node can have without being considered as + * high out-degree node. + */ + maxOutDegree: number; + /** + * Maximum number of control edges a node can have before they aren't + * displayed. + */ + maxControlDegree: number; + /** + * Types patterns for predefined out-extract nodes, which are + * sink-like nodes that will be extracted from the main graph. + */ + outExtractTypes: string[]; + + /** + * Types patterns for predefined in-extract nodes, which are + * source-like nodes that will be extracted from the main graph. + */ + inExtractTypes: string[]; + + /** + * When removing edges from a high degree node, remove all of its edges if + * detachAllEdgesForHighDegree is true. Otherwise remove all in-edges if + * the node has high in-degree, or all out-edges if the node has high + * out-degree. + */ + detachAllEdgesForHighDegree: boolean; + + /** + * After extracting high in/out degree nodes and predefined + * source-like/sink-like, extract isolated nodes to the side + * if this extractIsolatedNodesWithAnnotationsOnOneSide is true. + */ + extractIsolatedNodesWithAnnotationsOnOneSide: boolean; + + /** + * Whether to add bridge nodes and edges to the core when building the + * subhierarchy of an expanded metanode. See buildSubhierarchy(). + */ + enableBridgegraph: boolean; + + /** + * 2 colors, for the minimum and maximum value respectively, whenever we + * have a gradient scale. + */ + minMaxColors: string[]; + + /** + * Maximum number of annotations to be displayed on a node. + */ + maxAnnotations: number; +} + +/** + * Stores the rendering information, such as x and y coordinates, + * for each node in the graph. + */ +export class RenderGraphInformation { + private hierarchy: hierarchy.Hierarchy; + private index: {[nodeName: string]: RenderNodeInformation}; + private params: RenderGraphParams; + private deviceColorMap: d3.scale.Ordinal<string, string>; + private memoryUsageScale: d3.scale.Linear<string, string>; + private computeTimeScale: d3.scale.Linear<string, string>; + // Since the rendering information for each node is constructed lazily, + // upon node's expansion by the user, we keep a map between the node's name and + // whether the rendering information was already constructed for that node. + private hasSubhierarchy: {[nodeName: string]: boolean}; + root: RenderGroupNodeInformation; + + constructor(hierarchy: hierarchy.Hierarchy, params: RenderGraphParams) { + this.hierarchy = hierarchy; + this.index = {}; + this.deviceColorMap = d3.scale.ordinal<string>() + .domain(hierarchy.devices) + .range(_.map(d3.range(hierarchy.devices.length), + MetanodeColors.DEVICE_PALETTE)); + + let topLevelGraph = hierarchy.root.metagraph; + // Find the maximum and minimum memory usage. + let memoryExtent = d3.extent(topLevelGraph.nodes(), + (nodeName, index) => { + let node = topLevelGraph.node(nodeName); + // Some ops don't have stats at all. + if (node.stats != null) { + return node.stats.totalBytes; + } + }); + this.memoryUsageScale = d3.scale.linear<string, string>() + .domain(memoryExtent) + .range(params.minMaxColors); + + // Find also the minimum and maximum compute time. + let computeTimeExtent = d3.extent(topLevelGraph.nodes(), (nodeName, index) => { + let node = topLevelGraph.node(nodeName); + // Some ops don't have stats at all. + if (node.stats != null) { + return node.stats.totalMicros; + } + }); + this.computeTimeScale = d3.scale.linear<string, string>() + .domain(computeTimeExtent) + .range(params.minMaxColors); + + // Maps node name to whether the rendering hierarchy was already constructed. + this.hasSubhierarchy = {}; + this.params = params; + this.root = new RenderGroupNodeInformation(hierarchy.root); + this.index[hierarchy.root.name] = this.root; + this.buildSubhierarchy(hierarchy.root.name); + this.root.expanded = true; + } + + getRenderNodeByName(nodeName: string): RenderNodeInformation { + return this.index[nodeName]; + } + + /** + * Return the nearest ancestor node, including itself, that is visible + * in the visualization. This method is used so that we can select + * (highlight) a node that isn't drawn yet, by selecting (highlighting) + * its nearest ancestor that has been drawn. + */ + getNearestVisibleAncestor(name: string): string { + let path = getHierarchicalPath(name); + for (let i = 0; i < path.length; i++) { + let nodeName = path[i]; + // Op nodes have expanded set to false by default. + if (!this.getRenderNodeByName(nodeName).expanded) { + return nodeName; + } + } + // Fallthrough. If everything was expanded return the node. + return name; + } + + // TODO(jimbo): Delete this an any code it touches (all deprecated). + setDepth(depth: number): void { + setGroupNodeDepth(this.root, +depth); + } + + buildSubhierarchy(nodeName: string): void { + // Terminate if the rendering hierarchy was already constructed + // for this node. + if (nodeName in this.hasSubhierarchy) { + return; + } + + let renderNodeInfo = this.index[nodeName]; + + // If it is not a meta node or a series node, don't do anything. + if (renderNodeInfo.node.type !== NodeType.META && + renderNodeInfo.node.type !== NodeType.SERIES) { + return; + } + + // At this point we know the rendering information is about a group node. + let renderGroupNodeInfo = <RenderGroupNodeInformation> renderNodeInfo; + let metagraph = renderGroupNodeInfo.node.metagraph; + let coreGraph = renderGroupNodeInfo.coreGraph; + + // Create render nodes to represent each child from the metagraph. Although + // these will initially be added to the coreGraph, they may later be + // extracted. Also, due to extraction, the coreGraph may contain disjoint + // groups between which there is no visible path (other than annotations). + _.each(metagraph.nodes(), childName => { + + let childNode = metagraph.node(childName); + let childRenderInfo = childNode.isGroupNode ? + new RenderGroupNodeInformation(<GroupNode>childNode) : + new RenderNodeInformation(childNode); + this.index[childName] = childRenderInfo; + coreGraph.setNode(childName, childRenderInfo); + + if (childRenderInfo.node.stats != null) { + childRenderInfo.memoryColor = + this.memoryUsageScale(childRenderInfo.node.stats.totalBytes); + childRenderInfo.computeTimeColor = + this.computeTimeScale(childRenderInfo.node.stats.totalMicros); + } + + if (!childNode.isGroupNode) { + _.each((<OpNode>childNode).inEmbeddings, embedding => { + let renderMetaedgeInfo = new RenderMetaedgeInformation(null); + addInAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo, + AnnotationType.CONSTANT, this.params); + this.index[embedding.name] = new RenderNodeInformation(embedding); + }); + _.each((<OpNode>childNode).outEmbeddings, embedding => { + let renderMetaedgeInfo = new RenderMetaedgeInformation(null); + addOutAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo, + AnnotationType.SUMMARY, this.params); + this.index[embedding.name] = new RenderNodeInformation(embedding); + }); + let device = (<OpNode>childRenderInfo.node).device; + if (device != null) { + childRenderInfo.deviceColors = [{ + color: this.deviceColorMap(device), + proportion: 1.0 + }]; + } + } else { + // Make a list of tuples (device, proportion), where proportion + // is the fraction of op nodes that have that device. + let pairs = _.pairs((<GroupNode> childNode).deviceHistogram); + if (pairs.length > 0) { + // Compute the total # of devices. + let numDevices = _.sum(pairs, _.last); + childRenderInfo.deviceColors = _.map(pairs, pair => { + return { + color: this.deviceColorMap(pair[0]), + // Normalize to a proportion of total # of devices. + proportion: pair[1] / numDevices + }; + }); + } + } + }); + + // Add render metaedge info for edges in the metagraph. + _.each(metagraph.edges(), edgeObj => { + let metaedge = metagraph.edge(edgeObj); + let renderMetaedgeInfo = new RenderMetaedgeInformation(metaedge); + coreGraph.setEdge(edgeObj.v, edgeObj.w, renderMetaedgeInfo); + }); + + if (this.params.enableExtraction && + renderGroupNodeInfo.node.type === NodeType.META) { + extractHighDegrees(renderGroupNodeInfo, this.params); + } + + // Record that we constructed the rendering hierarchy for this node, so we + // don't construct it another time. + this.hasSubhierarchy[nodeName] = true; + + // Look up the parent node's render information and short circuit if none. + let parentNode = renderGroupNodeInfo.node.parentNode; + if (!parentNode) { + return; + } + let parentNodeInfo = + <RenderGroupNodeInformation> this.index[parentNode.name]; + + // Utility function for computing the name of a bridge node. + let getBridgeNodeName = (inbound, ...rest) => + rest.concat([inbound ? "IN" : "OUT"]).join("~~"); + + // Build out the bridgegraph. + let bridgegraph = this.hierarchy.getBridgegraph(nodeName); + + // Look for popular nodes so we can make annotations instead of paths. + let otherCounts = { + // Counts of edges coming INTO other nodes by name (outgoing from self). + in: <{[nodeName: string]: number}> {}, + // Counts of edges going OUT from other nodes by name (coming into self). + out: <{[nodeName: string]: number}> {}, + // Counts of all control edges involving other nodes by name. + control: <{[nodeName: string]: number}> {}, + }; + _.each(bridgegraph.edges(), e => { + // An edge is inbound if its destination node is in the metagraph. + let inbound = !!metagraph.node(e.w); + let otherName = inbound ? e.v : e.w; + let metaedge = bridgegraph.edge(e); + if (!metaedge.numRegularEdges) { + otherCounts.control[otherName] = + (otherCounts.control[otherName] || 0) + 1; + } else if (inbound) { + otherCounts.out[otherName] = (otherCounts.out[otherName] || 0) + 1; + } else { + otherCounts.in[otherName] = (otherCounts.in[otherName] || 0) + 1; + } + }); + + // Add annotations and edges for bridgegraph relationships. + let hierarchyNodeMap = this.hierarchy.getNodeMap(); + _.each(bridgegraph.edges(), bridgeEdgeObj => { + let bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj); + + // Determine whether this bridge edge is incoming by checking the + // metagraph for a node that matches the destination end. + let inbound = !!metagraph.node(bridgeEdgeObj.w); + + // Based on the direction of the edge, one endpoint will be an immediate + // child of this renderNodeInfo, and the other endpoint will be a sibling + // of the parent (or an ancestor further up). + let [childName, otherName] = + inbound ? + [bridgeEdgeObj.w, bridgeEdgeObj.v] : + [bridgeEdgeObj.v, bridgeEdgeObj.w]; + + let childRenderInfo = this.index[childName]; + let otherRenderInfo = this.index[otherName]; + let otherNode = + otherRenderInfo ? + otherRenderInfo.node : + hierarchyNodeMap[otherName]; + + // Determine whether this edge is a control edge between nodes where + // either node is high-degree with respect to control edges. This will + // be a signal to show it as an annotation instead of a bridge edge. + let isHighDegreeControlEdge = !bridgeMetaedge.numRegularEdges && + otherCounts.control[otherName] > this.params.maxControlDegree; + + let [annotations, childAnnotations] = + inbound ? + [renderNodeInfo.inAnnotations, childRenderInfo.inAnnotations] : + [renderNodeInfo.outAnnotations, childRenderInfo.outAnnotations]; + + let isOtherHighDegree = + inbound ? + otherCounts.out[otherName] > this.params.maxOutDegree : + otherCounts.in[otherName] > this.params.maxInDegree; + + // The adjoining render metaedge info from the parent's coreGraph, if any. + // It will either be a Metaedge involving this node directly, if it + // previously came from a metagraph, or it'll be a Metaedge involving + // a previously created bridge node standing in for the other node. + let adjoiningMetaedge = null; + + // We can only hope to render a bridge path if: + // - bridgegraph paths are enabled, + // - the other node is not too high-degree, + // - the child is in the core (not extracted for being high-degree), and + // - there's a path (in the traversal sense) between child and other. + let canDrawBridgePath = false; + if (this.params.enableBridgegraph && + !isOtherHighDegree && + !isHighDegreeControlEdge && + childRenderInfo.isInCore()) { + + // Utility function for finding an adjoining metaedge. + let findAdjoiningMetaedge = targetName => { + let adjoiningEdgeObj: graphlib.EdgeObject = + inbound ? + { v: targetName, w: nodeName } : + { v: nodeName, w: targetName }; + return <RenderMetaedgeInformation> + parentNodeInfo.coreGraph.edge(adjoiningEdgeObj); + }; + + adjoiningMetaedge = findAdjoiningMetaedge(otherName); + if (!adjoiningMetaedge) { + adjoiningMetaedge = findAdjoiningMetaedge( + getBridgeNodeName(inbound, otherName, parentNode.name)); + } + + canDrawBridgePath = !!adjoiningMetaedge; + } + + // Although dataflow edges are acyclic, control dependency edges may + // actually point "backwards" in the graph. If this bridgeMetaedge is + // a control dependency, we need to determine whether it's backwards + // pointing so that we render it appropriately. + // + // For instance, say we're rendering a graph with nodes named A/B and Z/Y, + // and we're currently rendering the bridgegraph for A. Further, let's say + // that there was an original BaseEdge from A/B->Z/Y and a CONTROL EDGE + // from Z/Y=>A/B. + // + // +----------------+ + // | A | + // | +-----+ | +------+ + // | | B |>----->|>------->| Z | + // | | | | | | + // | | | * | | | + // | | |<=====<|<=======<| | + // | +-----+ | +------+ + // +----------------+ + // + // When we render the subhierarchy for Metanode A, we'll come across a + // control-only Metaedge in the bridgegraph from Z=>A/B (*). The question + // is whether this edge is backwards. + // + // To answer that question, we follow the chain of adjoining metaedges + // until we reach the topmost one. In this case, that's the control-only + // Metaedge Z=>A in the ROOT's metagraph. We determine that this edge + // is backwards by looking at the topological ordering of ROOT's metagraph + // (which ignores control edges) and seeing that Z comes AFTER A. + // + // The property of being backwards is independent of whether the edge + // is inbound or outbound. In the preceeding example, if we were building + // the subhierarchy for Z, we'd find bridge edge Z/Y=>A, walk to its + // topmost adjoining metaedge Z=>A and discover that it's backwards. + let backwards = false; + if (adjoiningMetaedge && !bridgeMetaedge.numRegularEdges) { + // Find the top-most adjoining render metaedge information, and the + // GroupNode whose metagraph must contain the associated metaedge. + let topAdjoiningMetaedge = adjoiningMetaedge; + let topGroupNode = parentNodeInfo.node; + while (topAdjoiningMetaedge.adjoiningMetaedge) { + topAdjoiningMetaedge = topAdjoiningMetaedge.adjoiningMetaedge; + topGroupNode = <GroupNode>topGroupNode.parentNode; + } + + // Check against the topological ordering for the top node. The current + // bridge metaedge we're evaluating is backwards if its source comes + // after its destination. + let ordering = this.hierarchy.getTopologicalOrdering(topGroupNode.name); + let e = topAdjoiningMetaedge.metaedge; + backwards = ordering[e.v] > ordering[e.w]; + } + + // Render backwards control edges as annotations. + canDrawBridgePath = canDrawBridgePath && !backwards; + + // If we can't make a bridge path for any reason, then we add an + // annotation instead. + if (!canDrawBridgePath) { + childAnnotations.push(new Annotation( + otherNode, + otherRenderInfo, + new RenderMetaedgeInformation(bridgeMetaedge), + AnnotationType.SHORTCUT, + inbound), this.params); + return; + } + + // At this point, all conditions have been met for drawing a bridge path. + + // Find or create the IN/OUT node representing otherNode. + let bridgeContainerName = getBridgeNodeName(inbound, nodeName); + let bridgeNodeName = getBridgeNodeName(inbound, otherName, nodeName); + let bridgeNodeRenderInfo = coreGraph.node(bridgeNodeName); + if (!bridgeNodeRenderInfo) { + + // Find or create the directional container for the bridge node. + let bridgeContainerInfo = coreGraph.node(bridgeContainerName); + if (!bridgeContainerInfo) { + let bridgeContainerNode: BridgeNode = { + // Important node properties. + name: bridgeContainerName, + type: NodeType.BRIDGE, + // Unused node properties. + isGroupNode: false, + cardinality: 0, + parentNode: null, + stats: null, + // BridgeNode properties. + inbound: inbound, + }; + bridgeContainerInfo = + new RenderNodeInformation(bridgeContainerNode); + this.index[bridgeContainerName] = bridgeContainerInfo; + coreGraph.setNode(bridgeContainerName, bridgeContainerInfo); + } + + let bridgeNode: BridgeNode = { + // Important node properties. + name: bridgeNodeName, + type: NodeType.BRIDGE, + // Unimportant node properties. + isGroupNode: false, + cardinality: 1, + parentNode: null, + stats: null, + // BridgeNode properties. + inbound: inbound, + }; + bridgeNodeRenderInfo = new RenderNodeInformation(bridgeNode); + this.index[bridgeNodeName] = bridgeNodeRenderInfo; + coreGraph.setNode(bridgeNodeName, bridgeNodeRenderInfo); + + // Set bridgeNode to be a graphlib child of the container node. + coreGraph.setParent(bridgeNodeName, bridgeContainerName); + bridgeContainerInfo.node.cardinality++; + } + + // Create and add a bridge render metaedge. + let bridgeRenderMetaedge = + new RenderMetaedgeInformation(bridgeMetaedge); + bridgeRenderMetaedge.adjoiningMetaedge = adjoiningMetaedge; + inbound ? + coreGraph.setEdge(bridgeNodeName, childName, bridgeRenderMetaedge) : + coreGraph.setEdge(childName, bridgeNodeName, bridgeRenderMetaedge); + + }); // End _.each(bridgegraph.edges). + + // For each bridge container (IN and/or OUT), add structural edges between + // terminal nodes and that container. A terminal node is one which has no + // non-bridge edges in the direction of the container. + // + // For example, consider a Metanode A which contains two child nodes A/B + // and A/C. Let's say it has one edge in the metagraph from A/B->A/C, and + // one edge in the bridgegraph from Z->A/C. + // + // At this point, we've added a container bridge node IN to house all + // incoming bridge nodes. We'v alse added a bridge node Z' (with parent IN) + // to A, and a bridge edge from Z'->C. + // + // +----------------------+ + // | A +---+ | + // | +------>| C | | + // | | +---+ | + // | | ^ | + // | | | | + // | | +----|----+ | + // | | | IN | | | + // | +---+ | +---+ | | + // | | B | | | Z'| | | + // | +---+ | +---+ | | + // | +---------+ | + // +----------------------+ + // + // With no other help, dagre would lay out B and Z' on the same level, + // because both of them have no incoming edges. In other words, B is a + // terminal node in the INCOMING direction. + // + // But we want to force dagre to lay out Z' (and everything in IN) lower + // than all non-bridge nodes, so that there's enough room for the bridge + // edges after they've been adjusted to meet up with paths coming in from + // outside. + // + // To force Z' (and all other bridge nodes) to be lowest in the graph, we + // identify terminal nodes like B and give them structural edges to + // a new structural bridge node S which we add to IN. + // + // +----------------------+ + // | A +---+ | + // | +--->| C | | + // | | +---+ | + // | +---+ ^ | + // | | B | | | + // | +---+ | | + // | ^ | | + // | | | | + // | +----|------|----+ | + // | |IN | | | | + // | | +---+ +---+ | | + // | | | S | | Z'| | | + // | | +---+ +---+ | | + // | +----------------+ | + // +----------------------+ + // + // This ensures that dagre will lay out the bridge containers strictly at + // the ends of the graph. The structural edges will never be seen in the + // visualization except as a debugging aid. + _.each([true, false], inbound => { + let bridgeContainerName = getBridgeNodeName(inbound, nodeName); + let bridgeContainerInfo = coreGraph.node(bridgeContainerName); + if (!bridgeContainerInfo) { + return; + } + _.each(coreGraph.nodes(), childName => { + // Short-circuit if this child is a bridge node or it's not a terminal + // node in the direction we're interested in. + let childNodeInfo = coreGraph.node(childName); + if (childNodeInfo.node.type === NodeType.BRIDGE) { + return; + } + let isTerminal = inbound ? + !coreGraph.predecessors(childName).length : + !coreGraph.successors(childName).length; + if (!isTerminal) { + return; + } + + // Find or create a bridge node in the container for all structural + // metaedges. It would have been nice to skip this step and simply + // set a metaedge between the terminal node and the container node, but + // in that case, something about the graph upsets dagre.layout()'s + // longestPath algorithm (was getting errors due to an undefined). + let structuralNodeName = + getBridgeNodeName(inbound, nodeName, "STRUCTURAL_TARGET"); + let structuralRenderInfo = coreGraph.node(structuralNodeName); + if (!structuralRenderInfo) { + let bridgeNode: BridgeNode = { + // Important Node properties. + name: structuralNodeName, + type: NodeType.BRIDGE, + // Unimportant Node properties. + isGroupNode: false, + cardinality: 1, + parentNode: null, + stats: null, + // BridgeNode properties. + inbound: inbound, + }; + structuralRenderInfo = new RenderNodeInformation(bridgeNode); + structuralRenderInfo.structural = true; + this.index[structuralNodeName] = structuralRenderInfo; + coreGraph.setNode(structuralNodeName, structuralRenderInfo); + bridgeContainerInfo.node.cardinality++; + coreGraph.setParent(structuralNodeName, bridgeContainerName); + } + + // Create the structural Metaedge and insert it. + let structuralMetaedgeInfo = new RenderMetaedgeInformation(null); + structuralMetaedgeInfo.structural = true; + structuralMetaedgeInfo.weight--; // Reduce weight for dagre layout. + inbound ? + coreGraph.setEdge( + structuralNodeName, childName, structuralMetaedgeInfo) : + coreGraph.setEdge( + childName, structuralNodeName, structuralMetaedgeInfo); + }); + }); + } +} + +/** + * A class for rendering annotation object which contains label + * about the node embedded as annotation, type of annotation and the location + * of both the annotation's node and edge. + * + * Annotation objects include embedded constants, embedded summary, and + * edge shortcuts. + */ +export class Annotation { + node: Node; + renderNodeInfo: RenderNodeInformation; + renderMetaedgeInfo: RenderMetaedgeInformation; + annotationType: AnnotationType; + /** + * Center position of annotation relative to the host + * node's center x. + */ + dx: number; + /** + * Center position of annotation relative to the host + * node's center y. + */ + dy: number; + width: number; + height: number; + /** + * A flag whether it is an in-annotation (if true) or + * out-annotation (if false). + */ + isIn: boolean; + /** Label horizontal offset from the end of the node shape */ + labelOffset: number; + /** + * Array of points for edges from the annotation to its host + * node. Each point contains the point location, relative to + * the host node's center. + */ + points: {dx: number, dy: number}[]; + + /** + * Creates a new Annotation. + * + * @param node The underlying node this annotation points to. + * @param renderNodeInfo The render information for the underlying node + * this annotation points to. This can be null if the annotation + * denotes an embedding (constant, summary), in which case we + * use the node property. + * @param renderMetaedgeInfo The render information for the edge associated + * with the annotation. + * @param type The type of the annotation. + * @param isIn True if it is an in-annotation. False if it is an + * out-annotation. + */ + constructor(node: Node, renderNodeInfo: RenderNodeInformation, + renderMetaedgeInfo: RenderMetaedgeInformation, type: AnnotationType, + isIn: boolean) { + this.node = node; + this.renderNodeInfo = renderNodeInfo; + this.renderMetaedgeInfo = renderMetaedgeInfo; + this.annotationType = type; + // Properties specified by layout + this.dx = 0; + this.dy = 0; + this.width = 0; + this.height = 0; + + this.isIn = isIn; + this.points = []; + } +}; + +export enum AnnotationType {SHORTCUT, CONSTANT, SUMMARY, ELLIPSIS}; + +/** + * Manages a list of annotations. Two will be used for each + * RenderNodeInformation, one for in annotations and one for out annotations. + */ +export class AnnotationList { + /** + * List of visually drawable annotations, may include an ellipses annotation + * if the number added exceeds the number specified by maxAnnotations. + */ + list: Annotation[]; + + /** + * Set of nodes which have been added as annotations to this list, so we can + * prevent duplicates. + */ + nodeNames: { [nodeName: string]: boolean }; + + constructor() { + this.list = []; + this.nodeNames = {}; + } + + /** + * Append an annotation to the list, or a stand-in ellipsis annotation instead + * if this would make it too many. + */ + push(annotation: Annotation, params: RenderGraphParams): void { + if (annotation.node.name in this.nodeNames) { + return; // Skip duplicate annotation. + } + this.nodeNames[annotation.node.name] = true; + + if (this.list.length < params.maxAnnotations) { + this.list.push(annotation); + return; + } + + let lastAnnotation = this.list[this.list.length - 1]; + if (lastAnnotation.annotationType === AnnotationType.ELLIPSIS) { + let ellipsisNode = <EllipsisNode>lastAnnotation.node; + ellipsisNode.setNumMoreNodes(++ellipsisNode.numMoreNodes); + return; + } + + let ellipsisNode = new tf.graph.EllipsisNodeImpl(1); + this.list.push(new Annotation(ellipsisNode, + new RenderNodeInformation(ellipsisNode), null, + AnnotationType.ELLIPSIS, annotation.isIn)); + } +} + +/** + * Contains rendering information about a node in the hierarchical graph. + */ +export class RenderNodeInformation { + /** Reference to the original underlying Node from the hierarchical graph. */ + node: Node; + /** Whether the node is expanded or not. */ + expanded: boolean; + /** + * List of rendering information about in-annotations like constants and + * shortcuts to high-degree nodes. + */ + inAnnotations: AnnotationList; + /** List of rendering information about out-annotations (e.g. summary nodes) */ + outAnnotations: AnnotationList; + + // --- Params specified by layout --- // + + /** Center x position */ + x: number; + /** Center y position */ + y: number; + /** Width of the node's shape */ + width: number; + /** Height of the node's shape. */ + height: number; + /** Width of the bounding box for all in-annotations. */ + inboxWidth: number; + /** Width of the bounding box for all out-annotations. */ + outboxWidth: number; + /** + * Whether the node should be excluded from the scene. + * This is only used when there are too many items in a series so we only + * want to include top N ones. + */ + // TODO(jimbo): Now that series rendering is non-recursive, remove this and + // all its uses from the code base. + excluded: boolean; + + // --- Params used in drawing the bridge paths --- // + + /** + * All bridge nodes are meant to be invisible, but whereas most represent a + * relationship from the underlying graph hierarchy, some exist solely for + * layout reasons. Specifically, those bridge nodes which have only structural + * rendering metaedges. + */ + structural: boolean; + + // --- Params for the size of the node box --- // + + /** Label vertical offset from the center of node shape */ + labelOffset: number; + /** X-space between each extracted node and the core graph. */ + extractXOffset: number; + /** Rectangle radius (for making rounded rectangle) */ + radius: number; + + // --- Params for expanded node --- // + + /** Label height for expanded node. */ + labelHeight: number; + // Paddings between inner subscene and the border of the expanded node. + paddingTop: number; + paddingLeft: number; + paddingRight: number; + paddingBottom: number; + + /** Width of the whole node including its shape and its annotations */ + outerWidth: number; + /** Height of the whole node including its shape and its annotations */ + outerHeight: number; + /** + * Whether a node is extracted as source-like (having high out-degree or matching + * predefined in-extract pattern.) + */ + isInExtract: boolean; + /** + * Whether a node is extracted as sink-like (having high in-degree or matching + * predefined out-extract pattern.) + */ + isOutExtract: boolean; + + /** + * List of (color, proportion) tuples based on the proportion of devices of + * its children. If this node is an op node, this list will have only one + * color with proportion 1.0. + */ + deviceColors: {color: string, proportion: number}[]; + + /** + * Color according to the memory usage of this node. + */ + memoryColor: string; + + /** + * Color according to the compute time of this node. + */ + computeTimeColor: string; + + constructor(node: Node) { + this.node = node; + this.expanded = false; + this.inAnnotations = new AnnotationList(); + this.outAnnotations = new AnnotationList(); + // Params specified by layout + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + this.inboxWidth = 0; + this.outboxWidth = 0; + + this.excluded = false; + + // Params for bridge paths. + this.structural = false; + + // Params for node box. + this.labelOffset = 0; + this.extractXOffset = 0; + this.radius = 0; + + // Params for expanded node + this.labelHeight = 0; + this.paddingTop = 0; + this.paddingLeft = 0; + this.paddingRight = 0; + this.paddingBottom = 0; + + this.outerWidth = 0; + this.outerHeight = 0; + this.isInExtract = false; + this.isOutExtract = false; + } + + isInCore(): boolean { + return !this.isInExtract && !this.isOutExtract; + } +} + +/** + * Contains rendering information about a Metaedge from the underlying + * hierarchical graph. It may be from either a metagraph or a bridgegraph. + */ +export class RenderMetaedgeInformation { + /** + * Reference to the original underlying Metaedge from the hierarchical graph, + * if any. This will be null for the edges which connect OpNodes to their + * embeddings, for example. + */ + metaedge: Metaedge; + + /** + * Reference to the adjoining RenderMeteaedgeInformation from the parent's + * coreGraph. This is used during layout to determine the point at which this + * edge should touch the node's bounding box. This property will be null for + * edges which terminate at a node on both ends (all non-bridge edges). + */ + adjoiningMetaedge: RenderMetaedgeInformation; + + /** + * Most of the time, a RenderMetaedgeInformation object represents a real + * edge between nodes in the underlying graph structure. But sometimes, an + * edge only exsts for layout purposes. These structural edges are added + * during buildSubhierarchy() to force dagre.layout() to put bridge nodes + * at the ends of the flow. + * @see buildSubhierarchy() + */ + structural: boolean; + + /** + * Weight of the edge, used by dagre when deciding how important an edge is. + * Edges with higher weight are made shorter and straighter. The default + * dagre uses is 1. + */ + weight: number; + + /** + * X and Y coordinate pairs of the points in the path of the edge. + * @see tf.graph.node.subsceneAdjustPaths + */ + points: any[]; + + /** + * D3 selection of the group containing the path that displays this edge. + */ + edgeGroup: d3.Selection<RenderMetaedgeInformation>; + + constructor(metaedge: Metaedge) { + this.metaedge = metaedge; + this.adjoiningMetaedge = null; + this.structural = false; + this.weight = 1; + } +} + +function addInAnnotation(node: RenderNodeInformation, predecessor: Node, + predecessorRenderInfo: RenderNodeInformation, edge: any, + type: AnnotationType, params: RenderGraphParams): void { + let annotation = new Annotation(predecessor, predecessorRenderInfo, edge, + type, true); + node.inAnnotations.push(annotation, params); +} + +function addOutAnnotation(node: RenderNodeInformation, successor: Node, + successorRenderInfo: RenderNodeInformation, edge: any, + type: AnnotationType, params: RenderGraphParams): void { + let annotation = new Annotation(successor, successorRenderInfo, edge, + type, false); + node.outAnnotations.push(annotation, params); +} + +function setGraphDepth(graph: graphlib.Graph<RenderNodeInformation, any>, + depth: number) { + _.each(graph.nodes(), nodeName => { + let child = graph.node(nodeName); + child.expanded = depth > 1; // set all child of depth 1 to collapsed + if (depth > 0) { + switch (child.node.type) { + case NodeType.META: + case NodeType.SERIES: + setGroupNodeDepth(<RenderGroupNodeInformation>child, depth - 1); + break; + // Do nothing for leaf + } + } + }); +}; + +export class RenderGroupNodeInformation extends RenderNodeInformation { + node: GroupNode; + /** + * The core graph is derived from the underlying node's metagraph, minus + * the extracted source-like and sink-like nodes. + */ + coreGraph: graphlib.Graph<RenderNodeInformation, RenderMetaedgeInformation>; + /** Size of the bounding box for a metanode's core graph. */ + coreBox: { + width: number, + height: number, + }; + /** Size of the bounding box for a metanode's isolated in-extract children. */ + inExtractBox: {width: number, height: number}; + /** Size of the bounding box for a metanode's isolated out-extract children. */ + outExtractBox: {width: number, height: number}; + /** Array of isolated in-extract nodes. */ + isolatedInExtract: RenderNodeInformation[]; + /** Array of isolated out-extract nodes. */ + isolatedOutExtract: RenderNodeInformation[]; + + constructor(groupNode: GroupNode) { + super(groupNode); + let metagraph = groupNode.metagraph; + let gl = metagraph.graph(); + this.coreGraph = + createGraph<RenderNodeInformation, RenderMetaedgeInformation>( + gl.name, GraphType.CORE, { compound: true }); + this.coreBox = {width: 0, height: 0}; + this.inExtractBox = {width: 0, height: 0}; + this.outExtractBox = {width: 0, height: 0}; + this.isolatedInExtract = []; + this.isolatedOutExtract = []; + } +} + +function setGroupNodeDepth(renderInfo: RenderGroupNodeInformation, + depth: number): void { + if (renderInfo.coreGraph) { + setGraphDepth(renderInfo.coreGraph, depth); + } +} + +/** + * Remove an edge from the graph and add annotations to both ends of the edge. + * + * @param The core graph. + * @param v Source name. + * @param w Sink name. + */ +function createShortcut(graph: graphlib.Graph<RenderNodeInformation, {}>, + v: string, w: string, params: RenderGraphParams) { + let src = graph.node(v); + let sink = graph.node(w); + let edge = graph.edge(v, w); + + // Add each annotation. + addOutAnnotation(src, sink.node, sink, edge, AnnotationType.SHORTCUT, params); + addInAnnotation(sink, src.node, src, edge, AnnotationType.SHORTCUT, params); + + // Remove the edge from the core graph. + graph.removeEdge(v, w); +} + +/** + * Remove edges from a node, and set its isOutExtract property to true, + * and remove the node and move it to isolatedOutExtract. + * + * If detachAllEdgesForHighDegree is true, extract all of its edges. + * Otherwise, only extract all in-edges. + */ +function makeOutExtract(renderNode: RenderGroupNodeInformation, n: string, + params: RenderGraphParams) { + let graph = renderNode.coreGraph; + + graph.node(n).isOutExtract = true; + + _.each(graph.predecessors(n), (p, index) => { + createShortcut(graph, p, n, params); + }); + + if (params.detachAllEdgesForHighDegree) { + _.each(graph.successors(n), (s, index) => { + createShortcut(graph, n, s, params); + }); + } + + if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) { + renderNode.isolatedOutExtract.push(graph.node(n)); + graph.removeNode(n); + } +} + +/** + * Remove edges from a node, set its isInExtract property to true, + * and remove the node and move it to isolatedInExtract. + * If detachAllEdgesForHighDegree is true, extract all of its edges. + * Otherwise, only remove all out-edges. + */ +function makeInExtract(renderNode: RenderGroupNodeInformation, n: string, + params: RenderGraphParams) { + let graph = renderNode.coreGraph; + graph.node(n).isInExtract = true; + + _.each(graph.successors(n), (s, index) => { + createShortcut(graph, n, s, params); + }); + + if (params.detachAllEdgesForHighDegree) { + _.each(graph.predecessors(n), (p, index) => { + createShortcut(graph, p, n, params); + }); + } + + // Remove the node from the core graph if conditions are met. + if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) { + renderNode.isolatedInExtract.push(graph.node(n)); + graph.removeNode(n); + } +} + +/** + * Check whether the node's type is a member of the given list of types. + * + * @param node Node. + * @param types List of type to match. + */ +function hasTypeIn(node: Node, types: string[]): boolean { + if (node.type === NodeType.OP) { + for (let i = 0; i < types.length; i++) { + if ((<OpNode>node).op === types[i]) { return true; } + } + } else if (node.type === NodeType.META) { + let rootOpNode = (<Metanode>node).getRootOp(); + if (rootOpNode) { + for (let i = 0; i < types.length; i++) { + if (rootOpNode.op === types[i]) { return true; } + } + } + } + return false; +} + +/** Remove edges from pre-defined out-extract patterns */ +function extractPredefinedSink(renderNode: RenderGroupNodeInformation, + params: RenderGraphParams) { + let graph = renderNode.coreGraph; + _.each(graph.nodes(), n => { + let renderInfo = graph.node(n); + if (hasTypeIn(renderInfo.node, params.outExtractTypes)) { + makeOutExtract(renderNode, n, params); + } + }); +} + +/** Remove edges from pre-defined in-extract patterns */ +function extractPredefinedSource(renderNode: RenderGroupNodeInformation, + params: RenderGraphParams) { + let graph = renderNode.coreGraph; + + _.each(graph.nodes(), n => { + let renderInfo = graph.node(n); + if (hasTypeIn(renderInfo.node, params.inExtractTypes)) { + makeInExtract(renderNode, n, params); + } + }); +} + +/** Extract from nodes with in-degree > maxInDegree */ +function extractHighInDegree(renderNode: RenderGroupNodeInformation, + params: RenderGraphParams) { + let graph = renderNode.coreGraph; + let maxInDegree = params.maxInDegree; + + // detect first so degrees don't get affected by other removal + let highInDegreeNames = _.filter(graph.nodes(), n => { + // Count the in-degree based on only regular edges, unless there are + // no regular edges, in which case use the number of control edges. + // This is done so that control edges don't effect if nodes are extracted + // from the core graph, unless the node is only used for control. + let numEdgesToCount = _.reduce(graph.predecessors(n), (numEdgesToCount, pred) => { + let metaedge = graph.edge(pred, n).metaedge; + return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0); + }, 0); + if (numEdgesToCount === 0 && graph.predecessors(n).length > 0) { + numEdgesToCount = graph.predecessors(n).length; + } + return numEdgesToCount > maxInDegree; + }); + + _.each(highInDegreeNames, n => { + makeOutExtract(renderNode, n, params); + }); +} + +/** Extract nodes with out-degree > maxOutDegree */ +function extractHighOutDegree(renderNode: RenderGroupNodeInformation, + params: RenderGraphParams) { + let graph = renderNode.coreGraph; + let maxOutDegree = params.maxOutDegree; + + // detect first so degrees don't get affected by other removal + let highOutDegreeNames = _.filter(graph.nodes(), n => { + // Count the out-degree based on only regular edges, unless there are + // no regular edges, in which case use the number of control edges. + // This is done so that control edges don't effect if nodes are extracted + // from the core graph, unless the node is only used for control. + let numEdgesToCount = _.reduce(graph.successors(n), (numEdgesToCount, succ) => { + let metaedge = graph.edge(n, succ).metaedge; + return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0); + }, 0); + if (numEdgesToCount === 0 && graph.successors(n).length > 0) { + numEdgesToCount = graph.successors(n).length; + } + return numEdgesToCount > maxOutDegree; + }); + + _.each(highOutDegreeNames, n => { + makeInExtract(renderNode, n, params); + }); +} + +/** Remove control edges from nodes that have too many control edges */ +function removeControlEdges(renderNode: RenderGroupNodeInformation, + params: RenderGraphParams) { + let graph = renderNode.coreGraph; + + // Collect control edges into a map by node name. + let map = <{[nodeName: string]: graphlib.EdgeObject[]}>{}; + _.each(graph.edges(), e => { + if (!graph.edge(e).metaedge.numRegularEdges) { + (map[e.v] = map[e.v] || []).push(e); + (map[e.w] = map[e.w] || []).push(e); + } + }); + + // For each node with too many control edges, turn them into annotations. + _.each(map, (edges, nodeName) => { + if (edges.length > params.maxControlDegree) { + _.each(edges, e => createShortcut(graph, e.v, e.w, params)); + } + }); +} + +/** + * Given an integer, picks a hue that is far apart from other colors. + * The formula for picking color that avoid collision is: + * hue = (color range * golden ratio * index) % color range + */ +export function mapIndexToHue(id: number): number { + let GOLDEN_RATIO = 1.61803398875; + // Hue of 0 is reserved for the gray nodes. + let MIN_HUE = 1; + let MAX_HUE = 359; + let COLOR_RANGE = MAX_HUE - MIN_HUE; + return MIN_HUE + ((COLOR_RANGE * GOLDEN_RATIO * id) % COLOR_RANGE); +}; + +/** + * Remove edges and add to annotation instead. + * + * For root node, consider predefined types for source and sink. + * We do not extract predefined type from non-root so that Variables and the + * sgd node (op type = "NoOp") do not get extract from inside own group. + * + * The order of extraction is important here as swapping the order can totally + * screw up the graph layout. + * + * @param {Render.Node} renderNode Node to manipulate. + * @param {Object} params render Graph construction parameters. See + * <tf-graph-params>'s output + */ +function extractHighDegrees(renderNode: RenderGroupNodeInformation, + params: RenderGraphParams) { + if (params.outExtractTypes) { + extractPredefinedSink(renderNode, params); + } + + // This has to come before extract high in-degree to protect the core part + // that takes many variables. + if (params.inExtractTypes) { + extractPredefinedSource(renderNode, params); + } + + // This has to come before extract high out-degree to protect the core part + // that output to many places as there are more high-degree sinks than + // sources. + + if (params.maxInDegree) { + extractHighInDegree(renderNode, params); + } + + if (params.maxOutDegree) { + extractHighOutDegree(renderNode, params); + } + + if (params.maxControlDegree) { + removeControlEdges(renderNode, params); + } + + // Extract isolated nodes, which can be + // (1) source-like and sink-like nodes that are not originally isolated but + // become isolated after further removal. + // (2) isolated nodes with annotations on one-side. These might be either + // - nodes that originally have high out-degree but because we remove + // high in-degree nodes first, they no longer have high in-degree when + // we check. (Detecting all high-degree before removing also leads to + // another problem.) + // - nodes that do not have high degree, but their neighbors are all + // extracted, so it might make sense to extract them too. + + let graph = renderNode.coreGraph; + _.each(graph.nodes(), n => { + let child = graph.node(n); + let degree = graph.neighbors(n).length; + + if (degree === 0) { + let hasOutAnnotations = child.outAnnotations.list.length > 0; + let hasInAnnotations = child.inAnnotations.list.length > 0; + + if (child.isInExtract) { // Is source-like. + // This case only happens if detachAllEdgesForHighDegree is false. + // (Otherwise all source-like nodes are all isolated already.) + renderNode.isolatedInExtract.push(child); + graph.removeNode(n); + } else if (child.isOutExtract) { // Is sink-like. + // This case only happens if detachAllEdgesForHighDegree is false. + // // (Otherwise all sink-like nodes are all isolated already.) + renderNode.isolatedOutExtract.push(child); + graph.removeNode(n); + } else if (params.extractIsolatedNodesWithAnnotationsOnOneSide) { + if (hasOutAnnotations && !hasInAnnotations) { + child.isInExtract = true; // for ones with high out-annotations + renderNode.isolatedInExtract.push(child); + graph.removeNode(n); + } else if (hasInAnnotations && !hasOutAnnotations) { + child.isOutExtract = true; // for ones with high in-annotations + renderNode.isolatedOutExtract.push(child); + graph.removeNode(n); + } else { + // if a low degree node has both in- & out- annotations, do nothing + // because it is unclear which side it should go to. + } + } + } + }); +} +} // close module tf.graph.render diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/annotation.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/annotation.ts new file mode 100644 index 0000000000..82609e8652 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/annotation.ts @@ -0,0 +1,223 @@ +/// <reference path="../graph.ts" /> +/// <reference path="../render.ts" /> +/// <reference path="scene.ts" /> +/// <reference path="edge.ts" /> + +module tf.graph.scene.annotation { + +/** + * Populate a given annotation container group + * + * <g class="{in|out}-annotations"></g> + * + * with annotation group of the following structure: + * + * <g class="annotation"> + * <g class="annotation-node"> + * <!-- + * Content here determined by Scene.node.buildGroup. + * --> + * </g> + * </g> + * + * @param container selection of the container. + * @param annotationData node.{in|out}Annotations + * @param d node to build group for. + * @param sceneBehavior polymer scene element. + * @return selection of appended objects + */ +export function buildGroup(container, annotationData: render.AnnotationList, + d: render.RenderNodeInformation, sceneBehavior) { + // Select all children and join with data. + let annotationGroups = container.selectAll(function() { + // using d3's selector function + // See https://github.com/mbostock/d3/releases/tag/v2.0.0 + // (It's not listed in the d3 wiki.) + return this.childNodes; + }) + .data(annotationData.list, d => { return d.node.name; }); + + annotationGroups.enter() + .append("g") + .attr("data-name", a => { return a.node.name; }) + .each(function(a) { + let aGroup = d3.select(this); + + // Add annotation to the index in the scene + sceneBehavior.addAnnotationGroup(a, d, aGroup); + // Append annotation edge + let edgeType = Class.Annotation.EDGE; + let metaedge = a.renderMetaedgeInfo && a.renderMetaedgeInfo.metaedge; + if (metaedge && !metaedge.numRegularEdges) { + edgeType += " " + Class.Annotation.CONTROL_EDGE; + } + // If any edges are reference edges, add the reference edge class. + if (metaedge && metaedge.numRefEdges) { + edgeType += " " + Class.Edge.REF_LINE; + } + edge.appendEdge(aGroup, a, sceneBehavior, edgeType); + + if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) { + addAnnotationLabelFromNode(aGroup, a); + buildShape(aGroup, a, sceneBehavior); + } else { + addAnnotationLabel(aGroup, a.node.name, a, Class.Annotation.ELLIPSIS); + } + }); + + annotationGroups + .attr("class", a => { + return Class.Annotation.GROUP + " " + + annotationToClassName(a.annotationType) + + " " + node.nodeClass(a); + }) + .each(function(a) { + let aGroup = d3.select(this); + update(aGroup, d, a, sceneBehavior); + if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) { + addInteraction(aGroup, d, sceneBehavior); + } + }); + + annotationGroups.exit() + .each(function(a) { + let aGroup = d3.select(this); + + // Remove annotation from the index in the scene + sceneBehavior.removeAnnotationGroup(a, d, aGroup); + }) + .remove(); + return annotationGroups; +}; + +/** + * Maps an annotation enum to a class name used in css rules. + */ +function annotationToClassName(annotationType: render.AnnotationType) { + return (tf.graph.render.AnnotationType[annotationType] || "") + .toLowerCase() || null; +} + +function buildShape(aGroup, a: render.Annotation, sceneBehavior) { + if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) { + let image = scene.selectOrCreateChild(aGroup, "image"); + image.attr({ + "xlink:href": sceneBehavior.resolveUrl("../../lib/svg/summary-icon.svg"), + "height": "12px", + "width": "12px", + "cursor": "pointer" + }); + } else { + let shape = node.buildShape(aGroup, a, Class.Annotation.NODE); + // add title tag to get native tooltips + scene.selectOrCreateChild(shape, "title").text(a.node.name); + } +} + +function addAnnotationLabelFromNode(aGroup, a: render.Annotation) { + let namePath = a.node.name.split("/"); + let text = namePath[namePath.length - 1]; + let shortenedText = text.length > 8 ? text.substring(0, 8) + "..." : text; + return addAnnotationLabel(aGroup, shortenedText, a, null, text); +} + +function addAnnotationLabel(aGroup, label, a, additionalClassNames, + fullLabel?) { + let classNames = Class.Annotation.LABEL; + if (additionalClassNames) { + classNames += " " + additionalClassNames; + } + let titleText = fullLabel ? fullLabel : label; + return aGroup.append("text") + .attr("class", classNames) + .attr("dy", ".35em") + .attr("text-anchor", a.isIn ? "end" : "start") + .text(label) + .append("title").text(titleText); +} + +function addInteraction(selection, d: render.RenderNodeInformation, + sceneBehavior) { + selection + .on("mouseover", a => { + sceneBehavior.fire("annotation-highlight", { + name: a.node.name, + hostName: d.node.name + }); + }) + .on("mouseout", a => { + sceneBehavior.fire("annotation-unhighlight", { + name: a.node.name, + hostName: d.node.name + }); + }) + .on("click", a => { + // Stop this event"s propagation so that it isn't also considered a + // graph-select. + (<Event>d3.event).stopPropagation(); + sceneBehavior.fire("annotation-select", { + name: a.node.name, + hostName: d.node.name + }); + }); +}; + +/** + * Adjust annotation's position. + * + * @param aGroup selection of a "g.annotation" element. + * @param d Host node data. + * @param a annotation node data. + * @param scene Polymer scene element. + */ +function update(aGroup, d: render.RenderNodeInformation, a: render.Annotation, + sceneBehavior) { + // Annotations that point to embedded nodes (constants,summary) + // don't have a render information attached so we don't stylize these. + // Also we don't stylize ellipsis annotations (the string "... and X more"). + if (a.renderNodeInfo && + a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) { + node.stylize(aGroup, a.renderNodeInfo, sceneBehavior, + Class.Annotation.NODE); + } + + if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) { + // Update the width of the annotation to give space for the image. + a.width += 10; + } + + // label position + aGroup.select("text." + Class.Annotation.LABEL).transition().attr({ + x: d.x + a.dx + (a.isIn ? -1 : 1) * (a.width / 2 + a.labelOffset), + y: d.y + a.dy + }); + + // Some annotations (such as summary) are represented using a 12x12 image tag. + // Purposely ommited units (e.g. pixels) since the images are vector graphics. + // If there is an image, we adjust the location of the image to be vertically + // centered with the node and horizontally centered between the arrow and the + // text label. + aGroup.select("image").transition().attr({ + x: d.x + a.dx - 3, + y: d.y + a.dy - 6 + }); + + // Node position (only one of the shape selection will be non-empty.) + scene.positionEllipse(aGroup.select("." + Class.Annotation.NODE + " ellipse"), + d.x + a.dx, d.y + a.dy, a.width, a.height); + scene.positionRect(aGroup.select("." + Class.Annotation.NODE + " rect"), + d.x + a.dx, d.y + a.dy, a.width, a.height); + scene.positionRect(aGroup.select("." + Class.Annotation.NODE + " use"), + d.x + a.dx, d.y + a.dy, a.width, a.height); + + // Edge position + aGroup.select("path." + Class.Annotation.EDGE).transition().attr("d", a => { + // map relative position to absolute position + let points = a.points.map(p => { + return {x: p.dx + d.x, y: p.dy + d.y}; + }); + return edge.interpolate(points); + }); +}; + +} // close module diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/edge.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/edge.ts new file mode 100644 index 0000000000..e11ec97f80 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/edge.ts @@ -0,0 +1,177 @@ +/// <reference path="../graph.ts" /> +/// <reference path="../render.ts" /> +/// <reference path="scene.ts" /> + +module tf.graph.scene.edge { + +let Scene = tf.graph.scene; // Aliased + +export function getEdgeKey(edgeObj) { + return edgeObj.v + tf.graph.EDGE_KEY_DELIM + edgeObj.w; +} + +/** + * Select or Create a "g.edges" group to a given sceneGroup + * and builds a number of "g.edge" groups inside the group. + * + * Structure Pattern: + * + * <g class="edges"> + * <g class="edge"> + * <path class="edgeline"/> + * </g> + * ... + * </g> + * + * + * @param sceneGroup container + * @param graph + * @param sceneBehavior Parent scene module. + * @return selection of the created nodeGroups + */ +export function buildGroup(sceneGroup, + graph: graphlib.Graph<tf.graph.render.RenderNodeInformation, + tf.graph.render.RenderMetaedgeInformation>, sceneBehavior) { + let edgeData = _.reduce(graph.edges(), (edges, edgeObj) => { + let edgeLabel = graph.edge(edgeObj); + edges.push({ + v: edgeObj.v, + w: edgeObj.w, + label: edgeLabel + }); + return edges; + }, []); + + let container = scene.selectOrCreateChild(sceneGroup, "g", + Class.Edge.CONTAINER); + let containerNode = container.node(); + + // Select all children and join with data. + // (Note that all children of g.edges are g.edge) + let edgeGroups = container.selectAll(function() { + // using d3's selector function + // See https://github.com/mbostock/d3/releases/tag/v2.0.0 + // (It's not listed in the d3 wiki.) + return this.childNodes; + }) + .data(edgeData, getEdgeKey); + + // Make edges a group to support rendering multiple lines for metaedge + edgeGroups.enter() + .append("g") + .attr("class", Class.Edge.GROUP) + .attr("data-edge", getEdgeKey) + .each(function(d) { + let edgeGroup = d3.select(this); + d.label.edgeGroup = edgeGroup; + // index node group for quick highlighting + sceneBehavior._edgeGroupIndex[getEdgeKey(d)] = edgeGroup; + + // If any edges are reference edges, add the reference edge class. + let extraEdgeClass = d.label.metaedge && d.label.metaedge.numRefEdges + ? Class.Edge.REF_LINE + " " + Class.Edge.LINE + : undefined; + // Add line during enter because we're assuming that type of line + // normally does not change. + appendEdge(edgeGroup, d, scene, extraEdgeClass); + }); + + edgeGroups.each(position); + edgeGroups.each(function(d) { + stylize(d3.select(this), d, sceneBehavior); + }); + + edgeGroups.exit() + .each(d => { + delete sceneBehavior._edgeGroupIndex[getEdgeKey(d)]; + }) + .remove(); + return edgeGroups; +}; + +/** + * For a given d3 selection and data object, create a path to represent the + * edge described in d.label. + * + * If d.label is defined, it will be a RenderMetaedgeInformation instance. It + * will sometimes be undefined, for example for some Annotation edges for which + * there is no underlying Metaedge in the hierarchical graph. + */ +export function appendEdge(edgeGroup, d, sceneBehavior, edgeClass?) { + edgeClass = edgeClass || Class.Edge.LINE; // set default type + + if (d.label && d.label.structural) { + edgeClass += " " + Class.Edge.STRUCTURAL; + } + + edgeGroup.append("path") + .attr("class", edgeClass); +}; + +/** + * Returns a tween interpolator for the endpoint of an edge path. + */ +function getEdgePathInterpolator(d, i, a) { + let renderMetaedgeInfo = d.label; + let adjoiningMetaedge = renderMetaedgeInfo.adjoiningMetaedge; + if (!adjoiningMetaedge) { + return d3.interpolate(a, interpolate(renderMetaedgeInfo.points)); + } + + let renderPath = this; + + // Get the adjoining path that matches the adjoining metaedge. + let adjoiningPath = + <SVGPathElement>((<HTMLElement>adjoiningMetaedge.edgeGroup.node()) + .firstChild); + + // Find the desired SVGPoint along the adjoining path, then convert those + // coordinates into the space of the renderPath using its Current + // Transformation Matrix (CTM). + let inbound = renderMetaedgeInfo.metaedge.inbound; + + return function(t) { + let adjoiningPoint = adjoiningPath + .getPointAtLength(inbound ? adjoiningPath.getTotalLength() : 0) + .matrixTransform(adjoiningPath.getCTM()) + .matrixTransform(renderPath.getCTM().inverse()); + + // Update the relevant point in the renderMetaedgeInfo's points list, then + // re-interpolate the path. + let points = renderMetaedgeInfo.points; + let index = inbound ? 0 : points.length - 1; + points[index].x = adjoiningPoint.x; + points[index].y = adjoiningPoint.y; + let dPath = interpolate(points); + return dPath; + }; +} + +export let interpolate = d3.svg.line() + .interpolate("basis") + .x((d: any) => { return d.x; }) + .y((d: any) => { return d.y; }); + +function position(d) { + d3.select(this).select("path." + Class.Edge.LINE) + .each(function(d) { + let path = d3.select(this); + path.transition().attrTween("d", getEdgePathInterpolator); + }); +}; + +/** + * For a given d3 selection and data object, mark the edge as a control + * dependency if it contains only control edges. + * + * d's label property will be a RenderMetaedgeInformation object. + */ +function stylize(edgeGroup, d, stylize) { + let a; + let metaedge = d.label.metaedge; + edgeGroup + .select("path." + Class.Edge.LINE) + .classed("control-dep", metaedge && !metaedge.numRegularEdges); +}; + +} // close module diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/minimap.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/minimap.ts new file mode 100644 index 0000000000..1a34132765 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/minimap.ts @@ -0,0 +1,269 @@ +/// <reference path="../../../../typings/tsd.d.ts" /> +/// <reference path="../common.ts" /> + +module tf.scene { + +/** Show minimap when the viewpoint area is less than X% of the whole area. */ +const FRAC_VIEWPOINT_AREA: number = 0.8; + +export class Minimap { + /** The minimap container. */ + private minimap: HTMLElement; + /** The canvas used for drawing the mini version of the svg. */ + private canvas: HTMLCanvasElement; + /** A buffer canvas used for temporary drawing to avoid flickering. */ + private canvasBuffer: HTMLCanvasElement; + + /** The minimap svg used for holding the viewpoint rectangle. */ + private minimapSvg: SVGSVGElement; + /** The rectangle showing the current viewpoint. */ + private viewpoint: SVGRectElement; + /** + * The scale factor for the minimap. The factor is determined automatically + * so that the minimap doesn't violate the maximum width/height specified + * in the constructor. The minimap maintains the same aspect ratio as the + * original svg. + */ + private scaleMinimap: number; + /** The main svg element. */ + private svg: SVGSVGElement; + /** The svg group used for panning and zooming the main svg. */ + private zoomG: SVGGElement; + /** The zoom behavior of the main svg. */ + private mainZoom: d3.behavior.Zoom<any>; + /** The maximum width and height for the minimap. */ + private maxWandH: number; + /** The last translation vector used in the main svg. */ + private translate: [number, number]; + /** The last scaling factor used in the main svg. */ + private scaleMain: number; + /** The coordinates of the viewpoint rectangle. */ + private viewpointCoord: {x: number, y: number}; + /** The current size of the minimap */ + private minimapSize: {width: number, height: number}; + /** Padding (px) due to the main labels of the graph. */ + private labelPadding: number; + /** + * Constructs a new minimap. + * + * @param svg The main svg element. + * @param zoomG The svg group used for panning and zooming the main svg. + * @param mainZoom The main zoom behavior. + * @param minimap The minimap container. + * @param maxWandH The maximum width/height for the minimap. + * @param labelPadding Padding in pixels due to the main graph labels. + */ + constructor(svg: SVGSVGElement, zoomG: SVGGElement, + mainZoom: d3.behavior.Zoom<any>, minimap: HTMLElement, + maxWandH: number, labelPadding: number) { + this.svg = svg; + this.labelPadding = labelPadding; + this.zoomG = zoomG; + this.mainZoom = mainZoom; + this.maxWandH = maxWandH; + let $minimap = d3.select(minimap); + // The minimap will have 2 main components: the canvas showing the content + // and an svg showing a rectangle of the currently zoomed/panned viewpoint. + let $minimapSvg = $minimap.select("svg"); + + // Make the viewpoint rectangle draggable. + let $viewpoint = $minimapSvg.select("rect"); + let dragmove = (d) => { + this.viewpointCoord.x = (<DragEvent>d3.event).x; + this.viewpointCoord.y = (<DragEvent>d3.event).y; + this.updateViewpoint(); + }; + this.viewpointCoord = {x: 0, y: 0}; + let drag = d3.behavior.drag().origin(Object).on("drag", dragmove); + $viewpoint.datum(this.viewpointCoord).call(drag); + + // Make the minimap clickable. + $minimapSvg.on("click", () => { + if ((<Event>d3.event).defaultPrevented) { + // This click was part of a drag event, so suppress it. + return; + } + // Update the coordinates of the viewpoint. + let width = Number($viewpoint.attr("width")); + let height = Number($viewpoint.attr("height")); + let clickCoords = d3.mouse($minimapSvg.node()); + this.viewpointCoord.x = clickCoords[0] - width / 2; + this.viewpointCoord.y = clickCoords[1] - height / 2; + this.updateViewpoint(); + }); + this.viewpoint = <SVGRectElement> $viewpoint.node(); + this.minimapSvg = <SVGSVGElement> $minimapSvg.node(); + this.minimap = minimap; + this.canvas = <HTMLCanvasElement> $minimap.select("canvas.first").node(); + this.canvasBuffer = + <HTMLCanvasElement> $minimap.select("canvas.second").node(); + } + + /** + * Updates the position and the size of the viewpoint rectangle. + * It also notifies the main svg about the new panned position. + */ + private updateViewpoint(): void { + // Update the coordinates of the viewpoint rectangle. + d3.select(this.viewpoint) + .attr("x", this.viewpointCoord.x) + .attr("y", this.viewpointCoord.y); + // Update the translation vector of the main svg to reflect the + // new viewpoint. + let mainX = - this.viewpointCoord.x * this.scaleMain / this.scaleMinimap; + let mainY = - this.viewpointCoord.y * this.scaleMain / this.scaleMinimap; + let zoomEvent = this.mainZoom.translate([mainX, mainY]).event; + d3.select(this.zoomG).call(zoomEvent); + } + + /** + * Redraws the minimap. Should be called whenever the main svg + * was updated (e.g. when a node was expanded). + */ + update(): void { + let $svg = d3.select(this.svg); + // Read all the style rules in the document and embed them into the svg. + // The svg needs to be self contained, i.e. all the style rules need to be + // embedded so the canvas output matches the origin. + let stylesText = ""; + for (let k = 0; k < document.styleSheets.length; k++) { + try { + let cssRules = (<any>document.styleSheets[k]).cssRules || + (<any>document.styleSheets[k]).rules; + if (cssRules == null) { + continue; + } + for (let i = 0; i < cssRules.length; i++) { + stylesText += cssRules[i].cssText + "\n"; + } + } catch (e) { + if (e.name !== "SecurityError") { + throw e; + } + } + } + + // Temporarily add the css rules to the main svg. + let svgStyle = $svg.append("style"); + svgStyle.text(stylesText); + + // Temporarily remove the zoom/pan transform from the main svg since we + // want the minimap to show a zoomed-out and centered view. + let $zoomG = d3.select(this.zoomG); + let zoomTransform = $zoomG.attr("transform"); + $zoomG.attr("transform", null); + + // Get the size of the entire scene. + let sceneSize = this.zoomG.getBBox(); + // Since we add padding, account for that here. + sceneSize.height += this.labelPadding; + + // Temporarily assign an explicit width/height to the main svg, since + // it doesn't have one (uses flex-box), but we need it for the canvas + // to work. + $svg.attr({ + width: sceneSize.width, + height: sceneSize.height, + }); + + // Since the content inside the svg changed (e.g. a node was expanded), + // the aspect ratio have also changed. Thus, we need to update the scale + // factor of the minimap. The scale factor is determined such that both + // the width and height of the minimap are <= maximum specified w/h. + this.scaleMinimap = + this.maxWandH / Math.max(sceneSize.width, sceneSize.height); + + this.minimapSize = { + width: sceneSize.width * this.scaleMinimap, + height: sceneSize.height * this.scaleMinimap + }; + + // Update the size of the minimap's svg, the buffer canvas and the + // viewpoint rect. + d3.select(this.minimapSvg).attr(<any>this.minimapSize); + d3.select(this.canvasBuffer).attr(<any>this.minimapSize); + if (this.translate != null && this.zoom != null) { + // Update the viewpoint rectangle shape since the aspect ratio of the + // map has changed. + requestAnimationFrame(() => this.zoom()); + } + + // Serialize the main svg to a string which will be used as the rendering + // content for the canvas. + let svgXml = (new XMLSerializer()).serializeToString(this.svg); + + // Now that the svg is serialized for rendering, remove the temporarily + // assigned styles, explicit width and height and bring back the pan/zoom + // transform. + svgStyle.remove(); + $svg.attr({ + width: null, + height: null + }); + $zoomG.attr("transform", zoomTransform); + let image = new Image(); + image.onload = () => { + // Draw the svg content onto the buffer canvas. + let context = this.canvasBuffer.getContext("2d"); + context.clearRect(0, 0, this.canvasBuffer.width, + this.canvasBuffer.height); + context.drawImage(image, 0, 0, + this.minimapSize.width, this.minimapSize.height); + requestAnimationFrame(() => { + // Hide the old canvas and show the new buffer canvas. + d3.select(this.canvasBuffer).style("display", null); + d3.select(this.canvas).style("display", "none"); + // Swap the two canvases. + [this.canvas, this.canvasBuffer] = [this.canvasBuffer, this.canvas]; + }); + }; + image.src = "data:image/svg+xml;base64," + btoa(svgXml); + } + + /** + * Handles changes in zooming/panning. Should be called from the main svg + * to notify that a zoom/pan was performed and this minimap will update it's + * viewpoint rectangle. + * + * @param translate The translate vector, or none to use the last used one. + * @param scale The scaling factor, or none to use the last used one. + */ + zoom(translate?: [number, number], scale?: number): void { + // Update the new translate and scale params, only if specified. + this.translate = translate || this.translate; + this.scaleMain = scale || this.scaleMain; + // Update the location of the viewpoint rectangle. + let svgRect = this.svg.getBoundingClientRect(); + let $viewpoint = d3.select(this.viewpoint); + this.viewpointCoord.x = -this.translate[0] * this.scaleMinimap / + this.scaleMain; + this.viewpointCoord.y = -this.translate[1] * this.scaleMinimap / + this.scaleMain; + let viewpointWidth = svgRect.width * this.scaleMinimap / this.scaleMain; + let viewpointHeight = svgRect.height * this.scaleMinimap / this.scaleMain; + $viewpoint.attr({ + x: this.viewpointCoord.x, + y: this.viewpointCoord.y, + width: viewpointWidth, + height: viewpointHeight + }); + // Show/hide the minimap depending on the viewpoint area as fraction of the + // whole minimap. + let mapWidth = this.minimapSize.width; + let mapHeight = this.minimapSize.height; + let x = this.viewpointCoord.x; + let y = this.viewpointCoord.y; + let w = Math.min(Math.max(0, x + viewpointWidth), mapWidth) - + Math.min(Math.max(0, x), mapWidth); + let h = Math.min(Math.max(0, y + viewpointHeight), mapHeight) - + Math.min(Math.max(0, y), mapHeight); + let fracIntersect = (w * h) / (mapWidth * mapHeight); + if (fracIntersect < FRAC_VIEWPOINT_AREA) { + this.minimap.classList.remove("hidden"); + } else { + this.minimap.classList.add("hidden"); + } + } +} + +} // close module tf.scene diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/node.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/node.ts new file mode 100644 index 0000000000..8c74b37e07 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/node.ts @@ -0,0 +1,525 @@ +/// <reference path="../graph.ts" /> +/// <reference path="scene.ts" /> +/// <reference path="annotation.ts" /> + +module tf.graph.scene.node { + +/** + * Select or Create a "g.nodes" group to a given sceneGroup + * and builds a number of "g.node" groups inside the group. + * + * Structure Pattern: + * + * <g class="nodes"> + * <g class="node"> + * <g class="in-annotations"> + * ... + * </g> + * <g class="out-annotations"> + * ... + * </g> + * <g class="nodeshape"> + * <!-- + * Content of the node shape should be for the node itself. For example a + * Metanode would have a <rect> with rounded edges, an op would have an + * <ellipse>. More complex nodes like series may contain multiple elements + * which are conditionally visible based on whether the node is expanded. + * --> + * </g> + * <text class="label">node name</text> + * <g class="subscene"> + * <!-- + * Content of the subscene (only for metanode and series node). + * + * Subscene is a svg group that contains content of the + * metanode's metagraph that is recursively generated by Scene.build(). + * + * When the graph is expanded multiple times, a subscene can contain + * nested subscenes inside. + * --> + * </g> + * </g> + * ... + * </g> + * + * + * @param sceneGroup selection of the container + * @param nodeData array of render node information to map + * @param sceneBehavior parent scene module + * @return selection of the created nodeGroups + */ +export function buildGroup(sceneGroup, + nodeData: render.RenderNodeInformation[], sceneBehavior) { + let container = scene.selectOrCreateChild(sceneGroup, "g", + Class.Node.CONTAINER); + // Select all children and join with data. + // (Note that all children of g.nodes are g.node) + let nodeGroups = container.selectAll(function() { + // using d3's selector function + // See https://github.com/mbostock/d3/releases/tag/v2.0.0 + // (It's not listed in the d3 wiki.) + return this.childNodes; // this here refers to container.node() + }) + .data(nodeData, (d: any) => { + // make sure that we don't have to swap shape type + return d.node.name + ":" + d.node.type; + }); + + // ENTER + nodeGroups.enter() + .append("g") + .attr("data-name", d => { return d.node.name; }) + .each(function(d) { + let nodeGroup = d3.select(this); + // index node group for quick stylizing + sceneBehavior.addNodeGroup(d.node.name, nodeGroup); + }); + + // UPDATE + nodeGroups + .attr("class", d => { + return Class.Node.GROUP + " " + nodeClass(d); + }) + .each(function(d) { + let nodeGroup = d3.select(this); + // add g.in-annotations (always add -- to keep layer order consistent.) + let inAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g", + Class.Annotation.INBOX); + annotation.buildGroup(inAnnotationBox, d.inAnnotations, d, + sceneBehavior); + + // add g.out-annotations (always add -- to keep layer order consistent.) + let outAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g", + Class.Annotation.OUTBOX); + annotation.buildGroup(outAnnotationBox, d.outAnnotations, d, + sceneBehavior); + + // label + let label = labelBuild(nodeGroup, d, sceneBehavior); + // Do not add interaction to metanode labels as they live inside the + // metanode shape which already has the same interactions. + addInteraction(label, d, sceneBehavior, d.node.type === NodeType.META); + + // build .shape below label + let shape = buildShape(nodeGroup, d, Class.Node.SHAPE, label.node()); + if (d.node.isGroupNode) { + addButton(shape, d, sceneBehavior); + } + addInteraction(shape, d, sceneBehavior); + + // build subscene on the top + subsceneBuild(nodeGroup, d, sceneBehavior); + + stylize(nodeGroup, d, sceneBehavior); + position(nodeGroup, d, sceneBehavior); + }); + + // EXIT + nodeGroups.exit() + .each(function(d) { + // remove all indices on remove + sceneBehavior.removeNodeGroup(d.node.name); + + let nodeGroup = d3.select(this); + if (d.inAnnotations.list.length > 0) { + nodeGroup.select("." + Class.Annotation.INBOX) + .selectAll("." + Class.Annotation.GROUP) + .each(a => { + sceneBehavior.removeAnnotationGroup(a, d); + }); + } + if (d.outAnnotations.list.length > 0) { + nodeGroup.select("." + Class.Annotation.OUTBOX) + .selectAll("." + Class.Annotation.GROUP) + .each(a => { + sceneBehavior.removeAnnotationGroup(a, d); + }); + } + }) + .remove(); + return nodeGroups; +}; + +/** + * Update or remove the subscene of a render group node depending on whether it + * is a expanded. If the node is not a group node, this method has no effect. + * + * @param nodeGroup selection of the container + * @param renderNodeInfo the render information for the node. + * @param sceneBehavior parent scene module + * @return Selection of the subscene group, or null if node group does not have + * a subscene. Op nodes, bridge nodes and unexpanded group nodes will + * not have a subscene. + */ +function subsceneBuild(nodeGroup, + renderNodeInfo: render.RenderGroupNodeInformation, sceneBehavior) { + if (renderNodeInfo.node.isGroupNode) { + if (renderNodeInfo.expanded) { + // Recursively build the subscene. + return scene.buildGroup(nodeGroup, renderNodeInfo, sceneBehavior, + Class.Subscene.GROUP); + } + // Clean out existing subscene if the node is not expanded. + scene.selectChild(nodeGroup, "g", Class.Subscene.GROUP).remove(); + } + return null; +}; + +/** + * Translate the subscene of the given node group + */ +function subscenePosition(nodeGroup, d: render.RenderNodeInformation) { + let x0 = d.x - d.width / 2.0 + d.paddingLeft; + let y0 = d.y - d.height / 2.0 + d.paddingTop; + + let subscene = scene.selectChild(nodeGroup, "g", Class.Subscene.GROUP); + scene.translate(subscene, x0, y0); +}; + +/** + * Add an expand/collapse button to a group node + * + * @param selection The group node selection. + * @param d Info about the node being rendered. + * @param sceneBehavior parent scene module. + */ +function addButton(selection, d: render.RenderNodeInformation, sceneBehavior) { + let group = scene.selectOrCreateChild( + selection, "g", Class.Node.BUTTON_CONTAINER); + scene.selectOrCreateChild(group, "circle", Class.Node.BUTTON_CIRCLE); + scene.selectOrCreateChild(group, "path", Class.Node.EXPAND_BUTTON).attr( + "d", "M0,-2.2 V2.2 M-2.2,0 H2.2"); + scene.selectOrCreateChild(group, "path", Class.Node.COLLAPSE_BUTTON).attr( + "d", "M-2.2,0 H2.2"); + group.on("click", d => { + // Stop this event's propagation so that it isn't also considered a + // node-select. + (<Event>d3.event).stopPropagation(); + sceneBehavior.fire("node-toggle-expand", { name: d.node.name }); + }); + scene.positionButton(group, d); +}; + +/** + * Fire node-* events when the selection is interacted. + * + * @param disableInteraction When true, have the provided selection + * ignore all pointer events. Used for text labels inside of metanodes, which + * don't need interaction as their surrounding shape has interaction, and if + * given interaction would cause conflicts with the expand/collapse button. + */ +function addInteraction(selection, d: render.RenderNodeInformation, + sceneBehavior, disableInteraction?: boolean) { + if (disableInteraction) { + selection.attr("pointer-events", "none"); + return; + } + selection.on("dblclick", d => { + sceneBehavior.fire("node-toggle-expand", { name: d.node.name }); + }) + .on("mouseover", d => { + // don't send mouseover over expanded group, + // otherwise it is causing too much glitches + if (sceneBehavior.isNodeExpanded(d)) { return; } + + sceneBehavior.fire("node-highlight", { name: d.node.name }); + }) + .on("mouseout", d => { + // don't send mouseover over expanded group, + // otherwise it is causing too much glitches + if (sceneBehavior.isNodeExpanded(d)) { return; } + + sceneBehavior.fire("node-unhighlight", { name: d.node.name }); + }) + .on("click", d => { + // Stop this event's propagation so that it isn't also considered + // a graph-select. + (<Event>d3.event).stopPropagation(); + sceneBehavior.fire("node-select", { name: d.node.name }); + }); +}; + +/** + * Append svg text for label and assign data. + * @param nodeGroup + * @param renderNodeInfo The render node information for the label. + * @param sceneBehavior parent scene module. + */ +function labelBuild(nodeGroup, renderNodeInfo: render.RenderNodeInformation, + sceneBehavior) { + let namePath = renderNodeInfo.node.name.split("/"); + let text = namePath[namePath.length - 1]; + + // Truncate long labels for unexpanded Metanodes. + let useFontScale = renderNodeInfo.node.type === NodeType.META && + !renderNodeInfo.expanded; + + let label = scene.selectOrCreateChild(nodeGroup, "text", Class.Node.LABEL); + label.attr("dy", ".35em") + .attr("text-anchor", "middle"); + if (useFontScale) { + if (text.length > sceneBehavior.maxMetanodeLabelLength) { + text = text.substr(0, sceneBehavior.maxMetanodeLabelLength - 2) + "..."; + } + let scale = getLabelFontScale(sceneBehavior); + label.attr("font-size", scale(text.length) + "px"); + } + label.text(text); + return label; +}; + +/** + * d3 scale used for sizing font of labels, used by labelBuild, + * initialized once by getLabelFontScale. + */ +let fontScale = null; +function getLabelFontScale(sceneBehavior) { + if (!fontScale) { + fontScale = d3.scale.linear() + .domain([sceneBehavior.maxMetanodeLabelLengthLargeFont, + sceneBehavior.maxMetanodeLabelLength]) + .range([sceneBehavior.maxMetanodeLabelLengthFontSize, + sceneBehavior.minMetanodeLabelLengthFontSize]).clamp(true); + } + return fontScale; +} +/** + * Set label position of a given node group + */ +function labelPosition(nodeGroup, d: render.RenderNodeInformation, + yOffset: number) { + scene.selectChild(nodeGroup, "text", Class.Node.LABEL).transition() + .attr("x", d.x) + .attr("y", d.y + yOffset); +}; + +/** + * Select or append/insert shape for a node and assign renderNode + * as the shape's data. + * + * @param nodeGroup + * @param d RenderNodeInformation + * @param nodeClass class for the element. + * @param before Reference DOM node for insertion. + * @return Selection of the shape. + */ +export function buildShape(nodeGroup, d, nodeClass: string, before?) { + // Create a group to house the underlying visual elements. + let shapeGroup = scene.selectOrCreateChild(nodeGroup, "g", nodeClass, + before); + // TODO(jimbo): DOM structure should be templated in HTML somewhere, not JS. + switch (d.node.type) { + case NodeType.OP: + scene.selectOrCreateChild(shapeGroup, "ellipse", + Class.Node.COLOR_TARGET); + break; + case NodeType.SERIES: + // Choose the correct stamp to use to represent this series. + let stampType = "annotation"; + let groupNodeInfo = <render.RenderGroupNodeInformation>d; + if (groupNodeInfo.coreGraph) { + stampType = groupNodeInfo.node.hasNonControlEdges + ? "vertical" : "horizontal"; + } + scene.selectOrCreateChild(shapeGroup, "use", Class.Node.COLOR_TARGET) + .attr("xlink:href", "#op-series-" + stampType + "-stamp"); + scene.selectOrCreateChild(shapeGroup, "rect", Class.Node.COLOR_TARGET) + .attr({ rx: d.radius, ry: d.radius }); + break; + case NodeType.BRIDGE: + scene.selectOrCreateChild(shapeGroup, "rect", Class.Node.COLOR_TARGET) + .attr({ rx: d.radius, ry: d.radius }); + break; + case NodeType.META: + scene.selectOrCreateChild(shapeGroup, "rect", Class.Node.COLOR_TARGET) + .attr({ rx: d.radius, ry: d.radius }); + break; + default: + throw Error("Unrecognized node type: " + d.node.type); + } + return shapeGroup; +}; + +export function nodeClass(d: render.RenderNodeInformation) { + switch (d.node.type) { + case NodeType.OP: + return Class.OPNODE; + case NodeType.META: + return Class.METANODE; + case NodeType.SERIES: + return Class.SERIESNODE; + case NodeType.BRIDGE: + return Class.BRIDGENODE; + case NodeType.ELLIPSIS: + return Class.ELLIPSISNODE; + }; + throw Error("Unrecognized node type: " + d.node.type); +}; + +/** Modify node and its subscene and its label's positional attributes */ +function position(nodeGroup, d: render.RenderNodeInformation, sceneBehavior) { + let shapeGroup = scene.selectChild(nodeGroup, "g", Class.Node.SHAPE); + switch (d.node.type) { + case NodeType.OP: { + // position shape + let shape = scene.selectChild(shapeGroup, "ellipse"); + scene.positionEllipse(shape, d.x, d.y, d.width, d.height); + labelPosition(nodeGroup, d, d.labelOffset); + break; + } + case NodeType.META: { + // position shape + let shape = scene.selectChild(shapeGroup, "rect"); + scene.positionRect(shape, d.x, d.y, d.width, d.height); + + if (d.expanded) { + subscenePosition(nodeGroup, d); + + // put label on top + labelPosition(nodeGroup, d, + - d.height / 2 + d.labelHeight / 2); + } else { + labelPosition(nodeGroup, d, 0); + } + break; + } + case NodeType.SERIES: { + let shape = scene.selectChild(shapeGroup, "use"); + scene.positionRect(shape, d.x, d.y, d.width, d.height); + if (d.expanded) { + subscenePosition(nodeGroup, d); + + // put label on top + labelPosition(nodeGroup, d, + - d.height / 2 + d.labelHeight / 2); + } else { + labelPosition(nodeGroup, d, d.labelOffset); + } + } + case NodeType.BRIDGE: { + // position shape + // NOTE: In reality, these will not be visible, but it helps to put them + // in the correct position for debugging purposes. + let shape = scene.selectChild(shapeGroup, "rect"); + scene.positionRect(shape, d.x, d.y, d.width, d.height); + break; + } + default: { + throw Error("Unrecognized node type: " + d.node.type); + } + } +}; + +/** Enum specifying the options to color nodes by */ +let ColorBy = { + STRUCTURE: 0, + DEVICE: 1, + COMPUTE_TIME: 2, + MEMORY: 3 +}; + +/** + * Returns the fill color for the node given its state and the "color by" + * option. + */ +function getFillForNode(sceneBehavior, colorBy, + renderInfo: render.RenderNodeInformation, isExpanded: boolean): string { + let colorParams = tf.graph.render.MetanodeColors; + switch (colorBy) { + case ColorBy.STRUCTURE: + if (renderInfo.node.type === tf.graph.NodeType.META) { + let tid = (<Metanode>renderInfo.node).templateId; + return tid === null ? colorParams.UNKNOWN : colorParams.STRUCTURE_PALETTE( + sceneBehavior.templateIndex(tid), renderInfo.expanded); + } else if (renderInfo.node.type === tf.graph.NodeType.SERIES) { + // If expanded, we're showing the background rect, which we want to + // appear gray. Otherwise we're showing a stack of ellipses which we + // want to show white. + return renderInfo.expanded ? colorParams.EXPANDED_COLOR : "white"; + } else if (renderInfo.node.type === NodeType.BRIDGE) { + return renderInfo.structural ? "#f0e" : + (<BridgeNode>renderInfo.node).inbound ? "#0ef" : "#fe0"; + } else { + // Op nodes are white. + return "white"; + } + case ColorBy.DEVICE: + if (renderInfo.deviceColors == null) { + // Return the hue for unknown device. + return colorParams.UNKNOWN; + } + let id = renderInfo.node.name; + let escapedId = tf.escapeQuerySelector(id); + let gradientDefs = d3.select("svg#svg defs #linearGradients"); + let linearGradient = + gradientDefs.select("linearGradient#" + escapedId); + // If the linear gradient is not there yet, create it. + if (linearGradient.size() === 0) { + linearGradient = gradientDefs.append("linearGradient").attr("id", id); + // Re-create the stops of the linear gradient. + linearGradient.selectAll("*").remove(); + let cumulativeProportion = 0; + // For each device, create a stop using the proportion of that device. + _.each(renderInfo.deviceColors, (d: any) => { + let color = d.color; + linearGradient.append("stop") + .attr("offset", cumulativeProportion) + .attr("stop-color", color); + linearGradient.append("stop") + .attr("offset", cumulativeProportion + d.proportion) + .attr("stop-color", color); + cumulativeProportion += d.proportion; + }); + } + return isExpanded ? colorParams.EXPANDED_COLOR : `url(#${escapedId})`; + case ColorBy.COMPUTE_TIME: + return isExpanded ? + colorParams.EXPANDED_COLOR : renderInfo.computeTimeColor || + colorParams.UNKNOWN; + case ColorBy.MEMORY: + return isExpanded ? + colorParams.EXPANDED_COLOR : renderInfo.memoryColor || + colorParams.UNKNOWN; + default: + throw new Error("Unknown case to color nodes by"); + } +} + +/** + * Modify node style by toggling class and assign attributes (only for things + * that can't be done in css). + */ +export function stylize(nodeGroup, renderInfo: render.RenderNodeInformation, + sceneBehavior, nodeClass?) { + nodeClass = nodeClass || Class.Node.SHAPE; + let isHighlighted = sceneBehavior.isNodeHighlighted(renderInfo.node.name); + let isSelected = sceneBehavior.isNodeSelected(renderInfo.node.name); + let isExtract = renderInfo.isInExtract || renderInfo.isOutExtract; + let isExpanded = renderInfo.expanded; + nodeGroup.classed("highlighted", isHighlighted); + nodeGroup.classed("selected", isSelected); + nodeGroup.classed("extract", isExtract); + nodeGroup.classed("expanded", isExpanded); + + // Main node always exists here and it will be reached before subscene, + // so d3 selection is fine here. + let node = nodeGroup.select("." + nodeClass + " ." + Class.Node.COLOR_TARGET); + let fillColor = getFillForNode(sceneBehavior, + ColorBy[sceneBehavior.colorBy.toUpperCase()], + renderInfo, isExpanded); + node.style("fill", fillColor); + + // Choose outline to be darker version of node color if the node is a single + // color and is not selected. + if (isSelected) { + node.style("stroke", null); + } else { + // If node is colored by a gradient, then use a dark gray outline. + let outlineColor = fillColor.substring(0, 3) === "url" ? + tf.graph.render.MetanodeColors.GRADIENT_OUTLINE : + d3.rgb(fillColor).darker().toString(); + node.style("stroke", outlineColor); + } +}; + +} // close module diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/scene.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/scene.ts new file mode 100644 index 0000000000..2e2467f039 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/scene.ts @@ -0,0 +1,409 @@ +/// <reference path="../graph.ts" /> +/// <reference path="edge.ts" /> +/// <reference path="node.ts" /> +/// <reference path="../layout.ts" /> + +module tf.graph.scene { + +/** Enums element class of objects in the scene */ +export let Class = { + Node: { + // <g> element that contains nodes. + CONTAINER: "nodes", + // <g> element that contains detail about a node. + GROUP: "node", + // <g> element that contains visual elements (like rect, ellipse). + SHAPE: "nodeshape", + // <*> element(s) under SHAPE that should receive color updates. + COLOR_TARGET: "nodecolortarget", + // <text> element showing the node's label. + LABEL: "nodelabel", + // <g> element that contains all visuals for the expand/collapse + // button for expandable group nodes. + BUTTON_CONTAINER: "buttoncontainer", + // <circle> element that surrounds expand/collapse buttons. + BUTTON_CIRCLE: "buttoncircle", + // <path> element of the expand button. + EXPAND_BUTTON: "expandbutton", + // <path> element of the collapse button. + COLLAPSE_BUTTON: "collapsebutton" + }, + Edge: { + CONTAINER: "edges", + GROUP: "edge", + LINE: "edgeline", + REF_LINE: "refline", + STRUCTURAL: "structural" + }, + Annotation: { + OUTBOX: "out-annotations", + INBOX: "in-annotations", + GROUP: "annotation", + NODE: "annotation-node", + EDGE: "annotation-edge", + CONTROL_EDGE: "annotation-control-edge", + LABEL: "annotation-label", + ELLIPSIS: "annotation-ellipsis" + }, + Scene: { + GROUP: "scene", + CORE: "core", + INEXTRACT: "in-extract", + OUTEXTRACT: "out-extract" + }, + Subscene: { + GROUP: "subscene" + }, + OPNODE: "op", + METANODE: "meta", + SERIESNODE: "series", + BRIDGENODE: "bridge", + ELLIPSISNODE: "ellipsis" +}; + +/** + * Helper method for fitting the graph in the svg view. + * + * @param svg The main svg. + * @param zoomG The svg group used for panning and zooming. + * @param d3zoom The zoom behavior. + * @param callback Called when the fitting is done. + */ +export function fit(svg, zoomG, d3zoom, callback) { + let svgRect = svg.getBoundingClientRect(); + let sceneSize = zoomG.getBBox(); + let scale = 0.9 * Math.min( + svgRect.width / sceneSize.width, + svgRect.height / sceneSize.height, + 2 + ); + let params = layout.PARAMS.graph; + let zoomEvent = d3zoom.scale(scale) + .on("zoomend.fitted", () => { + // Remove the listener for the zoomend event, + // so we don't get called at the end of regular zoom events, + // just those that fit the graph to screen. + d3zoom.on("zoomend.fitted", null); + callback(); + }) + .translate([params.padding.paddingLeft, params.padding.paddingTop]) + .event; + d3.select(zoomG).transition().duration(500).call(zoomEvent); +}; + +/** + * Helper method for panning the graph to center on the provided node, + * if the node is currently off-screen. + * + * @param nodeName The node to center the graph on + * @param svg The root SVG element for the graph + * @param zoomG The svg group used for panning and zooming. + * @param d3zoom The zoom behavior. + * @return True if the graph had to be panned to display the + * provided node. + */ +export function panToNode(nodeName: String, svg, zoomG, d3zoom): boolean { + let node: any = d3.selectAll("[data-name='" + nodeName + "']." + + Class.Node.GROUP)[0][0]; + if (!node) { + return false; + } + let translate = d3zoom.translate(); + // Check if the selected node is off-screen in either + // X or Y dimension in either direction. + let nodeBox = node.getBBox(); + let nodeCtm = node.getScreenCTM(); + let pointTL = svg.createSVGPoint(); + let pointBR = svg.createSVGPoint(); + pointTL.x = nodeBox.x; + pointTL.y = nodeBox.y; + pointBR.x = nodeBox.x + nodeBox.width; + pointBR.y = nodeBox.y + nodeBox.height; + pointTL = pointTL.matrixTransform(nodeCtm); + pointBR = pointBR.matrixTransform(nodeCtm); + let isOutsideOfBounds = (start, end, bound) => { + return end < 0 || start > bound; + }; + let svgRect = svg.getBoundingClientRect(); + if (isOutsideOfBounds(pointTL.x, pointBR.x, svgRect.width) || + isOutsideOfBounds(pointTL.y, pointBR.y, svgRect.height)) { + // Determine the amount to transform the graph in both X and Y + // dimensions in order to center the selected node. This takes into + // acount the position of the node, the size of the svg scene, the + // amount the scene has been scaled by through zooming, and any previous + // transform already performed by this logic. + let centerX = (pointTL.x + pointBR.x) / 2; + let centerY = (pointTL.y + pointBR.y) / 2; + let dx = ((svgRect.width / 2) - centerX); + let dy = ((svgRect.height / 2) - centerY); + let zoomEvent = d3zoom.translate([translate[0] + dx, translate[1] + dy]) + .event; + d3.select(zoomG).transition().duration(500).call(zoomEvent); + return true; + } + return false; +}; + +/** + * Given a container d3 selection, select a child svg element of a given tag + * and class if exists or append / insert one otherwise. If multiple children + * matches the tag and class name, returns only the first one. + * + * @param container + * @param tagName tag name. + * @param className (optional) Class name. + * @param before (optional) reference DOM node for insertion. + * @return selection of the element + */ +export function selectOrCreateChild(container, tagName: string, + className?: string, before?) { + let child = selectChild(container, tagName, className); + if (!child.empty()) { + return child; + } + let newElement = document.createElementNS("http://www.w3.org/2000/svg", + tagName); + if (className) { + newElement.classList.add(className); + } + + if (before) { // if before exists, insert + container.node().insertBefore(newElement, before); + } else { // otherwise, append + container.node().appendChild(newElement); + } + return d3.select(newElement) + // need to bind data to emulate d3_selection.append + .datum(container.datum()); +}; + +/** + * Given a container d3 selection, select a child element of a given tag and + * class. If multiple children matches the tag and class name, returns only + * the first one. + * + * @param container + * @param tagName tag name. + * @param className (optional) Class name. + * @return selection of the element, or an empty selection + */ +export function selectChild(container, tagName: string, className?: string) { + let children = container.node().childNodes; + for (let i = 0; i < children.length; i++) { + let child = children[i]; + if (child.tagName === tagName && + (!className || child.classList.contains(className)) + ) { + return d3.select(child); + } + } + return d3.select(null); +}; + +/** + * Select or create a sceneGroup and build/update its nodes and edges. + * + * Structure Pattern: + * + * <g class="scene"> + * <g class="core"> + * <g class="edges"> + * ... stuff from tf.graph.scene.edges.build ... + * </g> + * <g class="nodes"> + * ... stuff from tf.graph.scene.nodes.build ... + * </g> + * </g> + * <g class="in-extract"> + * <g class="nodes"> + * ... stuff from tf.graph.scene.nodes.build ... + * </g> + * </g> + * <g class="out-extract"> + * <g class="nodes"> + * ... stuff from tf.graph.scene.nodes.build ... + * </g> + * </g> + * </g> + * + * @param container D3 selection of the parent. + * @param renderNode render node of a metanode or series node. + * @param sceneBehavior Parent scene module. + * @param sceneClass class attribute of the scene (default="scene"). + */ +export function buildGroup(container, + renderNode: render.RenderGroupNodeInformation, + sceneBehavior, + sceneClass: string) { + sceneClass = sceneClass || Class.Scene.GROUP; + let isNewSceneGroup = selectChild(container, "g", sceneClass).empty(); + let sceneGroup = selectOrCreateChild(container, "g", sceneClass); + + // core + let coreGroup = selectOrCreateChild(sceneGroup, "g", Class.Scene.CORE); + let coreNodes = _.reduce(renderNode.coreGraph.nodes(), (nodes, name) => { + let node = renderNode.coreGraph.node(name); + if (!node.excluded) { + nodes.push(node); + } + return nodes; + }, []); + + if (renderNode.node.type === NodeType.SERIES) { + // For series, we want the first item on top, so reverse the array so + // the first item in the series becomes last item in the top, and thus + // is rendered on the top. + coreNodes.reverse(); + } + + // Create the layer of edges for this scene (paths). + edge.buildGroup(coreGroup, renderNode.coreGraph, sceneBehavior); + + // Create the layer of nodes for this scene (ellipses, rects etc). + node.buildGroup(coreGroup, coreNodes, sceneBehavior); + + // In-extract + if (renderNode.isolatedInExtract.length > 0) { + let inExtractGroup = selectOrCreateChild(sceneGroup, "g", + Class.Scene.INEXTRACT); + node.buildGroup(inExtractGroup, renderNode.isolatedInExtract, + sceneBehavior); + } else { + selectChild(sceneGroup, "g", Class.Scene.INEXTRACT).remove(); + } + + // Out-extract + if (renderNode.isolatedOutExtract.length > 0) { + let outExtractGroup = selectOrCreateChild(sceneGroup, "g", + Class.Scene.OUTEXTRACT); + node.buildGroup(outExtractGroup, renderNode.isolatedOutExtract, + sceneBehavior); + } else { + selectChild(sceneGroup, "g", Class.Scene.OUTEXTRACT).remove(); + } + + position(sceneGroup, renderNode); + + // Fade in the scene group if it didn't already exist. + if (isNewSceneGroup) { + sceneGroup.attr("opacity", 0) + .transition().attr("opacity", 1); + } + + return sceneGroup; +}; + +/** + * Given a scene's svg group, set g.in-extract, g.coreGraph, g.out-extract svg + * groups' position relative to the scene. + * + * @param sceneGroup + * @param renderNode render node of a metanode or series node. + */ +function position(sceneGroup, renderNode: render.RenderGroupNodeInformation) { + // Translate scenes down by the label height so that when showing graphs in + // expanded metanodes, the graphs are below the labels. Do not shift them + // down for series nodes as series nodes don't have labels inside of their + // bounding boxes. + let yTranslate = renderNode.node.type === NodeType.SERIES ? + 0 : layout.PARAMS.subscene.meta.labelHeight; + + // core + translate(selectChild(sceneGroup, "g", Class.Scene.CORE), + 0, yTranslate); + + // in-extract + let inExtractX = renderNode.coreBox.width === 0 ? + 0 : renderNode.coreBox.width; + let hasInExtract = renderNode.isolatedInExtract.length > 0; + if (hasInExtract) { + translate(selectChild(sceneGroup, "g", Class.Scene.INEXTRACT), + inExtractX, yTranslate); + } + + // out-extract + let hasOutExtract = renderNode.isolatedOutExtract.length > 0; + if (hasOutExtract) { + let outExtractX = inExtractX + renderNode.inExtractBox.width + + renderNode.extractXOffset; + translate(selectChild(sceneGroup, "g", Class.Scene.OUTEXTRACT), + outExtractX, yTranslate); + } +}; + +/** Adds a click listener to a group that fires a graph-select event */ +export function addGraphClickListener(graphGroup, sceneBehavior) { + d3.select(graphGroup).on("click", () => { + sceneBehavior.fire("graph-select"); + }); +}; + +/** Helper for adding transform: translate(x0, y0) */ +export function translate(selection, x0: number, y0: number) { + selection.attr("transform", "translate(" + x0 + "," + y0 + ")"); +}; + +/** + * Helper for setting position of a svg rect + * @param rect rect to set position of. + * @param cx Center x. + * @param cy Center x. + * @param width Width to set. + * @param height Height to set. + */ +export function positionRect(rect, cx: number, cy: number, width: number, + height: number) { + rect.transition().attr({ + x: cx - width / 2, + y: cy - height / 2, + width: width, + height: height + }); +}; + +/** + * Helper for setting position of a svg expand/collapse button + * @param button container group + * @param renderNode the render node of the group node to position + * the button on. + */ +export function positionButton(button, + renderNode: render.RenderNodeInformation) { + // Position the button in the top-right corner of the group node, + // with space given the draw the button inside of the corner. + let x = renderNode.x + renderNode.width / 2 - 6; + let y = renderNode.y - renderNode.height / 2 + 6; + // For unexpanded series nodes, the button has special placement due + // to the unique visuals of this group node. + if (renderNode.node.type === NodeType.SERIES && !renderNode.expanded) { + x += 10; + y -= 2; + } + let translateStr = "translate(" + x + "," + y + ")"; + button.selectAll("path").transition().attr("transform", translateStr); + button.select("circle").transition().attr({ + cx: x, + cy: y, + r: layout.PARAMS.nodeSize.meta.expandButtonRadius + }); +}; + +/** + * Helper for setting position of a svg ellipse + * @param ellipse ellipse to set position of. + * @param cx Center x. + * @param cy Center x. + * @param width Width to set. + * @param height Height to set. + */ +export function positionEllipse(ellipse, cx: number, cy: number, + width: number, height: number) { + ellipse.transition().attr({ + cx: cx, + cy: cy, + rx: width / 2, + ry: height / 2 + }); +}; + +} // close module diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/template.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/template.ts new file mode 100644 index 0000000000..b5aafc55e5 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/lib/template.ts @@ -0,0 +1,282 @@ +/// <reference path="graph.ts" /> +/// <reference path="hierarchy.ts" /> + +module tf.graph.template { + +/** + * Detect repeating patterns of subgraphs. + * Assign templateId to each subgraph if it belongs to a template. + * Returns clusters of similar subgraphs . + * + * @param graph + * @param verifyTemplate whether to run the template verification algorithm + * @return a dict (template id => Array of node names) + */ +export function detect(h, verifyTemplate): {[templateId: string]: string[]} { + // In any particular subgraph, there are either + // - leaf nodes (which do not have subgraph) + // - metanode nodes - some of them have only one member (singular metanode) + // and some have multiple members (non-singular metanode) + + // First, generate a nearest neighbor hash of metanode nodes. + let nnGroups = clusterSimilarSubgraphs(h); + + // For each metanode, compare its subgraph (starting from shallower groups) + // and assign template id. + let templates = groupTemplateAndAssignId(nnGroups, verifyTemplate); + + // Sort the templates by minimum level in the graph at which they appear, + // as this leads to optimal setting of the colors of each template for + // maximum differentiation. + return _(templates).pairs() + .sortBy(function(pair) { + return pair[1].level; + }) + .map(function(pair) { + return [pair[0], pair[1].nodes]; + }) + .object().value(); +}; + +/** + * @return Unique string for a metanode based on depth, |V|, |E| and + * op type histogram. + */ + function getSignature(metanode) { + // depth=<number> |V|=<number> |E|=<number> + let props = _.map({ + "depth": metanode.depth, + "|V|": metanode.metagraph.nodes().length, + "|E|": metanode.metagraph.edges().length + }, function(v, k) { return k + "=" + v; }).join(" "); + + // optype1=count1,optype2=count2 + let ops = _.map(metanode.opHistogram, function(count, op) { + return op + "=" + count; + }).join(","); + + return props + " [ops] " + ops; +} + +/** + * Generate a nearest neighbor hash of metanodes + * based on depth, |V|, |E|, and opHistogram of their subgraph + * (excluding leaf nodes and singular metanodes). + * @param graph The graph + * @return Array of pairs of [signature, + * Object with min level of the template and an Array of tf.graph.Group] + * sort by ascending order of minimum depth at which metanode appears. + */ +function clusterSimilarSubgraphs(h: hierarchy.Hierarchy) { + /** a dict from metanode.signature() => Array of tf.graph.Groups */ + let hashDict = _(h.getNodeMap()).reduce(function(hash, node: OpNode|Metanode, name) { + if (node.type !== NodeType.META) { + return hash; + } + let levelOfMetaNode = name.split("/").length - 1; + let signature = getSignature(node); + let templateInfo = hash[signature] || + {nodes: [], level: levelOfMetaNode}; + hash[signature] = templateInfo; + templateInfo.nodes.push(node); + if (templateInfo.level > levelOfMetaNode) { + templateInfo.level = levelOfMetaNode; + } + return hash; + }, {}); + + return _(hashDict).pairs() + // filter nn metanode with only one member + .filter(function(pair) { + return pair[1].nodes.length > 1; + }) + .sortBy(function(pair) { + // sort by depth + // (all members in the same nnGroup has equal depth) + return pair[1].nodes[0].depth; + }) + .value(); +} + +function groupTemplateAndAssignId(nnGroups, verifyTemplate) { + // For each metanode, compare its subgraph (starting from shallower groups) + // and assign template id. + return _.reduce(nnGroups, function(templates, nnGroupPair) { + let signature = nnGroupPair[0], + nnGroup = nnGroupPair[1].nodes, + clusters = []; + + nnGroup.forEach(function(metanode) { + // check with each existing cluster + for (let i = 0; i < clusters.length; i++) { + let similar = !verifyTemplate || + isSimilarSubgraph( + clusters[i].metanode.metagraph, + metanode.metagraph + ); + // if similar, just add this metanode to the cluster + if (similar) { + // get template from the first one + metanode.templateId = clusters[i].metanode.templateId; + clusters[i].members.push(metanode.name); + return; + } + } + // otherwise create a new cluster with id "signature [count] " + metanode.templateId = signature + "[" + clusters.length + "]"; + clusters.push({ + metanode: metanode, + members: [metanode.name] + }); + }); + + clusters.forEach(function(c) { + templates[c.metanode.templateId] = { + level: nnGroupPair[1].level, + nodes: c.members + }; + }); + return templates; + }, {}); +} + +function sortNodes(names: string[], graph: graphlib.Graph<Metanode|OpNode, Metaedge>, + prefix: string) { + return _.sortByAll(names, + function(name) { + let node = graph.node(name); + return (<OpNode>node).op; + }, + function(name) { + let node = graph.node(name); + return (<Metanode>node).templateId; + }, + function(name) { + return graph.neighbors(name).length; + }, + function(name) { + return graph.predecessors(name).length; + }, + function(name) { + return graph.successors(name).length; + }, + function(name) { + return name.substr(prefix.length); + }); +} + +function isSimilarSubgraph(g1: graphlib.Graph<any, any>, g2: graphlib.Graph<any, any>) { + if (!tf.graph.hasSimilarDegreeSequence(g1, g2)) { + return false; + } + + // if we want to skip, just return true here. + // return true; + + // Verify sequence by running DFS + let g1prefix = g1.graph().name; + let g2prefix = g2.graph().name; + + let visited1 = {}; + let visited2 = {}; + let stack = []; + + /** + * push sources or successors into the stack + * if the visiting pattern has been similar. + */ + function stackPushIfNotDifferent(n1, n2) { + let sub1 = n1.substr(g1prefix.length), + sub2 = n2.substr(g2prefix.length); + + /* tslint:disable */ + if (visited1[sub1] ^ visited2[sub1]) { + console.warn("different visit pattern", "[" + g1prefix + "]", sub1, + "[" + g2prefix + "]", sub2); + return true; + } + /* tslint:enable */ + if (!visited1[sub1]) { // implied && !visited2[sub2] + visited1[sub1] = visited2[sub2] = true; + stack.push({n1: n1, n2: n2}); + } + + return false; + } + + // check if have same # of sources then sort and push + let sources1 = g1.sources(); + let sources2 = g2.sources(); + if (sources1.length !== sources2.length) { + /* tslint:disable */ + console.log("different source length"); + /* tslint:enable */ + return false; + } + sources1 = sortNodes(sources1, g1, g1prefix); + sources2 = sortNodes(sources2, g2, g2prefix); + + for (let i = 0; i < sources1.length; i++) { + let different = stackPushIfNotDifferent(sources1[i], sources2[i]); + if (different) { + return false; + } + } + + while (stack.length > 0) { + let cur = stack.pop(); + + // check node + let similar = isSimilarNode(g1.node(cur.n1), g2.node(cur.n2)); + if (!similar) { + return false; + } + + // check if have same # of successors then sort and push + let succ1 = g1.successors(cur.n1), succ2 = g2.successors(cur.n2); + if (succ1.length !== succ2.length) { + /* tslint:disable */ + console.log("# of successors mismatch", succ1, succ2); + /* tslint:enable */ + return false; + } + succ1 = sortNodes(succ1, g1, g1prefix); + succ2 = sortNodes(succ2, g2, g2prefix); + + for (let j = 0; j < succ1.length; j++) { + let different = stackPushIfNotDifferent(succ1[j], succ2[j]); + if (different) { + return false; + } + } + } + + return true; +} + +/** + * Returns if two nodes have identical structure. + */ + function isSimilarNode(n1: OpNode|Metanode|SeriesNode, n2: OpNode|Metanode|SeriesNode): boolean { + if (n1.type === NodeType.META) { + // compare metanode + let metanode1 = <Metanode> n1; + let metanode2 = <Metanode> n2; + return metanode1.templateId && metanode2.templateId && metanode1.templateId === metanode2.templateId; + } else if (n1.type === NodeType.OP && n2.type === NodeType.OP) { + // compare leaf node + return (<OpNode>n1).op === (<OpNode>n2).op; + } else if (n1.type === NodeType.SERIES && n2.type === NodeType.SERIES) { + // compare series node sizes and operations + // (only need to check one op as all op nodes are identical in series) + let seriesnode1 = <SeriesNode> n1; + let seriesnode2 = <SeriesNode> n2; + let seriesnode1Count = seriesnode1.metagraph.nodeCount(); + return (seriesnode1Count === seriesnode2.metagraph.nodeCount() && + (seriesnode1Count === 0 || + ((<OpNode>seriesnode1.metagraph.node(seriesnode1.metagraph.nodes()[0])).op === + (<OpNode>seriesnode2.metagraph.node(seriesnode2.metagraph.nodes()[0])).op))); + } + return false; +} +} diff --git a/tensorflow/tensorboard/components/tf-graph-common/tf-graph-common.html b/tensorflow/tensorboard/components/tf-graph-common/tf-graph-common.html new file mode 100644 index 0000000000..e4cd153113 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-common/tf-graph-common.html @@ -0,0 +1,16 @@ +<script src="../../bower_components/d3/d3.js"></script> +<script src="../../bower_components/lodash/lodash.js"></script> +<script src="../../bower_components/graphlib/dist/graphlib.core.js"></script> + +<script src="lib/common.js"></script> +<script src="lib/graph.js"></script> +<script src="lib/parser.js"></script> +<script src="lib/hierarchy.js"></script> +<script src="lib/render.js"></script> +<script src="lib/template.js"></script> +<script src="lib/scene/scene.js"></script> +<script src="lib/scene/annotation.js"></script> +<script src="lib/scene/edge.js"></script> +<script src="lib/scene/node.js"></script> +<script src="lib/layout.js"></script> +<script src="lib/colors.js"></script> diff --git a/tensorflow/tensorboard/components/tf-graph-dashboard/tf-graph-dashboard.html b/tensorflow/tensorboard/components/tf-graph-dashboard/tf-graph-dashboard.html new file mode 100644 index 0000000000..779d2d3fe9 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-dashboard/tf-graph-dashboard.html @@ -0,0 +1,118 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../tf-graph-loader/tf-graph-loader.html"> +<link rel="import" href="../tf-graph-board/tf-graph-board.html"> +<link rel="import" href="../tf-graph/tf-graph-controls.html"> +<link rel="import" href="../tf-dashboard-common/warning-style.html"> + +<!-- +tf-graph-dashboard displays a graph from a TensorFlow run. + +It has simple behavior: Creates a url-generator and run-generator +to talk to the backend, and then passes the runsWithGraph (list of runs with +associated graphs) along with the url generator into tf-graph-board for display. + +If there are multiple runs with graphs, the first run's graph is shown +by default. The user can select a different run from a dropdown menu. +--> + +<dom-module id="tf-graph-dashboard"> +<template> +<div id="plumbing"> + <tf-url-generator + out-runs-url="{{_runsUrl}}" + out-graph-url-generator="{{_graphUrlGen}}" + id="urlGenerator" + ></tf-url-generator> + <tf-run-generator + id="runGenerator" + url="[[_runsUrl]]" + out-runs-with-graph="{{_runsWithGraph}}" + /></tf-run-generator> +</div> +<template is="dom-if" if="[[_datasetsEmpty(_datasets)]]"> +<div class="warning"> + <p> + No graph definition files were found. + </p> + <p> + To store a graph, create a + <code>tf.python.training.summary_io.SummaryWriter</code> + and pass the graph either via the constructor, or by calling its + <code>add_graph()</code> method. + </p> +</div> +</template> +<template is="dom-if" if="[[!_datasetsEmpty(_datasets)]]"> +<tf-dashboard-layout> +<div class="sidebar"> + <tf-graph-controls id="controls" + color-by-params="[[_colorByParams]]" + has-stats="[[_hasStats]]" + color-by="{{_colorBy}}", + datasets="[[_datasets]]", + selected-dataset="{{_selectedDataset}}" + selected-file="{{_selectedFile}}" + ></tf-graph-controls> + <tf-graph-loader id="loader" + datasets="[[_datasets]]", + selected-dataset="[[_selectedDataset]]" + selected-file="[[_selectedFile]]" + out-graph-hierarchy="{{_graphHierarchy}}" + out-graph="{{_graph}}" + out-graph-name="{{_graphName}}" + has-stats="{{_hasStats}}" + progress="{{_progress}}" + ></tf-graph-loader> +</div> +<div class="center"> + <tf-graph-board id="graphboard" + graph-hierarchy="[[_graphHierarchy]]" + graph="[[_graph]]" + has-stats="[[_hasStats]]" + graph-name="[[_graphName]]" + progress="[[_progress]]" + color-by="[[_colorBy]]" + color-by-params="{{_colorByParams}}"> + </tf-graph-board> +</div> +</template> +<style> + +:host /deep/ { + font-family: 'Roboto', sans-serif; +} + +.center { + height: 100%; +} + +</style> +<style include="warning-style"></style> +</template> +</dom-module> + +<script> +(function() { +Polymer({ + is: 'tf-graph-dashboard', + properties: { + _runsWithGraph: Array, + _datasets: { + type: Object, + computed: '_getDatasets(_runsWithGraph, _graphUrlGen)' + } + }, + _getDatasets: function(runsWithGraph, graphUrlGen) { + return _.map(runsWithGraph, function(runName) { + return { + name: runName, + path: graphUrlGen(runName) + }; + }); + }, + _datasetsEmpty: function(datasets) { + return !datasets || !datasets.length; + } +}); +})(); +</script> diff --git a/tensorflow/tensorboard/components/tf-graph-info/tf-graph-info.html b/tensorflow/tensorboard/components/tf-graph-info/tf-graph-info.html new file mode 100644 index 0000000000..b7900f86de --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-info/tf-graph-info.html @@ -0,0 +1,65 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="tf-node-info.html"> +<dom-module id="tf-graph-info"> +<template> +<style> +:host { + font-size: 12px; + margin: 0; + padding: 0; + display: block; +} + +h2 { + padding: 0; + text-align: center; + margin: 0; +} +</style> +<template is="dom-if" if="{{selectedNode}}"> + <paper-material elevation="1" class="card"> + <tf-node-info graph-hierarchy='[[graphHierarchy]]' + flat-graph="[[graph]]" + node-name='[[selectedNode]]' + highlighted-node='{{highlightedNode}}'> + </tf-node-info> + </paper-material> +</template> +</template> +<script> +(function() { + Polymer({ + is: 'tf-graph-info', + + properties: { + title: String, + graphHierarchy: Object, + graph: Object, + // Two-ways + selectedNode: { + type: String, + notify: true + }, + highlightedNode: { + type: String, + notify: true + } + }, + listeners: { + 'node-list-item-click': '_nodeListItemClicked', + 'node-list-item-mouseover': '_nodeListItemMouseover', + 'node-list-item-mouseout': '_nodeListItemMouseout' + }, + _nodeListItemClicked: function(event) { + this.selectedNode = event.detail.nodeName; + }, + _nodeListItemMouseover: function(event) { + this.highlightedNode = event.detail.nodeName; + }, + _nodeListItemMouseout: function() { + this.highlightedNode = null; + } + }); +})(); +</script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph-info/tf-node-info.html b/tensorflow/tensorboard/components/tf-graph-info/tf-node-info.html new file mode 100644 index 0000000000..5044bf2bb1 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-info/tf-node-info.html @@ -0,0 +1,345 @@ +<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html"> +<link rel="import" href="../../bower_components/iron-list/iron-list.html"> +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html"> +<link rel="import" href="../../bower_components/paper-item/all-imports.html"> +<link rel="import" href="../tf-graph-common/tf-graph-common.html"> +<link rel="import" href="../tf-graph/tf-graph-icon.html"> +<link rel="import" href="tf-node-list-item.html"> + +<dom-module id="tf-node-info"> + <style> + .sub-list-group { + padding: 8px 12px 0px; + font-weight: 500; + font-size: 12pt; + } + + .sub-list { + max-height: 300px; + overflow-y: scroll; + } + + .attr-left { + float: left; + width: 30%; + word-wrap: break-word; + color: #565656; + font-size: 11pt; + font-weight: 400; + } + + .attr-right { + margin-left: 30%; + word-wrap: break-word; + color: #565656; + font-weight: 400; + } + + paper-item { + padding: 0; + background: #e9e9e9; + } + + paper-item-body[two-line] { + min-height: 0; + padding: 8px 12px 4px; + } + + .expandedInfo { + padding: 0 0 8px; + } + + .controlDeps { + padding: 0 0 0 8px; + } + + .node-name { + white-space: normal; + word-wrap: break-word; + font-size: 14pt; + font-weight: 500; + } + + .node-icon { + float: right; + } + + .subtitle { + font-size: 12pt; + color: #5e5e5e; + } + + .controlLine { + font-size: 11pt; + font-weight: 400; + } + + .toggle-button { + float: right; + max-height: 20px; + max-width: 20px; + padding: 0; + } + + .control-toggle-button { + float: left; + max-height: 20px; + max-width: 20px; + padding: 0; + } + </style> + <template> + <paper-item> + <paper-item-body two-line> + <div> + <paper-icon-button + icon="{{_getToggleIcon(_expanded)}}" + on-click="_toggleExpanded" + class="toggle-button"> + </paper-icon-button> + <div class="node-name">[[_getNodeName(nodeName)]]</div> + </div> + <div secondary> + <tf-graph-icon class="node-icon" node="[[_node]]"></tf-graph-icon> + <template is="dom-if" if="{{_node.op}}"> + <div class="subtitle"> + Operation: + <span>[[_node.op]]</span> + </div> + </template> + <template is="dom-if" if="{{_node.metagraph}}"> + <div class="subtitle"> + Subgraph: + <span>[[_node.cardinality]]</span> nodes + </div> + </template> + </div> + </paper-item-body> + </paper-item> + <iron-collapse opened="{{_expanded}}"> + <template is="dom-if" if="{{_expanded}}" restamp="true"> + <div class="expandedInfo"> + <div class="sub-list-group attributes"> + Attributes + (<span>[[_attributes.length]]</span>) + <iron-list class="sub-list" id ="attributesList" + items="[[_attributes]]"> + <template> + <div> + <div class="attr-left">[[item.key]]</div> + <div class="attr-right">[[item.value]]</div> + </div> + </template> + </iron-list> + </div> + + <template is="dom-if" if="{{_device}}"> + <div class="sub-list-group device"> + <div class="attr-left">Device</div> + <div class="attr-right">[[_device]]</div> + </div> + </template> + + <div class="sub-list-group predecessors"> + Inputs + (<span>[[_totalPredecessors]]</span>) + <iron-list class="sub-list" id ="inputsList" + items="[[_predecessors.regular]]"> + <template> + <tf-node-list-item card-node="[[_node]]" + item-node="[[_getNode(item, graphHierarchy)]]" + name="[[item]]" + item-type="predecessors"> + </tf-node-list-item> + </template> + </iron-list> + <template is="dom-if" if="[[_predecessors.control.length]]"> + <div class="controlDeps"> + <div class="controlLine"> + <paper-icon-button + icon="{{_getToggleIcon(_openedControlPred)}}" + on-click="_toggleControlPred" + class="control-toggle-button"> + </paper-icon-button> + Control dependencies + </div> + <iron-collapse opened="{{_openedControlPred}}"> + <template is="dom-if" if="{{_openedControlPred}}" restamp="true"> + <iron-list class="sub-list" items="[[_predecessors.control]]"> + <template> + <tf-node-list-item card-node="[[_node]]" + item-node="[[_getNode(item, graphHierarchy)]]" + name="[[item]]" + item-type="predecessors"> + </tf-node-list-item> + </template> + </iron-list> + </template> + </iron-collapse> + </div> + </template> + </div> + + <div class="sub-list-group successors"> + Outputs + (<span>[[_totalSuccessors]]</span>) + <iron-list class="sub-list" id ="outputsList" + items="[[_successors.regular]]"> + <template> + <tf-node-list-item card-node="[[_node]]" + item-node="[[_getNode(item, graphHierarchy)]]" + name="[[item]]" + item-type="successor"> + </tf-node-list-item> + </template> + </iron-list> + <template is="dom-if" if="[[_successors.control.length]]"> + <div class="controlDeps"> + <div class="controlLine"> + <paper-icon-button + icon="{{_getToggleIcon(_openedControlSucc)}}" + on-click="_toggleControlSucc" + class="control-toggle-button"> + </paper-icon-button> + Control dependencies + </div> + <iron-collapse opened="{{_openedControlSucc}}"> + <template is="dom-if" if="{{_openedControlSucc}}" restamp="true"> + <iron-list class="sub-list" items="[[_successors.control]]"> + <template> + <tf-node-list-item card-node="[[_node]]" + item-node="[[_getNode(item, graphHierarchy)]]" + name="[[item]]" + item-type="successors"> + </tf-node-list-item> + </template> + </iron-list> + </template> + </iron-collapse> + </div> + </template> + </div> + </div> + </template> + </iron-collapse> + </template> + + <script> + (function() { + Polymer({ + is: 'tf-node-info', + + properties: { + nodeName: String, + graphHierarchy: Object, + _node: { + type: Object, + computed: '_getNode(nodeName, graphHierarchy)', + observer: '_resetState' + }, + _attributes: { + type: Array, + computed: '_getAttributes(_node)' + }, + _device: { + type: String, + computed: '_getDevice(_node)' + }, + _successors: { + type: Object, + computed: '_getSuccessors(_node, graphHierarchy)' + }, + _predecessors: { + type: Object, + computed: '_getPredecessors(_node, graphHierarchy)' + }, + _subnodes: { + type: Array, + computed: '_getSubnodes(_node)' + }, + _expanded: { + type: Boolean, + value: true + }, + _totalPredecessors: { + type: Number, + computed: '_getTotalPred(_predecessors)' + }, + _totalSuccessors: { + type: Number, + computed: '_getTotalSucc(_successors)' + }, + _openedControlPred: { + type: Boolean, + value: false + }, + _openedControlSucc: { + type: Boolean, + value: false + }, + }, + expandNode: function() { + this.fire('_node.expand', this.node); + }, + _getNode: function(n, graphHierarchy) { + return graphHierarchy.node(n); + }, + _getNodeName: function(nodeName) { + // Insert a zero-width whitespace character before each slash so that + // long node names wrap cleanly at path boundaries. + return (nodeName || '').replace(/\//g, '\u200B/'); + }, + _getAttributes: function(node) { + this.async(this._resizeList.bind(this, "#attributesList")); + return node && node.attr ? node.attr.map(function(entry) { + return {key: entry.key, value: JSON.stringify(entry.value)}; + }) : []; + + }, + _getDevice: function(node) { + return node ? node.device : null; + }, + _getSuccessors: function(node, hierarchy) { + this.async(this._resizeList.bind(this, "#inputsList")); + return node ? hierarchy.getSuccessors(node.name) : [[], []]; + }, + _getPredecessors: function(node, hierarchy) { + this.async(this._resizeList.bind(this, "#outputsList")); + return node ? hierarchy.getPredecessors(node.name) : [[], []]; + }, + _getSubnodes: function(node) { + return node && node.metagraph ? node.metagraph.nodes() : null; + }, + _getTotalPred: function(predecessors) { + return predecessors.regular.length + predecessors.control.length; + }, + _getTotalSucc: function(successors) { + return successors.regular.length + successors.control.length; + }, + _toggleControlPred: function() { + this._openedControlPred = !this._openedControlPred; + }, + _toggleControlSucc: function() { + this._openedControlSucc = !this._openedControlSucc; + }, + _toggleExpanded: function() { + this._expanded = !this._expanded; + }, + _getToggleIcon: function(expanded) { + return expanded ? "expand-less" : "expand-more"; + }, + _resetState: function() { + this._openedControlPred = false; + this._openedControlSucc = false; + }, + _resizeList: function(selector) { + var list = document.querySelector(selector); + if (list) { + list.fire('iron-resize'); + } + } + }); + })(); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph-info/tf-node-list-item.html b/tensorflow/tensorboard/components/tf-graph-info/tf-node-list-item.html new file mode 100644 index 0000000000..f16e9e4511 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-info/tf-node-list-item.html @@ -0,0 +1,91 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../tf-graph/tf-graph-icon.html"> + +<dom-module id="tf-node-list-item"> + <style> + #list-item { + width: 100%; + color: #565656; + font-size: 11pt; + font-weight: 400; + position: relative; + } + + #list-item:hover { + background-color: var(--google-yellow-100); + } + + .clickable { + cursor: pointer; + } + + #list-item span { + display: block; + margin-left: 40px; + } + + #list-item.excluded span { + color: #999; + } + + .node-icon { + position: absolute; + top: 1px; + left: 2px; + } + </style> + <template> + <div id="list-item" + on-mouseover="_nodeListener" + on-mouseout="_nodeListener" + on-click="_nodeListener"> + <tf-graph-icon class="node-icon" + node="[[itemNode]]" height="12"></tf-graph-icon> + <span title$="[[name]]">[[name]]</span> + </div> + </template> + + <script> + (function() { + Polymer({ + is: 'tf-node-list-item', + + properties: { + /** + * The Node for the card itself, on which this item is being drawn. + * @type {tf.graph.Node} + */ + cardNode: Object, + /** + * The Node for the item within the card, somehow related to cardNode. + * @type {tf.graph.Node} + */ + itemNode: Object, + name: String, + itemType: { + type: String, + observer: '_itemTypeChanged' + } + }, + + _itemTypeChanged: function() { + if (this.itemType !== 'subnode') { + this.$['list-item'].classList.add('clickable'); + } else { + this.$['list-item'].classList.remove('clickable'); + } + }, + + _nodeListener: function(event) { + // fire node.click/mouseover/mouseout + this.fire('node-list-item-' + event.type, { + cardNode: this.cardNode.name, + nodeName: this.name, + type: this.itemType + }); + } + + }); + })(); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph-loader/tf-graph-loader.html b/tensorflow/tensorboard/components/tf-graph-loader/tf-graph-loader.html new file mode 100644 index 0000000000..3f290f2152 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph-loader/tf-graph-loader.html @@ -0,0 +1,172 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> + +<!-- +An element which provides a filter parsing for pbtxt to graph output. +--> +<dom-module id="tf-graph-loader"> +</dom-module> + +<script> +Polymer({ + + is: 'tf-graph-loader', + + properties: { + /** + * @type {value: number, msg: string} + * + * A number between 0 and 100 denoting the % of progress + * for the progress bar and the displayed message. + */ + progress: { + type: Object, + notify: true, + readOnly: true // Produces, does not consume. + }, + datasets: Array, + hasStats: { + type: Boolean, + readOnly: true, // This property produces data. + notify: true + }, + selectedDataset: Number, + selectedFile: { + type: Object, + observer: '_selectedFileChanged' + }, + outGraphHierarchy: { + type: Object, + readOnly: true, //readonly so outsider can't change this via binding + notify: true + }, + outGraph: { + type: Object, + readOnly: true, //readonly so outsider can't change this via binding + notify: true + }, + outGraphName: { + type: String, + readOnly: true, + notify: true + } + }, + observers: [ + '_selectedDatasetChanged(selectedDataset, datasets)' + ], + _parseAndConstructHierarchicalGraph: function(dataset, pbTxtContent) { + var self = this; + // Reset the progress bar to 0. + self._setProgress({ + value: 0, + msg: '' + }); + var tracker = { + setMessage: function(msg) { + self._setProgress({ + value: self.progress.value, + msg: msg + }); + }, + updateProgress: function(value) { + self._setProgress({ + value: self.progress.value + value, + msg: self.progress.msg + }); + }, + reportError: function(msg) { + self._setProgress({ + value: self.progress.value, + msg: msg, + error: true + }); + }, + }; + var statsJson; + var dataTracker = tf.getSubtaskTracker(tracker, 30, 'Data'); + tf.graph.parser.readAndParseData(dataset, pbTxtContent, dataTracker) + .then(function(result) { + // Build the flat graph (consists only of Op nodes). + var nodes = result.nodes; + statsJson = result.statsJson; + + // This is the whitelist of inputs on op types that are considered + // reference edges. "Assign 0" indicates that the first input to + // an OpNode with operation type "Assign" is a reference edge. + var refEdges = {}; + refEdges["Assign 0"] = true; + refEdges["AssignAdd 0"] = true; + refEdges["AssignSub 0"] = true; + refEdges["assign 0"] = true; + refEdges["assign_add 0"] = true; + refEdges["assign_sub 0"] = true; + refEdges["count_up_to 0"] = true; + refEdges["ScatterAdd 0"] = true; + refEdges["ScatterSub 0"] = true; + refEdges["ScatterUpdate 0"] = true; + refEdges["scatter_add 0"] = true; + refEdges["scatter_sub 0"] = true; + refEdges["scatter_update 0"] = true; + var buildParams = { + enableEmbedding: true, + inEmbeddingTypes: ['Const'], + outEmbeddingTypes: ['^[a-zA-Z]+Summary$'], + refEdges: refEdges + }; + var graphTracker = tf.getSubtaskTracker(tracker, 20, + 'Graph'); + return tf.graph.build(nodes, buildParams, graphTracker); + }) + .then(function(graph) { + this._setOutGraph(graph); + if (statsJson) { + // If there are associated stats, join them with the graph. + tf.time('Joining stats info with graph...', function() { + tf.graph.joinStatsInfoWithGraph(graph, statsJson); + }); + } + var hierarchyParams = { + verifyTemplate: true, + groupSeries: true, + }; + var hierarchyTracker = tf.getSubtaskTracker(tracker, 50, + 'Namespace hierarchy'); + return tf.graph.hierarchy.build(graph, hierarchyParams, hierarchyTracker); + }.bind(this)) + .then(function(graphHierarchy) { + // Update the properties which notify the parent with the + // graph hierarchy and whether the data has live stats or not. + this._setHasStats(statsJson != null); + this._setOutGraphHierarchy(graphHierarchy); + }.bind(this)) + .catch(function(reason) { + tracker.reportError("Graph visualization failed: " + reason); + }); + }, + _selectedDatasetChanged: function(datasetIndex, datasets) { + var dataset = datasets[datasetIndex]; + this._parseAndConstructHierarchicalGraph(dataset); + this._setOutGraphName(dataset.name); + }, + _selectedFileChanged: function(e) { + if (!e) { + return; + } + var file = e.target.files[0]; + if (!file) { + return; + } + + // Clear out the value of the file chooser. This ensures that if the user + // selects the same file, we'll re-read it. + e.target.value = ''; + + var reader = new FileReader(); + + reader.onload = function(e) { + this._parseAndConstructHierarchicalGraph(null, e.target.result); + }.bind(this); + + reader.readAsText(file); + } +}); +</script> diff --git a/tensorflow/tensorboard/components/tf-graph/demo/tf-graph-demo.html b/tensorflow/tensorboard/components/tf-graph/demo/tf-graph-demo.html new file mode 100644 index 0000000000..d6e736d185 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/demo/tf-graph-demo.html @@ -0,0 +1,185 @@ +<link rel="import" href="../../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../tf-graph-board/tf-graph-board.html"> +<link rel="import" href="../../tf-graph-loader/tf-graph-loader.html"> +<link rel="import" href="../../tf-graph/tf-graph-controls.html"> +<!-- Element for tf-graph demo page + +Example + +<tf-graph-demo></tf-graph-demo> + +--> + +<dom-module id="tf-graph-demo"> +<template> +<style> + +:host /deep/ { + font-family: 'Roboto', sans-serif; +} + +.main { + position: absolute; + right: 0; + left: 250px; + height: 100%; +} + +.side { + position: absolute; + left: 0; + width: 250px; + height: 100%; + border: 1px solid black; + box-sizing: border-box; +} + +.all { + position: relative; + width: 100%; + height: 100% +} + +</style> +<div class="all"> + <div class="side"> + <tf-graph-controls + color-by-params="[[colorByParams]]" + has-stats="[[hasStats]]" + color-by="{{colorBy}}" + datasets="[[datasets]]", + selected-dataset="{{selectedDataset}}" + selected-file="{{selectedFile}}" + ></tf-graph-controls> + <tf-graph-loader id="loader" + datasets="[[datasets]]", + selected-dataset="[[selectedDataset]]" + selected-file="[[selectedFile]]" + out-graph-hierarchy="{{graphHierarchy}}" + out-graph="{{graph}}" + out-graph-name="{{graphName}}" + has-stats="{{hasStats}}" + progress="{{_progress}}" + ></tf-graph-loader> + </div> + <div class="main"> + <tf-graph-board id="graphboard" + graph-hierarchy="[[graphHierarchy]]" + graph="[[graph]]" + has-stats="[[hasStats]]" + graph-name="[[graphName]]" + progress="[[_progress]]" + color-by="[[colorBy]]" + color-by-params="{{colorByParams}}" + ></tf-graph-board> + </div> +</div> +</template> +</dom-module> + +<script> +(function(){ + +var datasets = [ + { + name: "Mnist Eval", + path: "mnist_eval.pbtxt", + }, + { + name: "Mnist Train (with stats)", + path: "mnist_train.pbtxt", + statsPath: "mnist_train_stats.json" + }, + { + name: "Inception Train (huge)", + path: "inception_train.pbtxt", + }, + { + name: "Inception Train Eval", + path: "inception_train_eval.pbtxt", + }, + { + name: "Inception Test", + path: "inception_test_eval.pbtxt", + }, + { + name: "PTB Word LSTM Train", + path: "ptb_word_lstm_train.pbtxt", + }, + { + name: "PTB Word LSTM Train Eval", + path: "ptb_word_lstm_train_eval.pbtxt", + }, + { + name: "PTB Word LSTM Test", + path: "ptb_word_lstm_test_eval.pbtxt", + }, + { + name: "Cifar10 Train", + path: "cifar10_train.pbtxt", + }, + { + name: "Cifar10 Multi-GPU Train", + path: "cifar10_multi_gpu_train.pbtxt", + }, + { + name: "Cifar10 Eval", + path: "cifar10_eval.pbtxt", + }, + { + name: "Fatcat LSTM", + path: "fatcat_lstm.pbtxt", + }, + { + name: "Legacy Inception Renamed", + path: "legacy_inception_renamed.pbtxt", + }, + { + name: "Wolfe (Broken)", + path: "wolfe1.pbtxt", + }, + { + name: "Wolfe (Fixed)", + path: "wolfe2.pbtxt", + }, + { + name: "AlexNet", + path: "alexnet.pbtxt", + }, + { + name: "TestError404", + path: "nofile" + } +]; + +Polymer({ + is: 'tf-graph-demo', + properties: { + hasStats: Boolean, + datasets: { + type: Object, + value: function() { + return this._getDatasets(); + } + }, + selectedDataset: { + type: Number, + value: 1 + }, + _progress: Object + }, + _getDatasets: function() { + return _.map(datasets, function(dataset) { + var result = { + name: dataset.name, + path: this.resolveUrl('tf_model_zoo/' + dataset.path) + }; + if (dataset.statsPath != null) { + result.statsPath = this.resolveUrl('tf_model_zoo/' + dataset.statsPath); + } + return result; + }, this); + } +}); +})(); +</script> diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-controls.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-controls.html new file mode 100644 index 0000000000..4a6901e911 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-controls.html @@ -0,0 +1,487 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-menu/paper-menu.html"> +<link rel="import" href="../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html"> + +<dom-module id="tf-graph-controls"> +<template> +<style> +:host { + font-size: 12px; + color: gray; + --paper-font-subhead: { + font-size: 14px; + color: gray; + }; + --paper-dropdown-menu-icon: { + width: 15px; + height: 15px; + }; + --paper-dropdown-menu-button: { + padding: 0; + }; + --paper-dropdown-menu-input: { + padding: 0; + }; + --paper-item-min-height: 30px; +} + +paper-button[raised].keyboard-focus { + font-weight: normal; +} + +.run-dropdown { + --paper-input-container: { + padding: 9px 0 0 25px; + }; +} + +.color-dropdown { + --paper-input-container: { + padding: 9px 0 0 13px; + }; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +table td { + padding: 0; + margin: 0; +} + +.allcontrols { + padding: 10px; +} + +.legend-holder { + position: absolute; + bottom: 0; + padding-bottom: 10px; +} + +#fit { + color: var(--paper-orange-500); +} + +paper-radio-button { + padding: 5px; +} +svg.icon { + width: 60px; + height: 18px; +} +.icon ellipse { + rx: 10px; + ry: 5px; + stroke: #CCC; + stroke-width: 1px; + fill: #FFFFFF; + cy: 10px; +} +.icon rect { + height: 14px; + width: 35px; + rx: 5px; + ry: 5px; + stroke: #CCC; + stroke-width: 2px; + fill: #D9D9D9; +} +.domainValues { + width: 165px; +} +.domainStart { + float: left; +} +.domainEnd { + float: right; +} +.colorBox { + width: 20px; +} + +.image-icon { + width: 24px; + height: 24px; +} + +.gray { + color: #666; +} + +.title { + font-size: 16px; + margin: 8px 5px 8px 0; + color: black; +} +.title small { + font-weight: normal; +} +.deviceList { + max-height: 100px; + overflow-y: auto; +} + +#file { + padding: 8px 0; +} + +.color-text { + padding: 0 0 0 55px; +} + +.fit-button-text { + text-transform: none; + padding: 8px 18px 0 18px; + font-size: 14px +} + +.upload-button { + width: 165px; + height: 25px; + text-transform: none; + margin-top: 4px; +} + +.fit-button { + padding: 2px; + width: 30px; + height: 30px; +} + +.hidden-input { + height: 0px; + width: 0px; + overflow:hidden; +} + +.allcontrols .control-holder { + display: flex; + clear: both; +} +</style> +<div class="allcontrols"> + <div class="control-holder"> + <paper-icon-button id="fit" icon="aspect-ratio" class="fit-button" on-click="fit" alt="Fit to screen"> + </paper-icon-button> + <paper-button class="fit-button-text" on-click="fit">Fit to screen + </paper-button> + </div> + <div class="control-holder"> + <div class="title">Run</div> + <paper-dropdown-menu no-label-float no-animations noink class="run-dropdown"> + <paper-menu id="select" class="dropdown-content" selected="{{selectedDataset}}"> + <template is="dom-repeat" items="[[datasets]]"> + <paper-item>[[item.name]]</paper-item> + </template> + </paper-menu> + </paper-dropdown-menu> + </div> + <div class="control-holder"> + <div class="title">Upload</div> + <paper-button raised class="text-button upload-button" + on-click="_getFile">Choose File</paper-button> + <div class="hidden-input"> + <input type="file" id="file" name="file" on-change="_updateFileInput" /> + </div> + </div> + <div class="control-holder"> + <div class="title">Color</div> + <paper-dropdown-menu no-label-float no-animations noink class="color-dropdown"> + <paper-menu class="dropdown-content" selected="{{_colorByIndex}}"> + <paper-item>Structure</paper-item> + <paper-item>Device</paper-item> + <template is="dom-if" if="[[hasStats]]"> + <paper-item>Compute time</paper-item> + <paper-item>Memory</paper-item> + </template> + </paper-menu> + </paper-dropdown-menu> + </div> + <div> + <template is="dom-if" if="[[_isGradientColoring(colorBy)]]"> + <svg width="160" height="20" style="margin: 0 5px" class="color-text"> + <defs> + <linearGradient id="linearGradient" x1="0%" y1="0%" x2="100%" y2="0%"> + <stop class="start" offset="0%" + stop-color$="[[_currentGradientParams.startColor]]"/> + <stop class="end" offset="100%" + stop-color$="[[_currentGradientParams.endColor]]"/> + </linearGradient> + </defs> + <rect x="0" y="0" width="160" height="20" fill="url(#linearGradient)" + stroke="black" /> + </svg> + <div class="domainValues color-text"> + <div class="domainStart">[[_currentGradientParams.minValue]]</div> + <div class="domainEnd">[[_currentGradientParams.maxValue]]</div> + </div> + </template> + <template is="dom-if" if="[[_equals(colorBy, 'structure')]]"> + <div class="color-text"> + color: same substructure<br/> + gray: unique substructure + </div> + </template> + <template is="dom-if" if="[[_equals(colorBy, 'device')]]"> + <div class="color-text"> + <div class="deviceList"> + <table> + <template is="dom-repeat" items="[[colorByParams.device]]"> + <tr> + <td style$="[[_getBackgroundColor(item.color)]]"> + <div class="colorBox"></div> + </td> + <td> + <div>[[item.device]]</div> + </td> + </tr> + </template> + </table> + </div> + <br/> + gray: unknown device + </div> + </template> + </div> + <div class="legend-holder"> + <table> + <tr> + <td><div class="title">Graph</div></td> + <td>(* = expandable)</td> + </tr> + <tr> + <td> + <svg class="icon"> + <rect transform="translate(3, 1)" height="14" width="35" + rx="5" ry="5"/> + </svg> + </td> + <td>Namespace<span class="gray">*</span></td> + </tr> + <tr> + <td> + <svg class="icon" preserveAspectRatio="xMinYMid meet" + viewBox="0 0 10 10"> + <use xlink:href="#op-node-stamp" fill="white" stroke="#ccc" x="9.5" + y="6" /> + </svg> + </td> + <td>OpNode</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" + viewBox="0 0 12 12"> + <use xlink:href="#op-series-horizontal-stamp" fill="white" + stroke="#ccc" x="2" y="2"/> + </svg> + </td> + <td>Unconnected series<span class="gray">*</span></td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <use xlink:href="#op-series-vertical-stamp" + fill="white" stroke="#ccc" x="2" y="2"/> + </svg> + </td> + <td>Connected series<span class="gray">*</span></td> + </tr> + <tr> + <td> + <svg class="icon"> + <circle fill="white" stroke="#848484" cx="10" cy="10" r="5"/> + </svg> + </td> + <td>Constant</td> + </tr> + <tr> + <td> + <svg class="image-icon"> + <image id="summary-icon" width="24" height="24" x="0" y="0" + class="image-icon"/> + </svg> + </td> + <td>Summary</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <defs> + <marker id="arrowhead-legend" fill="#bbb" markerWidth="10" + markerHeight="10" refX="9" refY="5" orient="auto"> + <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"/> + </marker> + <marker id="ref-arrowhead-legend" fill="#bbb" markerWidth="10" + markerHeight="10" refX="1" refY="5" orient="auto"> + <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"/> + </marker> + </defs> + <path marker-end="url(#arrowhead-legend)" stroke="#bbb" + d="M2 9 l 23 0" stroke-linecap="round" /> + </svg> + </td> + <td>Dataflow edge</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <path marker-end="url(#arrowhead-legend)" stroke="#bbb" + d="M2 9 l 23 0" stroke-linecap="round" stroke-dasharray="2, 2" /> + </svg> + </td> + <td>Control dependency edge</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <path marker-start="url(#ref-arrowhead-legend)" + marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0" + stroke-linecap="round" /> + </svg> + </td> + <td>Reference edge</td> + </tr> + </table> + </div> + </div> +</template> +<script> +(function() { // Private scope. +Polymer({ + is: 'tf-graph-controls', + ready: function() { + // Set the url to download the summary icon. + d3.select(this.$['summary-icon']) + .attr('xlink:href', this.resolveUrl('../../lib/svg/summary-icon.svg')); + }, + properties: { + // Public API. + hasStats: { + type: Boolean + }, + colorBy: { + type: String, + notify: true, + computed: '_getColorBy(_colorByIndex)' + }, + colorByParams: Object, + datasets: { + type: Array, + observer: '_datasetsChanged' + }, + selectedDataset: { + type: Number, + notify: true, + value: 0, + }, + selectedFile: { + type: Object, + notify: true + }, + // Private API. + _colorByIndex: { + type: Number, + value: 0 // Defaults to 'structure'. + }, + _currentGradientParams: { + type: Object, + computed: '_getCurrentGradientParams(colorByParams, colorBy)' + } + }, + _getColorBy: function(colorByIndex) { + return ["structure", "device", "compute_time", "memory"][colorByIndex]; + }, + _getBackgroundColor: function(color) { + return 'background-color:' + color; + }, + fit: function() { + document.querySelector('#scene').fit(); + }, + _isGradientColoring: function(colorBy) { + return ["compute_time", "memory"].indexOf(colorBy) !== -1; + }, + _equals: function(a, b) { + return a === b; + }, + _getCurrentGradientParams: function(colorByParams, colorBy) { + if (!this._isGradientColoring(colorBy)) { + return; + } + var params = colorByParams[colorBy]; + var minValue = params.minValue; + var maxValue = params.maxValue; + if (colorBy === 'memory') { + minValue = convertToHumanReadable(minValue, MEMORY_UNITS); + maxValue = convertToHumanReadable(maxValue, MEMORY_UNITS); + } else if (colorBy === 'compute_time') { + minValue = convertToHumanReadable(minValue, TIME_UNITS); + maxValue = convertToHumanReadable(maxValue, TIME_UNITS); + } + return { + minValue: minValue, + maxValue: maxValue, + startColor: params.startColor, + endColor: params.endColor + }; + }, + _updateFileInput: function(e) { + this.set('selectedFile', e); + }, + _datasetsChanged: function(newDatasets, oldDatasets) { + if (oldDatasets != null || this.selected == null) { + // Select the first dataset by default. + this.set('selectedDataset', 0); + } + }, + _getFile: function() { + this.$.file.click(); + } +}); + +// Private methods. +var MEMORY_UNITS = [ + // Atomic unit. + {symbol: 'B'}, + // numUnits specifies how many previous units this unit contains. + {symbol: 'KB', numUnits: 1024}, + {symbol: 'MB', numUnits: 1024}, + {symbol: 'GB', numUnits: 1024}, + {symbol: 'TB', numUnits: 1024}, + {symbol: 'PB', numUnits: 1024} +]; +var TIME_UNITS = [ + // Atomic unit. Finest granularity in TensorFlow stat collection. + {symbol: 'µs'}, + // numUnits specifies how many previous units this unit contains. + {symbol: 'ms', numUnits: 1000}, + {symbol: 's', numUnits: 1000}, + {symbol: 'min', numUnits: 60}, + {symbol: 'hr', numUnits: 60}, + {symbol: 'days', numUnits: 24} +]; + +/** + * Returns the human readable version of the unit. + * (e.g. 1.35 GB, 23 MB, 34 ms, 6.53 min etc). + */ +function convertToHumanReadable(value, units, unitIndex) { + unitIndex = unitIndex == null ? 0 : unitIndex; + if (unitIndex + 1 < units.length && value >= units[unitIndex + 1].numUnits) { + return convertToHumanReadable(value / units[unitIndex + 1].numUnits, + units, unitIndex + 1); + } + // toPrecision() has the tendency to return a number in scientific + // notation and (number - 0) brings it back to normal notation. + return (value.toPrecision(3) - 0) + ' ' + units[unitIndex].symbol; +} +})(); // Closing private scope. +</script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-icon.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-icon.html new file mode 100644 index 0000000000..fafaa3b954 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-icon.html @@ -0,0 +1,164 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> + +<dom-module id="tf-graph-icon"> + <template> + <template is="dom-if" if="[[_isType(node, type, 'OP')]]"> + <template is="dom-if" if="[[_isConst(node, const)]]"> + <svg height$="[[height]]" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 10 10"> + <circle fill="white" stroke="#848484" cx="5" cy="5" r="3" /> + </svg> + </template> + <template is="dom-if" if="[[_isSummary(node, summary)]]"> + <img height$="[[height]]" + src="[[resolveUrl('../../lib/svg/summary-icon.svg')]]" /> + </template> + <template is="dom-if" if="[[_isRegularOp(node, const, summary)]]"> + <svg height$="[[height]]" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 8"> + <use xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="#op-node-stamp" + fill="white" + stroke="#ccc" + x="8" y="4" /> + </svg> + </template> + </template> + <template is="dom-if" if="[[_isType(node, type, 'META')]]"> + <svg height$="[[height]]" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 37 16"> + <rect x="1" y="1" + fill="#d9d9d9" stroke="#ccc" stroke-width="2px" + height="14" width="35" + rx="5" ry="5" /> + </svg> + </template> + <template is="dom-if" if="[[_isType(node, type, 'SERIES')]]"> + <template is="dom-if" if="[[_isVertical(node, vertical)]]"> + <svg height$="[[height]]" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 15"> + <use xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="#op-series-vertical-stamp" + fill="white" + stroke="#ccc" + x="0" y="2" /> + </svg> + </template> + <template is="dom-if" if="[[!_isVertical(node, vertical)]]"> + <svg height$="[[height]]" + preserveAspectRatio="xMinYMid meet" viewBox="0 0 24 10"> + <use xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="#op-series-horizontal-stamp" + fill="white" + stroke="#ccc" + x="0" y="1" /> + </svg> + </template> + </template> + </template> + + <script> + (function() { + Polymer({ + is: 'tf-graph-icon', + + properties: { + /** + * Node to represent with an icon. Optional, but if specified, its + * properties override those defined in the type, vertical, const and + * summary properties. + * @type {tf.graph.Node} + */ + node: { + type: Object, + value: null + }, + + /** Type of node to draw. */ + type: { + type: String, + value: null + }, + + /** Direction for series (ignored for other types). */ + vertical: { + type: Boolean, + value: false + }, + + /** Whether the op is Const (ignored for non-ops). */ + const: { + type: Boolean, + value: false + }, + + /** Whether the op is a Summary (ignored for non-ops). */ + summary: { + type: Boolean, + value: false + }, + + /** Height of the SVG element in pixels, used for scaling. */ + height: { + type: Number, + value: 20 + } + }, + + /** + * Test whether the specified node's type, or the literal type string, + * match a particular other type. + */ + _isType: function(inputNode, inputType, targetType) { + if (inputNode) { + return tf.graph.NodeType[inputNode.type] === targetType; + } + return inputType === targetType; + }, + + /** + * Test whether the specified node should be represented as a vertical + * series. Defaults to the value of the vertical property if node is + * not specified. + */ + _isVertical: function(inputNode, inputVertical) { + if (inputNode) { + return inputNode.hasNonControlEdges; + } + return !!inputVertical; + }, + + /** + * Test whether the specified node is a constant. Defaults to the value + * of the const property if node is not specified. + */ + _isConst: function(inputNode, inputConst) { + if (inputNode) { + return inputNode.op === 'Const'; + } + return !!inputConst; + }, + + /** + * Test whether the specified node is a summary. Defaults to the value + * of the summary property if node is not specified. + */ + _isSummary: function(inputNode, inputSummary) { + if (inputNode) { + return this._isType(inputNode, null, 'OP') && + inputNode.op.substr(-7) === 'Summary'; + } + return !!inputSummary; + }, + + /** + * Test whether the op node is a regular non-summary non-const node. + */ + _isRegularOp: function(inputNode, inputConst, inputSummary) { + return !this._isConst(inputNode, inputConst) && + !this._isSummary(inputNode, inputSummary); + } + }); + })(); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-minimap.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-minimap.html new file mode 100644 index 0000000000..2b6beeaded --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-minimap.html @@ -0,0 +1,69 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<script src="../tf-graph-common/lib/scene/minimap.js"></script> +<dom-module id="tf-graph-minimap"> +<template> +<style> +:host { + background-color:white; + transition: opacity .3s linear; + pointer-events: auto; +} + +:host.hidden { + opacity: 0; + pointer-events: none; +} + +canvas { + border: 1px solid #999; +} + +rect { + fill: white; + stroke: #111111; + stroke-width: 1px; + fill-opacity: 0; + filter: url(#minimapDropShadow); + cursor: move; +} + +svg { + position: absolute; +} +</style> +<svg> + <defs> + <filter id="minimapDropShadow" x="-20%" y="-20%" width="150%" height="150%"> + <feOffset result="offOut" in="SourceGraphic" dx="1" dy="1"></feOffset> + <feColorMatrix result="matrixOut" in="offOut" type="matrix" values="0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.5 0"></feColorMatrix> + <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="2"></feGaussianBlur> + <feBlend in="SourceGraphic" in2="blurOut" mode="normal"></feBlend> + </filter> + </defs> + <rect></rect> +</svg> +<canvas class="first"></canvas> +<!-- Additional canvas to use as buffer to avoid flickering between updates --> +<canvas class="second"></canvas> +</template> +<script> +Polymer({ + is: 'tf-graph-minimap', + + /** + * Initializes the minimap and returns a minimap object to notify when + * things update. + * + * @param svg The main svg element. + * @param zoomG The svg group used for panning and zooming the main svg. + * @param mainZoom The main zoom behavior. + * @param maxWandH The maximum width/height for the minimap. + * @param labelPadding Padding in pixels due to the main graph labels. + */ + init: function(svg, zoomG, mainZoom, maxWAndH, labelPadding) { + return new tf.scene.Minimap(svg, zoomG, mainZoom, this, maxWAndH, + labelPadding); + } +}); +</script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-params.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-params.html new file mode 100644 index 0000000000..576816ddd0 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-params.html @@ -0,0 +1,113 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<!-- +Module for adjusting render graph building parameter. +--> +<dom-module id="tf-graph-params"> +</dom-module> +<script> + Polymer({ + + is: 'tf-graph-params', + + properties: { + // PARAMETERS + + enableExtraction: { + type: Boolean, + value: true + }, + + /** Maximum in-degree that a node can have without being considered as + * high in-degree node. */ + maxInDegree: { + type: Number, + value: 4 + }, + /** Maximum out-degree that a node can have without being considered as + * high out-degree node. */ + maxOutDegree: { + type: Number, + value: 4 + }, + /** Maximum number of control edges a node can have before they aren't + * displayed. */ + maxControlDegree: { + type: Number, + value: 4 + }, + + /** + * Types patterns for predefined out-extract nodes, which are + * sink-like nodes that will be extracted from the main graph. + */ + outExtractTypes: { + type: Array, + value: function() { + return [ + 'NoOp' // for "sgd", "momentum" group + ]; + } + }, + + /** + * Types patterns for predefined in-extract nodes, which are + * source-like nodes that will be extracted from the main graph. + */ + inExtractTypes: { + type: Array, + value: function() { + return ['Variable']; + } + }, + + /** + * When removing edges from a high degree node, remove all of its edges if + * detachAllEdgesForHighDegree is true. Otherwise remove all in-edges if + * the node has high in-degree, or all out-edges if the node has high + * out-degree. + */ + detachAllEdgesForHighDegree: { + type: Boolean, + value: false + }, + + /** + * After extracting high in/out degree nodes and predefined + * source-like/sink-like, extract isolated nodes to the side + * if this extractIsolatedNodesWithAnnotationsOnOneSide is true. + */ + extractIsolatedNodesWithAnnotationsOnOneSide: { + type: Boolean, + value: true + }, + + /** + * Whether to draw bridge paths inside of expanded group nodes. + */ + enableBridgegraph: { + type: Boolean, + value: true + }, + + /** + * Colors for the minimum and maximum values whenever we have a gradient + * scale. + */ + minMaxColors: { + type: Array, + value: function() { + return ["#fff5f0", "#fb6a4a"]; + } + }, + + /** + * Maximum number of annotations to be displayed on a node before an + * ellipsis is used. + */ + maxAnnotations: { + type: Number, + value: 5 + } + } + }); +</script> diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-scene.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-scene.html new file mode 100644 index 0000000000..34c2d3dc3d --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-scene.html @@ -0,0 +1,475 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="tf-graph-style.html"> +<link rel="import" href="tf-graph-minimap.html"> +<script src="../tf-graph-common/lib/layout.js"></script> +<script src="../../bower_components/dagre/dist/dagre.core.js"></script> +<!-- + A module that takes graph-hierarchy as input and produce + a svg dom using dagre and d3. +--> +<dom-module id="tf-graph-scene"> +<template> +<style include="tf-graph-style"> + :host { + font-size: 20px; + } + .titleContainer { + position: relative; + } + .title { + position: absolute; + } + .auxTitle { + position: absolute; + } + #minimap { + position: absolute; + right: 20px; + bottom: 20px; + } +</style> +<div class="titleContainer"> + <div id="title" class="title">Main Graph</div> + <div id="auxTitle" class="auxTitle">Auxiliary nodes</div> +</div> +<svg id="svg"> + <defs> + <!-- Arrow head for edge paths. --> + <marker id="arrowhead" markerWidth="10" markerHeight="10" + refX="9" refY="5" orient="auto"> + <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"/> + </marker> + <marker id="ref-arrowhead" markerWidth="10" markerHeight="10" + refX="1" refY="5" orient="auto"> + <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"/> + </marker> + <!-- Arrow head for annotation edge paths. --> + <marker id="annotation-arrowhead" markerWidth="5" markerHeight="5" + refX="5" refY="2.5" orient="auto"> + <path d="M 0,0 L 5,2.5 L 0,5 L 0,0"/> + </marker> + <marker id="ref-annotation-arrowhead" markerWidth="5" markerHeight="5" + refX="0" refY="2.5" orient="auto"> + <path d="M 5,0 L 0,2.5 L 5,5 L 5,0"/> + </marker> + <!-- Template for an Op node ellipse. --> + <ellipse id="op-node-stamp" + rx="7.5" ry="3" stroke="inherit" fill="inherit" /> + <!-- Template for an Op node annotation ellipse (smaller). --> + <ellipse id="op-node-annotation-stamp" + rx="5" ry="2" stroke="inherit" fill="inherit" /> + <!-- Vertically stacked series of Op nodes when unexpanded. --> + <g id="op-series-vertical-stamp"> + <use xlink:href="#op-node-stamp" x="8" y="9" /> + <use xlink:href="#op-node-stamp" x="8" y="6" /> + <use xlink:href="#op-node-stamp" x="8" y="3" /> + </g> + <!-- Horizontally stacked series of Op nodes when unexpanded. --> + <g id="op-series-horizontal-stamp"> + <use xlink:href="#op-node-stamp" x="16" y="4" /> + <use xlink:href="#op-node-stamp" x="12" y="4" /> + <use xlink:href="#op-node-stamp" x="8" y="4" /> + </g> + <!-- Horizontally stacked series of Op nodes for annotation. --> + <g id="op-series-annotation-stamp"> + <use xlink:href="#op-node-annotation-stamp" x="9" y="2" /> + <use xlink:href="#op-node-annotation-stamp" x="7" y="2" /> + <use xlink:href="#op-node-annotation-stamp" x="5" y="2" /> + </g> + <!-- + Where the linearGradient for each node is stored. Used when coloring + by proportions of devices. + --> + <g id="linearGradients"></g> + </defs> + <!-- Make a large rectangle that fills the svg space so that + zoom events get captured on safari --> + <rect fill="white" width="10000" height="10000"></rect> + <g id="root"></g> +</svg> +<tf-graph-minimap id="minimap"></tf-graph-minimap> +</template> +</dom-module> +<script> +Polymer({ + is: 'tf-graph-scene', + properties: { + graphHierarchy: Object, + name: String, + colorBy: { + type: String, + observer: '_colorByChanged' + }, + /** @type {d3_zoom} d3 zoom object */ + _zoom: Object, + highlightedNode: { + type: String, + observer: '_highlightedNodeChanged' + }, + selectedNode: { + type: String, + observer: '_selectedNodeChanged' + }, + /** Keeps track of if the graph has been zoomed/panned since loading */ + _zoomed: { + type: Boolean, + observer: '_onZoomChanged', + value: false + }, + /** Keeps track of the starting coordinates of a graph zoom/pan */ + _zoomStartCoords: { + type: Array, + value: null + }, + /** Keeps track of the current coordinates of a graph zoom/pan */ + _zoomCoords: { + type: Array, + value: null + }, + /** Maximum distance of a zoom event for it to be interpreted as a click */ + _maxZoomDistanceForClick: { + type: Number, + value: 20 + }, + /** + * @type {d3.scale.ordinal} + * Scale mapping from template name to a number between 0 and N-1 + * where N is the number of different template names. + */ + templateIndex: Object, + /** + * @type {tf.scene.Minimap} + * A minimap object to notify for zoom events. + */ + minimap: Object, + /* + * Dictionary for easily stylizing nodes when state changes. + * _nodeGroupIndex[nodeName] = d3_selection of the nodeGroup + */ + _nodeGroupIndex: { + type: Object, + value: function() { return {}; } + }, + /* + * Dictionary for easily stylizing annotation nodes when state changes. + * _annotationGroupIndex[nodeName][hostNodeName] = + * d3_selection of the annotationGroup + */ + _annotationGroupIndex: { + type: Object, + value: function() { return {}; } + }, + /* + * Dictionary for easily stylizing edges when state changes. + * _edgeGroupIndex[edgeName] = d3_selection of the edgeGroup + */ + _edgeGroupIndex: { + type: Object, + value: function() { return {}; } + }, + /** + * Max font size for metanode label strings. + */ + maxMetanodeLabelLengthFontSize: { + type: Number, + value: 9 + }, + /** + * Min font size for metanode label strings. + */ + minMetanodeLabelLengthFontSize: { + type: Number, + value: 6 + }, + /** + * Metanode label strings longer than this are given smaller fonts. + */ + maxMetanodeLabelLengthLargeFont: { + type: Number, + value: 11 + }, + /** + * Metanode label strings longer than this are truncated with ellipses. + */ + maxMetanodeLabelLength: { + type: Number, + value: 18 + }, + progress: Object + }, + observers: [ + '_buildAndFit(graphHierarchy)' + ], + getNode: function(nodeName) { + return this.graphHierarchy.getRenderNodeByName(nodeName); + }, + isNodeExpanded: function(node) { + return node.expanded; + }, + setNodeExpanded: function(renderNode) { + this._build(this.graphHierarchy); + }, + /** + * Resets the state of the component. Called whenever the whole graph + * (dataset) changes. + */ + _resetState: function() { + // Reset the state of the component. + this._nodeGroupIndex = {}; + this._annotationGroupIndex = {}; + this._edgeGroupIndex = {}; + this._updateLabels(false); + // Remove all svg elements under the 'root' svg group. + d3.select(this.$.svg).select('#root').selectAll('*').remove(); + // And the defs. + d3.select(this.$.svg).select('defs #linearGradients') + .selectAll('*').remove(); + }, + /** Main method for building the scene */ + _build: function(graphHierarchy) { + if (!graphHierarchy) { return; } //handle untruthy input + var templateNames = d3.keys(graphHierarchy.hierarchy.templates); + + this.templateIndex = d3.scale.ordinal() + .domain(templateNames) + .range(d3.range(0, templateNames.length)); + tf.time('tf-graph-scene (layout):', function() { + // layout the scene for this meta / series node + tf.graph.layout.scene(graphHierarchy.root, this); + }.bind(this)); + + tf.time('tf-graph-scene (build scene):', function() { + tf.graph.scene.buildGroup(d3.select(this.$.root), graphHierarchy.root, this); + tf.graph.scene.addGraphClickListener(this.$.svg, this); + }.bind(this)); + // Update the minimap again when the graph is done animating. + setTimeout(function() { + this.minimap.update(); + }.bind(this), tf.graph.layout.PARAMS.animation.duration); + }, + ready: function() { + this._zoom = d3.behavior.zoom() + .on('zoomend', function() { + if (this._zoomStartCoords) { + // Calculate the total distance dragged during the zoom event. + // If it is sufficiently small, then fire an event indicating + // that zooming has ended. Otherwise wait to fire the zoom end + // event, so that a mouse click registered as part of this zooming + // is ignored (as this mouse click was part of a zooming, and should + // not be used to indicate an actual click on the graph). + var dragDistance = Math.sqrt( + Math.pow(this._zoomStartCoords[0] - this._zoomCoords[0], 2) + + Math.pow(this._zoomStartCoords[1] - this._zoomCoords[1], 2)); + if (dragDistance < this._maxZoomDistanceForClick) { + this._fireEnableClick(); + } else { + setTimeout(this._fireEnableClick.bind(this), 50); + } + } + this._zoomStartCoords = null; + }.bind(this)) + .on('zoom', function() { + // Store the coordinates of the zoom event + this._zoomCoords = d3.event.translate; + + // If this is the first zoom event after a zoom-end, then + // store the coordinates as the start coordinates as well, + // and fire an event to indicate that zooming has started. + // This doesn't use the zoomstart event, as d3 sends this + // event on mouse-down, even if there has been no dragging + // done to translate the graph around. + if (!this._zoomStartCoords) { + this._zoomStartCoords = this._zoomCoords.slice(); + this.fire('disable-click'); + } + this._zoomed = true; + d3.select(this.$.root).attr('transform', + 'translate(' + d3.event.translate + ')' + + 'scale(' + d3.event.scale + ')'); + // Notify the minimap. + this.minimap.zoom(d3.event.translate, d3.event.scale); + }.bind(this)); + d3.select(this.$.svg).call(this._zoom) + .on('dblclick.zoom', null); + d3.select(window).on('resize', function() { + // Notify the minimap that the user's window was resized. + // The minimap will figure out the new dimensions of the main svg + // and will use the existing translate and scale params. + this.minimap.zoom(); + }.bind(this)); + // Initialize the minimap. + this.minimap = this.$.minimap.init(this.$.svg, this.$.root, this._zoom, + tf.graph.layout.PARAMS.minimap.size, + tf.graph.layout.PARAMS.subscene.meta.labelHeight); + }, + _buildAndFit: function(graphHierarchy) { + this._resetState(); + this._build(graphHierarchy); + // Fit to screen after the graph is done animating. + setTimeout(this.fit.bind(this), tf.graph.layout.PARAMS.animation.duration); + }, + _updateLabels: function(showLabels) { + var titleStyle = this.getElementsByClassName('title')[0].style; + var auxTitleStyle = this.getElementsByClassName('auxTitle')[0].style; + var core = this.getElementsByClassName(tf.graph.scene.Class.Scene.CORE)[0]; + // Only show labels if the graph is fully loaded. + if (showLabels && core && this.progress && this.progress.value === 100) { + var aux = + this.getElementsByClassName(tf.graph.scene.Class.Scene.INEXTRACT)[0] || + this.getElementsByClassName(tf.graph.scene.Class.Scene.OUTEXTRACT)[0]; + var coreX = core.getCTM().e; + var auxX = aux ? aux.getCTM().e : null; + titleStyle.display = 'inline'; + titleStyle.left = coreX + 'px'; + if (auxX !== null && auxX !== coreX) { + auxTitleStyle.display = 'inline'; + auxTitleStyle.left = auxX + 'px'; + } else { + auxTitleStyle.display = 'none'; + } + } else { + titleStyle.display='none'; + auxTitleStyle.display = 'none'; + } + }, + + + + + /** + * Called whenever the user changed the 'color by' option in the + * UI controls. + */ + _colorByChanged: function() { + // We iterate through each svg node and update its state. + _.each(this._nodeGroupIndex, function(nodeGroup, nodeName) { + this._updateNodeState(nodeName); + }, this); + // Notify also the minimap. + this.minimap.update(); + }, + fit: function() { + tf.graph.scene.fit(this.$.svg, this.$.root, this._zoom, function() { + this._zoomed = false; + }.bind(this)); + }, + isNodeSelected: function(n) { + return n === this.selectedNode; + }, + isNodeHighlighted: function(n) { + return n === this.highlightedNode; + }, + addAnnotationGroup: function(a, d, selection) { + var an = a.node.name; + this._annotationGroupIndex[an] = this._annotationGroupIndex[an] || {}; + this._annotationGroupIndex[an][d.node.name] = selection; + }, + getAnnotationGroupsIndex: function(a) { + return this._annotationGroupIndex[a]; + }, + removeAnnotationGroup: function(a, d) { + delete this._annotationGroupIndex[a.node.name][d.node.name]; + }, + addNodeGroup: function(n, selection) { + this._nodeGroupIndex[n] = selection; + }, + getNodeGroup: function(n) { + return this._nodeGroupIndex[n]; + }, + removeNodeGroup: function(n) { + delete this._nodeGroupIndex[n]; + }, + addEdgeGroup: function(n, selection) { + this._edgeGroupIndex[e] = selection; + }, + getEdgeGroup: function(e) { + return this._edgeGroupIndex[e]; + }, + /** + * Update node and annotation node of the given name. + * @param {String} n node name + */ + _updateNodeState: function(n) { + var node = this.getNode(n); + var nodeGroup = this.getNodeGroup(n); + + if (nodeGroup) { + tf.graph.scene.node.stylize(nodeGroup, node, this); + } + + var annotationGroupIndex = this.getAnnotationGroupsIndex(n); + _.each(annotationGroupIndex, function(aGroup, hostName) { + tf.graph.scene.node.stylize(aGroup, node, this, + tf.graph.scene.Class.Annotation.NODE); + }, this); + }, + + _selectedNodeChanged: function(selectedNode, oldSelectedNode) { + if (selectedNode === oldSelectedNode) { + return; + } + + if (selectedNode) { + this._updateNodeState(selectedNode); + } + if (oldSelectedNode) { + this._updateNodeState(oldSelectedNode); + } + + if (!selectedNode) { + return; + } + // Update the minimap to reflect the highlighted (selected) node. + this.minimap.update(); + var node = this.graphHierarchy.hierarchy.node(selectedNode); + var nodeParents = []; + // Create list of all metanode parents of the selected node. + while (node.parentNode != null + && node.parentNode.name != tf.graph.ROOT_NAME) { + node = node.parentNode; + nodeParents.push(node.name); + } + // Ensure each parent metanode is built and expanded. + var topParentNodeToBeExpanded; + _.forEachRight(nodeParents, function(parentName) { + this.graphHierarchy.buildSubhierarchy(parentName); + var renderNode = this.graphHierarchy.getRenderNodeByName(parentName); + if (renderNode.node.isGroupNode && !renderNode.expanded) { + renderNode.expanded = true; + if (!topParentNodeToBeExpanded) { + topParentNodeToBeExpanded = renderNode; + } + } + }, this); + // If any expansion was needed to display this selected node, then + // inform the scene of the top-most expansion. + if (topParentNodeToBeExpanded) { + this.setNodeExpanded(topParentNodeToBeExpanded); + this._zoomed = true; + } + + if (tf.graph.scene.panToNode(selectedNode, this.$.svg, this.$.root, + this._zoom)) { + this._zoomed = true; + } + }, + _highlightedNodeChanged: function(highlightedNode, oldHighlightedNode) { + if (highlightedNode === oldHighlightedNode) { + return; + } + + if (highlightedNode) { + this._updateNodeState(highlightedNode); + } + if (oldHighlightedNode) { + this._updateNodeState(oldHighlightedNode); + } + }, + _onZoomChanged: function() { + this._updateLabels(!this._zoomed); + }, + _fireEnableClick: function() { + this.fire('enable-click'); + }, +}); +</script> diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-style.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-style.html new file mode 100644 index 0000000000..3e6f7f2112 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-style.html @@ -0,0 +1,339 @@ +<dom-module id="tf-graph-style"> +<template> +<style> +:host { + display: flex; + width: 100%; +} + +::content #svg { + overflow: hidden; + flex: 1; +} + +::content #hidden { + position: fixed; + top: 0px; + visibility: hidden; +} + + +/* --- Node and annotation-node for Metanode --- */ + +::content .meta > .nodeshape > rect, +::content .meta > .annotation-node > rect { + cursor: pointer; + fill: hsl(0, 0%, 70%); +} + + +::content .node.meta.highlighted > .nodeshape > rect, +::content .node.meta.highlighted > .annotation-node > rect { + stroke-width: 2; +} + +::content .annotation.meta.highlighted > .nodeshape > rect, +::content .annotation.meta.highlighted > .annotation-node > rect { + stroke-width: 1; +} + +::content .meta.selected > .nodeshape > rect, +::content .meta.selected > .annotation-node > rect { + stroke: red; + stroke-width: 2; +} + +::content .node.meta.selected.expanded > .nodeshape > rect, +::content .node.meta.selected.expanded > .annotation-node > rect { + stroke: red; + stroke-width: 3; +} + +:content .annotation.meta.selected > .nodeshape > rect, +:content .annotation.meta.selected > .annotation-node > rect { + stroke: red; + stroke-width: 2; +} + +::content .node.meta.selected.expanded.highlighted > .nodeshape > rect, +::content .node.meta.selected.expanded.highlighted > .annotation-node > rect { + stroke: red; + stroke-width: 4; +} + + +/* --- Op Node --- */ + +::content .op > .nodeshape > ellipse, +::content .op > .annotation-node > ellipse { + cursor: pointer; + fill: #fff; + stroke: #ccc; +} + +::content .op.selected > .nodeshape > ellipse, +::content .op.selected > .annotation-node > ellipse { + stroke: red; + stroke-width: 2; +} + +::content .op.highlighted > .nodeshape > ellipse, +::content .op.highlighted > .annotation-node > ellipse { + stroke-width: 2; +} + +/* --- Series Node --- */ + +/* By default, don't show the series background <rect>. */ +::content .series > .nodeshape > rect { + fill: hsl(0, 0%, 70%); + fill-opacity: 0; + stroke-dasharray: 5, 5; + stroke-opacity: 0; + cursor: pointer; +} + +/* Once expanded, show the series background <rect> and hide the <use>. */ +::content .series.expanded > .nodeshape > rect { + fill-opacity: 0.15; + stroke: hsl(0, 0%, 70%); + stroke-opacity: 1; +} +::content .series.expanded > .nodeshape > use { + visibility: hidden; +} + +/** + * TODO(jimbo): Simplify this by applying a stable class name to all <g> + * elements that currently have either the nodeshape or annotation-node classes. + */ +::content .series > .nodeshape > use , +::content .series > .annotation-node > use { + stroke: #ccc; +} +::content .series.highlighted > .nodeshape > use , +::content .series.highlighted > .annotation-node > use { + stroke-width: 2; +} +::content .series.selected > .nodeshape > use , +::content .series.selected > .annotation-node > use { + stroke: red; + stroke-width: 2; +} + +::content .series.selected > .nodeshape > rect { + stroke: red; + stroke-width: 2; +} + +:content .annotation.series.selected > .annotation-node > use { + stroke: red; + stroke-width: 2; +} + +/* --- Bridge Node --- */ +::content .bridge > .nodeshape > rect { + stroke: #f0f; + opacity: 0.2; + display: none; +} + +/* --- Structural Elements --- */ +::content .edge > path.edgeline.structural { + stroke: #f0f; + opacity: 0.2; + display: none; +} + +/* --- Series Nodes --- */ + +/* Hide the rect for a series' annotation. */ +::content .series > .annotation-node > rect { + display: none; +} + +/* --- Node label --- */ + + +::content .node > text.nodelabel { + cursor: pointer; + fill: #444; +} + +::content .meta.expanded > text.nodelabel { + font-size: 9px; +} + +::content .series > text.nodelabel { + font-size: 8px; +} + +::content .op > text.nodelabel { + font-size: 6px; +} + +::content .bridge > text.nodelabel { + display: none; +} + +::content .node.meta.expanded > text.nodelabel{ + cursor: normal; +} + +::content .annotation.meta.highlighted > text.annotation-label { + fill: #50A3F7; +} + +::content .annotation.meta.selected > text.annotation-label { + fill: #4285F4; +} + +/* --- Annotation --- */ + +/* only applied for annotations that are not summary or constant. +(.summary, .constant gets overriden below) */ +::content .annotation > .annotation-node > * { + stroke-width: 0.5; + stroke-dasharray: 1, 1; +} + +::content .annotation.summary > .annotation-node > *, +::content .annotation.constant > .annotation-node > * { + stroke-width: 1; + stroke-dasharray: none; +} + +::content .annotation > .annotation-edge { + fill: none; + stroke: #aaa; + stroke-width: 0.5; + marker-end: url(#annotation-arrowhead); +} + +::content .annotation > .annotation-edge.refline { + marker-start: url(#ref-annotation-arrowhead); +} + +::content .annotation > .annotation-control-edge { + stroke-dasharray: 1, 1; +} + +::content #annotation-arrowhead { + fill: #aaa; +} + +::content #ref-annotation-arrowhead { + fill: #aaa; +} + +::content .annotation > .annotation-label { + font-size: 5px; + cursor: pointer; +} +::content .annotation > .annotation-label.annotation-ellipsis { + cursor: default; +} + +/* Hide annotations on expanded meta nodes since they're redundant. */ +::content .expanded > .in-annotations, +::content .expanded > .out-annotations { + display: none; +} + +/* --- Annotation: Constant --- */ + +::content .constant > .annotation-node > ellipse { + cursor: pointer; + fill: white; + stroke: #848484; +} + +::content .constant.selected > .annotation-node > ellipse { + fill: white; + stroke: red; +} + +::content .constant.highlighted > .annotation-node > ellipse { + stroke-width: 1.5; +} + +/* --- Annotation: Summary --- */ + +::content .summary > .annotation-node > ellipse { + cursor: pointer; + fill: #DB4437; + stroke: #DB4437; +} + +::content .summary.selected > .annotation-node > ellipse { + fill: #A52714; + stroke: #A52714; +} + +::content .summary.highlighted > .annotation-node > ellipse { + stroke-width: 1.5; +} + +/* --- Edge --- */ + +::content .edge > path.edgeline { + fill: none; + marker-end: url(#arrowhead); + stroke: #bbb; + stroke-linecap: round; + stroke-width: 0.75; +} + +::content .edge > path.edgeline.refline { + marker-start: url(#ref-arrowhead); +} + +::content #arrowhead { + fill: #bbb; +} + +::content #ref-arrowhead { + fill: #bbb; +} + +::content .edge .control-dep { + stroke-dasharray: 2, 2; +} + +/* --- Group node expand/collapse button --- */ + +/* Hides expand/collapse buttons when a node isn't expanded or highlighted. Using + incredibly small opacity so that the bounding box of the <g> parent still takes + this container into account even when it isn't visible */ +::content .node:not(.highlighted):not(.expanded) > .nodeshape > .buttoncontainer { + opacity: 0.01; +} +::content .node.highlighted > .nodeshape > .buttoncontainer { + cursor: pointer; +} +::content .buttoncircle { + fill: #E7811D; +} +::content .buttoncircle:hover { + fill: #B96717; +} +::content .expandbutton, +::content .collapsebutton { + stroke: white; +} +/* Do not let the path elements in the button take pointer focus */ +::content .node > .nodeshape > .buttoncontainer > .expandbutton, +::content .node > .nodeshape > .buttoncontainer > .collapsebutton { + pointer-events: none; +} +/* Only show the expand button when a node is collapsed and only show the + collapse button when a node is expanded. */ +::content .node.expanded > .nodeshape > .buttoncontainer > .expandbutton { + display: none; +} +::content .node:not(.expanded) > .nodeshape > .buttoncontainer > .collapsebutton { + display: none; +} +</style> +</template> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph.html b/tensorflow/tensorboard/components/tf-graph/tf-graph.html new file mode 100644 index 0000000000..905d96e237 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-graph/tf-graph.html @@ -0,0 +1,221 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/iron-flex-layout/iron-flex-layout.html"> +<link rel="import" href="../../bower_components/iron-icons/iron-icons.html"> +<link rel="import" href="../../bower_components/paper-button/paper-button.html"> +<link rel="import" href="../../bower_components/paper-input/paper-input.html"> +<link rel="import" href="../../bower_components/paper-toggle-button/paper-toggle-button.html"> +<link rel="import" href="../tf-graph-common/tf-graph-common.html"> +<link rel="import" href="tf-graph-scene.html"> +<link rel="import" href="tf-graph-params.html"> +<dom-module id="tf-graph"> +<template> +<style> +.container { + width: 100%; + height: 100%; +} + +.vertical { + width:100%; + height:100%; + @apply(--layout-vertical); +} + +.auto { + @apply(--layout-flex-auto); + @apply(--layout-vertical); +} + +h2 { + text-align: center; +} + +paper-button { + text-transform: none; +} +</style> +<div class="container"> + <tf-graph-params id="graphParams"></tf-graph-params> + <div class="vertical"> + <h2>[[title]]</h2> + <tf-graph-scene id="scene" class="auto" + graph-hierarchy="[[_renderHierarchy]]" + highlighted-node="[[_getVisible(highlightedNode)]]" + selected-node="[[selectedNode]]" + color-by="[[colorBy]]" + name="[[graphName]]" + progress="[[progress]]" + ></tf-graph-scene> + </div> +</div> +</template> +</dom-module> + +<script> +Polymer({ + + is: 'tf-graph', + + properties: { + graphHierarchy: { + type: Object, + notify: true, + observer: '_graphChanged' + }, + title: String, + selectedNode: { + type: String, + notify: true, + }, + highlightedNode: { + type: String, + notify: true + }, + /** What to color the nodes by (compute time, memory, device etc.) */ + colorBy: String, + colorByParams: { + type: Object, + notify: true, + readOnly: true, // Produces and doesn't consume. + }, + // internal properties + _graphParams: { + type: Object, + value: function() { + return this.$.graphParams; + } + }, + _renderDepth: { + type: Number, + value: 1 + }, + _renderHierarchy: { + type: Object, + readOnly: true, + notify: true, + computed: '_buildRenderHierarchy(graphHierarchy, _graphParams)' + }, + _allowGraphSelect: { + type: Boolean, + value: true + } + }, + _buildRenderHierarchy: function(graphHierarchy, params) { + return tf.time('new tf.graph.render.Hierarchy', function() { + if (graphHierarchy.root.type !== tf.graph.NodeType.META) { + // root must be metanode but sometimes Polymer's dom-if has not + // remove tf-graph element yet in <tf-node-info> + // and thus mistakenly pass non-metanode to this module. + return; + } + var renderGraph = new tf.graph.render.RenderGraphInformation( + graphHierarchy, params); + // Producing the 'color by' parameters to be consumed + // by the tf-graph-controls panel. It contains information about the + // min and max values and their respective colors, as well as list + // of devices with their respective colors. + + function getColorParamsFromScale(scale) { + return { + minValue: scale.domain()[0], + maxValue: scale.domain()[1], + startColor: scale.range()[0], + endColor: scale.range()[1] + }; + } + + this._setColorByParams({ + compute_time: getColorParamsFromScale(renderGraph.computeTimeScale), + memory: getColorParamsFromScale(renderGraph.memoryUsageScale), + device: _.map(renderGraph.deviceColorMap.domain(), + function(deviceName) { + return { + device: deviceName, + color: renderGraph.deviceColorMap(deviceName) + }; + }) + }); + return renderGraph; + }.bind(this)); + }, + _getVisible: function(name) { + if (!name) { + return name; + } + return this._renderHierarchy.getNearestVisibleAncestor(name); + }, + listeners: { + 'graph-select': '_graphSelected', + 'disable-click': '_disableClick', + 'enable-click': '_enableClick', + // Nodes + 'node-toggle-expand': '_nodeToggleExpand', + 'node-select': '_nodeSelected', + 'node-highlight': '_nodeHighlighted', + 'node-unhighlight': '_nodeUnhighlighted', + + // Annotations + + /* Note: currently highlighting/selecting annotation node has the same + * behavior as highlighting/selecting actual node so we point to the same + * set of event listeners. However, we might redesign this to be a bit + * different. + */ + 'annotation-select': '_nodeSelected', + 'annotation-highlight': '_nodeHighlighted', + 'annotation-unhighlight': '_nodeUnhighlighted', + }, + _graphChanged: function() { + // When a new graph is loaded, fire this event so that there is no + // info-card being displayed for the previously-loaded graph. + this.fire('graph-select'); + }, + _graphSelected: function(event) { + // Graph selection is not allowed during an active zoom event, as the + // click seen during a zoom/pan is part of the zooming and does not + // indicate a user desire to click on a specific section of the graph. + if (this._allowGraphSelect) { + this.set('selectedNode', null); + } + // Reset this variable as a bug in d3 zoom behavior can cause zoomend + // callback not to be called if a right-click happens during a zoom event. + this._allowGraphSelect = true; + }, + _disableClick: function(event) { + this._allowGraphSelect = false; + }, + _enableClick: function(event) { + this._allowGraphSelect = true; + }, + _nodeSelected: function(event) { + if (this._allowGraphSelect) { + this.set('selectedNode', event.detail.name); + } + // Reset this variable as a bug in d3 zoom behavior can cause zoomend + // callback not to be called if a right-click happens during a zoom event. + this._allowGraphSelect = true; + }, + _nodeHighlighted: function(event) { + this.set('highlightedNode', event.detail.name); + }, + _nodeUnhighlighted: function(event) { + this.set('highlightedNode', null); + }, + _nodeToggleExpand: function(event) { + var nodeName = event.detail.name; + var renderNode = this._renderHierarchy.getRenderNodeByName(nodeName); + // Op nodes are not expandable. + if (renderNode.node.type === tf.graph.NodeType.OP) { + return; + } + this._renderHierarchy.buildSubhierarchy(nodeName); + renderNode.expanded = !renderNode.expanded; + this.querySelector('#scene').setNodeExpanded(renderNode); + // Also select the expanded node. + this._nodeSelected(event); + }, + not: function(x) { + return !x; + } +}); +</script> diff --git a/tensorflow/tensorboard/components/tf-histogram-dashboard/tf-histogram-dashboard.html b/tensorflow/tensorboard/components/tf-histogram-dashboard/tf-histogram-dashboard.html new file mode 100644 index 0000000000..8f8f159964 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-histogram-dashboard/tf-histogram-dashboard.html @@ -0,0 +1,210 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../tf-event-dashboard/tf-data-coordinator.html"> +<link rel="import" href="../tf-event-dashboard/tf-tooltip-coordinator.html"> +<link rel="import" href="../tf-event-dashboard/tf-run-selector.html"> +<link rel="import" href="../tf-event-dashboard/tf-x-type-selector.html"> +<link rel="import" href="../tf-dashboard-common/tf-run-generator.html"> +<link rel="import" href="../tf-event-dashboard/tf-color-scale.html"> +<link rel="import" href="../tf-dashboard-common/tf-url-generator.html"> +<link rel="import" href="../tf-dashboard-common/tf-dashboard-layout.html"> +<link rel="import" href="../tf-dashboard-common/dashboard-style.html"> +<link rel="import" href="../tf-dashboard-common/warning-style.html"> +<link rel="import" href="../tf-categorizer/tf-categorizer.html"> +<link rel="import" href="../tf-event-dashboard/tf-chart.html"> +<link rel="import" href="../tf-collapsable-pane/tf-collapsable-pane.html"> +<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html"> +<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html"> +<link rel="import" href="../imports/lodash.html"> + +<!-- +tf-histogram-dashboard is a complete frontend that loads runs from a backend, +and creates chart panes that display data for those runs. + +It provides a categorizer, run selector, and x type selector, by which the user +can customize how data is organized and displayed. + +Each chart has a button that can toggle whether it is "selected"; selectedRuns +charts are larger. + +Organizationally, the #plumbing div contains components that have no concrete +manifestation and just effect data bindings or data loading. The #sidebar contains +shared controls like the tf-categorizer, tf-run-selector, and tf-x-type-selector. +The #center div contains tf-charts embedded inside tf-collapsable-panes. +--> +<dom-module id="tf-histogram-dashboard"> + <template> + <div id="plumbing"> + <tf-url-generator + out-runs-url="{{runsUrl}}" + out-compressed-histograms-url-generator="{{compressedHistogramsUrlGen}}" + id="urlGenerator" + ></tf-url-generator> + + <tf-data-coordinator + id="dataCoordinator" + url-generator="[[compressedHistogramsUrlGen]]" + run-to-tag="[[runToCompressedHistograms]]" + color-scale="[[colorScale]]" + out-data-coordinator="{{dataCoordinator}}" + /></tf-data-coordinator> + + <tf-run-generator + id="runGenerator" + url="[[runsUrl]]" + out-run-to-compressed-histograms="{{runToCompressedHistograms}}" + /></tf-run-generator> + + <tf-color-scale + id="colorScale" + runs="[[_runs]]" + out-color-scale="{{colorScale}}" + out-class-scale="{{classScale}}" + ></tf-color-scale> + + <tf-tooltip-coordinator + id="tooltipCoordinator" + out-tooltip-updater="{{tooltipUpdater}}" + out-tooltip-map="{{tooltipMap}}" + out-x-value="{{tooltipXValue}}" + out-closest-run="{{closestRun}}" + ></tf-tooltip-coordinator> + </div> + + <tf-dashboard-layout> + <div class="sidebar"> + + <tf-categorizer + id="categorizer" + tags="[[_visibleTags]]" + categories="{{categories}}" + ></tf-categorizer> + + <tf-x-type-selector + id="xTypeSelector" + out-x-type="{{xType}}" + ></tf-x-type-selector> + + <tf-run-selector + id="runSelector" + runs="[[_runs]]" + class-scale="[[classScale]]" + out-selected="{{selectedRuns}}" + tooltips="[[tooltipMap]]" + closest-run="[[closestRun]]" + x-value="[[tooltipXValue]]" + x-type="[[xType]]" + ></tf-run-selector> + + </div> + + <div class="center"> + <template is="dom-if" if="[[!categories.length]]"> + <div class="warning"> + <p> + No histogram tags were found. + </p> + <p> + Maybe data hasn't loaded yet, or maybe you need + to add some <code>tf.histogram_summary</code> ops to your graph, and + serialize them using the <code>tf.training.summary_io.SummaryWriter</code>. + </p> + </div> + </template> + <template is="dom-repeat" items="[[categories]]"> + <tf-collapsable-pane name="[[item.name]]" count="[[_count(item.tags, selectedRuns.*, runToCompressedHistograms.*)]]"> + <div class="layout horizontal wrap"> + <template is="dom-repeat" items="[[item.tags]]" as="tag"> + <template is="dom-repeat" items="[[selectedRuns]]" as="run"> + <template is="dom-if" if="[[_exists(run, tag, runToCompressedHistograms.*)]]"> + <div class="card"> + <span class="card-title">[[tag]]</span> + <div class="card-content"> + <tf-chart + tag="[[tag]]" + type="compressedHistogram" + id="chart" + selected-runs="[[_array(run)]]" + x-type="[[xType]]" + data-coordinator="[[dataCoordinator]]" + color-scale="[[colorScale]]" + on-keyup="toggleSelected" + tabindex="2" + tooltip-updater="[[tooltipUpdater]]" + ></tf-chart> + <paper-icon-button + class="expand-button" + icon="fullscreen" + on-tap="toggleSelected" + ></paper-icon-button> + </div> + </div> + </template> + </template> + </template> + </div> + </tf-collapsable-pane> + </template> + </div> + </tf-dashboard-layout> + + <style include="dashboard-style"></style> + <style include="warning-style"></style> + </template> + + <script> + Polymer({ + is: "tf-histogram-dashboard", + properties: { + _runs: { + type: Array, + computed: "_getRuns(runToCompressedHistograms)", + }, + _visibleTags: { + type: Array, + computed: "_getVisibleTags(selectedRuns.*, runToCompressedHistograms.*)" + } + }, + _exists: function(run, tag, runToCompressedHistogramsChange) { + var runToCompressedHistograms = runToCompressedHistogramsChange.base; + return runToCompressedHistograms[run].indexOf(tag) !== -1; + }, + _array: function(x) { + return [x]; + }, + _count: function(tags, selectedRunsChange, runToCompressedHistogramsChange) { + var selectedRuns = selectedRunsChange.base; + var runToCompressedHistograms = runToCompressedHistogramsChange.base; + var targetTags = {}; + tags.forEach(function(t) { + targetTags[t] = true; + }); + var count = 0; + selectedRuns.forEach(function(r) { + runToCompressedHistograms[r].forEach(function(t) { + if (targetTags[t]) { + count++; + } + }); + }); + return count; + }, + _getRuns: function(runToCompressedHistograms) { + return _.keys(runToCompressedHistograms); + }, + _getVisibleTags: function(selectedRunsChange, runToCompressedHistogramsChange) { + var keys = selectedRunsChange.base; + var dict = runToCompressedHistogramsChange.base; + return _.union.apply(null, keys.map(function(k) {return dict[k]})); + }, + toggleSelected: function(e) { + var currentTarget = Polymer.dom(e.currentTarget); + var parentDiv = currentTarget.parentNode.parentNode; + parentDiv.classList.toggle("selected"); + var chart = currentTarget.previousElementSibling; + if (chart) { + chart.redraw(); + } + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/demo/image-loader-demo.html b/tensorflow/tensorboard/components/tf-image-dashboard/demo/image-loader-demo.html new file mode 100644 index 0000000000..7aafd247f3 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-image-dashboard/demo/image-loader-demo.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <script src="../../../bower_components/d3/d3.js"></script> + <script src="../../../bower_components/plottable/plottable.js"></script> + <link rel="stylesheet" type="text/css" href="../../../bower_components/plottable/plottable.css"> + <link rel="import" href="../tf-image-dashboard.html"> + <title>Event Dashboard Demo Demo</title> + </head> + <body> + <script> + TF.Urls.runsUrl = function() { + return "data/runs.json" + }; + TF.Urls.scalarsUrl = function(tag, run) { + return "data/" + run + "/" + tag + ".json"; + }; + </script> + + <dom-module id="x-demo"> + <style> + #loader { + width: 300px; + height: 300px; + } + </style> + <template> + <tf-image-loader + id="loader" + run="[[run]]" + tag="[[tag]]" + images-generator="[[imagesGenerator]]" + individual-image-generator="[[individualImageGenerator]]" + ></tf-image-loader> + </template> + <script> + var imagesUrl = function(tag, run) { + return "data/images/" + run + "/" + tag + ".json"; + }; + var individualImageUrl = function(query) { + return "data/individualImage/" + query + ".png"; + }; + Polymer({ + is: "x-demo", + properties: { + run: { + type: String, + value: "train", + }, + tag: { + type: String, + value: "reconstruction_07%2Fimage%2F2" + }, + imagesGenerator: { + type: Function, + value: function() { + return imagesUrl; + }, + }, + individualImageGenerator: { + type: Function, + value: function() { + return individualImageUrl; + }, + }, + }, + }); + </script> + </dom-module> + <x-demo id="demo"></x-demo> + </body> +</html> diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/demo/index.html b/tensorflow/tensorboard/components/tf-image-dashboard/demo/index.html new file mode 100644 index 0000000000..4645b4b783 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-image-dashboard/demo/index.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="stylesheet" type="text/css" href="../../../lib/css/global.css"> + <link rel="import" href="../tf-image-dashboard.html"> + <title>Image Dashboard Demo</title> + <style> + #container{ + width: 500px; + height: 800px; + border: 2px solid grey; + } + html,body { + height: 100%; + } + </style> + </head> + <body> + <script> + TF.Urls.runsUrl = function() { + return "data/runs.json" + }; + TF.Urls.imagesUrl = function(tag, run) { + return "data/images/" + run + "/" + tag + ".json"; + }; + TF.Urls.individualImageUrl = function(query) { + return "data/individualImage/" + query + ".png"; + } + </script> + + <p>The image dashboard is deliberately inside a small container + so that it's easy to test that the scroll bars display properly.</p> + <p>Looks goofy though.</p> + <div id="container"> + <tf-image-dashboard id="demo"></tf-image-dashboard> + </div> + </body> +</html> diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-dashboard.html b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-dashboard.html new file mode 100644 index 0000000000..726a420e9f --- /dev/null +++ b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-dashboard.html @@ -0,0 +1,90 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../tf-dashboard-common/tf-run-generator.html"> +<link rel="import" href="../tf-dashboard-common/tf-url-generator.html"> +<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html"> +<link rel="import" href="tf-image-grid.html"> +<link rel="import" href="../tf-dashboard-common/warning-style.html"> + +<!-- +tf-image-dashboard displays a dashboard that loads images from a TensorFlow run. + +Right now it has very simple behavior: Creates a url-generator and run-generator +to talk to the backend, and then passes the runToImages map and urlGenerators into +a tf-image-grid for display. + +Likely we will add more in the future, e.g. a sidebar like in the event +dashboard that allows filtering and organizing the tags and runs, and a +mechanism for loading older images rather than always getting the most recent one. +--> +<dom-module id="tf-image-dashboard"> + <template> + <div id="plumbing"> + <tf-url-generator + out-runs-url="{{runsUrl}}" + out-images-url-generator="{{imagesUrlGen}}" + out-individual-image-url-generator="{{individualImageUrlGen}}" + id="urlGenerator" + ></tf-url-generator> + + <tf-run-generator + id="runGenerator" + url="[[runsUrl]]" + out-run-to-images="{{runToImages}}" + /></tf-run-generator> + </div> + + <div class="center"> + <template is="dom-if" if="[[!_hasImages(runToImages.*)]]"> + <div class="warning"> + <p> + No image tags were found. + </p> + <p> + Maybe data hasn't loaded yet, or maybe you need + to add some <code>tf.image_summary</code> ops to your graph, and + serialize them using the <code>tf.training.summary_io.SummaryWriter</code>. + </p> + </div> + </template> + <tf-image-grid + id="imageGrid" + run-to-images="[[runToImages]]" + images-generator="[[imagesUrlGen]]" + individual-image-generator="[[individualImageUrlGen]]" + ></tf-image-grid> + </div> + + <style> + .center { + padding-left: 10px; + padding-right: 10px; + height: 100%; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + :host { + height: 100%; + display: block; + } + + </style> + <style include="warning-style"></style> + </template> + <script> + Polymer({ + is: "tf-image-dashboard", + properties: { + runToImages: Object, + imagesUrlGen: Function, + individualImageUrlGen: Function, + }, + _hasImages: function(runToImagesChange) { + return _.values(runToImagesChange.base).some(function(arr) { + return arr.length > 0; + }); + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-grid.html b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-grid.html new file mode 100644 index 0000000000..b7787b98c4 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-grid.html @@ -0,0 +1,166 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-styles/paper-styles.html"> +<link rel="import" href="tf-image-loader.html"> +<link rel="import" href="../imports/lodash.html"> +<link rel="import" href="../tf-dashboard-common/scrollbar-style.html"> + +<!-- +tf-image-grid creates a grid for examining image data. The columsn correspond +to runs and the rows correspond to tags. Each cell is an image. + +Structurally, it makes extensive use of flexbox for layout: it has a top-level +columnar flexbox that contains the topRow (run names) and then a +bottomContainer. The bottomContainer is another columnar flexbox which contains +repeated image-rows. Each image-row is a row flexbox which contains a tag name +cell, and then image cells. + +In the future, we should improve on the layout by making the tag names and run names have fixed positions +within the image-grid, so that when you scroll you always have context (e.g. row and column names in a spreadsheet). +For now, it just scrolls. + +The image grid provides internal scroll bars (with styling) so that it can be dropped into +a dashboard in a predictable fashion, even though the internal image grid may be enormous. + +Room for future improvement: + +- Make it obvious when an image didn't load due to the image not existing. +- Find some way to collapse sparse image grids into denser ones (when sparsity +is high) +- Fix column/row names +- Include hook for loading past images (by step/timestamp? or index?) + +--> +<dom-module id="tf-image-grid"> + <template> + <style include="scrollbar-style"></style> + <div id="fullContainer" class="container scrollbar"> + <div id="topRow" class="container"> + <div class="noshrink" id="paddingCell"></div> + <template + is="dom-repeat" + items="[[_runs]]" + as="run" + > + <div class="run-name-cell noshrink"> + <span>[[run]]</span> + </div> + </template> + </div> + <div id="bottomContainer" class="container"> + <template + is="dom-repeat" + items="[[_tags]]" + sort + as="tag" + > + <div class="image-row container noshrink"> + <div class="tag-name-cell noshrink"> + <span class="tag-name">[[tag]]</span> + </div> + <template + is="dom-repeat" + items="[[_runs]]" + as="run" + > + <div class="image-cell noshrink"> + <template is="dom-if" if="[[_exists(run, tag, runToImages.*)]]"> + <tf-image-loader + id="loader" + run="[[run]]" + tag="[[tag]]" + images-generator="[[imagesGenerator]]" + individual-image-generator="[[individualImageGenerator]]" + > + </tf-image-loader> + </template> + </div> + </template> + </div> + </template> + </div> + </div> + <style> + :host { + display: block; + height: 100%; + } + .container { + display: flex; + flex-wrap: nowrap; + } + #fullContainer { + width: 100%; + height: 100%; + flex-direction: column; + padding-top: 20px; + overflow: scroll; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + #topRow { + flex-direction: row; + } + #bottomContainer { + flex-direction: column; + height: 100%; + width: 100%; + } + .image-row { + flex-direction: row; + } + .image-cell { + width: 300px; + height: 300px; + border: 1px solid black; + } + .tag-name-cell { + height: 300px; + width: 300px; + display:flex; + flex-direction: column; + justify-content: center; + } + .tag-name { + word-wrap: break-word; + text-align: center; + white-space: nowrap; + } + .run-name-cell { + width: 300px; + height: 30px; + text-align: center; + } + .noshrink { + flex-shrink: 0; + } + #paddingCell { + width: 300px; + height: 30px; + } + </style> + </template> + <script> + Polymer({ + is: "tf-image-grid", + properties: { + runToImages: Object, + _tags: {type: Array, computed: "_getTags(runToImages.*)"}, + _runs: {type: Array, computed: "_getRuns(runToImages.*)"}, + imagesGenerator: Function, + individualImageGenerator: Function, + }, + _getTags: function(runToImages) { + return _.chain(runToImages.base).values().flatten().union().value(); + }, + _getRuns(runToImages) { + var r2i = runToImages.base; + return _.keys(r2i).filter(function(x) {return r2i[x].length > 0;}); + }, + _exists: function (run, tag, runToImages) { + runToImages = runToImages.base; + return runToImages[run].indexOf(tag) !== -1; + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-loader.html b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-loader.html new file mode 100644 index 0000000000..e70f189c73 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-loader.html @@ -0,0 +1,64 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../imports/lodash.html"> + +<!-- +tf-image-loader loads an individual image from the TensorBoard backend. + +Right now it always loads the most recent image. We should add support in the +future for loading older images. +--> +<dom-module id="tf-image-loader"> + <style> + :host { + display: block; + } + img { + width: 100%; + height: 100%; + } + </style> + <template> + <iron-ajax + id="ajax" + auto + url="[[metadataUrl]]" + handle-as="json" + debounce="50" + last-response="{{imageMetadata}}" + verbose="true" + ></iron-ajax> + <template is="dom-if" if="[[imageUrl]]"> + <img src="[[imageUrl]]"></img> + </template is="dom-if"> + </template> + <script> + Polymer({ + is: "tf-image-loader", + properties: { + run: String, + tag: String, + imagesGenerator: Function, + individualImageGenerator: Function, + imageMetadata: Array, + metadataUrl: { + type: String, + computed: "apply(imagesGenerator, tag, run)", + }, + imageUrl: { + type: String, + computed: "getLastImage(imageMetadata, individualImageGenerator)", + }, + }, + apply: function(imagesGenerator, run, tag) { + return imagesGenerator(run, tag); + }, + getLastImage: function(imageMetadata, individualImageGenerator) { + if (imageMetadata == null) { + return null; + } + var query = _.last(imageMetadata).query; + return individualImageGenerator(query); + }, + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-multi-checkbox/demo/index.html b/tensorflow/tensorboard/components/tf-multi-checkbox/demo/index.html new file mode 100644 index 0000000000..e5661b98bc --- /dev/null +++ b/tensorflow/tensorboard/components/tf-multi-checkbox/demo/index.html @@ -0,0 +1,162 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> +<script src="../../../bower_components/d3/d3.js"></script> +<link rel="import" href="../tf-multi-checkbox.html"> +<link rel="import" href="../../tf-event-dashboard/tf-color-scale.html"> +<link rel="stylesheet" type="text/css" href="../../../lib/css/global.css"> + +</head> +<body> +<script> +var seed = 1; +function random() { + var x = Math.sin(seed++) * 10000; + return x - Math.floor(x); +} +</script> +<style> +</style> + +<dom-module id="mc-demo"> + <template> + <tf-multi-checkbox + id="multiCheckbox" + names="[[names]]" + tooltips="[[_tooltips]]" + class-scale="[[classScale]]" + highlights="[[highlights]]" + ></tf-multi-checkbox> + <tf-color-scale + id="colorScale" + runs="[[names]]" + out-class-scale="{{classScale}}" + ></tf-color-scale> + <style> + </style> + </template> + <script> + + function randomTooltip() { + var s = ""; + while (random() < 0.8) { + s += String(10*random())[0]; + } + return s; + } + Polymer({ + is: "mc-demo", + properties: { + names: Array, + tooltips: Object, + autoGenerateTooltips: {value: true}, + _tooltips: Object, + classScale: Function, + highlights: Array, + }, + observers: [ + 'autogenerate(names, autoGenerateTooltips)', + 'randomHighlights(names)' + ], + autogenerate: function(names, autoGenerateTooltips) { + if (autoGenerateTooltips) { + var tooltips = {}; + names.forEach(function(n) { + if (random() > 0.5) { + tooltips[n] = randomTooltip(); + } + }); + this._tooltips = tooltips; + } + }, + randomHighlights: function(names) { + var h = []; + names.forEach(function(n) { + if (random() > 0.6) { + h.push(n); + } + }); + this.highlights = h; + } + }); + </script> +</dom-module> + +<dom-module id="x-demo"> +<style> +.small { + width: 200px; + height: 500px; +} +.large { + width: 500px; + height: 900px; +} +html,body { + height: 100%; +} +mc-demo { + padding: 5px; + border: 1px solid var(--paper-red-500); + display: inline-block; +} +</style> +<template> + <div class="demo-block"> + <mc-demo id="demo1" class="small" names="[[long_names]]"></mc-demo> + <mc-demo class="small" names="[[many_names]]"></mc-demo> + <mc-demo class="small" names="[[many_long_names]]"></mc-demo> + </div> + + <div class="demo-block"> + <mc-demo class="large" names="[[long_names]]"></mc-demo> + <mc-demo class="large" names="[[many_names]]"></mc-demo> + <mc-demo class="large" names="[[many_long_names]]"></mc-demo> + </div> + +</template> +<script> + +function long_names() { + return [ + "foo_bar very long name with spaces", + "the quick brown fox jumped over the lazy dog", + "supercalifragilisticexpialodcious/bar/foo/zod/longer/longer", + ]; +} + +function many_names() { + var out = []; + for (var i=0; i<20; i++) { + out.push("foo_bar-" + i); + out.push("bar_zod_bing-" + i); + out.push("lol-" + i); + } + return out; +} + +function many_long_names() { + var out = []; + for (var i=0; i<20; i++) { + out.push("foo_bar very very very long some spaces though-" + i); + out.push("bar_zod_bing_bas_womp_wub_wub_dub_wub_wub-" + i); + out.push("rightly_to_be_great_is_not_to_stir_without_great_argument_but_greatly_to_find_quarrel_in_a_straw_when_honors_at_the_stake-" + i); + } + return out; +} + +Polymer({ + is: "x-demo", + properties: { + long_names: {type: Array, value: long_names}, + many_names: {type: Array, value: many_names}, + many_long_names: {type: Array, value: many_long_names}, +}, +}); +</script> +</dom-module> + +<x-demo id="demo"></x-demo> +</body> +</html> diff --git a/tensorflow/tensorboard/components/tf-multi-checkbox/tf-multi-checkbox.html b/tensorflow/tensorboard/components/tf-multi-checkbox/tf-multi-checkbox.html new file mode 100644 index 0000000000..a5447e8f5e --- /dev/null +++ b/tensorflow/tensorboard/components/tf-multi-checkbox/tf-multi-checkbox.html @@ -0,0 +1,228 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-checkbox/paper-checkbox.html"> +<link rel="import" href="../imports/lodash.html"> +<link rel="import" href="../tf-dashboard-common/scrollbar-style.html"> +<link rel="import" href="../tf-dashboard-common/run-color-style.html"> +<!-- +tf-multi-checkbox creates a list of checkboxes that can be used to toggle on or off +a large number of values. Each checkbox displays a name, and may also have an +assosciated tooltip value. Checkboxes can be highlighted, hidden, and re-ordered. + +tf-multi-checkbox assumes that the names may be very long compared to the width +of the checkbox, and the number of names may also be very large, and works to +handle these situations gracefully. + +API: + +Properties in: +names: The string names to associate with checkboxes. +tooltips: An object mapping from name to tooltip value. +tooltipOrderer: A function that is used to compute how to order the names based +on tooltip values (when available). If tooltip values and a tooltip orderer are +present, the tooltipOrderer computes a numeric value for each tooltip, tooltips +with higher values are ordered first, tooltips with equal values are ordered +lexicogrpahically, and tooltips without a value are placed last. If the +tooltipOrderer is set to a falsey value (eg null), then the names are not +re-ordered based on tooltip value. +classScale: A function that maps from name to class name, which is applied as +the special property color-class. This is intended to be used to color the names. +hideMissingTooltips: If set, then when tooltips are present, any names that do +not have an associate non-empty tooltip value will be hidden. + +Properties out: +outSelected: An array of names that the user has checked. +If the user does not interact, everything will be checked. + +--> + +<dom-module id="tf-multi-checkbox"> + <style include="scrollbar-style"></style> + <style include="run-color-style"></style> + + <template> + <div id="outer-container" class="scrollbar"> + <template + is="dom-repeat" + items="[[names]]" + sort="[[_tooltipComparator(tooltips, tooltipOrderer)]]" + > + <div + class="run-row" + color-class$="[[_applyColorClass(item, classScale)]]" + null-tooltip$="[[_isNullTooltip(item, tooltips)]]" + highlight$="[[_isHighlighted(item, highlights.*)]]" + > + <div class="checkbox-container vertical-align-container"> + <paper-checkbox + class="checkbox vertical-align-center" + name="[[item]]" + checked$="[[_isChecked(item,outSelected.*)]]" + on-change="_checkboxChange" + ></paper-checkbox> + </div> + <div class="item-label-container"> + <span>[[item]]</span> + </div> + <div class="tooltip-value-container vertical-align-container"> + <span class="vertical-align-top">[[_lookupTooltip(item,tooltips)]]</span> + </div> + </div> + </template> + </div> + <style> + :host { + display: flex; + flex-direction: column; + height: 100%; + } + #outer-container { + overflow-y: scroll; + overflow-x: hidden; + width: 100%; + flex-grow: 1; + flex-shrink: 1; + word-wrap: break-word; + } + .run-row { + padding-top: 5px; + padding-bottom: 5px; + display: flex; + flex-direction: row; + font-size: 13px; + } + .checkbox-container { + flex-grow: 0; + flex-shrink: 0; + } + .checkbox { + padding-left: 2px; + width: 32px; + } + .item-label-container { + flex-grow: 1; + flex-shrink: 1; + width: 0px; /* hack to get the flex-grow to work properly */ + } + .tooltip-value-container { + display: flex; + justify-content: center; + flex-grow: 0; + flex-shrink: 0; + text-align:right; + padding-left: 2px; + } + .vertical-align-container { + display: flex; + justify-content: center; + } + .vertical-align-container .vertical-align-center { + align-self: center; + } + .vertical-align-container .vertical-align-top { + align-self: start; + } + [null-tooltip] { + display: none; + } + [highlight] { + font-weight: bold; + } + </style> + </template> + + <script> + Polymer({ + is: "tf-multi-checkbox", + properties: { + names: Array, + tooltipOrderer: { + /* Used to compute how to order the tooltips based on the tooltip value. + * By default, it parses the tooltip strings as numbers. + * If set to a falsey value, tooltips are always ordered lexicographically. + */ + type: Function, + value: function() { + return function(x) {return +x;} + }, + }, + tooltips: Object, + highlights: Array, + outSelected: { + type: Array, + notify: true, + value: function() { + return []; + }, + }, + hideMissingTooltips: { + // If we have tooltips, but some names are missing, do we hide them? + type: Boolean, + value: true, + }, + classScale: Function, // map from run name to css class + }, + observers: [ + "_initializeOutSelected(names.*)", + ], + _lookupTooltip: function(item, tooltips) { + return tooltips != null ? tooltips[item] : null; + }, + _isNullTooltip: function(item, tooltips) { + if (!this.hideMissingTooltips) { + return true; + } + if (tooltips == null) { + return false; + } + return tooltips[item] == null; + }, + _initializeOutSelected: function(change) { + this.outSelected = change.base.slice(); + }, + _tooltipComparator: function(tooltips, tooltipOrderer) { + return function(a, b) { + if (!tooltips || !tooltipOrderer) { + // if we're missing tooltips or orderer, do lexicogrpahic sort + return a.localeCompare(b); + } + function getValue(x) { + var value = tooltipOrderer(tooltips[x]); + return value == null || _.isNaN(value) ? -Infinity : value; + } + var aValue = getValue(a); + var bValue = getValue(b); + return aValue === bValue ? a.localeCompare(b) : bValue - aValue; + } + }, + _checkboxChange: function(e) { + var name = e.srcElement.name; + var idx = this.outSelected.indexOf(name); + var checked = e.srcElement.checked; + if (checked && idx === -1) { + this.push("outSelected", name); + } else if (!checked && idx !== -1) { + this.splice("outSelected", idx, 1); + } + }, + _isChecked: function(item, outSelectedChange) { + var outSelected = outSelectedChange.base; + return outSelected.indexOf(item) !== -1; + }, + _initializeRuns: function(change) { + this.outSelected = change.base.slice(); + }, + _applyColorClass: function(item, classScale) { + // TODO: Update style just on the element that changes + // and apply at microtask timing + this.debounce("restyle", function (){ + this.updateStyles(); + }, 16); + return classScale(item); + }, + _isHighlighted: function(item, highlights) { + return highlights.base.indexOf(item) !== -1; + }, + }); + </script> + +</dom-module> diff --git a/tensorflow/tensorboard/components/tf-regex-group/demo/index.html b/tensorflow/tensorboard/components/tf-regex-group/demo/index.html new file mode 100644 index 0000000000..efef84e0fc --- /dev/null +++ b/tensorflow/tensorboard/components/tf-regex-group/demo/index.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> + <head> + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../tf-regex-group.html"> + </head> + <body> + <style> + .container { + width: 255px; + padding: 10px; + border: 1px solid #3f51b5; + border-radius: 5px; + } + :host { + margin: 0px; + } + </style> + <template id="page-template" is="dom-bind"> + <div class="container"> + <tf-regex-group regexes="{{regexes}}" id="demo"></tf-regex-group> + </div> + <p> Regexes:</p> + <template is="dom-repeat" items="[[regexes]]"> + <p>"<span>[[item]]</span>"</p> + </template> + </template> + </body> + <script> + + </script> +</html> diff --git a/tensorflow/tensorboard/components/tf-regex-group/index.html b/tensorflow/tensorboard/components/tf-regex-group/index.html new file mode 100644 index 0000000000..0238a8d326 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-regex-group/index.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> +<head> + + <title>tf-regex-group</title> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <link rel="import" href="../../bower_components/iron-component-page/iron-component-page.html"> + +</head> +<body> + + <iron-component-page></iron-component-page> + +</body> +</html> diff --git a/tensorflow/tensorboard/components/tf-regex-group/tf-regex-group.html b/tensorflow/tensorboard/components/tf-regex-group/tf-regex-group.html new file mode 100644 index 0000000000..e9673e85d9 --- /dev/null +++ b/tensorflow/tensorboard/components/tf-regex-group/tf-regex-group.html @@ -0,0 +1,151 @@ +<link rel="import" href="../../bower_components/polymer/polymer.html"> +<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html"> +<link rel="import" href="../../bower_components/iron-icons/iron-icons.html"> +<link rel="import" href="../../bower_components/paper-toggle-button/paper-toggle-button.html"> +<link rel="import" href="../../bower_components/paper-input/paper-input.html"> + +<!-- +`tf-regex-group` provides an input component for a group of regular expressions. + +Example: + <tf-regex-group regexes="{{regexes}}"></tf-regex-group> + +It contains a series of regular expression input fields. From this, it computes +`regexes', an array in which every element is either a string representing an +active, valid, nonempty regular expression, or the value `null` + +Public Properties: +`regexes` a readonly, notifying array of strings, where each string is an + active, valid, nonempty regex + +It maintains an invariant that the final regex should always be an empty string, +so the user can easily add more regular expressions. It does this by adding +a new empty regex when the final one is nonempty. + +Pressing "enter" moves focus to the next regex (or just blurs if there are no +more regexes). +--> +<dom-module id="tf-regex-group"> + <template> + <div class="regex-list"> + <template is="dom-repeat" items="{{rawRegexes}}"> + <div class="regex-line"> + <paper-input + id="text-input" + class="regex-input" + label="input new regex" + no-label-float + bind-value="{{item.regex}}" + invalid="[[!item.valid]]" + on-keyup="moveFocus" + ></paper-input> + <paper-toggle-button + class="active-button" + checked="{{item.active}}" + disabled="[[!item.valid]]" + ></paper-toggle-button> + + <paper-icon-button + icon="delete" + class="delete-button" + aria-label="Delete Regex" + tabindex="0" + on-tap="deleteRegex" + ></paper-icon-button> + </div> + <style> + .regex-input { + width: 210px; + display: inline-block; + padding-left: 8px; + padding-right: 5px; + } + + .active-button { + --paper-toggle-button-checked-button-color: var(--tb-orange-strong); + --paper-toggle-button-checked-bar-color: var(--tb-orange-weak); + border: none; + } + + .delete-button { + color: var(--paper-pink-900); + width: 24px; + height: 24px; + } + .regex-list { + margin-bottom: 10px; + } + paper-input { + --paper-input-container-focus-color: var(--tb-orange-strong); + } + </style> + </template> + </div> + </template> + <script> + Polymer({ + is: "tf-regex-group", + properties: { + rawRegexes: { + type: Array, + value: function() { + return [{regex: "", active: true, valid: true}]; + } + }, + regexes: {type: Array, computed: "usableRegexes(rawRegexes.*)", notify: true}, + }, + observers: [ + "addNewRegexIfNeeded(rawRegexes.*)", + "checkValidity(rawRegexes.*)", + ], + checkValidity: function(x) { + var match = x.path.match(/rawRegexes\.(\d+)\.regex/); + if (match) { + var idx = match[1]; + this.set("rawRegexes." + idx + ".valid", this.isValid(x.value)); + } + }, + isValid: function(s) { + try { + new RegExp(s); + return true; + } catch (e) { + return false; + } + }, + usableRegexes: function(regexes) { + var isValid = this.isValid; + return regexes.base.filter(function (r) { + // Checking validity here (rather than using the data property) + // is necessary because otherwise we might send invalid regexes due + // to the fact that this function can call before the observer does + return r.regex !== "" && r.active && isValid(r.regex); + }).map(function(r) { + return r.regex; + }); + }, + addNewRegexIfNeeded: function() { + var last = this.rawRegexes[this.rawRegexes.length - 1]; + if (last.regex !== "") { + this.push("rawRegexes", {regex: "", active: true, valid: true}); + } + }, + deleteRegex: function(e) { + if (this.rawRegexes.length > 1) { + this.splice("rawRegexes", e.model.index, 1); + } + }, + moveFocus: function(e) { + if (e.keyCode === 13) { + var idx = e.model.index; + var inputs = Polymer.dom(this.root).querySelectorAll(".regex-input"); + if (idx < this.rawRegexes.length - 1) { + inputs[idx+1].$.input.focus(); + } else { + document.activeElement.blur(); + } + } + } + }); + </script> +</dom-module> diff --git a/tensorflow/tensorboard/dist/index.html b/tensorflow/tensorboard/dist/index.html new file mode 100644 index 0000000000..e75a87a4f3 --- /dev/null +++ b/tensorflow/tensorboard/dist/index.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> + <head> + <title>TensorBoard</title> + <link rel="stylesheet" type="text/css" href="/lib/css/global.css"> + + <script src="external/lodash/lodash.min.js"></script> + <script src="external/d3/d3.min.js"></script> + <script src="/external/plottable/plottable.min.js"></script> + <link rel="stylesheet" type="text/css" href="/external/plottable/plottable.css"> + + <script src="external/graphlib/dist/graphlib.core.min.js"></script> + <script src="external/dagre/dist/dagre.core.min.js"></script> + + <link rel="import" href="external/polymer/polymer.html"> + <script src="external/webcomponentsjs/webcomponents-lite.min.js"></script> + + <link rel="import" href="external/iron-ajax/iron-ajax.html"> + <link rel="import" href="external/iron-collapse/iron-collapse.html"> + <link rel="import" href="external/iron-list/iron-list.html"> + <link rel="import" href="external/paper-button/paper-button.html"> + <link rel="import" href="external/paper-checkbox/paper-checkbox.html"> + <link rel="import" href="external/paper-dropdown-menu/paper-dropdown-menu.html"> + <link rel="import" href="external/paper-header-panel/paper-header-panel.html"> + <link rel="import" href="external/paper-icon-button/paper-icon-button.html"> + <link rel="import" href="external/paper-input/paper-input.html"> + <link rel="import" href="external/paper-item/paper-item.html"> + <link rel="import" href="external/paper-menu/paper-menu.html"> + <link rel="import" href="external/paper-progress/paper-progress.html"> + <link rel="import" href="external/paper-radio-button/paper-radio-button.html"> + <link rel="import" href="external/paper-radio-group/paper-radio-group.html"> + <link rel="import" href="external/paper-slider/paper-slider.html"> + <link rel="import" href="external/paper-styles/paper-styles.html"> + <link rel="import" href="external/paper-toggle-button/paper-toggle-button.html"> + <link rel="import" href="external/paper-toolbar/paper-toolbar.html"> + + <link rel="import" href="dist/tf-tensorboard.html"> + + </head> + <body> + <tf-tensorboard></tf-tensorboard> + </body> +</html> diff --git a/tensorflow/tensorboard/dist/tf-tensorboard.html b/tensorflow/tensorboard/dist/tf-tensorboard.html new file mode 100644 index 0000000000..2aa1e46ca3 --- /dev/null +++ b/tensorflow/tensorboard/dist/tf-tensorboard.html @@ -0,0 +1,10484 @@ +<html><head><meta charset="UTF-8"> + + + + + +<style is="custom-style"> + + :root { + --tb-orange-weak: #fcb938; + --tb-orange-strong: #f3913e; + --tb-grey-darker: #e2e2e2; + --tb-grey-lighter: #f3f3f3; + } + +</style> + + + + + + + + + + + + + + + + + + + +<script>/// <reference path="../../../typings/tsd.d.ts" /> +var tf; +(function (tf) { + /** + * Recommended delay (ms) when running an expensive task asynchronously + * that gives enough time for the progress bar to update its UI. + */ + var ASYNC_TASK_DELAY = 20; + function time(msg, task) { + var start = Date.now(); + var result = task(); + /* tslint:disable */ + console.log(msg, ":", Date.now() - start, "ms"); + /* tslint:enable */ + return result; + } + tf.time = time; + /** + * Creates a tracker for a subtask given the parent tracker, the total progress + * of the subtask and the subtask message. The parent task should pass a + * subtracker to its subtasks. The subtask reports its own progress which + * becames relative to the main task. + */ + function getSubtaskTracker(parentTracker, impactOnTotalProgress, subtaskMsg) { + return { + setMessage: function (progressMsg) { + // The parent should show a concatenation of its message along with + // its subtask tracker message. + parentTracker.setMessage(subtaskMsg + " : " + progressMsg); + }, + updateProgress: function (incrementValue) { + // Update the parent progress relative to the child progress. + // For example, if the sub-task progresses by 30%, and the impact on the + // total progress is 50%, then the task progresses by 30% * 50% = 15%. + parentTracker + .updateProgress(incrementValue * impactOnTotalProgress / 100); + }, + reportError: function (errorMsg) { + // The parent should show a concatenation of its message along with + // its subtask error message. + parentTracker.reportError(subtaskMsg + " : " + errorMsg); + } + }; + } + tf.getSubtaskTracker = getSubtaskTracker; + /** + * Runs an expensive task asynchronously and returns a promise of the result. + */ + function runAsyncTask(msg, incProgressValue, task, tracker) { + return new Promise(function (resolve, reject) { + // Update the progress message to say the current running task. + tracker.setMessage(msg); + // Run the expensive task with a delay that gives enough time for the + // UI to update. + setTimeout(function () { + try { + var result = tf.time(msg, task); + // Update the progress value. + tracker.updateProgress(incProgressValue); + // Return the result to be used by other tasks. + resolve(result); + } + catch (e) { + reject(result); + } + }, ASYNC_TASK_DELAY); + }); + } + tf.runAsyncTask = runAsyncTask; + /** + * Returns a query selector with escaped special characters that are not + * allowed in a query selector. + */ + function escapeQuerySelector(querySelector) { + return querySelector.replace(/([:.\[\],/\\\(\)])/g, "\\$1"); + } + tf.escapeQuerySelector = escapeQuerySelector; +})(tf || (tf = {})); // close module tf +</script> +<script>/// <reference path="../../../typings/tsd.d.ts" /> +/// <reference path="common.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph_1) { + /** Delimiter used in node names to denote namespaces. */ + graph_1.NAMESPACE_DELIM = "/"; + var FULL_GRAPH_NAME = "fullGraph"; + graph_1.ROOT_NAME = "__root__"; + // Separator between the source and the destination name of the edge. + graph_1.EDGE_KEY_DELIM = "--"; + (function (GraphType) { + GraphType[GraphType["FULL"] = 0] = "FULL"; + GraphType[GraphType["EMBEDDED"] = 1] = "EMBEDDED"; + GraphType[GraphType["META"] = 2] = "META"; + GraphType[GraphType["SERIES"] = 3] = "SERIES"; + GraphType[GraphType["CORE"] = 4] = "CORE"; + GraphType[GraphType["SHADOW"] = 5] = "SHADOW"; + GraphType[GraphType["BRIDGE"] = 6] = "BRIDGE"; + GraphType[GraphType["EDGE"] = 7] = "EDGE"; + })(graph_1.GraphType || (graph_1.GraphType = {})); + var GraphType = graph_1.GraphType; + ; + (function (NodeType) { + NodeType[NodeType["META"] = 0] = "META"; + NodeType[NodeType["OP"] = 1] = "OP"; + NodeType[NodeType["SERIES"] = 2] = "SERIES"; + NodeType[NodeType["BRIDGE"] = 3] = "BRIDGE"; + NodeType[NodeType["ELLIPSIS"] = 4] = "ELLIPSIS"; + })(graph_1.NodeType || (graph_1.NodeType = {})); + var NodeType = graph_1.NodeType; + ; + /** + * A SlimGraph is inspired by graphlib.Graph, but having only the functionality + * that we need. + */ + var SlimGraph = (function () { + function SlimGraph() { + this.nodes = {}; + this.edges = []; + } + return SlimGraph; + })(); + graph_1.SlimGraph = SlimGraph; + var EllipsisNodeImpl = (function () { + /** + * Constructs a new ellipsis annotation node. + * + * @param numNodes The number of additional annotations this node represents. + */ + function EllipsisNodeImpl(numNodes) { + this.type = NodeType.ELLIPSIS; + this.isGroupNode = false; + this.cardinality = 1; + this.parentNode = null; + this.stats = null; + this.setNumMoreNodes(numNodes); + } + EllipsisNodeImpl.prototype.setNumMoreNodes = function (numNodes) { + this.numMoreNodes = numNodes; + this.name = "... " + numNodes + " more"; + }; + return EllipsisNodeImpl; + })(); + graph_1.EllipsisNodeImpl = EllipsisNodeImpl; + ; + /** + * A label object for nodes in the full graph and leaf nodes in the render + * graph. + */ + var OpNodeImpl = (function () { + /** + * Constructs a new Op node. + * + * @param rawNode The raw node. + * @param normalizedInputs An array of normalized + * inputs that denote the incoming edges to the current node. Each input + * contains the normalized name of the source node, whether it has a number + * part and whether it is a control dependency. + */ + function OpNodeImpl(rawNode, normalizedInputs) { + this.op = rawNode.op; + this.name = rawNode.name; + this.device = rawNode.device; + this.attr = rawNode.attr; + this.inputs = normalizedInputs; + // additional properties + this.type = NodeType.OP; + this.isGroupNode = false; + this.cardinality = 1; + this.inEmbeddings = []; + this.outEmbeddings = []; + this.parentNode = null; + } + return OpNodeImpl; + })(); + ; + function createMetanode(name, opt) { + if (opt === void 0) { opt = {}; } + return new MetanodeImpl(name, opt); + } + graph_1.createMetanode = createMetanode; + /** + * Joins the information from the stats file (memory, compute time) with the graph + * information. + */ + function joinStatsInfoWithGraph(graph, statsJson) { + _.each(statsJson.devStats, function (stats) { + _.each(stats.nodeStats, function (nodeStats) { + // Lookup the node in the graph by its original name, e.g. A. If not + // found, lookup by the rewritten name A/(A) in case the name is both + // a namespace and a node name. + var nodeName = nodeStats.nodeName in graph.nodes ? + nodeStats.nodeName : + nodeStats.nodeName + graph_1.NAMESPACE_DELIM + "(" + nodeStats.nodeName + ")"; + if (nodeName in graph.nodes) { + // Compute the total bytes used. + var totalBytes = 0; + if (nodeStats.memory) { + _.each(nodeStats.memory, function (alloc) { + if (alloc.totalBytes) { + totalBytes += Number(alloc.totalBytes); + } + }); + } + var outputSize = null; + if (nodeStats.output) { + outputSize = _.map(nodeStats.output, function (output) { + return _.map(output.tensorDescription.shape.dim, function (dim) { return Number(dim.size); }); + }); + } + graph.nodes[nodeName].stats = new NodeStats(totalBytes, Number(nodeStats.allEndRelMicros), outputSize); + } + }); + }); + } + graph_1.joinStatsInfoWithGraph = joinStatsInfoWithGraph; + /** + * Execution stats for the node. + */ + var NodeStats = (function () { + function NodeStats(totalBytes, totalMicros, outputSize) { + this.totalBytes = totalBytes; + this.totalMicros = totalMicros; + this.outputSize = outputSize; + } + /** + * Combines the specified stats with the current stats. + * Modifies the current object. This methos is used to + * compute aggregate stats for group nodes. + */ + NodeStats.prototype.combine = function (stats) { + if (stats.totalBytes != null) { + this.totalBytes += stats.totalBytes; + } + if (stats.totalMicros != null) { + this.totalMicros += stats.totalMicros; + } + }; + return NodeStats; + })(); + var MetanodeImpl = (function () { + /** A label object for meta-nodes in the graph hierarchy */ + function MetanodeImpl(name, opt) { + if (opt === void 0) { opt = {}; } + this.name = name; + this.type = NodeType.META; + /** number of levels under this group */ + this.depth = 1; + this.isGroupNode = true; + /** # of leaf nodes (including embedded ones) */ + this.cardinality = 0; + /** graph contains metanodes, nodes, edges + * and metaedges for main items within this metanode + */ + this.metagraph = + createGraph(name, GraphType.META, opt); + /** bridgegraph must be constructed lazily-see hierarchy.getBridgegraph() */ + this.bridgegraph = null; + /** + * A dictionary that count ops type of nodes in this metanode + * (op type => count). + */ + this.opHistogram = {}; + this.deviceHistogram = {}; + /** unique id for a metanode of similar subgraph */ + this.templateId = null; + /** Metanode which contains this node, if any */ + this.parentNode = null; + this.stats = new NodeStats(0, 0, null); + this.hasNonControlEdges = false; + } + MetanodeImpl.prototype.getFirstChild = function () { + return this.metagraph.node(this.metagraph.nodes()[0]); + }; + /** + * Returns the op node associated with the metanode. + * For example, if the metanode is "sgd", the associated + * op node is sgd/(sgd). + */ + MetanodeImpl.prototype.getRootOp = function () { + var nameSplit = this.name.split("/"); + var rootOpName = this.name + "/(" + nameSplit[nameSplit.length - 1] + ")"; + return this.metagraph.node(rootOpName); + }; + /** + * Return an array of the names of all the leaves (non-GroupNodes) inside + * this metanode. This performs a breadth-first search of the tree, so + * immediate child leaves will appear earlier in the output array than + * descendant leaves. + */ + MetanodeImpl.prototype.leaves = function () { + var leaves = []; + var queue = [this]; + var metagraph; // Defined here due to a limitation of ES6->5 compilation. + while (queue.length) { + var node = queue.shift(); + if (node.isGroupNode) { + metagraph = node.metagraph; + _.each(metagraph.nodes(), function (name) { return queue.push(metagraph.node(name)); }); + } + else { + leaves.push(node.name); + } + } + return leaves; + }; + return MetanodeImpl; + })(); + ; + function createMetaedge(v, w) { + return new MetaedgeImpl(v, w); + } + graph_1.createMetaedge = createMetaedge; + /** + * A label object for edges between metanodes of subgraphs in the render graph. + */ + var MetaedgeImpl = (function () { + function MetaedgeImpl(v, w) { + this.v = v; + this.w = w; + this.baseEdgeList = []; + this.inbound = null; + this.numRegularEdges = 0; + this.numControlEdges = 0; + this.numRefEdges = 0; + } + MetaedgeImpl.prototype.addBaseEdge = function (edge) { + this.baseEdgeList.push(edge); + if (edge.isControlDependency) { + this.numControlEdges += 1; + } + else { + this.numRegularEdges += 1; + } + if (edge.isReferenceEdge) { + this.numRefEdges += 1; + } + }; + return MetaedgeImpl; + })(); + function createSeriesNode(prefix, suffix, parent, clusterId, name) { + return new SeriesNodeImpl(prefix, suffix, parent, clusterId, name); + } + graph_1.createSeriesNode = createSeriesNode; + function getSeriesNodeName(prefix, suffix, parent, startId, endId) { + var numRepresentation = (typeof startId !== "undefined" && typeof endId !== "undefined") ? + "[" + startId + "-" + endId + "]" : "#"; + var pattern = prefix + numRepresentation + suffix; + return (parent ? parent + "/" : "") + pattern; + } + graph_1.getSeriesNodeName = getSeriesNodeName; + var SeriesNodeImpl = (function () { + function SeriesNodeImpl(prefix, suffix, parent, clusterId, name) { + this.name = name || getSeriesNodeName(prefix, suffix, parent); + this.type = NodeType.SERIES; + this.hasLoop = false; + this.prefix = prefix; + this.suffix = suffix; + this.clusterId = clusterId; + this.ids = []; + this.parent = parent; + this.isGroupNode = true; + this.cardinality = 0; + this.metagraph = createGraph(name, GraphType.SERIES); + // bridgegraph must be constructed lazily-see hierarchy.getBridgegraph() + this.bridgegraph = null; + this.parentNode = null; + this.deviceHistogram = {}; + this.hasNonControlEdges = false; + this.stats = new NodeStats(0, 0, null); + } + return SeriesNodeImpl; + })(); + /** + * Normalizes the inputs and extracts associated metadata: + * 1) Inputs can contain a colon followed by a number at the end + * (e.g. inputName:1) and we remove this from the input name, and take note + * that the input was numbered. + * 2) Control dependency inputs contain caret at the beginning and we + * remove this and annotate the edge as a control dependency. + * @param inputs Array of unnormalized names of input nodes. + */ + function normalizeInputs(inputs) { + return _.reduce(inputs, function (normalizedInputs, inputName) { + var start = inputName[0] === "^"; + var colon = inputName.lastIndexOf(":"); + var end = colon !== -1 && + inputName.length - colon > 1 && + !(/\D/).test(inputName.substring(colon + 1)) ? + colon : inputName.length; + var name = inputName.substring(start ? 1 : 0, end); + if (normalizedInputs.length === 0 || + name !== normalizedInputs[normalizedInputs.length - 1].name) { + normalizedInputs.push({ + name: name, + hasNumberPart: end !== inputName.length, + isControlDependency: start + }); + } + return normalizedInputs; + }, []); + } + function build(rawNodes, params, tracker) { + /** + * A dictionary that maps each in-embedding node name to its host node label + * object. + */ + var inEmbedding = {}; + /** + * A dictionary that maps each node name to an array of the node's + * out-embedding node label objects. + */ + var outEmbeddings = {}; + var isInEmbeddedPred = getEmbedPredicate(params.inEmbeddingTypes); + var isOutEmbeddedPred = getEmbedPredicate(params.outEmbeddingTypes); + var embeddingNodeNames = []; + /** + * A list of all the non-embedding node names which appear in the processed + * list of raw nodes. Here we pre-allocate enough room for all the rawNodes, + * even though there will some number of embeddings. The excess array length + * is spliced off later. + * + * Experimentation shows that around 30% of the array will go unused, and + * even for very large networks that amounts to less than 10k spaces. + */ + var nodeNames = new Array(rawNodes.length); + return tf.runAsyncTask("Normalizing names", 30, function () { + var opNodes = new Array(rawNodes.length); + var index = 0; + _.each(rawNodes, function (rawNode) { + var normalizedInputs = normalizeInputs(rawNode.input); + var opNode = new OpNodeImpl(rawNode, normalizedInputs); + if (isInEmbeddedPred(opNode)) { + embeddingNodeNames.push(opNode.name); + inEmbedding[opNode.name] = opNode; + return; + } + if (isOutEmbeddedPred(opNode)) { + embeddingNodeNames.push(opNode.name); + _.each(opNode.inputs, function (input) { + var inputName = input.name; + outEmbeddings[inputName] = outEmbeddings[inputName] || []; + outEmbeddings[inputName].push(opNode); + }); + return; + } + // The node is not an embedding, so add it to the names and nodes lists. + opNodes[index] = opNode; + nodeNames[index] = opNode.name; + index++; + }); + opNodes.splice(index); + nodeNames.splice(index); + return opNodes; + }, tracker) + .then(function (opNodes) { + // Create the graph data structure from the graphlib library. + return tf.runAsyncTask("Building the data structure", 70, function () { + var normalizedNameDict = mapStrictHierarchy(nodeNames, embeddingNodeNames); + var graph = new SlimGraph; + // Add the nodes to the graph. + _.each(opNodes, function (opNode) { + var normalizedName = normalizedNameDict[opNode.name] || opNode.name; + graph.nodes[normalizedName] = opNode; + // Check if the node has out-embeddings. If yes, add them to to the + // node. + if (opNode.name in outEmbeddings) { + opNode.outEmbeddings = outEmbeddings[opNode.name]; + // Normalize the names of the out-embeddings. + _.each(opNode.outEmbeddings, function (node) { + node.name = normalizedNameDict[node.name] || node.name; + }); + } + // Update the name of the node. + opNode.name = normalizedName; + }); + // Visit each node's inputs to add the edges to the graph. If the input + // is an in-embedding, then add it to the node's in-embeddings instead. + _.each(opNodes, function (opNode) { + _.each(opNode.inputs, function (input, i) { + var inputName = input.name; + if (inputName in inEmbedding) { + opNode.inEmbeddings.push(inEmbedding[inputName]); + } + else { + graph.edges.push({ + v: normalizedNameDict[inputName] || inputName, + w: opNode.name, + isControlDependency: input.isControlDependency, + // Check if this op type and input number corresponds to a + // reference edge using the refEdges dictionary in the params. + isReferenceEdge: (params.refEdges[opNode.op + " " + i] === true) + }); + } + }); + }); + // Normalize the names of in-embeddings. + _.each(inEmbedding, function (node, name) { + node.name = normalizedNameDict[node.name] || node.name; + }); + return graph; + }, tracker); + }) + .catch(function (reason) { + throw new Error("Failure creating graph"); + }); + } + graph_1.build = build; + ; + /** + * Create a new graphlib.Graph() instance with default parameters + */ + function createGraph(name, type, opt) { + if (opt === void 0) { opt = {}; } + var graph = new graphlib.Graph(opt); + graph.setGraph({ + name: name, + rankdir: "BT", + type: type + }); + return graph; + } + graph_1.createGraph = createGraph; + ; + /** + * Create a predicate for checking whether a node should be embedded based on + * the specified types. + */ + function getEmbedPredicate(types) { + return function (node) { + // check types + for (var i = 0; i < types.length; i++) { + var regExp = new RegExp(types[i]); + if (node.op.match(regExp)) { + return true; + } + } + return false; + }; + } + ; + /** + * Returns a strict node name (name => name/(name)) to avoid conflicts + * where the node name is also a namespace. + */ + function getStrictName(name) { + var parts = name.split(graph_1.NAMESPACE_DELIM); + return name + graph_1.NAMESPACE_DELIM + "(" + parts[parts.length - 1] + ")"; + } + /** + * For each op node (embedding or non-embedding), rename it if there is a + * non-embedding node under its namespace. For example, assume node name "A". + * If there is a non-embedding node under its namespace (e.g. "A/B"), "A" will + * be renamed to "A/(A)". Then the namespace "A" will contain 2 nodes: "(A)" + * and "B". If all the nodes under "A" are embedding nodes (e.g. constant and + * summary), keep "A" as an Op node and don't create a namespace. + * + * @param nodeNames An array of regular (non-embedding) node names. + * @param embeddingNodeNames An array of embedding node names. + * @return Dictionary object mapping names that need to be renamed to + * new names. + */ + function mapStrictHierarchy(nodeNames, embeddingNodeNames) { + /** Dictionary that maps the old new to the new name */ + var newNameDictionary = {}; + /** Set used to store all namespaces. */ + var namespaceSet = {}; + // sort the nodes to make prefix check faster + nodeNames.sort(); + // look for nodes with a prefix a,a/b -> a/(a),a/b + for (var i = 0; i < nodeNames.length - 1; ++i) { + var a = nodeNames[i]; + // Get all the parent namespaces of the current node + // and add them in the namespace set. + _.each(getHierarchicalPath(a).slice(0, -1), function (ns) { + namespaceSet[ns] = true; + }); + var b = nodeNames[i + 1]; + if (_.startsWith(b, a + graph_1.NAMESPACE_DELIM)) { + newNameDictionary[a] = getStrictName(a); + } + } + // Go through all the embedding node names and rename them in case they + // collide with namespaces. + _.each(embeddingNodeNames, function (embeddingName) { + if (embeddingName in namespaceSet) { + // Rename to follow strict hierarchy. + newNameDictionary[embeddingName] = getStrictName(embeddingName); + } + }); + return newNameDictionary; + } + ; + /** + * Returns a list of the degrees of each node in the graph. + */ + function degreeSequence(graph) { + var degrees = graph.nodes().map(function (name) { + return graph.neighbors(name).length; + }); + degrees.sort(); + return degrees; + } + ; + /** + * Returns if the degree sequence of the two graphs is the same. + */ + function hasSimilarDegreeSequence(graph1, graph2) { + var dg1 = degreeSequence(graph1); + var dg2 = degreeSequence(graph2); + for (var i = 0; i < dg1.length; i++) { + if (dg1[i] !== dg2[i]) { + return false; + } + } + return true; + } + graph_1.hasSimilarDegreeSequence = hasSimilarDegreeSequence; + ; + /** + * Returns the hierarchical path of the current node, based on the node's name. + * For example, if the name is 'a/b/c', the returned path is ['a', 'a/b', 'a/b/c']. + */ + function getHierarchicalPath(name, seriesNames) { + var path = []; + var i = name.indexOf(graph_1.NAMESPACE_DELIM); + // Push all parent portions of the path. + while (i >= 0) { + path.push(name.substring(0, i)); + i = name.indexOf(graph_1.NAMESPACE_DELIM, i + 1); + } + // If the node's path is under a series, then add the series node name to the + // hierarchical path as the parent of the leaf. + if (seriesNames) { + var seriesName = seriesNames[name]; + if (seriesName) { + path.push(seriesName); + } + } + // Push the leaf of the path. + path.push(name); + return path; + } + graph_1.getHierarchicalPath = getHierarchicalPath; + ; + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module tf.graph +</script> +<script>/// <reference path="../../../typings/tsd.d.ts" /> +/// <reference path="common.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph) { + var parser; + (function (parser) { + /** + * Parses a native js value, which can be either a string, boolean or number. + * + * @param value The value to be parsed. + */ + function parseValue(value) { + if (value === "true") { + return true; + } + if (value === "false") { + return false; + } + var firstChar = value[0]; + if (firstChar === "\"") { + return value.substring(1, value.length - 1); + } + var num = parseFloat(value); + return isNaN(num) ? value : num; + } + /** + * Fetches a text file and returns a promise of the result. + */ + function readPbTxt(filepath) { + return new Promise(function (resolve, reject) { + d3.text(filepath, function (error, text) { + if (error) { + reject(error); + return; + } + resolve(text); + }); + }); + } + parser.readPbTxt = readPbTxt; + /** + * Fetches and parses a json file and returns a promise of the result. + */ + function readJson(filepath) { + return new Promise(function (resolve, reject) { + d3.json(filepath, function (error, text) { + if (error) { + reject(error); + return; + } + resolve(text); + }); + }); + } + parser.readJson = readJson; + /** + * Reads the graph and stats file (if available), parses them and returns a + * promise of the result. + */ + function readAndParseData(dataset, pbTxtContent, tracker) { + var graphPbTxt; + var statsJson; + return tf.runAsyncTask("Reading graph.pbtxt", 20, function () { + return pbTxtContent || readPbTxt(dataset.path); + }, tracker) + .then(function (text) { + graphPbTxt = text; + return tf.runAsyncTask("Reading stats.pbtxt", 20, function () { + return (dataset != null && dataset.statsPath != null) ? + readJson(dataset.statsPath) : null; + }, tracker); + }) + .then(function (json) { + statsJson = json; + return tf.runAsyncTask("Parsing graph.pbtxt", 60, function () { + return parsePbtxt(graphPbTxt); + }, tracker); + }) + .then(function (nodes) { + return { + nodes: nodes, + statsJson: statsJson + }; + }) + .catch(function (reason) { + throw new Error("Failure parsing graph definition"); + }); + } + parser.readAndParseData = readAndParseData; + /** + * Parses a proto txt file into a javascript object. + * + * @param input The string contents of the proto txt file. + * @return The parsed object. + */ + function parsePbtxt(input) { + var output = { node: [] }; + var stack = []; + var path = []; + var current = output; + function splitNameAndValueInAttribute(line) { + var colonIndex = line.indexOf(":"); + var name = line.substring(0, colonIndex).trim(); + var value = parseValue(line.substring(colonIndex + 2).trim()); + return { + name: name, + value: value + }; + } + /** + * Since proto-txt doesn't explicitly say whether an attribute is repeated + * (an array) or not, we keep a hard-coded list of attributes that are known + * to be repeated. This list is used in parsing time to convert repeated + * attributes into arrays even when the attribute only shows up once in the + * object. + */ + var ARRAY_ATTRIBUTES = { + "node": true, + "node.input": true, + "node.attr": true, + "node.attr.value.list.type": true, + "node.attr.value.shape.dim": true, + "node.attr.value.tensor.string_val": true, + "node.attr.value.tensor.tensor_shape.dim": true + }; + /** + * Adds a value, given the attribute name and the host object. If the + * attribute already exists, but is not an array, it will convert it to an + * array of values. + * + * @param obj The host object that holds the attribute. + * @param name The attribute name (key). + * @param value The attribute value. + * @param path A path that identifies the attribute. Used to check if + * an attribute is an array or not. + */ + function addAttribute(obj, name, value, path) { + // We treat "node" specially since it is done so often. + var existingValue = obj[name]; + if (existingValue == null) { + obj[name] = path.join(".") in ARRAY_ATTRIBUTES ? [value] : value; + } + else if (Array.isArray(existingValue)) { + existingValue.push(value); + } + else { + obj[name] = [existingValue, value]; + } + } + // Run through the file a line at a time. + var startPos = 0; + while (startPos < input.length) { + var endPos = input.indexOf("\n", startPos); + if (endPos === -1) { + endPos = input.length; + } + var line = input.substring(startPos, endPos); + startPos = endPos + 1; + if (!line) { + continue; + } + switch (line[line.length - 1]) { + case "{": + var name_1 = line.substring(0, line.length - 2).trim(); + var newValue = {}; + stack.push(current); + path.push(name_1); + addAttribute(current, name_1, newValue, path); + current = newValue; + break; + case "}": + current = stack.pop(); + path.pop(); + break; + default: + var x = splitNameAndValueInAttribute(line); + addAttribute(current, x.name, x.value, path.concat(x.name)); + break; + } + } + return output["node"]; + } + parser.parsePbtxt = parsePbtxt; + })(parser = graph.parser || (graph.parser = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // Close module tf.graph.parser. +</script> +<script>/// <reference path="graph.ts" /> +/// <reference path="template.ts" /> +/** + * Package for the Graph Hierarchy for TensorFlow graph. + */ +var tf; +(function (tf) { + var graph; + (function (graph_1) { + var hierarchy; + (function (hierarchy_1) { + var LOG_PREFIX_MSG = "Graph hierarchy: "; + /** + * Class for the Graph Hierarchy for TensorFlow graph. + */ + var HierarchyImpl = (function () { + function HierarchyImpl() { + this.root = graph_1.createMetanode(graph_1.ROOT_NAME, { compound: true }); + this.templates = null; + this.devices = null; + /** + * @type {Object} Dictionary object that maps node name to the node + * (could be op-node, metanode, or series-node) + */ + this.index = {}; + this.index[graph_1.ROOT_NAME] = this.root; + this.orderings = {}; + } + HierarchyImpl.prototype.getNodeMap = function () { + return this.index; + }; + HierarchyImpl.prototype.node = function (name) { + return this.index[name]; + }; + HierarchyImpl.prototype.setNode = function (name, node) { + this.index[name] = node; + }; + /** + * Given the name of a node in this hierarchy, get its bridgegraph, creating + * it on the fly if necessary. If the node is not a GroupNode, then this + * method returns null. If the provided name does not map to a node in the + * hierarchy, an error will be thrown. + */ + HierarchyImpl.prototype.getBridgegraph = function (nodeName) { + var _this = this; + var node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node in hierarchy: " + nodeName); + } + if (!("metagraph" in node)) { + return null; + } + var groupNode = node; + if (groupNode.bridgegraph) { + return groupNode.bridgegraph; + } + var bridgegraph = groupNode.bridgegraph = + graph_1.createGraph("BRIDGEGRAPH", graph_1.GraphType.BRIDGE); + if (!node.parentNode || !("metagraph" in node.parentNode)) { + return bridgegraph; + } + var parentNode = node.parentNode; + var parentMetagraph = parentNode.metagraph; + var parentBridgegraph = this.getBridgegraph(parentNode.name); + // For each of the parent node's two Metaedge containing graphs, process + // each Metaedge involving this node. + _.each([parentMetagraph, parentBridgegraph], function (parentGraph) { + _(parentGraph.edges()) + .filter(function (e) { return e.v === nodeName || e.w === nodeName; }) + .each(function (parentEdgeObj) { + var inbound = parentEdgeObj.w === nodeName; + var parentMetaedge = parentGraph.edge(parentEdgeObj); + // The parent's Metaedge represents some number of underlying + // BaseEdges from the original full graph. For each of those, we need + // to determine which immediate child is involved and make sure + // there's a Metaedge in the bridgegraph that covers it. + _.each(parentMetaedge.baseEdgeList, function (baseEdge) { + // Based on the direction, figure out which is the descendant node + // and which is the "other" node (sibling of parent or ancestor). + var _a = inbound ? + [baseEdge.w, parentEdgeObj.v] : + [baseEdge.v, parentEdgeObj.w], descendantName = _a[0], otherName = _a[1]; + // Determine the immediate child containing this descendant node. + var childName = _this.getChildName(nodeName, descendantName); + // Look for an existing Metaedge in the bridgegraph (or create a + // new one) that covers the relationship between child and other. + var bridgeEdgeObj = { + v: inbound ? otherName : childName, + w: inbound ? childName : otherName, + }; + var bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj); + if (!bridgeMetaedge) { + bridgeMetaedge = graph_1.createMetaedge(bridgeEdgeObj.v, bridgeEdgeObj.w); + bridgeMetaedge.inbound = inbound; + bridgegraph.setEdge(bridgeEdgeObj.v, bridgeEdgeObj.w, bridgeMetaedge); + } + // Copy the BaseEdge from the parent's Metaedge into this + // bridgegraph Metaedge. + bridgeMetaedge.addBaseEdge(baseEdge); + }); + }) + .value(); // force lodash chain execution. + }); + return bridgegraph; + }; + /** + * Utility function for determining the name of the immediate child under a + * node for a given descendant path. If the descendant corresponds to no + * immediate child, an error is thrown. + */ + HierarchyImpl.prototype.getChildName = function (nodeName, descendantName) { + // Walk up the hierarchy from the descendant to find the child. + var currentNode = this.index[descendantName]; + while (currentNode) { + if (currentNode.parentNode && currentNode.parentNode.name === nodeName) { + return currentNode.name; + } + currentNode = currentNode.parentNode; + } + throw Error("Could not find immediate child for descendant: " + + descendantName); + }; + ; + /** + * Given the name of a node, return the names of its predecssors. + * For an OpNode, this will contain the targets from the underlying BaseEdges. + * For a GroupNode, this will contain the targets truncated to siblings of + * the shared ancestor. + * + * For example, consider an original non-control BaseEdge A/B/C->Z/Y/X. Their + * shared ancestor is the ROOT node. A and Z are the highest siblings. Here + * are the results of calling getPredecessors(): + * + * - getPredecessors("Z/Y/X") === {regular: ["A/B/C"], control: []}; + * - getPredecessors("Z/Y") === {regular: ["A"], control: []}; + * - getPredecessors("Z") === {regular: ["A"], control: []}; + * + * The reason getPredecessors("Z/Y") returns ["A"] (and not ["A/B"] as you + * might intuitively expect) is because it's not clear how far down the + * other end of the hierarchy to traverse in the general case. + * + * Continuing this example, say there was another BaseEdge A/K->Z/Y/W. When + * we look at Z/Y's predecessors, the best we can say is ["A"] without getting + * into the details of which of of Z/Y's descendant nodes have predecessors to + * which of A's descendants. + * + * On the other hand, for an OpNode it's clear what the final predecssors + * ought to be. There is no ambiguity. + */ + HierarchyImpl.prototype.getPredecessors = function (nodeName) { + var node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node with name: " + nodeName); + } + var predecessors = this.getOneWayEdges(node, true); + // Add embedded predecessors, such as constants. + if (!node.isGroupNode) { + _.each(node.inEmbeddings, function (embeddedNode) { + predecessors.regular.push(embeddedNode.name); + }); + } + return predecessors; + }; + /** + * Given the name of a node, return an array of the names of its successors. + * For an OpNode, this will contain the targets from the underlying BaseEdges. + * For a GroupNode, this will contain the targets truncated to sibling of + * the shared ancestor. + * + * This is the inverse of getPredecessors(). See that method's documentation + * for an in-depth example. + */ + HierarchyImpl.prototype.getSuccessors = function (nodeName) { + var node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node with name: " + nodeName); + } + var successors = this.getOneWayEdges(node, false); + // Add embedded successors, such as summaries. + if (!node.isGroupNode) { + _.each(node.outEmbeddings, function (embeddedNode) { + successors.regular.push(embeddedNode.name); + }); + } + return successors; + }; + /** Helper method for getPredeccessors and getSuccessors */ + HierarchyImpl.prototype.getOneWayEdges = function (node, inEdges) { + var edges = { control: [], regular: [] }; + // A node with no parent cannot have any edges. + if (!node.parentNode) { + return edges; + } + if (node.parentNode.isGroupNode) { + var parentNode = node.parentNode; + var metagraph = parentNode.metagraph; + var bridgegraph = this.getBridgegraph(parentNode.name); + findEdgeTargetsInGraph(metagraph, node, inEdges, edges); + findEdgeTargetsInGraph(bridgegraph, node, inEdges, edges); + } + return edges; + }; + /** + * For a given GroupNode, get or calculate an object which describes a + * topological ordering of child nodes within that GroupNode's metagraph. + * + * This ordering is used when rendering bridge control edges which are + * sometimes backwards relative to the dataflow. + * + * For example, say we have a graph with two edges A->B and A->C, and we're + * interested in the ordering under ROOT. In this case, any of the following + * would be legitimate return values: + * + * - { "A": 0, "B": 1, "C": 2 } -- most likely + * - { "A": 0, "B": 2, "C": 1 } -- less likely + * - { "A": 12, "B": 100, "C": 99 } -- unlikely, but still OK + * + * The algorithm does not guarantee that all numbers from 0-N (where N is + * the number of nodes) appear exactly once. Rather it guarantees that if + * there is a path between two nodes, the earlier one will have a lower + * number in the ordering hash. + * + * When generating the ordering, we ignore control Metaedges (those which + * represent only BaseEdges that have isControlDependency set to true). + * + * If there is no node with the specified name, an error is thrown. If the + * node with the specified name is not a group node, null is returned. + */ + HierarchyImpl.prototype.getTopologicalOrdering = function (nodeName) { + var node = this.index[nodeName]; + if (!node) { + throw Error("Could not find node with name: " + nodeName); + } + if (!node.isGroupNode) { + return null; + } + if (nodeName in this.orderings) { + return this.orderings[nodeName]; + } + // Mapping of a child node names to lists of their successors. + var successors = {}; + // Set of node names which have appeared as a destination. + var destinations = {}; + var metagraph = node.metagraph; + _.each(metagraph.edges(), function (e) { + if (!metagraph.edge(e).numRegularEdges) { + return; // Skip control edges. + } + // Keep track of successors and destinations. + if (!(e.v in successors)) { + successors[e.v] = []; + } + successors[e.v].push(e.w); + destinations[e.w] = true; + }); + // Seed the queue with true sources (those that are not destinations). + var queue = _.difference(_.keys(successors), _.keys(destinations)); + // Produce an ordering by traversing the graph breadth first. + var ordering = this.orderings[nodeName] = {}; + var index = 0; + while (queue.length) { + var childName = queue.shift(); + ordering[childName] = index++; + _.each(successors[childName], function (succName) { return queue.push(succName); }); + delete successors[childName]; // Prevent cycles from infinite looping. + } + return ordering; + }; + return HierarchyImpl; + })(); + /** + * Internal utility function - given a graph (should be either a metagraph or a + * bridgegraph) and a node which is known to be in that graph, determine + * the other ends of edges that involve that node in the direction specified + * by whether it's inbound. + * + * For example if you wanted to find the predecessors of a node, you'd call + * this method for the parent's metagraph and bridgegraph, specifying inbound + * as true (look at the source of inbound edges to the specified node). + * + * Discovered target names are appended to the targets array. + */ + function findEdgeTargetsInGraph(graph, node, inbound, targets) { + _.each(graph.edges(), function (e) { + var _a = inbound ? [e.w, e.v] : [e.v, e.w], selfName = _a[0], otherName = _a[1]; + if (selfName === node.name) { + if (node.isGroupNode) { + var targetList = graph.edge(e).numRegularEdges + ? targets.regular : targets.control; + targetList.push(otherName); + } + else { + _.each(graph.edge(e).baseEdgeList, function (baseEdge) { + var targetList = baseEdge.isControlDependency + ? targets.control : targets.regular; + targetList.push(inbound ? baseEdge.v : baseEdge.w); + }); + } + } + }); + } + /** + * @param graph The raw graph. + * @param params Parameters used when building a hierarchy. + */ + function build(graph, params, tracker) { + var h = new HierarchyImpl(); + var seriesNames = {}; + return tf.runAsyncTask("Adding nodes", 20, function () { + // Get all the possible device names. + var deviceNames = {}; + _.each(graph.nodes, function (node, nodeName) { + if (node.device != null) { + deviceNames[node.device] = true; + } + }); + h.devices = _.keys(deviceNames); + addNodes(h, graph); + }, tracker) + .then(function () { + return tf.runAsyncTask("Detect series", 20, function () { + if (params.groupSeries) { + groupSeries(h.root, h, seriesNames); + } + }, tracker); + }) + .then(function () { + return tf.runAsyncTask("Adding edges", 30, function () { + addEdges(h, graph, seriesNames); + }, tracker); + }) + .then(function () { + return tf.runAsyncTask("Finding similar subgraphs", 30, function () { + h.templates = graph_1.template.detect(h, params.verifyTemplate); + }, tracker); + }) + .then(function () { + return h; + }).catch(function (reason) { + throw new Error("Failure creating graph hierarchy"); + }); + } + hierarchy_1.build = build; + ; + /** + * Creates the metanodes in the hierarchical graph and assigns parent-child + * relationship between them. + */ + function addNodes(h, graph) { + _.each(graph.nodes, function (node, nodeName) { + var path = graph_1.getHierarchicalPath(node.name); + var parent = h.root; + parent.depth = Math.max(path.length, parent.depth); + // Create parent metanodes for each depth. For example if the node name + // is 'a/b/c', then create metanodes 'a' and 'a/b', where 'a/b' is a child + // of a. + for (var i = 0; i < path.length; i++) { + parent.depth = Math.max(parent.depth, path.length - i); + parent.cardinality += node.cardinality; + parent.opHistogram[node.op] = (parent.opHistogram[node.op] || 0) + 1; + if (node.stats) { + parent.stats.combine(node.stats); + } + if (node.device != null) { + parent.deviceHistogram[node.device] = + (parent.deviceHistogram[node.device] || 0) + 1; + } + if (i === path.length - 1) { + break; + } + var name_1 = path[i]; + var child = h.node(name_1); + if (!child) { + child = graph_1.createMetanode(name_1); + child.parentNode = parent; + h.setNode(name_1, child); + parent.metagraph.setNode(name_1, child); + } + parent = child; + } + // Assuming node name is 'a/b/c', assign the OpNode as a child of the metanode 'a/b'. + h.setNode(node.name, node); + node.parentNode = parent; + parent.metagraph.setNode(node.name, node); + // Add each of the in-embeddings and out-embeddings in the hierarchy. + _.each(node.inEmbeddings, function (embedding) { + h.setNode(embedding.name, embedding); + embedding.parentNode = node; + }); + _.each(node.outEmbeddings, function (embedding) { + h.setNode(embedding.name, embedding); + embedding.parentNode = node; + }); + }); + } + ; + /** + * For each metanode in the hierarchical graph, this method adds: + * the edges in the metagraph. These are edges between nodes + * that share the same parent. + */ + function addEdges(h, graph, seriesNames) { + var nodeIndex = h.getNodeMap(); + // Ancestor paths for the source and destination nodes of an edge. These are + // reused for each edge rather than allocating new ones. It's about 10% faster + // than allocating new ones on each pass through the loop. + var sourcePath = []; + var destPath = []; + // Insert the ancestor path for a node into the provided array, including the + // node itself. Return the index of the last node inserted (always ROOT). + var getPath = function (node, path) { + var i = 0; + while (node) { + path[i++] = node.name; + node = node.parentNode; + } + return i - 1; + }; + _.each(graph.edges, function (baseEdge) { + // Get the hierarchical paths for the source and destination of the edge. + var sourceAncestorIndex = getPath(graph.nodes[baseEdge.v], sourcePath); + var destAncestorIndex = getPath(graph.nodes[baseEdge.w], destPath); + // Find the lowest shared ancestor between source and dest by looking for + // the highest nodes that differ between their ancestor paths. + while (sourcePath[sourceAncestorIndex] === destPath[destAncestorIndex]) { + sourceAncestorIndex--; + destAncestorIndex--; + if (sourceAncestorIndex < 0 || destAncestorIndex < 0) { + // This would only occur if the two nodes were the same (a cycle in the + // graph), or if one endpoint was a strict ancestor of the other. The + // latter shouldn't happen because we rename nodes which are both + // metanodes and op nodes. E.g. "A/B" becomes "A/B/(B)". + throw Error("No difference found between ancestor paths."); + } + } + var sharedAncestorNode = nodeIndex[sourcePath[sourceAncestorIndex + 1]]; + var sourceAncestorName = sourcePath[sourceAncestorIndex]; + var destAncestorName = destPath[destAncestorIndex]; + // Find or create the Metaedge which should contain this BaseEdge inside + // the shared ancestor. + var metaedge = sharedAncestorNode.metagraph.edge(sourceAncestorName, destAncestorName); + if (!metaedge) { + metaedge = graph_1.createMetaedge(sourceAncestorName, destAncestorName); + sharedAncestorNode.metagraph + .setEdge(sourceAncestorName, destAncestorName, metaedge); + } + if (!sharedAncestorNode.hasNonControlEdges && + !baseEdge.isControlDependency) { + sharedAncestorNode.hasNonControlEdges = true; + } + metaedge.addBaseEdge(baseEdge); + }); + } + ; + /** + * Using the hierarchy template information, detect series in the provided + * metanode. For each detected series, create a new SeriesNode + * and remove series members from the metanode's metagraph and move them to + * the new series node's metagraph. + * + * @param metanode + * @param hierarchy + * @return A dictionary from node name to series node name that contains the node + */ + function groupSeries(metanode, hierarchy, seriesNames) { + var metagraph = metanode.metagraph; + _.each(metagraph.nodes(), function (n) { + var child = metagraph.node(n); + if (child.type === tf.graph.NodeType.META) { + groupSeries(child, hierarchy, seriesNames); + } + }); + var clusters = clusterNodes(metagraph); + var seriesDict = detectSeries(clusters, metagraph); + // Add each series node to the graph and add its grouped children to its own + // metagraph. + _.each(seriesDict, function (seriesNode, seriesName) { + var nodeMemberNames = seriesNode.metagraph.nodes(); + var firstMember = seriesNode.metagraph.node(nodeMemberNames[0]); + var seriesType = firstMember.type; + hierarchy.setNode(seriesName, seriesNode); // add to the index + metagraph.setNode(seriesName, seriesNode); + _.each(nodeMemberNames, function (n) { + var child = metagraph.node(n); + seriesNode.metagraph.setNode(n, child); + seriesNode.parentNode = child.parentNode; + seriesNode.cardinality++; + if (child.device != null) { + seriesNode.deviceHistogram[child.device] = + (seriesNode.deviceHistogram[child.device] || 0) + 1; + } + child.parentNode = seriesNode; + seriesNames[n] = seriesName; + if (child.stats) { + seriesNode.stats.combine(child.stats); + } + // Remove now-grouped node from its original parent's metagraph. + metagraph.removeNode(n); + }); + }); + } + ; + /** cluster op-nodes with similar op */ + function clusterNodes(metagraph) { + var result = {}; + return _.reduce(metagraph.nodes(), function (clusters, n) { + var child = metagraph.node(n); + if (child.type === graph_1.NodeType.META) { + // skip metanodes + return clusters; + } + var template = child.op; + if (template) { + clusters[template] = clusters[template] || []; + clusters[template].push(child.name); + } + return clusters; + }, result); + } + /** + * For each cluster of op-nodes based op type, try to detect groupings. + * Infer series name using by trying to find pattern "<number>" in the node + * name. + * + * @param clusters Dictionary output from clusterNodes(). + * @param metagraph + * @return A dictionary from series name => seriesNode + */ + function detectSeries(clusters, metagraph) { + var seriesDict = {}; + _.each(clusters, function (members, clusterId) { + if (members.length <= 1) { + return; + } // isolated clusters can't make series + /** @type {Object} A dictionary mapping seriesName to seriesInfoArray, + * which is an array that contains objects with name, id, prefix, suffix, + * and parent properties. + */ + var candidatesDict = {}; + // Group all nodes that have the same name, with the exception of a + // number at the end of the name after an underscore, which is allowed to + // vary. + _.each(members, function (name) { + var isGroup = name.charAt(name.length - 1) === "*"; + var namepath = name.split("/"); + var leaf = namepath[namepath.length - 1]; + var parent = namepath.slice(0, namepath.length - 1).join("/"); + var matches = leaf.match(/^(\D*)_(\d+)$/); + var prefix; + var id; + var suffix = ""; + if (matches) { + prefix = matches[1]; // the front non-numeric characters + id = matches[2]; // the digits + } + else { + prefix = isGroup ? leaf.substr(0, leaf.length - 1) : leaf; + if (prefix.charAt(prefix.length - 1) !== "_") { + prefix += "_"; + } + id = 0; + suffix = isGroup ? "*" : ""; + } + var seriesName = graph_1.getSeriesNodeName(prefix, suffix, parent); + candidatesDict[seriesName] = candidatesDict[seriesName] || []; + var seriesNode = graph_1.createSeriesNode(prefix, suffix, parent, +id, name); + candidatesDict[seriesName].push(seriesNode); + }); + // In each group of nodes, group nodes in bunches that have monotonically + // increasing numbers in their names. Each of these bunches is a series. + _.each(candidatesDict, function (seriesInfoArray, seriesName) { + if (seriesInfoArray.length < 2) { + return; + } + seriesInfoArray.sort(function (a, b) { + return (+a.clusterId) - (+b.clusterId); + }); + // Loop through the nodes sorted by its detected series number, grouping + // all nodes with monotonically-increasing series numbers. + var seriesNodes = [seriesInfoArray[0]]; + for (var index = 1; index < seriesInfoArray.length; index++) { + var nextNode = seriesInfoArray[index]; + if (nextNode.clusterId === seriesNodes[seriesNodes.length - 1].clusterId + 1) { + seriesNodes.push(nextNode); + continue; + } + addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph); + seriesNodes = [nextNode]; + } + addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph); + }); + }); + return seriesDict; + } + /** + * Add a series to the provided dictionary mapping series names to series. + * + * @param seriesNodes the nodes in the series. Contains + * name, id, prefix, suffix and parent properties of the node. + * @param seriesDict the dictionary of series + * @param clusterId ID of the template of the nodes of the series + * @param metagraph + */ + function addSeriesToDict(seriesNodes, seriesDict, clusterId, metagraph) { + if (seriesNodes.length > 1) { + var curSeriesName = graph_1.getSeriesNodeName(seriesNodes[0].prefix, seriesNodes[0].suffix, seriesNodes[0].parent, seriesNodes[0].clusterId, seriesNodes[seriesNodes.length - 1].clusterId); + var curSeriesNode = graph_1.createSeriesNode(seriesNodes[0].prefix, seriesNodes[0].suffix, seriesNodes[0].parent, clusterId, curSeriesName); + _.each(seriesNodes, function (node) { + curSeriesNode.ids.push(node.clusterId); + curSeriesNode.metagraph.setNode(node.name, metagraph.node(node.name)); + }); + seriesDict[curSeriesName] = curSeriesNode; + } + } + })(hierarchy = graph_1.hierarchy || (graph_1.hierarchy = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module tf.graph.hierarchy +</script> +<script>/// <reference path="graph.ts" /> +/// <reference path="hierarchy.ts" /> +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +/** + * Package for the Render Hierarchy for TensorFlow graph. + */ +var tf; +(function (tf) { + var graph; + (function (graph_1) { + var render; + (function (render) { + /** + * Color parameters for node encoding. + * @type {Object} + */ + render.MetanodeColors = { + SATURATION: 0.6, + LIGHTNESS: 0.85, + /** + * Neutral color to use when the node is expanded (used when coloring by + * compute time, memory and device). + */ + EXPANDED_COLOR: "#f0f0f0", + /** + * Standard hue values for node color palette. + */ + HUES: [220, 100, 180, 40, 20, 340, 260, 300, 140, 60], + STRUCTURE_PALETTE: function (id, lightened) { + // The code below is a flexible way to computationally create a set + // of colors that go well together. + var hues = render.MetanodeColors.HUES; + var n = hues.length; + var hue = hues[id % n]; + var m = Math.sin(hue * Math.PI / 360); + var sat = lightened ? 30 : 90 - 60 * m; + var light = lightened ? 95 : 80; + return d3.hsl(hue, .01 * sat, .01 * light).toString(); + }, + DEVICE_PALETTE: function (index) { + return render.MetanodeColors.STRUCTURE_PALETTE(index); + }, + UNKNOWN: "#eee", + GRADIENT_OUTLINE: "#888" + }; + /** + * Stores the rendering information, such as x and y coordinates, + * for each node in the graph. + */ + var RenderGraphInformation = (function () { + function RenderGraphInformation(hierarchy, params) { + this.hierarchy = hierarchy; + this.index = {}; + this.deviceColorMap = d3.scale.ordinal() + .domain(hierarchy.devices) + .range(_.map(d3.range(hierarchy.devices.length), render.MetanodeColors.DEVICE_PALETTE)); + var topLevelGraph = hierarchy.root.metagraph; + // Find the maximum and minimum memory usage. + var memoryExtent = d3.extent(topLevelGraph.nodes(), function (nodeName, index) { + var node = topLevelGraph.node(nodeName); + // Some ops don't have stats at all. + if (node.stats != null) { + return node.stats.totalBytes; + } + }); + this.memoryUsageScale = d3.scale.linear() + .domain(memoryExtent) + .range(params.minMaxColors); + // Find also the minimum and maximum compute time. + var computeTimeExtent = d3.extent(topLevelGraph.nodes(), function (nodeName, index) { + var node = topLevelGraph.node(nodeName); + // Some ops don't have stats at all. + if (node.stats != null) { + return node.stats.totalMicros; + } + }); + this.computeTimeScale = d3.scale.linear() + .domain(computeTimeExtent) + .range(params.minMaxColors); + // Maps node name to whether the rendering hierarchy was already constructed. + this.hasSubhierarchy = {}; + this.params = params; + this.root = new RenderGroupNodeInformation(hierarchy.root); + this.index[hierarchy.root.name] = this.root; + this.buildSubhierarchy(hierarchy.root.name); + this.root.expanded = true; + } + RenderGraphInformation.prototype.getRenderNodeByName = function (nodeName) { + return this.index[nodeName]; + }; + /** + * Return the nearest ancestor node, including itself, that is visible + * in the visualization. This method is used so that we can select + * (highlight) a node that isn't drawn yet, by selecting (highlighting) + * its nearest ancestor that has been drawn. + */ + RenderGraphInformation.prototype.getNearestVisibleAncestor = function (name) { + var path = graph_1.getHierarchicalPath(name); + for (var i = 0; i < path.length; i++) { + var nodeName = path[i]; + // Op nodes have expanded set to false by default. + if (!this.getRenderNodeByName(nodeName).expanded) { + return nodeName; + } + } + // Fallthrough. If everything was expanded return the node. + return name; + }; + // TODO(jimbo): Delete this an any code it touches (all deprecated). + RenderGraphInformation.prototype.setDepth = function (depth) { + setGroupNodeDepth(this.root, +depth); + }; + RenderGraphInformation.prototype.buildSubhierarchy = function (nodeName) { + var _this = this; + // Terminate if the rendering hierarchy was already constructed + // for this node. + if (nodeName in this.hasSubhierarchy) { + return; + } + var renderNodeInfo = this.index[nodeName]; + // If it is not a meta node or a series node, don't do anything. + if (renderNodeInfo.node.type !== graph_1.NodeType.META && + renderNodeInfo.node.type !== graph_1.NodeType.SERIES) { + return; + } + // At this point we know the rendering information is about a group node. + var renderGroupNodeInfo = renderNodeInfo; + var metagraph = renderGroupNodeInfo.node.metagraph; + var coreGraph = renderGroupNodeInfo.coreGraph; + // Create render nodes to represent each child from the metagraph. Although + // these will initially be added to the coreGraph, they may later be + // extracted. Also, due to extraction, the coreGraph may contain disjoint + // groups between which there is no visible path (other than annotations). + _.each(metagraph.nodes(), function (childName) { + var childNode = metagraph.node(childName); + var childRenderInfo = childNode.isGroupNode ? + new RenderGroupNodeInformation(childNode) : + new RenderNodeInformation(childNode); + _this.index[childName] = childRenderInfo; + coreGraph.setNode(childName, childRenderInfo); + if (childRenderInfo.node.stats != null) { + childRenderInfo.memoryColor = + _this.memoryUsageScale(childRenderInfo.node.stats.totalBytes); + childRenderInfo.computeTimeColor = + _this.computeTimeScale(childRenderInfo.node.stats.totalMicros); + } + if (!childNode.isGroupNode) { + _.each(childNode.inEmbeddings, function (embedding) { + var renderMetaedgeInfo = new RenderMetaedgeInformation(null); + addInAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo, AnnotationType.CONSTANT, _this.params); + _this.index[embedding.name] = new RenderNodeInformation(embedding); + }); + _.each(childNode.outEmbeddings, function (embedding) { + var renderMetaedgeInfo = new RenderMetaedgeInformation(null); + addOutAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo, AnnotationType.SUMMARY, _this.params); + _this.index[embedding.name] = new RenderNodeInformation(embedding); + }); + var device = childRenderInfo.node.device; + if (device != null) { + childRenderInfo.deviceColors = [{ + color: _this.deviceColorMap(device), + proportion: 1.0 + }]; + } + } + else { + // Make a list of tuples (device, proportion), where proportion + // is the fraction of op nodes that have that device. + var pairs = _.pairs(childNode.deviceHistogram); + if (pairs.length > 0) { + // Compute the total # of devices. + var numDevices = _.sum(pairs, _.last); + childRenderInfo.deviceColors = _.map(pairs, function (pair) { + return { + color: _this.deviceColorMap(pair[0]), + // Normalize to a proportion of total # of devices. + proportion: pair[1] / numDevices + }; + }); + } + } + }); + // Add render metaedge info for edges in the metagraph. + _.each(metagraph.edges(), function (edgeObj) { + var metaedge = metagraph.edge(edgeObj); + var renderMetaedgeInfo = new RenderMetaedgeInformation(metaedge); + coreGraph.setEdge(edgeObj.v, edgeObj.w, renderMetaedgeInfo); + }); + if (this.params.enableExtraction && + renderGroupNodeInfo.node.type === graph_1.NodeType.META) { + extractHighDegrees(renderGroupNodeInfo, this.params); + } + // Record that we constructed the rendering hierarchy for this node, so we + // don't construct it another time. + this.hasSubhierarchy[nodeName] = true; + // Look up the parent node's render information and short circuit if none. + var parentNode = renderGroupNodeInfo.node.parentNode; + if (!parentNode) { + return; + } + var parentNodeInfo = this.index[parentNode.name]; + // Utility function for computing the name of a bridge node. + var getBridgeNodeName = function (inbound) { + var rest = []; + for (var _i = 1; _i < arguments.length; _i++) { + rest[_i - 1] = arguments[_i]; + } + return rest.concat([inbound ? "IN" : "OUT"]).join("~~"); + }; + // Build out the bridgegraph. + var bridgegraph = this.hierarchy.getBridgegraph(nodeName); + // Look for popular nodes so we can make annotations instead of paths. + var otherCounts = { + // Counts of edges coming INTO other nodes by name (outgoing from self). + in: {}, + // Counts of edges going OUT from other nodes by name (coming into self). + out: {}, + // Counts of all control edges involving other nodes by name. + control: {}, + }; + _.each(bridgegraph.edges(), function (e) { + // An edge is inbound if its destination node is in the metagraph. + var inbound = !!metagraph.node(e.w); + var otherName = inbound ? e.v : e.w; + var metaedge = bridgegraph.edge(e); + if (!metaedge.numRegularEdges) { + otherCounts.control[otherName] = + (otherCounts.control[otherName] || 0) + 1; + } + else if (inbound) { + otherCounts.out[otherName] = (otherCounts.out[otherName] || 0) + 1; + } + else { + otherCounts.in[otherName] = (otherCounts.in[otherName] || 0) + 1; + } + }); + // Add annotations and edges for bridgegraph relationships. + var hierarchyNodeMap = this.hierarchy.getNodeMap(); + _.each(bridgegraph.edges(), function (bridgeEdgeObj) { + var bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj); + // Determine whether this bridge edge is incoming by checking the + // metagraph for a node that matches the destination end. + var inbound = !!metagraph.node(bridgeEdgeObj.w); + // Based on the direction of the edge, one endpoint will be an immediate + // child of this renderNodeInfo, and the other endpoint will be a sibling + // of the parent (or an ancestor further up). + var _a = inbound ? + [bridgeEdgeObj.w, bridgeEdgeObj.v] : + [bridgeEdgeObj.v, bridgeEdgeObj.w], childName = _a[0], otherName = _a[1]; + var childRenderInfo = _this.index[childName]; + var otherRenderInfo = _this.index[otherName]; + var otherNode = otherRenderInfo ? + otherRenderInfo.node : + hierarchyNodeMap[otherName]; + // Determine whether this edge is a control edge between nodes where + // either node is high-degree with respect to control edges. This will + // be a signal to show it as an annotation instead of a bridge edge. + var isHighDegreeControlEdge = !bridgeMetaedge.numRegularEdges && + otherCounts.control[otherName] > _this.params.maxControlDegree; + var _b = inbound ? + [renderNodeInfo.inAnnotations, childRenderInfo.inAnnotations] : + [renderNodeInfo.outAnnotations, childRenderInfo.outAnnotations], annotations = _b[0], childAnnotations = _b[1]; + var isOtherHighDegree = inbound ? + otherCounts.out[otherName] > _this.params.maxOutDegree : + otherCounts.in[otherName] > _this.params.maxInDegree; + // The adjoining render metaedge info from the parent's coreGraph, if any. + // It will either be a Metaedge involving this node directly, if it + // previously came from a metagraph, or it'll be a Metaedge involving + // a previously created bridge node standing in for the other node. + var adjoiningMetaedge = null; + // We can only hope to render a bridge path if: + // - bridgegraph paths are enabled, + // - the other node is not too high-degree, + // - the child is in the core (not extracted for being high-degree), and + // - there's a path (in the traversal sense) between child and other. + var canDrawBridgePath = false; + if (_this.params.enableBridgegraph && + !isOtherHighDegree && + !isHighDegreeControlEdge && + childRenderInfo.isInCore()) { + // Utility function for finding an adjoining metaedge. + var findAdjoiningMetaedge = function (targetName) { + var adjoiningEdgeObj = inbound ? + { v: targetName, w: nodeName } : + { v: nodeName, w: targetName }; + return parentNodeInfo.coreGraph.edge(adjoiningEdgeObj); + }; + adjoiningMetaedge = findAdjoiningMetaedge(otherName); + if (!adjoiningMetaedge) { + adjoiningMetaedge = findAdjoiningMetaedge(getBridgeNodeName(inbound, otherName, parentNode.name)); + } + canDrawBridgePath = !!adjoiningMetaedge; + } + // Although dataflow edges are acyclic, control dependency edges may + // actually point "backwards" in the graph. If this bridgeMetaedge is + // a control dependency, we need to determine whether it's backwards + // pointing so that we render it appropriately. + // + // For instance, say we're rendering a graph with nodes named A/B and Z/Y, + // and we're currently rendering the bridgegraph for A. Further, let's say + // that there was an original BaseEdge from A/B->Z/Y and a CONTROL EDGE + // from Z/Y=>A/B. + // + // +----------------+ + // | A | + // | +-----+ | +------+ + // | | B |>----->|>------->| Z | + // | | | | | | + // | | | * | | | + // | | |<=====<|<=======<| | + // | +-----+ | +------+ + // +----------------+ + // + // When we render the subhierarchy for Metanode A, we'll come across a + // control-only Metaedge in the bridgegraph from Z=>A/B (*). The question + // is whether this edge is backwards. + // + // To answer that question, we follow the chain of adjoining metaedges + // until we reach the topmost one. In this case, that's the control-only + // Metaedge Z=>A in the ROOT's metagraph. We determine that this edge + // is backwards by looking at the topological ordering of ROOT's metagraph + // (which ignores control edges) and seeing that Z comes AFTER A. + // + // The property of being backwards is independent of whether the edge + // is inbound or outbound. In the preceeding example, if we were building + // the subhierarchy for Z, we'd find bridge edge Z/Y=>A, walk to its + // topmost adjoining metaedge Z=>A and discover that it's backwards. + var backwards = false; + if (adjoiningMetaedge && !bridgeMetaedge.numRegularEdges) { + // Find the top-most adjoining render metaedge information, and the + // GroupNode whose metagraph must contain the associated metaedge. + var topAdjoiningMetaedge = adjoiningMetaedge; + var topGroupNode = parentNodeInfo.node; + while (topAdjoiningMetaedge.adjoiningMetaedge) { + topAdjoiningMetaedge = topAdjoiningMetaedge.adjoiningMetaedge; + topGroupNode = topGroupNode.parentNode; + } + // Check against the topological ordering for the top node. The current + // bridge metaedge we're evaluating is backwards if its source comes + // after its destination. + var ordering = _this.hierarchy.getTopologicalOrdering(topGroupNode.name); + var e = topAdjoiningMetaedge.metaedge; + backwards = ordering[e.v] > ordering[e.w]; + } + // Render backwards control edges as annotations. + canDrawBridgePath = canDrawBridgePath && !backwards; + // If we can't make a bridge path for any reason, then we add an + // annotation instead. + if (!canDrawBridgePath) { + childAnnotations.push(new Annotation(otherNode, otherRenderInfo, new RenderMetaedgeInformation(bridgeMetaedge), AnnotationType.SHORTCUT, inbound), _this.params); + return; + } + // At this point, all conditions have been met for drawing a bridge path. + // Find or create the IN/OUT node representing otherNode. + var bridgeContainerName = getBridgeNodeName(inbound, nodeName); + var bridgeNodeName = getBridgeNodeName(inbound, otherName, nodeName); + var bridgeNodeRenderInfo = coreGraph.node(bridgeNodeName); + if (!bridgeNodeRenderInfo) { + // Find or create the directional container for the bridge node. + var bridgeContainerInfo = coreGraph.node(bridgeContainerName); + if (!bridgeContainerInfo) { + var bridgeContainerNode = { + // Important node properties. + name: bridgeContainerName, + type: graph_1.NodeType.BRIDGE, + // Unused node properties. + isGroupNode: false, + cardinality: 0, + parentNode: null, + stats: null, + // BridgeNode properties. + inbound: inbound, + }; + bridgeContainerInfo = + new RenderNodeInformation(bridgeContainerNode); + _this.index[bridgeContainerName] = bridgeContainerInfo; + coreGraph.setNode(bridgeContainerName, bridgeContainerInfo); + } + var bridgeNode = { + // Important node properties. + name: bridgeNodeName, + type: graph_1.NodeType.BRIDGE, + // Unimportant node properties. + isGroupNode: false, + cardinality: 1, + parentNode: null, + stats: null, + // BridgeNode properties. + inbound: inbound, + }; + bridgeNodeRenderInfo = new RenderNodeInformation(bridgeNode); + _this.index[bridgeNodeName] = bridgeNodeRenderInfo; + coreGraph.setNode(bridgeNodeName, bridgeNodeRenderInfo); + // Set bridgeNode to be a graphlib child of the container node. + coreGraph.setParent(bridgeNodeName, bridgeContainerName); + bridgeContainerInfo.node.cardinality++; + } + // Create and add a bridge render metaedge. + var bridgeRenderMetaedge = new RenderMetaedgeInformation(bridgeMetaedge); + bridgeRenderMetaedge.adjoiningMetaedge = adjoiningMetaedge; + inbound ? + coreGraph.setEdge(bridgeNodeName, childName, bridgeRenderMetaedge) : + coreGraph.setEdge(childName, bridgeNodeName, bridgeRenderMetaedge); + }); // End _.each(bridgegraph.edges). + // For each bridge container (IN and/or OUT), add structural edges between + // terminal nodes and that container. A terminal node is one which has no + // non-bridge edges in the direction of the container. + // + // For example, consider a Metanode A which contains two child nodes A/B + // and A/C. Let's say it has one edge in the metagraph from A/B->A/C, and + // one edge in the bridgegraph from Z->A/C. + // + // At this point, we've added a container bridge node IN to house all + // incoming bridge nodes. We'v alse added a bridge node Z' (with parent IN) + // to A, and a bridge edge from Z'->C. + // + // +----------------------+ + // | A +---+ | + // | +------>| C | | + // | | +---+ | + // | | ^ | + // | | | | + // | | +----|----+ | + // | | | IN | | | + // | +---+ | +---+ | | + // | | B | | | Z'| | | + // | +---+ | +---+ | | + // | +---------+ | + // +----------------------+ + // + // With no other help, dagre would lay out B and Z' on the same level, + // because both of them have no incoming edges. In other words, B is a + // terminal node in the INCOMING direction. + // + // But we want to force dagre to lay out Z' (and everything in IN) lower + // than all non-bridge nodes, so that there's enough room for the bridge + // edges after they've been adjusted to meet up with paths coming in from + // outside. + // + // To force Z' (and all other bridge nodes) to be lowest in the graph, we + // identify terminal nodes like B and give them structural edges to + // a new structural bridge node S which we add to IN. + // + // +----------------------+ + // | A +---+ | + // | +--->| C | | + // | | +---+ | + // | +---+ ^ | + // | | B | | | + // | +---+ | | + // | ^ | | + // | | | | + // | +----|------|----+ | + // | |IN | | | | + // | | +---+ +---+ | | + // | | | S | | Z'| | | + // | | +---+ +---+ | | + // | +----------------+ | + // +----------------------+ + // + // This ensures that dagre will lay out the bridge containers strictly at + // the ends of the graph. The structural edges will never be seen in the + // visualization except as a debugging aid. + _.each([true, false], function (inbound) { + var bridgeContainerName = getBridgeNodeName(inbound, nodeName); + var bridgeContainerInfo = coreGraph.node(bridgeContainerName); + if (!bridgeContainerInfo) { + return; + } + _.each(coreGraph.nodes(), function (childName) { + // Short-circuit if this child is a bridge node or it's not a terminal + // node in the direction we're interested in. + var childNodeInfo = coreGraph.node(childName); + if (childNodeInfo.node.type === graph_1.NodeType.BRIDGE) { + return; + } + var isTerminal = inbound ? + !coreGraph.predecessors(childName).length : + !coreGraph.successors(childName).length; + if (!isTerminal) { + return; + } + // Find or create a bridge node in the container for all structural + // metaedges. It would have been nice to skip this step and simply + // set a metaedge between the terminal node and the container node, but + // in that case, something about the graph upsets dagre.layout()'s + // longestPath algorithm (was getting errors due to an undefined). + var structuralNodeName = getBridgeNodeName(inbound, nodeName, "STRUCTURAL_TARGET"); + var structuralRenderInfo = coreGraph.node(structuralNodeName); + if (!structuralRenderInfo) { + var bridgeNode = { + // Important Node properties. + name: structuralNodeName, + type: graph_1.NodeType.BRIDGE, + // Unimportant Node properties. + isGroupNode: false, + cardinality: 1, + parentNode: null, + stats: null, + // BridgeNode properties. + inbound: inbound, + }; + structuralRenderInfo = new RenderNodeInformation(bridgeNode); + structuralRenderInfo.structural = true; + _this.index[structuralNodeName] = structuralRenderInfo; + coreGraph.setNode(structuralNodeName, structuralRenderInfo); + bridgeContainerInfo.node.cardinality++; + coreGraph.setParent(structuralNodeName, bridgeContainerName); + } + // Create the structural Metaedge and insert it. + var structuralMetaedgeInfo = new RenderMetaedgeInformation(null); + structuralMetaedgeInfo.structural = true; + structuralMetaedgeInfo.weight--; // Reduce weight for dagre layout. + inbound ? + coreGraph.setEdge(structuralNodeName, childName, structuralMetaedgeInfo) : + coreGraph.setEdge(childName, structuralNodeName, structuralMetaedgeInfo); + }); + }); + }; + return RenderGraphInformation; + })(); + render.RenderGraphInformation = RenderGraphInformation; + /** + * A class for rendering annotation object which contains label + * about the node embedded as annotation, type of annotation and the location + * of both the annotation's node and edge. + * + * Annotation objects include embedded constants, embedded summary, and + * edge shortcuts. + */ + var Annotation = (function () { + /** + * Creates a new Annotation. + * + * @param node The underlying node this annotation points to. + * @param renderNodeInfo The render information for the underlying node + * this annotation points to. This can be null if the annotation + * denotes an embedding (constant, summary), in which case we + * use the node property. + * @param renderMetaedgeInfo The render information for the edge associated + * with the annotation. + * @param type The type of the annotation. + * @param isIn True if it is an in-annotation. False if it is an + * out-annotation. + */ + function Annotation(node, renderNodeInfo, renderMetaedgeInfo, type, isIn) { + this.node = node; + this.renderNodeInfo = renderNodeInfo; + this.renderMetaedgeInfo = renderMetaedgeInfo; + this.annotationType = type; + // Properties specified by layout + this.dx = 0; + this.dy = 0; + this.width = 0; + this.height = 0; + this.isIn = isIn; + this.points = []; + } + return Annotation; + })(); + render.Annotation = Annotation; + ; + (function (AnnotationType) { + AnnotationType[AnnotationType["SHORTCUT"] = 0] = "SHORTCUT"; + AnnotationType[AnnotationType["CONSTANT"] = 1] = "CONSTANT"; + AnnotationType[AnnotationType["SUMMARY"] = 2] = "SUMMARY"; + AnnotationType[AnnotationType["ELLIPSIS"] = 3] = "ELLIPSIS"; + })(render.AnnotationType || (render.AnnotationType = {})); + var AnnotationType = render.AnnotationType; + ; + /** + * Manages a list of annotations. Two will be used for each + * RenderNodeInformation, one for in annotations and one for out annotations. + */ + var AnnotationList = (function () { + function AnnotationList() { + this.list = []; + this.nodeNames = {}; + } + /** + * Append an annotation to the list, or a stand-in ellipsis annotation instead + * if this would make it too many. + */ + AnnotationList.prototype.push = function (annotation, params) { + if (annotation.node.name in this.nodeNames) { + return; // Skip duplicate annotation. + } + this.nodeNames[annotation.node.name] = true; + if (this.list.length < params.maxAnnotations) { + this.list.push(annotation); + return; + } + var lastAnnotation = this.list[this.list.length - 1]; + if (lastAnnotation.annotationType === AnnotationType.ELLIPSIS) { + var ellipsisNode_1 = lastAnnotation.node; + ellipsisNode_1.setNumMoreNodes(++ellipsisNode_1.numMoreNodes); + return; + } + var ellipsisNode = new tf.graph.EllipsisNodeImpl(1); + this.list.push(new Annotation(ellipsisNode, new RenderNodeInformation(ellipsisNode), null, AnnotationType.ELLIPSIS, annotation.isIn)); + }; + return AnnotationList; + })(); + render.AnnotationList = AnnotationList; + /** + * Contains rendering information about a node in the hierarchical graph. + */ + var RenderNodeInformation = (function () { + function RenderNodeInformation(node) { + this.node = node; + this.expanded = false; + this.inAnnotations = new AnnotationList(); + this.outAnnotations = new AnnotationList(); + // Params specified by layout + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + this.inboxWidth = 0; + this.outboxWidth = 0; + this.excluded = false; + // Params for bridge paths. + this.structural = false; + // Params for node box. + this.labelOffset = 0; + this.extractXOffset = 0; + this.radius = 0; + // Params for expanded node + this.labelHeight = 0; + this.paddingTop = 0; + this.paddingLeft = 0; + this.paddingRight = 0; + this.paddingBottom = 0; + this.outerWidth = 0; + this.outerHeight = 0; + this.isInExtract = false; + this.isOutExtract = false; + } + RenderNodeInformation.prototype.isInCore = function () { + return !this.isInExtract && !this.isOutExtract; + }; + return RenderNodeInformation; + })(); + render.RenderNodeInformation = RenderNodeInformation; + /** + * Contains rendering information about a Metaedge from the underlying + * hierarchical graph. It may be from either a metagraph or a bridgegraph. + */ + var RenderMetaedgeInformation = (function () { + function RenderMetaedgeInformation(metaedge) { + this.metaedge = metaedge; + this.adjoiningMetaedge = null; + this.structural = false; + this.weight = 1; + } + return RenderMetaedgeInformation; + })(); + render.RenderMetaedgeInformation = RenderMetaedgeInformation; + function addInAnnotation(node, predecessor, predecessorRenderInfo, edge, type, params) { + var annotation = new Annotation(predecessor, predecessorRenderInfo, edge, type, true); + node.inAnnotations.push(annotation, params); + } + function addOutAnnotation(node, successor, successorRenderInfo, edge, type, params) { + var annotation = new Annotation(successor, successorRenderInfo, edge, type, false); + node.outAnnotations.push(annotation, params); + } + function setGraphDepth(graph, depth) { + _.each(graph.nodes(), function (nodeName) { + var child = graph.node(nodeName); + child.expanded = depth > 1; // set all child of depth 1 to collapsed + if (depth > 0) { + switch (child.node.type) { + case graph_1.NodeType.META: + case graph_1.NodeType.SERIES: + setGroupNodeDepth(child, depth - 1); + break; + } + } + }); + } + ; + var RenderGroupNodeInformation = (function (_super) { + __extends(RenderGroupNodeInformation, _super); + function RenderGroupNodeInformation(groupNode) { + _super.call(this, groupNode); + var metagraph = groupNode.metagraph; + var gl = metagraph.graph(); + this.coreGraph = + graph_1.createGraph(gl.name, graph_1.GraphType.CORE, { compound: true }); + this.coreBox = { width: 0, height: 0 }; + this.inExtractBox = { width: 0, height: 0 }; + this.outExtractBox = { width: 0, height: 0 }; + this.isolatedInExtract = []; + this.isolatedOutExtract = []; + } + return RenderGroupNodeInformation; + })(RenderNodeInformation); + render.RenderGroupNodeInformation = RenderGroupNodeInformation; + function setGroupNodeDepth(renderInfo, depth) { + if (renderInfo.coreGraph) { + setGraphDepth(renderInfo.coreGraph, depth); + } + } + /** + * Remove an edge from the graph and add annotations to both ends of the edge. + * + * @param The core graph. + * @param v Source name. + * @param w Sink name. + */ + function createShortcut(graph, v, w, params) { + var src = graph.node(v); + var sink = graph.node(w); + var edge = graph.edge(v, w); + // Add each annotation. + addOutAnnotation(src, sink.node, sink, edge, AnnotationType.SHORTCUT, params); + addInAnnotation(sink, src.node, src, edge, AnnotationType.SHORTCUT, params); + // Remove the edge from the core graph. + graph.removeEdge(v, w); + } + /** + * Remove edges from a node, and set its isOutExtract property to true, + * and remove the node and move it to isolatedOutExtract. + * + * If detachAllEdgesForHighDegree is true, extract all of its edges. + * Otherwise, only extract all in-edges. + */ + function makeOutExtract(renderNode, n, params) { + var graph = renderNode.coreGraph; + graph.node(n).isOutExtract = true; + _.each(graph.predecessors(n), function (p, index) { + createShortcut(graph, p, n, params); + }); + if (params.detachAllEdgesForHighDegree) { + _.each(graph.successors(n), function (s, index) { + createShortcut(graph, n, s, params); + }); + } + if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) { + renderNode.isolatedOutExtract.push(graph.node(n)); + graph.removeNode(n); + } + } + /** + * Remove edges from a node, set its isInExtract property to true, + * and remove the node and move it to isolatedInExtract. + * If detachAllEdgesForHighDegree is true, extract all of its edges. + * Otherwise, only remove all out-edges. + */ + function makeInExtract(renderNode, n, params) { + var graph = renderNode.coreGraph; + graph.node(n).isInExtract = true; + _.each(graph.successors(n), function (s, index) { + createShortcut(graph, n, s, params); + }); + if (params.detachAllEdgesForHighDegree) { + _.each(graph.predecessors(n), function (p, index) { + createShortcut(graph, p, n, params); + }); + } + // Remove the node from the core graph if conditions are met. + if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) { + renderNode.isolatedInExtract.push(graph.node(n)); + graph.removeNode(n); + } + } + /** + * Check whether the node's type is a member of the given list of types. + * + * @param node Node. + * @param types List of type to match. + */ + function hasTypeIn(node, types) { + if (node.type === graph_1.NodeType.OP) { + for (var i = 0; i < types.length; i++) { + if (node.op === types[i]) { + return true; + } + } + } + else if (node.type === graph_1.NodeType.META) { + var rootOpNode = node.getRootOp(); + if (rootOpNode) { + for (var i = 0; i < types.length; i++) { + if (rootOpNode.op === types[i]) { + return true; + } + } + } + } + return false; + } + /** Remove edges from pre-defined out-extract patterns */ + function extractPredefinedSink(renderNode, params) { + var graph = renderNode.coreGraph; + _.each(graph.nodes(), function (n) { + var renderInfo = graph.node(n); + if (hasTypeIn(renderInfo.node, params.outExtractTypes)) { + makeOutExtract(renderNode, n, params); + } + }); + } + /** Remove edges from pre-defined in-extract patterns */ + function extractPredefinedSource(renderNode, params) { + var graph = renderNode.coreGraph; + _.each(graph.nodes(), function (n) { + var renderInfo = graph.node(n); + if (hasTypeIn(renderInfo.node, params.inExtractTypes)) { + makeInExtract(renderNode, n, params); + } + }); + } + /** Extract from nodes with in-degree > maxInDegree */ + function extractHighInDegree(renderNode, params) { + var graph = renderNode.coreGraph; + var maxInDegree = params.maxInDegree; + // detect first so degrees don't get affected by other removal + var highInDegreeNames = _.filter(graph.nodes(), function (n) { + // Count the in-degree based on only regular edges, unless there are + // no regular edges, in which case use the number of control edges. + // This is done so that control edges don't effect if nodes are extracted + // from the core graph, unless the node is only used for control. + var numEdgesToCount = _.reduce(graph.predecessors(n), function (numEdgesToCount, pred) { + var metaedge = graph.edge(pred, n).metaedge; + return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0); + }, 0); + if (numEdgesToCount === 0 && graph.predecessors(n).length > 0) { + numEdgesToCount = graph.predecessors(n).length; + } + return numEdgesToCount > maxInDegree; + }); + _.each(highInDegreeNames, function (n) { + makeOutExtract(renderNode, n, params); + }); + } + /** Extract nodes with out-degree > maxOutDegree */ + function extractHighOutDegree(renderNode, params) { + var graph = renderNode.coreGraph; + var maxOutDegree = params.maxOutDegree; + // detect first so degrees don't get affected by other removal + var highOutDegreeNames = _.filter(graph.nodes(), function (n) { + // Count the out-degree based on only regular edges, unless there are + // no regular edges, in which case use the number of control edges. + // This is done so that control edges don't effect if nodes are extracted + // from the core graph, unless the node is only used for control. + var numEdgesToCount = _.reduce(graph.successors(n), function (numEdgesToCount, succ) { + var metaedge = graph.edge(n, succ).metaedge; + return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0); + }, 0); + if (numEdgesToCount === 0 && graph.successors(n).length > 0) { + numEdgesToCount = graph.successors(n).length; + } + return numEdgesToCount > maxOutDegree; + }); + _.each(highOutDegreeNames, function (n) { + makeInExtract(renderNode, n, params); + }); + } + /** Remove control edges from nodes that have too many control edges */ + function removeControlEdges(renderNode, params) { + var graph = renderNode.coreGraph; + // Collect control edges into a map by node name. + var map = {}; + _.each(graph.edges(), function (e) { + if (!graph.edge(e).metaedge.numRegularEdges) { + (map[e.v] = map[e.v] || []).push(e); + (map[e.w] = map[e.w] || []).push(e); + } + }); + // For each node with too many control edges, turn them into annotations. + _.each(map, function (edges, nodeName) { + if (edges.length > params.maxControlDegree) { + _.each(edges, function (e) { return createShortcut(graph, e.v, e.w, params); }); + } + }); + } + /** + * Given an integer, picks a hue that is far apart from other colors. + * The formula for picking color that avoid collision is: + * hue = (color range * golden ratio * index) % color range + */ + function mapIndexToHue(id) { + var GOLDEN_RATIO = 1.61803398875; + // Hue of 0 is reserved for the gray nodes. + var MIN_HUE = 1; + var MAX_HUE = 359; + var COLOR_RANGE = MAX_HUE - MIN_HUE; + return MIN_HUE + ((COLOR_RANGE * GOLDEN_RATIO * id) % COLOR_RANGE); + } + render.mapIndexToHue = mapIndexToHue; + ; + /** + * Remove edges and add to annotation instead. + * + * For root node, consider predefined types for source and sink. + * We do not extract predefined type from non-root so that Variables and the + * sgd node (op type = "NoOp") do not get extract from inside own group. + * + * The order of extraction is important here as swapping the order can totally + * screw up the graph layout. + * + * @param {Render.Node} renderNode Node to manipulate. + * @param {Object} params render Graph construction parameters. See + * <tf-graph-params>'s output + */ + function extractHighDegrees(renderNode, params) { + if (params.outExtractTypes) { + extractPredefinedSink(renderNode, params); + } + // This has to come before extract high in-degree to protect the core part + // that takes many variables. + if (params.inExtractTypes) { + extractPredefinedSource(renderNode, params); + } + // This has to come before extract high out-degree to protect the core part + // that output to many places as there are more high-degree sinks than + // sources. + if (params.maxInDegree) { + extractHighInDegree(renderNode, params); + } + if (params.maxOutDegree) { + extractHighOutDegree(renderNode, params); + } + if (params.maxControlDegree) { + removeControlEdges(renderNode, params); + } + // Extract isolated nodes, which can be + // (1) source-like and sink-like nodes that are not originally isolated but + // become isolated after further removal. + // (2) isolated nodes with annotations on one-side. These might be either + // - nodes that originally have high out-degree but because we remove + // high in-degree nodes first, they no longer have high in-degree when + // we check. (Detecting all high-degree before removing also leads to + // another problem.) + // - nodes that do not have high degree, but their neighbors are all + // extracted, so it might make sense to extract them too. + var graph = renderNode.coreGraph; + _.each(graph.nodes(), function (n) { + var child = graph.node(n); + var degree = graph.neighbors(n).length; + if (degree === 0) { + var hasOutAnnotations = child.outAnnotations.list.length > 0; + var hasInAnnotations = child.inAnnotations.list.length > 0; + if (child.isInExtract) { + // This case only happens if detachAllEdgesForHighDegree is false. + // (Otherwise all source-like nodes are all isolated already.) + renderNode.isolatedInExtract.push(child); + graph.removeNode(n); + } + else if (child.isOutExtract) { + // This case only happens if detachAllEdgesForHighDegree is false. + // // (Otherwise all sink-like nodes are all isolated already.) + renderNode.isolatedOutExtract.push(child); + graph.removeNode(n); + } + else if (params.extractIsolatedNodesWithAnnotationsOnOneSide) { + if (hasOutAnnotations && !hasInAnnotations) { + child.isInExtract = true; // for ones with high out-annotations + renderNode.isolatedInExtract.push(child); + graph.removeNode(n); + } + else if (hasInAnnotations && !hasOutAnnotations) { + child.isOutExtract = true; // for ones with high in-annotations + renderNode.isolatedOutExtract.push(child); + graph.removeNode(n); + } + else { + } + } + } + }); + } + })(render = graph_1.render || (graph_1.render = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module tf.graph.render +</script> +<script>/// <reference path="graph.ts" /> +/// <reference path="hierarchy.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph_1) { + var template; + (function (template) { + /** + * Detect repeating patterns of subgraphs. + * Assign templateId to each subgraph if it belongs to a template. + * Returns clusters of similar subgraphs . + * + * @param graph + * @param verifyTemplate whether to run the template verification algorithm + * @return a dict (template id => Array of node names) + */ + function detect(h, verifyTemplate) { + // In any particular subgraph, there are either + // - leaf nodes (which do not have subgraph) + // - metanode nodes - some of them have only one member (singular metanode) + // and some have multiple members (non-singular metanode) + // First, generate a nearest neighbor hash of metanode nodes. + var nnGroups = clusterSimilarSubgraphs(h); + // For each metanode, compare its subgraph (starting from shallower groups) + // and assign template id. + var templates = groupTemplateAndAssignId(nnGroups, verifyTemplate); + // Sort the templates by minimum level in the graph at which they appear, + // as this leads to optimal setting of the colors of each template for + // maximum differentiation. + return _(templates).pairs() + .sortBy(function (pair) { + return pair[1].level; + }) + .map(function (pair) { + return [pair[0], pair[1].nodes]; + }) + .object().value(); + } + template.detect = detect; + ; + /** + * @return Unique string for a metanode based on depth, |V|, |E| and + * op type histogram. + */ + function getSignature(metanode) { + // depth=<number> |V|=<number> |E|=<number> + var props = _.map({ + "depth": metanode.depth, + "|V|": metanode.metagraph.nodes().length, + "|E|": metanode.metagraph.edges().length + }, function (v, k) { return k + "=" + v; }).join(" "); + // optype1=count1,optype2=count2 + var ops = _.map(metanode.opHistogram, function (count, op) { + return op + "=" + count; + }).join(","); + return props + " [ops] " + ops; + } + /** + * Generate a nearest neighbor hash of metanodes + * based on depth, |V|, |E|, and opHistogram of their subgraph + * (excluding leaf nodes and singular metanodes). + * @param graph The graph + * @return Array of pairs of [signature, + * Object with min level of the template and an Array of tf.graph.Group] + * sort by ascending order of minimum depth at which metanode appears. + */ + function clusterSimilarSubgraphs(h) { + /** a dict from metanode.signature() => Array of tf.graph.Groups */ + var hashDict = _(h.getNodeMap()).reduce(function (hash, node, name) { + if (node.type !== graph_1.NodeType.META) { + return hash; + } + var levelOfMetaNode = name.split("/").length - 1; + var signature = getSignature(node); + var templateInfo = hash[signature] || + { nodes: [], level: levelOfMetaNode }; + hash[signature] = templateInfo; + templateInfo.nodes.push(node); + if (templateInfo.level > levelOfMetaNode) { + templateInfo.level = levelOfMetaNode; + } + return hash; + }, {}); + return _(hashDict).pairs() + .filter(function (pair) { + return pair[1].nodes.length > 1; + }) + .sortBy(function (pair) { + // sort by depth + // (all members in the same nnGroup has equal depth) + return pair[1].nodes[0].depth; + }) + .value(); + } + function groupTemplateAndAssignId(nnGroups, verifyTemplate) { + // For each metanode, compare its subgraph (starting from shallower groups) + // and assign template id. + return _.reduce(nnGroups, function (templates, nnGroupPair) { + var signature = nnGroupPair[0], nnGroup = nnGroupPair[1].nodes, clusters = []; + nnGroup.forEach(function (metanode) { + // check with each existing cluster + for (var i = 0; i < clusters.length; i++) { + var similar = !verifyTemplate || + isSimilarSubgraph(clusters[i].metanode.metagraph, metanode.metagraph); + // if similar, just add this metanode to the cluster + if (similar) { + // get template from the first one + metanode.templateId = clusters[i].metanode.templateId; + clusters[i].members.push(metanode.name); + return; + } + } + // otherwise create a new cluster with id "signature [count] " + metanode.templateId = signature + "[" + clusters.length + "]"; + clusters.push({ + metanode: metanode, + members: [metanode.name] + }); + }); + clusters.forEach(function (c) { + templates[c.metanode.templateId] = { + level: nnGroupPair[1].level, + nodes: c.members + }; + }); + return templates; + }, {}); + } + function sortNodes(names, graph, prefix) { + return _.sortByAll(names, function (name) { + var node = graph.node(name); + return node.op; + }, function (name) { + var node = graph.node(name); + return node.templateId; + }, function (name) { + return graph.neighbors(name).length; + }, function (name) { + return graph.predecessors(name).length; + }, function (name) { + return graph.successors(name).length; + }, function (name) { + return name.substr(prefix.length); + }); + } + function isSimilarSubgraph(g1, g2) { + if (!tf.graph.hasSimilarDegreeSequence(g1, g2)) { + return false; + } + // if we want to skip, just return true here. + // return true; + // Verify sequence by running DFS + var g1prefix = g1.graph().name; + var g2prefix = g2.graph().name; + var visited1 = {}; + var visited2 = {}; + var stack = []; + /** + * push sources or successors into the stack + * if the visiting pattern has been similar. + */ + function stackPushIfNotDifferent(n1, n2) { + var sub1 = n1.substr(g1prefix.length), sub2 = n2.substr(g2prefix.length); + /* tslint:disable */ + if (visited1[sub1] ^ visited2[sub1]) { + console.warn("different visit pattern", "[" + g1prefix + "]", sub1, "[" + g2prefix + "]", sub2); + return true; + } + /* tslint:enable */ + if (!visited1[sub1]) { + visited1[sub1] = visited2[sub2] = true; + stack.push({ n1: n1, n2: n2 }); + } + return false; + } + // check if have same # of sources then sort and push + var sources1 = g1.sources(); + var sources2 = g2.sources(); + if (sources1.length !== sources2.length) { + /* tslint:disable */ + console.log("different source length"); + /* tslint:enable */ + return false; + } + sources1 = sortNodes(sources1, g1, g1prefix); + sources2 = sortNodes(sources2, g2, g2prefix); + for (var i = 0; i < sources1.length; i++) { + var different = stackPushIfNotDifferent(sources1[i], sources2[i]); + if (different) { + return false; + } + } + while (stack.length > 0) { + var cur = stack.pop(); + // check node + var similar = isSimilarNode(g1.node(cur.n1), g2.node(cur.n2)); + if (!similar) { + return false; + } + // check if have same # of successors then sort and push + var succ1 = g1.successors(cur.n1), succ2 = g2.successors(cur.n2); + if (succ1.length !== succ2.length) { + /* tslint:disable */ + console.log("# of successors mismatch", succ1, succ2); + /* tslint:enable */ + return false; + } + succ1 = sortNodes(succ1, g1, g1prefix); + succ2 = sortNodes(succ2, g2, g2prefix); + for (var j = 0; j < succ1.length; j++) { + var different = stackPushIfNotDifferent(succ1[j], succ2[j]); + if (different) { + return false; + } + } + } + return true; + } + /** + * Returns if two nodes have identical structure. + */ + function isSimilarNode(n1, n2) { + if (n1.type === graph_1.NodeType.META) { + // compare metanode + var metanode1 = n1; + var metanode2 = n2; + return metanode1.templateId && metanode2.templateId && metanode1.templateId === metanode2.templateId; + } + else if (n1.type === graph_1.NodeType.OP && n2.type === graph_1.NodeType.OP) { + // compare leaf node + return n1.op === n2.op; + } + else if (n1.type === graph_1.NodeType.SERIES && n2.type === graph_1.NodeType.SERIES) { + // compare series node sizes and operations + // (only need to check one op as all op nodes are identical in series) + var seriesnode1 = n1; + var seriesnode2 = n2; + var seriesnode1Count = seriesnode1.metagraph.nodeCount(); + return (seriesnode1Count === seriesnode2.metagraph.nodeCount() && + (seriesnode1Count === 0 || + (seriesnode1.metagraph.node(seriesnode1.metagraph.nodes()[0]).op === + seriesnode2.metagraph.node(seriesnode2.metagraph.nodes()[0]).op))); + } + return false; + } + })(template = graph_1.template || (graph_1.template = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); +</script> +<script>/// <reference path="../graph.ts" /> +/// <reference path="edge.ts" /> +/// <reference path="node.ts" /> +/// <reference path="../layout.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph) { + var scene; + (function (scene) { + /** Enums element class of objects in the scene */ + scene.Class = { + Node: { + // <g> element that contains nodes. + CONTAINER: "nodes", + // <g> element that contains detail about a node. + GROUP: "node", + // <g> element that contains visual elements (like rect, ellipse). + SHAPE: "nodeshape", + // <*> element(s) under SHAPE that should receive color updates. + COLOR_TARGET: "nodecolortarget", + // <text> element showing the node's label. + LABEL: "nodelabel", + // <g> element that contains all visuals for the expand/collapse + // button for expandable group nodes. + BUTTON_CONTAINER: "buttoncontainer", + // <circle> element that surrounds expand/collapse buttons. + BUTTON_CIRCLE: "buttoncircle", + // <path> element of the expand button. + EXPAND_BUTTON: "expandbutton", + // <path> element of the collapse button. + COLLAPSE_BUTTON: "collapsebutton" + }, + Edge: { + CONTAINER: "edges", + GROUP: "edge", + LINE: "edgeline", + REF_LINE: "refline", + STRUCTURAL: "structural" + }, + Annotation: { + OUTBOX: "out-annotations", + INBOX: "in-annotations", + GROUP: "annotation", + NODE: "annotation-node", + EDGE: "annotation-edge", + CONTROL_EDGE: "annotation-control-edge", + LABEL: "annotation-label", + ELLIPSIS: "annotation-ellipsis" + }, + Scene: { + GROUP: "scene", + CORE: "core", + INEXTRACT: "in-extract", + OUTEXTRACT: "out-extract" + }, + Subscene: { + GROUP: "subscene" + }, + OPNODE: "op", + METANODE: "meta", + SERIESNODE: "series", + BRIDGENODE: "bridge", + ELLIPSISNODE: "ellipsis" + }; + /** + * Helper method for fitting the graph in the svg view. + * + * @param svg The main svg. + * @param zoomG The svg group used for panning and zooming. + * @param d3zoom The zoom behavior. + * @param callback Called when the fitting is done. + */ + function fit(svg, zoomG, d3zoom, callback) { + var svgRect = svg.getBoundingClientRect(); + var sceneSize = zoomG.getBBox(); + var scale = 0.9 * Math.min(svgRect.width / sceneSize.width, svgRect.height / sceneSize.height, 2); + var params = graph.layout.PARAMS.graph; + var zoomEvent = d3zoom.scale(scale) + .on("zoomend.fitted", function () { + // Remove the listener for the zoomend event, + // so we don't get called at the end of regular zoom events, + // just those that fit the graph to screen. + d3zoom.on("zoomend.fitted", null); + callback(); + }) + .translate([params.padding.paddingLeft, params.padding.paddingTop]) + .event; + d3.select(zoomG).transition().duration(500).call(zoomEvent); + } + scene.fit = fit; + ; + /** + * Helper method for panning the graph to center on the provided node, + * if the node is currently off-screen. + * + * @param nodeName The node to center the graph on + * @param svg The root SVG element for the graph + * @param zoomG The svg group used for panning and zooming. + * @param d3zoom The zoom behavior. + * @return True if the graph had to be panned to display the + * provided node. + */ + function panToNode(nodeName, svg, zoomG, d3zoom) { + var node = d3.selectAll("[data-name='" + nodeName + "']." + + scene.Class.Node.GROUP)[0][0]; + if (!node) { + return false; + } + var translate = d3zoom.translate(); + // Check if the selected node is off-screen in either + // X or Y dimension in either direction. + var nodeBox = node.getBBox(); + var nodeCtm = node.getScreenCTM(); + var pointTL = svg.createSVGPoint(); + var pointBR = svg.createSVGPoint(); + pointTL.x = nodeBox.x; + pointTL.y = nodeBox.y; + pointBR.x = nodeBox.x + nodeBox.width; + pointBR.y = nodeBox.y + nodeBox.height; + pointTL = pointTL.matrixTransform(nodeCtm); + pointBR = pointBR.matrixTransform(nodeCtm); + var isOutsideOfBounds = function (start, end, bound) { + return end < 0 || start > bound; + }; + var svgRect = svg.getBoundingClientRect(); + if (isOutsideOfBounds(pointTL.x, pointBR.x, svgRect.width) || + isOutsideOfBounds(pointTL.y, pointBR.y, svgRect.height)) { + // Determine the amount to transform the graph in both X and Y + // dimensions in order to center the selected node. This takes into + // acount the position of the node, the size of the svg scene, the + // amount the scene has been scaled by through zooming, and any previous + // transform already performed by this logic. + var centerX = (pointTL.x + pointBR.x) / 2; + var centerY = (pointTL.y + pointBR.y) / 2; + var dx = ((svgRect.width / 2) - centerX); + var dy = ((svgRect.height / 2) - centerY); + var zoomEvent = d3zoom.translate([translate[0] + dx, translate[1] + dy]) + .event; + d3.select(zoomG).transition().duration(500).call(zoomEvent); + return true; + } + return false; + } + scene.panToNode = panToNode; + ; + /** + * Given a container d3 selection, select a child svg element of a given tag + * and class if exists or append / insert one otherwise. If multiple children + * matches the tag and class name, returns only the first one. + * + * @param container + * @param tagName tag name. + * @param className (optional) Class name. + * @param before (optional) reference DOM node for insertion. + * @return selection of the element + */ + function selectOrCreateChild(container, tagName, className, before) { + var child = selectChild(container, tagName, className); + if (!child.empty()) { + return child; + } + var newElement = document.createElementNS("http://www.w3.org/2000/svg", tagName); + if (className) { + newElement.classList.add(className); + } + if (before) { + container.node().insertBefore(newElement, before); + } + else { + container.node().appendChild(newElement); + } + return d3.select(newElement) + .datum(container.datum()); + } + scene.selectOrCreateChild = selectOrCreateChild; + ; + /** + * Given a container d3 selection, select a child element of a given tag and + * class. If multiple children matches the tag and class name, returns only + * the first one. + * + * @param container + * @param tagName tag name. + * @param className (optional) Class name. + * @return selection of the element, or an empty selection + */ + function selectChild(container, tagName, className) { + var children = container.node().childNodes; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.tagName === tagName && + (!className || child.classList.contains(className))) { + return d3.select(child); + } + } + return d3.select(null); + } + scene.selectChild = selectChild; + ; + /** + * Select or create a sceneGroup and build/update its nodes and edges. + * + * Structure Pattern: + * + * <g class="scene"> + * <g class="core"> + * <g class="edges"> + * ... stuff from tf.graph.scene.edges.build ... + * </g> + * <g class="nodes"> + * ... stuff from tf.graph.scene.nodes.build ... + * </g> + * </g> + * <g class="in-extract"> + * <g class="nodes"> + * ... stuff from tf.graph.scene.nodes.build ... + * </g> + * </g> + * <g class="out-extract"> + * <g class="nodes"> + * ... stuff from tf.graph.scene.nodes.build ... + * </g> + * </g> + * </g> + * + * @param container D3 selection of the parent. + * @param renderNode render node of a metanode or series node. + * @param sceneBehavior Parent scene module. + * @param sceneClass class attribute of the scene (default="scene"). + */ + function buildGroup(container, renderNode, sceneBehavior, sceneClass) { + sceneClass = sceneClass || scene.Class.Scene.GROUP; + var isNewSceneGroup = selectChild(container, "g", sceneClass).empty(); + var sceneGroup = selectOrCreateChild(container, "g", sceneClass); + // core + var coreGroup = selectOrCreateChild(sceneGroup, "g", scene.Class.Scene.CORE); + var coreNodes = _.reduce(renderNode.coreGraph.nodes(), function (nodes, name) { + var node = renderNode.coreGraph.node(name); + if (!node.excluded) { + nodes.push(node); + } + return nodes; + }, []); + if (renderNode.node.type === graph.NodeType.SERIES) { + // For series, we want the first item on top, so reverse the array so + // the first item in the series becomes last item in the top, and thus + // is rendered on the top. + coreNodes.reverse(); + } + // Create the layer of edges for this scene (paths). + scene.edge.buildGroup(coreGroup, renderNode.coreGraph, sceneBehavior); + // Create the layer of nodes for this scene (ellipses, rects etc). + scene.node.buildGroup(coreGroup, coreNodes, sceneBehavior); + // In-extract + if (renderNode.isolatedInExtract.length > 0) { + var inExtractGroup = selectOrCreateChild(sceneGroup, "g", scene.Class.Scene.INEXTRACT); + scene.node.buildGroup(inExtractGroup, renderNode.isolatedInExtract, sceneBehavior); + } + else { + selectChild(sceneGroup, "g", scene.Class.Scene.INEXTRACT).remove(); + } + // Out-extract + if (renderNode.isolatedOutExtract.length > 0) { + var outExtractGroup = selectOrCreateChild(sceneGroup, "g", scene.Class.Scene.OUTEXTRACT); + scene.node.buildGroup(outExtractGroup, renderNode.isolatedOutExtract, sceneBehavior); + } + else { + selectChild(sceneGroup, "g", scene.Class.Scene.OUTEXTRACT).remove(); + } + position(sceneGroup, renderNode); + // Fade in the scene group if it didn't already exist. + if (isNewSceneGroup) { + sceneGroup.attr("opacity", 0) + .transition().attr("opacity", 1); + } + return sceneGroup; + } + scene.buildGroup = buildGroup; + ; + /** + * Given a scene's svg group, set g.in-extract, g.coreGraph, g.out-extract svg + * groups' position relative to the scene. + * + * @param sceneGroup + * @param renderNode render node of a metanode or series node. + */ + function position(sceneGroup, renderNode) { + // Translate scenes down by the label height so that when showing graphs in + // expanded metanodes, the graphs are below the labels. Do not shift them + // down for series nodes as series nodes don't have labels inside of their + // bounding boxes. + var yTranslate = renderNode.node.type === graph.NodeType.SERIES ? + 0 : graph.layout.PARAMS.subscene.meta.labelHeight; + // core + translate(selectChild(sceneGroup, "g", scene.Class.Scene.CORE), 0, yTranslate); + // in-extract + var inExtractX = renderNode.coreBox.width === 0 ? + 0 : renderNode.coreBox.width; + var hasInExtract = renderNode.isolatedInExtract.length > 0; + if (hasInExtract) { + translate(selectChild(sceneGroup, "g", scene.Class.Scene.INEXTRACT), inExtractX, yTranslate); + } + // out-extract + var hasOutExtract = renderNode.isolatedOutExtract.length > 0; + if (hasOutExtract) { + var outExtractX = inExtractX + renderNode.inExtractBox.width + + renderNode.extractXOffset; + translate(selectChild(sceneGroup, "g", scene.Class.Scene.OUTEXTRACT), outExtractX, yTranslate); + } + } + ; + /** Adds a click listener to a group that fires a graph-select event */ + function addGraphClickListener(graphGroup, sceneBehavior) { + d3.select(graphGroup).on("click", function () { + sceneBehavior.fire("graph-select"); + }); + } + scene.addGraphClickListener = addGraphClickListener; + ; + /** Helper for adding transform: translate(x0, y0) */ + function translate(selection, x0, y0) { + selection.attr("transform", "translate(" + x0 + "," + y0 + ")"); + } + scene.translate = translate; + ; + /** + * Helper for setting position of a svg rect + * @param rect rect to set position of. + * @param cx Center x. + * @param cy Center x. + * @param width Width to set. + * @param height Height to set. + */ + function positionRect(rect, cx, cy, width, height) { + rect.transition().attr({ + x: cx - width / 2, + y: cy - height / 2, + width: width, + height: height + }); + } + scene.positionRect = positionRect; + ; + /** + * Helper for setting position of a svg expand/collapse button + * @param button container group + * @param renderNode the render node of the group node to position + * the button on. + */ + function positionButton(button, renderNode) { + // Position the button in the top-right corner of the group node, + // with space given the draw the button inside of the corner. + var x = renderNode.x + renderNode.width / 2 - 6; + var y = renderNode.y - renderNode.height / 2 + 6; + // For unexpanded series nodes, the button has special placement due + // to the unique visuals of this group node. + if (renderNode.node.type === graph.NodeType.SERIES && !renderNode.expanded) { + x += 10; + y -= 2; + } + var translateStr = "translate(" + x + "," + y + ")"; + button.selectAll("path").transition().attr("transform", translateStr); + button.select("circle").transition().attr({ + cx: x, + cy: y, + r: graph.layout.PARAMS.nodeSize.meta.expandButtonRadius + }); + } + scene.positionButton = positionButton; + ; + /** + * Helper for setting position of a svg ellipse + * @param ellipse ellipse to set position of. + * @param cx Center x. + * @param cy Center x. + * @param width Width to set. + * @param height Height to set. + */ + function positionEllipse(ellipse, cx, cy, width, height) { + ellipse.transition().attr({ + cx: cx, + cy: cy, + rx: width / 2, + ry: height / 2 + }); + } + scene.positionEllipse = positionEllipse; + ; + })(scene = graph.scene || (graph.scene = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module +</script> +<script>/// <reference path="../graph.ts" /> +/// <reference path="../render.ts" /> +/// <reference path="scene.ts" /> +/// <reference path="edge.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph) { + var scene; + (function (scene) { + var annotation; + (function (annotation) { + /** + * Populate a given annotation container group + * + * <g class="{in|out}-annotations"></g> + * + * with annotation group of the following structure: + * + * <g class="annotation"> + * <g class="annotation-node"> + * <!-- + * Content here determined by Scene.node.buildGroup. + * --> + * </g> + * </g> + * + * @param container selection of the container. + * @param annotationData node.{in|out}Annotations + * @param d node to build group for. + * @param sceneBehavior polymer scene element. + * @return selection of appended objects + */ + function buildGroup(container, annotationData, d, sceneBehavior) { + // Select all children and join with data. + var annotationGroups = container.selectAll(function () { + // using d3's selector function + // See https://github.com/mbostock/d3/releases/tag/v2.0.0 + // (It's not listed in the d3 wiki.) + return this.childNodes; + }) + .data(annotationData.list, function (d) { return d.node.name; }); + annotationGroups.enter() + .append("g") + .attr("data-name", function (a) { return a.node.name; }) + .each(function (a) { + var aGroup = d3.select(this); + // Add annotation to the index in the scene + sceneBehavior.addAnnotationGroup(a, d, aGroup); + // Append annotation edge + var edgeType = scene.Class.Annotation.EDGE; + var metaedge = a.renderMetaedgeInfo && a.renderMetaedgeInfo.metaedge; + if (metaedge && !metaedge.numRegularEdges) { + edgeType += " " + scene.Class.Annotation.CONTROL_EDGE; + } + // If any edges are reference edges, add the reference edge class. + if (metaedge && metaedge.numRefEdges) { + edgeType += " " + scene.Class.Edge.REF_LINE; + } + scene.edge.appendEdge(aGroup, a, sceneBehavior, edgeType); + if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) { + addAnnotationLabelFromNode(aGroup, a); + buildShape(aGroup, a, sceneBehavior); + } + else { + addAnnotationLabel(aGroup, a.node.name, a, scene.Class.Annotation.ELLIPSIS); + } + }); + annotationGroups + .attr("class", function (a) { + return scene.Class.Annotation.GROUP + " " + + annotationToClassName(a.annotationType) + + " " + scene.node.nodeClass(a); + }) + .each(function (a) { + var aGroup = d3.select(this); + update(aGroup, d, a, sceneBehavior); + if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) { + addInteraction(aGroup, d, sceneBehavior); + } + }); + annotationGroups.exit() + .each(function (a) { + var aGroup = d3.select(this); + // Remove annotation from the index in the scene + sceneBehavior.removeAnnotationGroup(a, d, aGroup); + }) + .remove(); + return annotationGroups; + } + annotation.buildGroup = buildGroup; + ; + /** + * Maps an annotation enum to a class name used in css rules. + */ + function annotationToClassName(annotationType) { + return (tf.graph.render.AnnotationType[annotationType] || "") + .toLowerCase() || null; + } + function buildShape(aGroup, a, sceneBehavior) { + if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) { + var image = scene.selectOrCreateChild(aGroup, "image"); + image.attr({ + "xlink:href": sceneBehavior.resolveUrl("../../lib/svg/summary-icon.svg"), + "height": "12px", + "width": "12px", + "cursor": "pointer" + }); + } + else { + var shape = scene.node.buildShape(aGroup, a, scene.Class.Annotation.NODE); + // add title tag to get native tooltips + scene.selectOrCreateChild(shape, "title").text(a.node.name); + } + } + function addAnnotationLabelFromNode(aGroup, a) { + var namePath = a.node.name.split("/"); + var text = namePath[namePath.length - 1]; + var shortenedText = text.length > 8 ? text.substring(0, 8) + "..." : text; + return addAnnotationLabel(aGroup, shortenedText, a, null, text); + } + function addAnnotationLabel(aGroup, label, a, additionalClassNames, fullLabel) { + var classNames = scene.Class.Annotation.LABEL; + if (additionalClassNames) { + classNames += " " + additionalClassNames; + } + var titleText = fullLabel ? fullLabel : label; + return aGroup.append("text") + .attr("class", classNames) + .attr("dy", ".35em") + .attr("text-anchor", a.isIn ? "end" : "start") + .text(label) + .append("title").text(titleText); + } + function addInteraction(selection, d, sceneBehavior) { + selection + .on("mouseover", function (a) { + sceneBehavior.fire("annotation-highlight", { + name: a.node.name, + hostName: d.node.name + }); + }) + .on("mouseout", function (a) { + sceneBehavior.fire("annotation-unhighlight", { + name: a.node.name, + hostName: d.node.name + }); + }) + .on("click", function (a) { + // Stop this event"s propagation so that it isn't also considered a + // graph-select. + d3.event.stopPropagation(); + sceneBehavior.fire("annotation-select", { + name: a.node.name, + hostName: d.node.name + }); + }); + } + ; + /** + * Adjust annotation's position. + * + * @param aGroup selection of a "g.annotation" element. + * @param d Host node data. + * @param a annotation node data. + * @param scene Polymer scene element. + */ + function update(aGroup, d, a, sceneBehavior) { + // Annotations that point to embedded nodes (constants,summary) + // don't have a render information attached so we don't stylize these. + // Also we don't stylize ellipsis annotations (the string "... and X more"). + if (a.renderNodeInfo && + a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) { + scene.node.stylize(aGroup, a.renderNodeInfo, sceneBehavior, scene.Class.Annotation.NODE); + } + if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) { + // Update the width of the annotation to give space for the image. + a.width += 10; + } + // label position + aGroup.select("text." + scene.Class.Annotation.LABEL).transition().attr({ + x: d.x + a.dx + (a.isIn ? -1 : 1) * (a.width / 2 + a.labelOffset), + y: d.y + a.dy + }); + // Some annotations (such as summary) are represented using a 12x12 image tag. + // Purposely ommited units (e.g. pixels) since the images are vector graphics. + // If there is an image, we adjust the location of the image to be vertically + // centered with the node and horizontally centered between the arrow and the + // text label. + aGroup.select("image").transition().attr({ + x: d.x + a.dx - 3, + y: d.y + a.dy - 6 + }); + // Node position (only one of the shape selection will be non-empty.) + scene.positionEllipse(aGroup.select("." + scene.Class.Annotation.NODE + " ellipse"), d.x + a.dx, d.y + a.dy, a.width, a.height); + scene.positionRect(aGroup.select("." + scene.Class.Annotation.NODE + " rect"), d.x + a.dx, d.y + a.dy, a.width, a.height); + scene.positionRect(aGroup.select("." + scene.Class.Annotation.NODE + " use"), d.x + a.dx, d.y + a.dy, a.width, a.height); + // Edge position + aGroup.select("path." + scene.Class.Annotation.EDGE).transition().attr("d", function (a) { + // map relative position to absolute position + var points = a.points.map(function (p) { + return { x: p.dx + d.x, y: p.dy + d.y }; + }); + return scene.edge.interpolate(points); + }); + } + ; + })(annotation = scene.annotation || (scene.annotation = {})); + })(scene = graph.scene || (graph.scene = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module +</script> +<script>/// <reference path="../graph.ts" /> +/// <reference path="../render.ts" /> +/// <reference path="scene.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph_1) { + var scene; + (function (scene) { + var edge; + (function (edge) { + var Scene = tf.graph.scene; // Aliased + function getEdgeKey(edgeObj) { + return edgeObj.v + tf.graph.EDGE_KEY_DELIM + edgeObj.w; + } + edge.getEdgeKey = getEdgeKey; + /** + * Select or Create a "g.edges" group to a given sceneGroup + * and builds a number of "g.edge" groups inside the group. + * + * Structure Pattern: + * + * <g class="edges"> + * <g class="edge"> + * <path class="edgeline"/> + * </g> + * ... + * </g> + * + * + * @param sceneGroup container + * @param graph + * @param sceneBehavior Parent scene module. + * @return selection of the created nodeGroups + */ + function buildGroup(sceneGroup, graph, sceneBehavior) { + var edgeData = _.reduce(graph.edges(), function (edges, edgeObj) { + var edgeLabel = graph.edge(edgeObj); + edges.push({ + v: edgeObj.v, + w: edgeObj.w, + label: edgeLabel + }); + return edges; + }, []); + var container = scene.selectOrCreateChild(sceneGroup, "g", scene.Class.Edge.CONTAINER); + var containerNode = container.node(); + // Select all children and join with data. + // (Note that all children of g.edges are g.edge) + var edgeGroups = container.selectAll(function () { + // using d3's selector function + // See https://github.com/mbostock/d3/releases/tag/v2.0.0 + // (It's not listed in the d3 wiki.) + return this.childNodes; + }) + .data(edgeData, getEdgeKey); + // Make edges a group to support rendering multiple lines for metaedge + edgeGroups.enter() + .append("g") + .attr("class", scene.Class.Edge.GROUP) + .attr("data-edge", getEdgeKey) + .each(function (d) { + var edgeGroup = d3.select(this); + d.label.edgeGroup = edgeGroup; + // index node group for quick highlighting + sceneBehavior._edgeGroupIndex[getEdgeKey(d)] = edgeGroup; + // If any edges are reference edges, add the reference edge class. + var extraEdgeClass = d.label.metaedge && d.label.metaedge.numRefEdges + ? scene.Class.Edge.REF_LINE + " " + scene.Class.Edge.LINE + : undefined; + // Add line during enter because we're assuming that type of line + // normally does not change. + appendEdge(edgeGroup, d, scene, extraEdgeClass); + }); + edgeGroups.each(position); + edgeGroups.each(function (d) { + stylize(d3.select(this), d, sceneBehavior); + }); + edgeGroups.exit() + .each(function (d) { + delete sceneBehavior._edgeGroupIndex[getEdgeKey(d)]; + }) + .remove(); + return edgeGroups; + } + edge.buildGroup = buildGroup; + ; + /** + * For a given d3 selection and data object, create a path to represent the + * edge described in d.label. + * + * If d.label is defined, it will be a RenderMetaedgeInformation instance. It + * will sometimes be undefined, for example for some Annotation edges for which + * there is no underlying Metaedge in the hierarchical graph. + */ + function appendEdge(edgeGroup, d, sceneBehavior, edgeClass) { + edgeClass = edgeClass || scene.Class.Edge.LINE; // set default type + if (d.label && d.label.structural) { + edgeClass += " " + scene.Class.Edge.STRUCTURAL; + } + edgeGroup.append("path") + .attr("class", edgeClass); + } + edge.appendEdge = appendEdge; + ; + /** + * Returns a tween interpolator for the endpoint of an edge path. + */ + function getEdgePathInterpolator(d, i, a) { + var renderMetaedgeInfo = d.label; + var adjoiningMetaedge = renderMetaedgeInfo.adjoiningMetaedge; + if (!adjoiningMetaedge) { + return d3.interpolate(a, edge.interpolate(renderMetaedgeInfo.points)); + } + var renderPath = this; + // Get the adjoining path that matches the adjoining metaedge. + var adjoiningPath = (adjoiningMetaedge.edgeGroup.node() + .firstChild); + // Find the desired SVGPoint along the adjoining path, then convert those + // coordinates into the space of the renderPath using its Current + // Transformation Matrix (CTM). + var inbound = renderMetaedgeInfo.metaedge.inbound; + return function (t) { + var adjoiningPoint = adjoiningPath + .getPointAtLength(inbound ? adjoiningPath.getTotalLength() : 0) + .matrixTransform(adjoiningPath.getCTM()) + .matrixTransform(renderPath.getCTM().inverse()); + // Update the relevant point in the renderMetaedgeInfo's points list, then + // re-interpolate the path. + var points = renderMetaedgeInfo.points; + var index = inbound ? 0 : points.length - 1; + points[index].x = adjoiningPoint.x; + points[index].y = adjoiningPoint.y; + var dPath = edge.interpolate(points); + return dPath; + }; + } + edge.interpolate = d3.svg.line() + .interpolate("basis") + .x(function (d) { return d.x; }) + .y(function (d) { return d.y; }); + function position(d) { + d3.select(this).select("path." + scene.Class.Edge.LINE) + .each(function (d) { + var path = d3.select(this); + path.transition().attrTween("d", getEdgePathInterpolator); + }); + } + ; + /** + * For a given d3 selection and data object, mark the edge as a control + * dependency if it contains only control edges. + * + * d's label property will be a RenderMetaedgeInformation object. + */ + function stylize(edgeGroup, d, stylize) { + var a; + var metaedge = d.label.metaedge; + edgeGroup + .select("path." + scene.Class.Edge.LINE) + .classed("control-dep", metaedge && !metaedge.numRegularEdges); + } + ; + })(edge = scene.edge || (scene.edge = {})); + })(scene = graph_1.scene || (graph_1.scene = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module +</script> +<script>/// <reference path="../graph.ts" /> +/// <reference path="scene.ts" /> +/// <reference path="annotation.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph) { + var scene; + (function (scene) { + var node; + (function (node_1) { + /** + * Select or Create a "g.nodes" group to a given sceneGroup + * and builds a number of "g.node" groups inside the group. + * + * Structure Pattern: + * + * <g class="nodes"> + * <g class="node"> + * <g class="in-annotations"> + * ... + * </g> + * <g class="out-annotations"> + * ... + * </g> + * <g class="nodeshape"> + * <!-- + * Content of the node shape should be for the node itself. For example a + * Metanode would have a <rect> with rounded edges, an op would have an + * <ellipse>. More complex nodes like series may contain multiple elements + * which are conditionally visible based on whether the node is expanded. + * --> + * </g> + * <text class="label">node name</text> + * <g class="subscene"> + * <!-- + * Content of the subscene (only for metanode and series node). + * + * Subscene is a svg group that contains content of the + * metanode's metagraph that is recursively generated by Scene.build(). + * + * When the graph is expanded multiple times, a subscene can contain + * nested subscenes inside. + * --> + * </g> + * </g> + * ... + * </g> + * + * + * @param sceneGroup selection of the container + * @param nodeData array of render node information to map + * @param sceneBehavior parent scene module + * @return selection of the created nodeGroups + */ + function buildGroup(sceneGroup, nodeData, sceneBehavior) { + var container = scene.selectOrCreateChild(sceneGroup, "g", scene.Class.Node.CONTAINER); + // Select all children and join with data. + // (Note that all children of g.nodes are g.node) + var nodeGroups = container.selectAll(function () { + // using d3's selector function + // See https://github.com/mbostock/d3/releases/tag/v2.0.0 + // (It's not listed in the d3 wiki.) + return this.childNodes; // this here refers to container.node() + }) + .data(nodeData, function (d) { + // make sure that we don't have to swap shape type + return d.node.name + ":" + d.node.type; + }); + // ENTER + nodeGroups.enter() + .append("g") + .attr("data-name", function (d) { return d.node.name; }) + .each(function (d) { + var nodeGroup = d3.select(this); + // index node group for quick stylizing + sceneBehavior.addNodeGroup(d.node.name, nodeGroup); + }); + // UPDATE + nodeGroups + .attr("class", function (d) { + return scene.Class.Node.GROUP + " " + nodeClass(d); + }) + .each(function (d) { + var nodeGroup = d3.select(this); + // add g.in-annotations (always add -- to keep layer order consistent.) + var inAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g", scene.Class.Annotation.INBOX); + scene.annotation.buildGroup(inAnnotationBox, d.inAnnotations, d, sceneBehavior); + // add g.out-annotations (always add -- to keep layer order consistent.) + var outAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g", scene.Class.Annotation.OUTBOX); + scene.annotation.buildGroup(outAnnotationBox, d.outAnnotations, d, sceneBehavior); + // label + var label = labelBuild(nodeGroup, d, sceneBehavior); + // Do not add interaction to metanode labels as they live inside the + // metanode shape which already has the same interactions. + addInteraction(label, d, sceneBehavior, d.node.type === graph.NodeType.META); + // build .shape below label + var shape = buildShape(nodeGroup, d, scene.Class.Node.SHAPE, label.node()); + if (d.node.isGroupNode) { + addButton(shape, d, sceneBehavior); + } + addInteraction(shape, d, sceneBehavior); + // build subscene on the top + subsceneBuild(nodeGroup, d, sceneBehavior); + stylize(nodeGroup, d, sceneBehavior); + position(nodeGroup, d, sceneBehavior); + }); + // EXIT + nodeGroups.exit() + .each(function (d) { + // remove all indices on remove + sceneBehavior.removeNodeGroup(d.node.name); + var nodeGroup = d3.select(this); + if (d.inAnnotations.list.length > 0) { + nodeGroup.select("." + scene.Class.Annotation.INBOX) + .selectAll("." + scene.Class.Annotation.GROUP) + .each(function (a) { + sceneBehavior.removeAnnotationGroup(a, d); + }); + } + if (d.outAnnotations.list.length > 0) { + nodeGroup.select("." + scene.Class.Annotation.OUTBOX) + .selectAll("." + scene.Class.Annotation.GROUP) + .each(function (a) { + sceneBehavior.removeAnnotationGroup(a, d); + }); + } + }) + .remove(); + return nodeGroups; + } + node_1.buildGroup = buildGroup; + ; + /** + * Update or remove the subscene of a render group node depending on whether it + * is a expanded. If the node is not a group node, this method has no effect. + * + * @param nodeGroup selection of the container + * @param renderNodeInfo the render information for the node. + * @param sceneBehavior parent scene module + * @return Selection of the subscene group, or null if node group does not have + * a subscene. Op nodes, bridge nodes and unexpanded group nodes will + * not have a subscene. + */ + function subsceneBuild(nodeGroup, renderNodeInfo, sceneBehavior) { + if (renderNodeInfo.node.isGroupNode) { + if (renderNodeInfo.expanded) { + // Recursively build the subscene. + return scene.buildGroup(nodeGroup, renderNodeInfo, sceneBehavior, scene.Class.Subscene.GROUP); + } + // Clean out existing subscene if the node is not expanded. + scene.selectChild(nodeGroup, "g", scene.Class.Subscene.GROUP).remove(); + } + return null; + } + ; + /** + * Translate the subscene of the given node group + */ + function subscenePosition(nodeGroup, d) { + var x0 = d.x - d.width / 2.0 + d.paddingLeft; + var y0 = d.y - d.height / 2.0 + d.paddingTop; + var subscene = scene.selectChild(nodeGroup, "g", scene.Class.Subscene.GROUP); + scene.translate(subscene, x0, y0); + } + ; + /** + * Add an expand/collapse button to a group node + * + * @param selection The group node selection. + * @param d Info about the node being rendered. + * @param sceneBehavior parent scene module. + */ + function addButton(selection, d, sceneBehavior) { + var group = scene.selectOrCreateChild(selection, "g", scene.Class.Node.BUTTON_CONTAINER); + scene.selectOrCreateChild(group, "circle", scene.Class.Node.BUTTON_CIRCLE); + scene.selectOrCreateChild(group, "path", scene.Class.Node.EXPAND_BUTTON).attr("d", "M0,-2.2 V2.2 M-2.2,0 H2.2"); + scene.selectOrCreateChild(group, "path", scene.Class.Node.COLLAPSE_BUTTON).attr("d", "M-2.2,0 H2.2"); + group.on("click", function (d) { + // Stop this event's propagation so that it isn't also considered a + // node-select. + d3.event.stopPropagation(); + sceneBehavior.fire("node-toggle-expand", { name: d.node.name }); + }); + scene.positionButton(group, d); + } + ; + /** + * Fire node-* events when the selection is interacted. + * + * @param disableInteraction When true, have the provided selection + * ignore all pointer events. Used for text labels inside of metanodes, which + * don't need interaction as their surrounding shape has interaction, and if + * given interaction would cause conflicts with the expand/collapse button. + */ + function addInteraction(selection, d, sceneBehavior, disableInteraction) { + if (disableInteraction) { + selection.attr("pointer-events", "none"); + return; + } + selection.on("dblclick", function (d) { + sceneBehavior.fire("node-toggle-expand", { name: d.node.name }); + }) + .on("mouseover", function (d) { + // don't send mouseover over expanded group, + // otherwise it is causing too much glitches + if (sceneBehavior.isNodeExpanded(d)) { + return; + } + sceneBehavior.fire("node-highlight", { name: d.node.name }); + }) + .on("mouseout", function (d) { + // don't send mouseover over expanded group, + // otherwise it is causing too much glitches + if (sceneBehavior.isNodeExpanded(d)) { + return; + } + sceneBehavior.fire("node-unhighlight", { name: d.node.name }); + }) + .on("click", function (d) { + // Stop this event's propagation so that it isn't also considered + // a graph-select. + d3.event.stopPropagation(); + sceneBehavior.fire("node-select", { name: d.node.name }); + }); + } + ; + /** + * Append svg text for label and assign data. + * @param nodeGroup + * @param renderNodeInfo The render node information for the label. + * @param sceneBehavior parent scene module. + */ + function labelBuild(nodeGroup, renderNodeInfo, sceneBehavior) { + var namePath = renderNodeInfo.node.name.split("/"); + var text = namePath[namePath.length - 1]; + // Truncate long labels for unexpanded Metanodes. + var useFontScale = renderNodeInfo.node.type === graph.NodeType.META && + !renderNodeInfo.expanded; + var label = scene.selectOrCreateChild(nodeGroup, "text", scene.Class.Node.LABEL); + label.attr("dy", ".35em") + .attr("text-anchor", "middle"); + if (useFontScale) { + if (text.length > sceneBehavior.maxMetanodeLabelLength) { + text = text.substr(0, sceneBehavior.maxMetanodeLabelLength - 2) + "..."; + } + var scale = getLabelFontScale(sceneBehavior); + label.attr("font-size", scale(text.length) + "px"); + } + label.text(text); + return label; + } + ; + /** + * d3 scale used for sizing font of labels, used by labelBuild, + * initialized once by getLabelFontScale. + */ + var fontScale = null; + function getLabelFontScale(sceneBehavior) { + if (!fontScale) { + fontScale = d3.scale.linear() + .domain([sceneBehavior.maxMetanodeLabelLengthLargeFont, + sceneBehavior.maxMetanodeLabelLength]) + .range([sceneBehavior.maxMetanodeLabelLengthFontSize, + sceneBehavior.minMetanodeLabelLengthFontSize]).clamp(true); + } + return fontScale; + } + /** + * Set label position of a given node group + */ + function labelPosition(nodeGroup, d, yOffset) { + scene.selectChild(nodeGroup, "text", scene.Class.Node.LABEL).transition() + .attr("x", d.x) + .attr("y", d.y + yOffset); + } + ; + /** + * Select or append/insert shape for a node and assign renderNode + * as the shape's data. + * + * @param nodeGroup + * @param d RenderNodeInformation + * @param nodeClass class for the element. + * @param before Reference DOM node for insertion. + * @return Selection of the shape. + */ + function buildShape(nodeGroup, d, nodeClass, before) { + // Create a group to house the underlying visual elements. + var shapeGroup = scene.selectOrCreateChild(nodeGroup, "g", nodeClass, before); + // TODO(jimbo): DOM structure should be templated in HTML somewhere, not JS. + switch (d.node.type) { + case graph.NodeType.OP: + scene.selectOrCreateChild(shapeGroup, "ellipse", scene.Class.Node.COLOR_TARGET); + break; + case graph.NodeType.SERIES: + // Choose the correct stamp to use to represent this series. + var stampType = "annotation"; + var groupNodeInfo = d; + if (groupNodeInfo.coreGraph) { + stampType = groupNodeInfo.node.hasNonControlEdges + ? "vertical" : "horizontal"; + } + scene.selectOrCreateChild(shapeGroup, "use", scene.Class.Node.COLOR_TARGET) + .attr("xlink:href", "#op-series-" + stampType + "-stamp"); + scene.selectOrCreateChild(shapeGroup, "rect", scene.Class.Node.COLOR_TARGET) + .attr({ rx: d.radius, ry: d.radius }); + break; + case graph.NodeType.BRIDGE: + scene.selectOrCreateChild(shapeGroup, "rect", scene.Class.Node.COLOR_TARGET) + .attr({ rx: d.radius, ry: d.radius }); + break; + case graph.NodeType.META: + scene.selectOrCreateChild(shapeGroup, "rect", scene.Class.Node.COLOR_TARGET) + .attr({ rx: d.radius, ry: d.radius }); + break; + default: + throw Error("Unrecognized node type: " + d.node.type); + } + return shapeGroup; + } + node_1.buildShape = buildShape; + ; + function nodeClass(d) { + switch (d.node.type) { + case graph.NodeType.OP: + return scene.Class.OPNODE; + case graph.NodeType.META: + return scene.Class.METANODE; + case graph.NodeType.SERIES: + return scene.Class.SERIESNODE; + case graph.NodeType.BRIDGE: + return scene.Class.BRIDGENODE; + case graph.NodeType.ELLIPSIS: + return scene.Class.ELLIPSISNODE; + } + ; + throw Error("Unrecognized node type: " + d.node.type); + } + node_1.nodeClass = nodeClass; + ; + /** Modify node and its subscene and its label's positional attributes */ + function position(nodeGroup, d, sceneBehavior) { + var shapeGroup = scene.selectChild(nodeGroup, "g", scene.Class.Node.SHAPE); + switch (d.node.type) { + case graph.NodeType.OP: { + // position shape + var shape = scene.selectChild(shapeGroup, "ellipse"); + scene.positionEllipse(shape, d.x, d.y, d.width, d.height); + labelPosition(nodeGroup, d, d.labelOffset); + break; + } + case graph.NodeType.META: { + // position shape + var shape = scene.selectChild(shapeGroup, "rect"); + scene.positionRect(shape, d.x, d.y, d.width, d.height); + if (d.expanded) { + subscenePosition(nodeGroup, d); + // put label on top + labelPosition(nodeGroup, d, -d.height / 2 + d.labelHeight / 2); + } + else { + labelPosition(nodeGroup, d, 0); + } + break; + } + case graph.NodeType.SERIES: { + var shape = scene.selectChild(shapeGroup, "use"); + scene.positionRect(shape, d.x, d.y, d.width, d.height); + if (d.expanded) { + subscenePosition(nodeGroup, d); + // put label on top + labelPosition(nodeGroup, d, -d.height / 2 + d.labelHeight / 2); + } + else { + labelPosition(nodeGroup, d, d.labelOffset); + } + } + case graph.NodeType.BRIDGE: { + // position shape + // NOTE: In reality, these will not be visible, but it helps to put them + // in the correct position for debugging purposes. + var shape = scene.selectChild(shapeGroup, "rect"); + scene.positionRect(shape, d.x, d.y, d.width, d.height); + break; + } + default: { + throw Error("Unrecognized node type: " + d.node.type); + } + } + } + ; + /** Enum specifying the options to color nodes by */ + var ColorBy = { + STRUCTURE: 0, + DEVICE: 1, + COMPUTE_TIME: 2, + MEMORY: 3 + }; + /** + * Returns the fill color for the node given its state and the "color by" + * option. + */ + function getFillForNode(sceneBehavior, colorBy, renderInfo, isExpanded) { + var colorParams = tf.graph.render.MetanodeColors; + switch (colorBy) { + case ColorBy.STRUCTURE: + if (renderInfo.node.type === tf.graph.NodeType.META) { + var tid = renderInfo.node.templateId; + return tid === null ? colorParams.UNKNOWN : colorParams.STRUCTURE_PALETTE(sceneBehavior.templateIndex(tid), renderInfo.expanded); + } + else if (renderInfo.node.type === tf.graph.NodeType.SERIES) { + // If expanded, we're showing the background rect, which we want to + // appear gray. Otherwise we're showing a stack of ellipses which we + // want to show white. + return renderInfo.expanded ? colorParams.EXPANDED_COLOR : "white"; + } + else if (renderInfo.node.type === graph.NodeType.BRIDGE) { + return renderInfo.structural ? "#f0e" : + renderInfo.node.inbound ? "#0ef" : "#fe0"; + } + else { + // Op nodes are white. + return "white"; + } + case ColorBy.DEVICE: + if (renderInfo.deviceColors == null) { + // Return the hue for unknown device. + return colorParams.UNKNOWN; + } + var id = renderInfo.node.name; + var escapedId = tf.escapeQuerySelector(id); + var gradientDefs = d3.select("svg#svg defs #linearGradients"); + var linearGradient = gradientDefs.select("linearGradient#" + escapedId); + // If the linear gradient is not there yet, create it. + if (linearGradient.size() === 0) { + linearGradient = gradientDefs.append("linearGradient").attr("id", id); + // Re-create the stops of the linear gradient. + linearGradient.selectAll("*").remove(); + var cumulativeProportion = 0; + // For each device, create a stop using the proportion of that device. + _.each(renderInfo.deviceColors, function (d) { + var color = d.color; + linearGradient.append("stop") + .attr("offset", cumulativeProportion) + .attr("stop-color", color); + linearGradient.append("stop") + .attr("offset", cumulativeProportion + d.proportion) + .attr("stop-color", color); + cumulativeProportion += d.proportion; + }); + } + return isExpanded ? colorParams.EXPANDED_COLOR : "url(#" + escapedId + ")"; + case ColorBy.COMPUTE_TIME: + return isExpanded ? + colorParams.EXPANDED_COLOR : renderInfo.computeTimeColor || + colorParams.UNKNOWN; + case ColorBy.MEMORY: + return isExpanded ? + colorParams.EXPANDED_COLOR : renderInfo.memoryColor || + colorParams.UNKNOWN; + default: + throw new Error("Unknown case to color nodes by"); + } + } + /** + * Modify node style by toggling class and assign attributes (only for things + * that can't be done in css). + */ + function stylize(nodeGroup, renderInfo, sceneBehavior, nodeClass) { + nodeClass = nodeClass || scene.Class.Node.SHAPE; + var isHighlighted = sceneBehavior.isNodeHighlighted(renderInfo.node.name); + var isSelected = sceneBehavior.isNodeSelected(renderInfo.node.name); + var isExtract = renderInfo.isInExtract || renderInfo.isOutExtract; + var isExpanded = renderInfo.expanded; + nodeGroup.classed("highlighted", isHighlighted); + nodeGroup.classed("selected", isSelected); + nodeGroup.classed("extract", isExtract); + nodeGroup.classed("expanded", isExpanded); + // Main node always exists here and it will be reached before subscene, + // so d3 selection is fine here. + var node = nodeGroup.select("." + nodeClass + " ." + scene.Class.Node.COLOR_TARGET); + var fillColor = getFillForNode(sceneBehavior, ColorBy[sceneBehavior.colorBy.toUpperCase()], renderInfo, isExpanded); + node.style("fill", fillColor); + // Choose outline to be darker version of node color if the node is a single + // color and is not selected. + if (isSelected) { + node.style("stroke", null); + } + else { + // If node is colored by a gradient, then use a dark gray outline. + var outlineColor = fillColor.substring(0, 3) === "url" ? + tf.graph.render.MetanodeColors.GRADIENT_OUTLINE : + d3.rgb(fillColor).darker().toString(); + node.style("stroke", outlineColor); + } + } + node_1.stylize = stylize; + ; + })(node = scene.node || (scene.node = {})); + })(scene = graph.scene || (graph.scene = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module +</script> +<script>/// <reference path="graph.ts" /> +/// <reference path="render.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph_1) { + var layout; + (function (layout) { + /** Set of parameters that define the look and feel of the graph. */ + layout.PARAMS = { + animation: { + /** Default duration for graph animations in ms. */ + duration: 250 + }, + graph: { + /** Graph parameter for metanode. */ + meta: { + /** + * Dagre's nodesep param - number of pixels that + * separate nodes horizontally in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + nodeSep: 110, + /** + * Dagre's ranksep param - number of pixels + * between each rank in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + rankSep: 25 + }, + /** Graph parameter for metanode. */ + series: { + /** + * Dagre's nodesep param - number of pixels that + * separate nodes horizontally in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + nodeSep: 90, + /** + * Dagre's ranksep param - number of pixels + * between each rank in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + rankSep: 25, + }, + /** + * Padding is used to correctly position the graph SVG inside of its parent + * element. The padding amounts are applied using an SVG transform of X and + * Y coordinates. + */ + padding: { + paddingTop: 40, + paddingLeft: 20 + } + }, + subscene: { + meta: { + paddingTop: 10, + paddingBottom: 10, + paddingLeft: 10, + paddingRight: 10, + /** + * Used to leave room for the label on top of the highest node in + * the core graph. + */ + labelHeight: 20, + /** X-space between each extracted node and the core graph. */ + extractXOffset: 50, + /** Y-space between each extracted node. */ + extractYOffset: 20 + }, + series: { + paddingTop: 10, + paddingBottom: 10, + paddingLeft: 10, + paddingRight: 10, + labelHeight: 10 + } + }, + nodeSize: { + /** Size of meta nodes. */ + meta: { + radius: 5, + width: 60, + /** A scale for the node's height based on number of nodes inside */ + height: d3.scale.linear().domain([1, 200]).range([15, 60]).clamp(true), + /** The radius of the circle denoting the expand button. */ + expandButtonRadius: 3 + }, + /** Size of op nodes. */ + op: { + width: 15, + height: 6, + radius: 3, + labelOffset: -8 + }, + /** Size of series nodes. */ + series: { + expanded: { + // For expanded series nodes, width and height will be + // computed to account for the subscene. + radius: 10, + labelOffset: 0, + }, + vertical: { + // When unexpanded, series whose underlying metagraphs contain + // one or more non-control edges will show as a vertical stack + // of ellipses. + width: 16, + height: 13, + labelOffset: -13, + }, + horizontal: { + // When unexpanded, series whose underlying metagraphs contain + // no non-control edges will show as a horizontal stack of + // ellipses. + width: 24, + height: 8, + radius: 10, + labelOffset: -10, + }, + }, + /** Size of bridge nodes. */ + bridge: { + // NOTE: bridge nodes will normally be invisible, but they must + // take up some space so that the layout step leaves room for + // their edges. + width: 20, + height: 20, + radius: 2, + labelOffset: 0 + } + }, + shortcutSize: { + /** Size of shortcuts for op nodes */ + op: { + width: 10, + height: 4 + }, + /** Size of shortcuts for meta nodes */ + meta: { + width: 12, + height: 4, + radius: 1 + }, + /** Size of shortcuts for series nodes */ + series: { + width: 14, + height: 4, + } + }, + annotations: { + /** X-space between the shape and each annotation-node. */ + xOffset: 10, + /** Y-space between each annotation-node. */ + yOffset: 3, + /** X-space between each annotation-node and its label. */ + labelOffset: 2, + /** Estimate max width for annotation label */ + labelWidth: 35 + }, + constant: { + size: { + width: 4, + height: 4 + } + }, + series: { + /** Maximum number of repeated item for unexpanded series node. */ + maxStackCount: 3, + /** + * Positioning offset ratio for collapsed stack + * of parallel series (series without edges between its members). + */ + parallelStackOffsetRatio: 0.2, + /** + * Positioning offset ratio for collapsed stack + * of tower series (series with edges between its members). + */ + towerStackOffsetRatio: 0.5 + }, + minimap: { + /** The maximum width/height the minimap can have. */ + size: 150 + } + }; + /** Calculate layout for a scene of a group node. */ + function scene(renderNodeInfo) { + // Update layout, size, and annotations of its children nodes and edges. + if (renderNodeInfo.node.isGroupNode) { + layoutChildren(renderNodeInfo); + } + // Update position of its children nodes and edges + if (renderNodeInfo.node.type === graph_1.NodeType.META) { + layoutMetanode(renderNodeInfo); + } + else if (renderNodeInfo.node.type === graph_1.NodeType.SERIES) { + layoutSeriesNode(renderNodeInfo); + } + } + layout.scene = scene; + ; + /** + * Update layout, size, and annotations of its children nodes and edges. + */ + function layoutChildren(renderNodeInfo) { + var children = renderNodeInfo.coreGraph.nodes().map(function (n) { + return renderNodeInfo.coreGraph.node(n); + }).concat(renderNodeInfo.isolatedInExtract, renderNodeInfo.isolatedOutExtract); + _.each(children, function (childNodeInfo) { + // Set size of each child + switch (childNodeInfo.node.type) { + case graph_1.NodeType.OP: + _.extend(childNodeInfo, layout.PARAMS.nodeSize.op); + break; + case graph_1.NodeType.BRIDGE: + _.extend(childNodeInfo, layout.PARAMS.nodeSize.bridge); + break; + case graph_1.NodeType.META: + if (!childNodeInfo.expanded) { + // set fixed width and scalable height based on cardinality + _.extend(childNodeInfo, layout.PARAMS.nodeSize.meta); + childNodeInfo.height = + layout.PARAMS.nodeSize.meta.height(childNodeInfo.node.cardinality); + } + else { + var childGroupNodeInfo = childNodeInfo; + scene(childGroupNodeInfo); // Recursively layout its subscene. + } + break; + case graph_1.NodeType.SERIES: + if (childNodeInfo.expanded) { + _.extend(childNodeInfo, layout.PARAMS.nodeSize.series.expanded); + var childGroupNodeInfo = childNodeInfo; + scene(childGroupNodeInfo); // Recursively layout its subscene. + } + else { + var childGroupNodeInfo = childNodeInfo; + var seriesParams = childGroupNodeInfo.node.hasNonControlEdges ? + layout.PARAMS.nodeSize.series.vertical : + layout.PARAMS.nodeSize.series.horizontal; + _.extend(childNodeInfo, seriesParams); + } + break; + default: + throw Error("Unrecognized node type: " + childNodeInfo.node.type); + } + // Layout each child's annotations + layoutAnnotation(childNodeInfo); + }); + } + /** + * Calculate layout for a graph using dagre + * @param graph the graph to be laid out + * @param params layout parameters + * @return width and height of the core graph + */ + function dagreLayout(graph, params) { + _.extend(graph.graph(), { + nodeSep: params.nodeSep, + rankSep: params.rankSep + }); + var bridgeNodeNames = []; + var nonBridgeNodeNames = []; + // Split out nodes into bridge and non-bridge nodes, and calculate the total + // width we should use for bridge nodes. + _.each(graph.nodes(), function (nodeName) { + var nodeInfo = graph.node(nodeName); + if (nodeInfo.node.type === graph_1.NodeType.BRIDGE) { + bridgeNodeNames.push(nodeName); + } + else { + nonBridgeNodeNames.push(nodeName); + } + }); + // If there are no non-bridge nodes, then the graph has zero size. + if (!nonBridgeNodeNames.length) { + return { + width: 0, + height: 0, + }; + } + dagre.layout(graph); + var graphLabel = graph.graph(); + // Calculate the true bounding box of the graph by iterating over nodes and + // edges rather than accepting dagre's word for it. In particular, we should + // ignore the extra-wide bridge nodes and bridge edges, and allow for + // annotation boxes and labels. + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + _.each(nonBridgeNodeNames, function (nodeName) { + var nodeInfo = graph.node(nodeName); + var w = 0.5 * nodeInfo.width; + var x1 = nodeInfo.x - w - nodeInfo.inboxWidth; + var x2 = nodeInfo.x + w + nodeInfo.outboxWidth; + minX = x1 < minX ? x1 : minX; + maxX = x2 > maxX ? x2 : maxX; + var labelLength = nodeName.length - nodeName.lastIndexOf(graph_1.NAMESPACE_DELIM); + // TODO(jimbo): Account for font width rather than using a magic number. + var charWidth = 3; // 3 pixels per character. + var lw = 0.5 * labelLength * charWidth; + var lx1 = nodeInfo.x - lw; + var lx2 = nodeInfo.x + lw; + minX = lx1 < minX ? lx1 : minX; + maxX = lx2 > maxX ? lx2 : maxX; + // TODO(jimbo): Account for the height of labels above op nodes here. + var h = 0.5 * nodeInfo.outerHeight; + var y1 = nodeInfo.y - h; + var y2 = nodeInfo.y + h; + minY = y1 < minY ? y1 : minY; + maxY = y2 > maxY ? y2 : maxY; + }); + _.each(graph.edges(), function (edgeObj) { + var renderMetaedgeInfo = graph.edge(edgeObj); + if (renderMetaedgeInfo.structural) { + return; // Skip structural edges from min/max calculations. + } + _.each(renderMetaedgeInfo.points, function (point) { + minX = point.x < minX ? point.x : minX; + maxX = point.x > maxX ? point.x : maxX; + minY = point.y < minY ? point.y : minY; + maxY = point.y > maxY ? point.y : maxY; + }); + }); + // Shift all nodes and edge points to account for the left-padding amount, + // and the invisble bridge nodes. + _.each(graph.nodes(), function (nodeName) { + var nodeInfo = graph.node(nodeName); + nodeInfo.x -= minX; + nodeInfo.y -= minY; + }); + _.each(graph.edges(), function (edgeObj) { + _.each(graph.edge(edgeObj).points, function (point) { + point.x -= minX; + point.y -= minY; + }); + }); + return { + width: maxX - minX, + height: maxY - minY, + }; + } + /** Layout a metanode. */ + function layoutMetanode(renderNodeInfo) { + // First, copy params specific to meta nodes onto this render info object. + var params = layout.PARAMS.subscene.meta; + renderNodeInfo = _.extend(renderNodeInfo, params); + // Invoke dagre.layout() on the core graph and record the bounding box + // dimensions. + _.extend(renderNodeInfo.coreBox, dagreLayout(renderNodeInfo.coreGraph, layout.PARAMS.graph.meta)); + // Calculate the position of nodes in isolatedInExtract relative to the + // top-left corner of inExtractBox (the bounding box for all inExtract nodes) + // and calculate the size of the inExtractBox. + var hasInExtract = renderNodeInfo.isolatedInExtract.length > 0; + renderNodeInfo.inExtractBox.width = hasInExtract ? + _(renderNodeInfo.isolatedInExtract).pluck("outerWidth").max() : 0; + renderNodeInfo.inExtractBox.height = + _.reduce(renderNodeInfo.isolatedInExtract, function (height, child, i) { + var yOffset = i > 0 ? params.extractYOffset : 0; + // use outerWidth/Height here to avoid overlaps between extracts + child.x = renderNodeInfo.inExtractBox.width / 2; + child.y = height + yOffset + child.outerHeight / 2; + return height + yOffset + child.outerHeight; + }, 0); + // Calculate the position of nodes in isolatedOutExtract relative to the + // top-left corner of outExtractBox (the bounding box for all outExtract + // nodes) and calculate the size of the outExtractBox. + var hasOutExtract = renderNodeInfo.isolatedOutExtract.length > 0; + renderNodeInfo.outExtractBox.width = hasOutExtract ? + _(renderNodeInfo.isolatedOutExtract).pluck("outerWidth").max() : 0; + renderNodeInfo.outExtractBox.height = + _.reduce(renderNodeInfo.isolatedOutExtract, function (height, child, i) { + var yOffset = i > 0 ? params.extractYOffset : 0; + // use outerWidth/Height here to avoid overlaps between extracts + child.x = renderNodeInfo.outExtractBox.width / 2; + child.y = height + yOffset + child.outerHeight / 2; + return height + yOffset + child.outerHeight; + }, 0); + // Determine the whole metanode's width (from left to right). + renderNodeInfo.width = + params.paddingLeft + renderNodeInfo.coreBox.width + params.paddingRight + + (hasInExtract ? + renderNodeInfo.inExtractBox.width + params.extractXOffset : 0) + + (hasOutExtract ? + params.extractXOffset + renderNodeInfo.outExtractBox.width : 0); + // TODO(jimbo): Remove labelHeight and instead incorporate into box sizes. + // Determine the whole metanode's height (from top to bottom). + renderNodeInfo.height = + renderNodeInfo.labelHeight + + params.paddingTop + + Math.max(renderNodeInfo.inExtractBox.height, renderNodeInfo.coreBox.height, renderNodeInfo.outExtractBox.height) + + params.paddingBottom; + } + /** + * Calculate layout for series node's core graph. Only called for an expanded + * series. + */ + function layoutSeriesNode(node) { + var graph = node.coreGraph; + var params = layout.PARAMS.subscene.series; + _.extend(node, params); + // Layout the core. + _.extend(node.coreBox, dagreLayout(node.coreGraph, layout.PARAMS.graph.series)); + _.each(graph.nodes(), function (nodeName) { + graph.node(nodeName).excluded = false; + }); + // Series do not have in/outExtractBox so no need to include them here. + node.width = node.coreBox.width + params.paddingLeft + params.paddingRight; + node.height = node.coreBox.height + params.paddingTop + params.paddingBottom; + } + /** + * Calculate layout for annotations of a given node. + * This will modify positions of the the given node and its annotations. + * + * @see tf.graph.render.Node and tf.graph.render.Annotation + * for description of each property of each render node. + * + */ + function layoutAnnotation(renderNodeInfo) { + // If the render node is an expanded metanode, then its annotations will not + // be visible and we should skip the annotation calculations. + if (renderNodeInfo.expanded) { + _.extend(renderNodeInfo, { + inboxWidth: 0, + inboxHeight: 0, + outboxWidth: 0, + outboxHeight: 0, + outerWidth: renderNodeInfo.width, + outerHeight: renderNodeInfo.height + }); + return; + } + var inAnnotations = renderNodeInfo.inAnnotations.list; + var outAnnotations = renderNodeInfo.outAnnotations.list; + // Calculate size for in-annotations + _.each(inAnnotations, function (a) { return sizeAnnotation(a); }); + // Calculate size for out-annotations + _.each(outAnnotations, function (a) { return sizeAnnotation(a); }); + var params = layout.PARAMS.annotations; + renderNodeInfo.inboxWidth = + inAnnotations.length > 0 ? + _(inAnnotations).pluck("width").max() + + params.xOffset + params.labelWidth + params.labelOffset : + 0; + renderNodeInfo.outboxWidth = + outAnnotations.length > 0 ? + _(outAnnotations).pluck("width").max() + + params.xOffset + params.labelWidth + params.labelOffset : + 0; + // Calculate annotation node position (a.dx, a.dy) + // and total height for in-annotations + // After this chunk of code: + // inboxHeight = sum of annotation heights+ (annotation.length - 1 * yOffset) + var inboxHeight = _.reduce(inAnnotations, function (height, a, i) { + var yOffset = i > 0 ? params.yOffset : 0; + a.dx = -(renderNodeInfo.width + a.width) / 2 - params.xOffset; + a.dy = height + yOffset + a.height / 2; + return height + yOffset + a.height; + }, 0); + _.each(inAnnotations, function (a) { + a.dy -= inboxHeight / 2; + a.labelOffset = params.labelOffset; + }); + // Calculate annotation node position position (a.dx, a.dy) + // and total height for out-annotations + // After this chunk of code: + // outboxHeight = sum of annotation heights + + // (annotation.length - 1 * yOffset) + var outboxHeight = _.reduce(outAnnotations, function (height, a, i) { + var yOffset = i > 0 ? params.yOffset : 0; + a.dx = (renderNodeInfo.width + a.width) / 2 + params.xOffset; + a.dy = height + yOffset + a.height / 2; + return height + yOffset + a.height; + }, 0); + _.each(outAnnotations, function (a) { + // adjust by (half of ) the total height + // so dy is relative to the host node's center. + a.dy -= outboxHeight / 2; + a.labelOffset = params.labelOffset; + }); + // Creating scales for touch point between the in-annotation edges + // and their hosts. + var inTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, inboxHeight / 2); + inTouchHeight = inTouchHeight < 0 ? 0 : inTouchHeight; + var inY = d3.scale.linear() + .domain([0, inAnnotations.length - 1]) + .range([-inTouchHeight, inTouchHeight]); + // Calculate annotation edge position + _.each(inAnnotations, function (a, i) { + a.points = [ + // The annotation node end + { + dx: a.dx + a.width / 2, + dy: a.dy + }, + // The host node end + { + dx: -renderNodeInfo.width / 2, + // only use scale if there are more than one, + // otherwise center it vertically + dy: inAnnotations.length > 1 ? inY(i) : 0 + } + ]; + }); + // Creating scales for touch point between the out-annotation edges + // and their hosts. + var outTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, outboxHeight / 2); + outTouchHeight = outTouchHeight < 0 ? 0 : outTouchHeight; + var outY = d3.scale.linear() + .domain([0, outAnnotations.length - 1]) + .range([-outTouchHeight, outTouchHeight]); + _.each(outAnnotations, function (a, i) { + // Add point from the border of the annotation node + a.points = [ + // The host node end + { + dx: renderNodeInfo.width / 2, + // only use scale if there are more than one, + // otherwise center it vertically + dy: outAnnotations.length > 1 ? outY(i) : 0 + }, + // The annotation node end + { + dx: a.dx - a.width / 2, + dy: a.dy + } + ]; + }); + renderNodeInfo.outerWidth = renderNodeInfo.width + renderNodeInfo.inboxWidth + + renderNodeInfo.outboxWidth; + renderNodeInfo.outerHeight = + Math.max(renderNodeInfo.height, inboxHeight, outboxHeight); + } + /** + * Set size of an annotation node. + */ + function sizeAnnotation(a) { + switch (a.annotationType) { + case graph_1.render.AnnotationType.CONSTANT: + _.extend(a, layout.PARAMS.constant.size); + break; + case graph_1.render.AnnotationType.SHORTCUT: + if (a.node.type === graph_1.NodeType.OP) { + _.extend(a, layout.PARAMS.shortcutSize.op); + } + else if (a.node.type === graph_1.NodeType.META) { + _.extend(a, layout.PARAMS.shortcutSize.meta); + } + else if (a.node.type === graph_1.NodeType.SERIES) { + _.extend(a, layout.PARAMS.shortcutSize.series); + } + else { + throw Error("Invalid node type: " + a.node.type); + } + break; + case graph_1.render.AnnotationType.SUMMARY: + _.extend(a, layout.PARAMS.constant.size); + break; + } + } + })(layout = graph_1.layout || (graph_1.layout = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module +</script> +<script>var tf; +(function (tf) { + /** + * Mapping from color palette name to color pallette, which contains + * exact colors for multiple states of a single color pallette. + */ + tf.COLORS = [ + { + "name": "Google Blue", + "color": "#4184f3", + "active": "#3a53c5", + "disabled": "#cad8fc" + }, + { + "name": "Google Red", + "color": "#db4437", + "active": "#8f2a0c", + "disabled": "#e8c6c1" + }, + { + "name": "Google Yellow", + "color": "#f4b400", + "active": "#db9200", + "disabled": "#f7e8b0" + }, + { + "name": "Google Green", + "color": "#0f9d58", + "active": "#488046", + "disabled": "#c2e1cc" + }, + { + "name": "Purple", + "color": "#aa46bb", + "active": "#5c1398", + "disabled": "#d7bce6" + }, + { + "name": "Teal", + "color": "#00abc0", + "active": "#47828e", + "disabled": "#c2eaf2" + }, + { + "name": "Deep Orange", + "color": "#ff6f42", + "active": "#ca4a06", + "disabled": "#f2cbba" + }, + { + "name": "Lime", + "color": "#9d9c23", + "active": "#7f771d", + "disabled": "#f1f4c2" + }, + { + "name": "Indigo", + "color": "#5b6abf", + "active": "#3e47a9", + "disabled": "#c5c8e8" + }, + { + "name": "Pink", + "color": "#ef6191", + "active": "#ca1c60", + "disabled": "#e9b9ce" + }, + { + "name": "Deep Teal", + "color": "#00786a", + "active": "#2b4f43", + "disabled": "#bededa" + }, + { + "name": "Deep Pink", + "color": "#c1175a", + "active": "#75084f", + "disabled": "#de8cae" + }, + { + "name": "Gray", + "color": "#9E9E9E", + "active": "#424242", + "disabled": "F5F5F5" // 100 + } + ].reduce(function (m, c) { + m[c.name] = c; + return m; + }, {}); + /** + * Mapping from op category to color palette name + * e.g., OP_GROUP_COLORS["state_ops"] = "Google Blue"; + */ + tf.OP_GROUP_COLORS = [ + { + color: "Google Red", + groups: ["gen_legacy_ops", "legacy_ops", "legacy_flogs_input", + "legacy_image_input", "legacy_input_example_input", + "legacy_sequence_input", "legacy_seti_input_input"] + }, { + color: "Deep Orange", + groups: ["constant_ops"] + }, { + color: "Indigo", + groups: ["state_ops"] + }, { + color: "Purple", + groups: ["nn_ops", "nn"] + }, { + color: "Google Green", + groups: ["math_ops"] + }, { + color: "Lime", + groups: ["array_ops"] + }, { + color: "Teal", + groups: ["control_flow_ops", "data_flow_ops"] + }, { + color: "Pink", + groups: ["summary_ops"] + }, { + color: "Deep Pink", + groups: ["io_ops"] + } + ].reduce(function (m, c) { + c.groups.forEach(function (group) { + m[group] = c.color; + }); + return m; + }, {}); +})(tf || (tf = {})); +</script> +<script>/// <reference path="../../../../typings/tsd.d.ts" /> +/// <reference path="../common.ts" /> +var tf; +(function (tf) { + var scene; + (function (scene) { + /** Show minimap when the viewpoint area is less than X% of the whole area. */ + var FRAC_VIEWPOINT_AREA = 0.8; + var Minimap = (function () { + /** + * Constructs a new minimap. + * + * @param svg The main svg element. + * @param zoomG The svg group used for panning and zooming the main svg. + * @param mainZoom The main zoom behavior. + * @param minimap The minimap container. + * @param maxWandH The maximum width/height for the minimap. + * @param labelPadding Padding in pixels due to the main graph labels. + */ + function Minimap(svg, zoomG, mainZoom, minimap, maxWandH, labelPadding) { + var _this = this; + this.svg = svg; + this.labelPadding = labelPadding; + this.zoomG = zoomG; + this.mainZoom = mainZoom; + this.maxWandH = maxWandH; + var $minimap = d3.select(minimap); + // The minimap will have 2 main components: the canvas showing the content + // and an svg showing a rectangle of the currently zoomed/panned viewpoint. + var $minimapSvg = $minimap.select("svg"); + // Make the viewpoint rectangle draggable. + var $viewpoint = $minimapSvg.select("rect"); + var dragmove = function (d) { + _this.viewpointCoord.x = d3.event.x; + _this.viewpointCoord.y = d3.event.y; + _this.updateViewpoint(); + }; + this.viewpointCoord = { x: 0, y: 0 }; + var drag = d3.behavior.drag().origin(Object).on("drag", dragmove); + $viewpoint.datum(this.viewpointCoord).call(drag); + // Make the minimap clickable. + $minimapSvg.on("click", function () { + if (d3.event.defaultPrevented) { + // This click was part of a drag event, so suppress it. + return; + } + // Update the coordinates of the viewpoint. + var width = Number($viewpoint.attr("width")); + var height = Number($viewpoint.attr("height")); + var clickCoords = d3.mouse($minimapSvg.node()); + _this.viewpointCoord.x = clickCoords[0] - width / 2; + _this.viewpointCoord.y = clickCoords[1] - height / 2; + _this.updateViewpoint(); + }); + this.viewpoint = $viewpoint.node(); + this.minimapSvg = $minimapSvg.node(); + this.minimap = minimap; + this.canvas = $minimap.select("canvas.first").node(); + this.canvasBuffer = + $minimap.select("canvas.second").node(); + } + /** + * Updates the position and the size of the viewpoint rectangle. + * It also notifies the main svg about the new panned position. + */ + Minimap.prototype.updateViewpoint = function () { + // Update the coordinates of the viewpoint rectangle. + d3.select(this.viewpoint) + .attr("x", this.viewpointCoord.x) + .attr("y", this.viewpointCoord.y); + // Update the translation vector of the main svg to reflect the + // new viewpoint. + var mainX = -this.viewpointCoord.x * this.scaleMain / this.scaleMinimap; + var mainY = -this.viewpointCoord.y * this.scaleMain / this.scaleMinimap; + var zoomEvent = this.mainZoom.translate([mainX, mainY]).event; + d3.select(this.zoomG).call(zoomEvent); + }; + /** + * Redraws the minimap. Should be called whenever the main svg + * was updated (e.g. when a node was expanded). + */ + Minimap.prototype.update = function () { + var _this = this; + var $svg = d3.select(this.svg); + // Read all the style rules in the document and embed them into the svg. + // The svg needs to be self contained, i.e. all the style rules need to be + // embedded so the canvas output matches the origin. + var stylesText = ""; + for (var k = 0; k < document.styleSheets.length; k++) { + try { + var cssRules = document.styleSheets[k].cssRules || + document.styleSheets[k].rules; + if (cssRules == null) { + continue; + } + for (var i = 0; i < cssRules.length; i++) { + stylesText += cssRules[i].cssText + "\n"; + } + } + catch (e) { + if (e.name !== "SecurityError") { + throw e; + } + } + } + // Temporarily add the css rules to the main svg. + var svgStyle = $svg.append("style"); + svgStyle.text(stylesText); + // Temporarily remove the zoom/pan transform from the main svg since we + // want the minimap to show a zoomed-out and centered view. + var $zoomG = d3.select(this.zoomG); + var zoomTransform = $zoomG.attr("transform"); + $zoomG.attr("transform", null); + // Get the size of the entire scene. + var sceneSize = this.zoomG.getBBox(); + // Since we add padding, account for that here. + sceneSize.height += this.labelPadding; + // Temporarily assign an explicit width/height to the main svg, since + // it doesn't have one (uses flex-box), but we need it for the canvas + // to work. + $svg.attr({ + width: sceneSize.width, + height: sceneSize.height, + }); + // Since the content inside the svg changed (e.g. a node was expanded), + // the aspect ratio have also changed. Thus, we need to update the scale + // factor of the minimap. The scale factor is determined such that both + // the width and height of the minimap are <= maximum specified w/h. + this.scaleMinimap = + this.maxWandH / Math.max(sceneSize.width, sceneSize.height); + this.minimapSize = { + width: sceneSize.width * this.scaleMinimap, + height: sceneSize.height * this.scaleMinimap + }; + // Update the size of the minimap's svg, the buffer canvas and the + // viewpoint rect. + d3.select(this.minimapSvg).attr(this.minimapSize); + d3.select(this.canvasBuffer).attr(this.minimapSize); + if (this.translate != null && this.zoom != null) { + // Update the viewpoint rectangle shape since the aspect ratio of the + // map has changed. + requestAnimationFrame(function () { return _this.zoom(); }); + } + // Serialize the main svg to a string which will be used as the rendering + // content for the canvas. + var svgXml = (new XMLSerializer()).serializeToString(this.svg); + // Now that the svg is serialized for rendering, remove the temporarily + // assigned styles, explicit width and height and bring back the pan/zoom + // transform. + svgStyle.remove(); + $svg.attr({ + width: null, + height: null + }); + $zoomG.attr("transform", zoomTransform); + var image = new Image(); + image.onload = function () { + // Draw the svg content onto the buffer canvas. + var context = _this.canvasBuffer.getContext("2d"); + context.clearRect(0, 0, _this.canvasBuffer.width, _this.canvasBuffer.height); + context.drawImage(image, 0, 0, _this.minimapSize.width, _this.minimapSize.height); + requestAnimationFrame(function () { + // Hide the old canvas and show the new buffer canvas. + d3.select(_this.canvasBuffer).style("display", null); + d3.select(_this.canvas).style("display", "none"); + // Swap the two canvases. + _a = [_this.canvasBuffer, _this.canvas], _this.canvas = _a[0], _this.canvasBuffer = _a[1]; + var _a; + }); + }; + image.src = "data:image/svg+xml;base64," + btoa(svgXml); + }; + /** + * Handles changes in zooming/panning. Should be called from the main svg + * to notify that a zoom/pan was performed and this minimap will update it's + * viewpoint rectangle. + * + * @param translate The translate vector, or none to use the last used one. + * @param scale The scaling factor, or none to use the last used one. + */ + Minimap.prototype.zoom = function (translate, scale) { + // Update the new translate and scale params, only if specified. + this.translate = translate || this.translate; + this.scaleMain = scale || this.scaleMain; + // Update the location of the viewpoint rectangle. + var svgRect = this.svg.getBoundingClientRect(); + var $viewpoint = d3.select(this.viewpoint); + this.viewpointCoord.x = -this.translate[0] * this.scaleMinimap / + this.scaleMain; + this.viewpointCoord.y = -this.translate[1] * this.scaleMinimap / + this.scaleMain; + var viewpointWidth = svgRect.width * this.scaleMinimap / this.scaleMain; + var viewpointHeight = svgRect.height * this.scaleMinimap / this.scaleMain; + $viewpoint.attr({ + x: this.viewpointCoord.x, + y: this.viewpointCoord.y, + width: viewpointWidth, + height: viewpointHeight + }); + // Show/hide the minimap depending on the viewpoint area as fraction of the + // whole minimap. + var mapWidth = this.minimapSize.width; + var mapHeight = this.minimapSize.height; + var x = this.viewpointCoord.x; + var y = this.viewpointCoord.y; + var w = Math.min(Math.max(0, x + viewpointWidth), mapWidth) - + Math.min(Math.max(0, x), mapWidth); + var h = Math.min(Math.max(0, y + viewpointHeight), mapHeight) - + Math.min(Math.max(0, y), mapHeight); + var fracIntersect = (w * h) / (mapWidth * mapHeight); + if (fracIntersect < FRAC_VIEWPOINT_AREA) { + this.minimap.classList.remove("hidden"); + } + else { + this.minimap.classList.add("hidden"); + } + }; + return Minimap; + })(); + scene.Minimap = Minimap; + })(scene = tf.scene || (tf.scene = {})); +})(tf || (tf = {})); // close module tf.scene +</script> +<script>/// <reference path="graph.ts" /> +/// <reference path="render.ts" /> +var tf; +(function (tf) { + var graph; + (function (graph_1) { + var layout; + (function (layout) { + /** Set of parameters that define the look and feel of the graph. */ + layout.PARAMS = { + animation: { + /** Default duration for graph animations in ms. */ + duration: 250 + }, + graph: { + /** Graph parameter for metanode. */ + meta: { + /** + * Dagre's nodesep param - number of pixels that + * separate nodes horizontally in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + nodeSep: 110, + /** + * Dagre's ranksep param - number of pixels + * between each rank in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + rankSep: 25 + }, + /** Graph parameter for metanode. */ + series: { + /** + * Dagre's nodesep param - number of pixels that + * separate nodes horizontally in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + nodeSep: 90, + /** + * Dagre's ranksep param - number of pixels + * between each rank in the layout. + * + * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout + */ + rankSep: 25, + }, + /** + * Padding is used to correctly position the graph SVG inside of its parent + * element. The padding amounts are applied using an SVG transform of X and + * Y coordinates. + */ + padding: { + paddingTop: 40, + paddingLeft: 20 + } + }, + subscene: { + meta: { + paddingTop: 10, + paddingBottom: 10, + paddingLeft: 10, + paddingRight: 10, + /** + * Used to leave room for the label on top of the highest node in + * the core graph. + */ + labelHeight: 20, + /** X-space between each extracted node and the core graph. */ + extractXOffset: 50, + /** Y-space between each extracted node. */ + extractYOffset: 20 + }, + series: { + paddingTop: 10, + paddingBottom: 10, + paddingLeft: 10, + paddingRight: 10, + labelHeight: 10 + } + }, + nodeSize: { + /** Size of meta nodes. */ + meta: { + radius: 5, + width: 60, + /** A scale for the node's height based on number of nodes inside */ + height: d3.scale.linear().domain([1, 200]).range([15, 60]).clamp(true), + /** The radius of the circle denoting the expand button. */ + expandButtonRadius: 3 + }, + /** Size of op nodes. */ + op: { + width: 15, + height: 6, + radius: 3, + labelOffset: -8 + }, + /** Size of series nodes. */ + series: { + expanded: { + // For expanded series nodes, width and height will be + // computed to account for the subscene. + radius: 10, + labelOffset: 0, + }, + vertical: { + // When unexpanded, series whose underlying metagraphs contain + // one or more non-control edges will show as a vertical stack + // of ellipses. + width: 16, + height: 13, + labelOffset: -13, + }, + horizontal: { + // When unexpanded, series whose underlying metagraphs contain + // no non-control edges will show as a horizontal stack of + // ellipses. + width: 24, + height: 8, + radius: 10, + labelOffset: -10, + }, + }, + /** Size of bridge nodes. */ + bridge: { + // NOTE: bridge nodes will normally be invisible, but they must + // take up some space so that the layout step leaves room for + // their edges. + width: 20, + height: 20, + radius: 2, + labelOffset: 0 + } + }, + shortcutSize: { + /** Size of shortcuts for op nodes */ + op: { + width: 10, + height: 4 + }, + /** Size of shortcuts for meta nodes */ + meta: { + width: 12, + height: 4, + radius: 1 + }, + /** Size of shortcuts for series nodes */ + series: { + width: 14, + height: 4, + } + }, + annotations: { + /** X-space between the shape and each annotation-node. */ + xOffset: 10, + /** Y-space between each annotation-node. */ + yOffset: 3, + /** X-space between each annotation-node and its label. */ + labelOffset: 2, + /** Estimate max width for annotation label */ + labelWidth: 35 + }, + constant: { + size: { + width: 4, + height: 4 + } + }, + series: { + /** Maximum number of repeated item for unexpanded series node. */ + maxStackCount: 3, + /** + * Positioning offset ratio for collapsed stack + * of parallel series (series without edges between its members). + */ + parallelStackOffsetRatio: 0.2, + /** + * Positioning offset ratio for collapsed stack + * of tower series (series with edges between its members). + */ + towerStackOffsetRatio: 0.5 + }, + minimap: { + /** The maximum width/height the minimap can have. */ + size: 150 + } + }; + /** Calculate layout for a scene of a group node. */ + function scene(renderNodeInfo) { + // Update layout, size, and annotations of its children nodes and edges. + if (renderNodeInfo.node.isGroupNode) { + layoutChildren(renderNodeInfo); + } + // Update position of its children nodes and edges + if (renderNodeInfo.node.type === graph_1.NodeType.META) { + layoutMetanode(renderNodeInfo); + } + else if (renderNodeInfo.node.type === graph_1.NodeType.SERIES) { + layoutSeriesNode(renderNodeInfo); + } + } + layout.scene = scene; + ; + /** + * Update layout, size, and annotations of its children nodes and edges. + */ + function layoutChildren(renderNodeInfo) { + var children = renderNodeInfo.coreGraph.nodes().map(function (n) { + return renderNodeInfo.coreGraph.node(n); + }).concat(renderNodeInfo.isolatedInExtract, renderNodeInfo.isolatedOutExtract); + _.each(children, function (childNodeInfo) { + // Set size of each child + switch (childNodeInfo.node.type) { + case graph_1.NodeType.OP: + _.extend(childNodeInfo, layout.PARAMS.nodeSize.op); + break; + case graph_1.NodeType.BRIDGE: + _.extend(childNodeInfo, layout.PARAMS.nodeSize.bridge); + break; + case graph_1.NodeType.META: + if (!childNodeInfo.expanded) { + // set fixed width and scalable height based on cardinality + _.extend(childNodeInfo, layout.PARAMS.nodeSize.meta); + childNodeInfo.height = + layout.PARAMS.nodeSize.meta.height(childNodeInfo.node.cardinality); + } + else { + var childGroupNodeInfo = childNodeInfo; + scene(childGroupNodeInfo); // Recursively layout its subscene. + } + break; + case graph_1.NodeType.SERIES: + if (childNodeInfo.expanded) { + _.extend(childNodeInfo, layout.PARAMS.nodeSize.series.expanded); + var childGroupNodeInfo = childNodeInfo; + scene(childGroupNodeInfo); // Recursively layout its subscene. + } + else { + var childGroupNodeInfo = childNodeInfo; + var seriesParams = childGroupNodeInfo.node.hasNonControlEdges ? + layout.PARAMS.nodeSize.series.vertical : + layout.PARAMS.nodeSize.series.horizontal; + _.extend(childNodeInfo, seriesParams); + } + break; + default: + throw Error("Unrecognized node type: " + childNodeInfo.node.type); + } + // Layout each child's annotations + layoutAnnotation(childNodeInfo); + }); + } + /** + * Calculate layout for a graph using dagre + * @param graph the graph to be laid out + * @param params layout parameters + * @return width and height of the core graph + */ + function dagreLayout(graph, params) { + _.extend(graph.graph(), { + nodeSep: params.nodeSep, + rankSep: params.rankSep + }); + var bridgeNodeNames = []; + var nonBridgeNodeNames = []; + // Split out nodes into bridge and non-bridge nodes, and calculate the total + // width we should use for bridge nodes. + _.each(graph.nodes(), function (nodeName) { + var nodeInfo = graph.node(nodeName); + if (nodeInfo.node.type === graph_1.NodeType.BRIDGE) { + bridgeNodeNames.push(nodeName); + } + else { + nonBridgeNodeNames.push(nodeName); + } + }); + // If there are no non-bridge nodes, then the graph has zero size. + if (!nonBridgeNodeNames.length) { + return { + width: 0, + height: 0, + }; + } + dagre.layout(graph); + var graphLabel = graph.graph(); + // Calculate the true bounding box of the graph by iterating over nodes and + // edges rather than accepting dagre's word for it. In particular, we should + // ignore the extra-wide bridge nodes and bridge edges, and allow for + // annotation boxes and labels. + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + _.each(nonBridgeNodeNames, function (nodeName) { + var nodeInfo = graph.node(nodeName); + var w = 0.5 * nodeInfo.width; + var x1 = nodeInfo.x - w - nodeInfo.inboxWidth; + var x2 = nodeInfo.x + w + nodeInfo.outboxWidth; + minX = x1 < minX ? x1 : minX; + maxX = x2 > maxX ? x2 : maxX; + var labelLength = nodeName.length - nodeName.lastIndexOf(graph_1.NAMESPACE_DELIM); + // TODO(jimbo): Account for font width rather than using a magic number. + var charWidth = 3; // 3 pixels per character. + var lw = 0.5 * labelLength * charWidth; + var lx1 = nodeInfo.x - lw; + var lx2 = nodeInfo.x + lw; + minX = lx1 < minX ? lx1 : minX; + maxX = lx2 > maxX ? lx2 : maxX; + // TODO(jimbo): Account for the height of labels above op nodes here. + var h = 0.5 * nodeInfo.outerHeight; + var y1 = nodeInfo.y - h; + var y2 = nodeInfo.y + h; + minY = y1 < minY ? y1 : minY; + maxY = y2 > maxY ? y2 : maxY; + }); + _.each(graph.edges(), function (edgeObj) { + var renderMetaedgeInfo = graph.edge(edgeObj); + if (renderMetaedgeInfo.structural) { + return; // Skip structural edges from min/max calculations. + } + _.each(renderMetaedgeInfo.points, function (point) { + minX = point.x < minX ? point.x : minX; + maxX = point.x > maxX ? point.x : maxX; + minY = point.y < minY ? point.y : minY; + maxY = point.y > maxY ? point.y : maxY; + }); + }); + // Shift all nodes and edge points to account for the left-padding amount, + // and the invisble bridge nodes. + _.each(graph.nodes(), function (nodeName) { + var nodeInfo = graph.node(nodeName); + nodeInfo.x -= minX; + nodeInfo.y -= minY; + }); + _.each(graph.edges(), function (edgeObj) { + _.each(graph.edge(edgeObj).points, function (point) { + point.x -= minX; + point.y -= minY; + }); + }); + return { + width: maxX - minX, + height: maxY - minY, + }; + } + /** Layout a metanode. */ + function layoutMetanode(renderNodeInfo) { + // First, copy params specific to meta nodes onto this render info object. + var params = layout.PARAMS.subscene.meta; + renderNodeInfo = _.extend(renderNodeInfo, params); + // Invoke dagre.layout() on the core graph and record the bounding box + // dimensions. + _.extend(renderNodeInfo.coreBox, dagreLayout(renderNodeInfo.coreGraph, layout.PARAMS.graph.meta)); + // Calculate the position of nodes in isolatedInExtract relative to the + // top-left corner of inExtractBox (the bounding box for all inExtract nodes) + // and calculate the size of the inExtractBox. + var hasInExtract = renderNodeInfo.isolatedInExtract.length > 0; + renderNodeInfo.inExtractBox.width = hasInExtract ? + _(renderNodeInfo.isolatedInExtract).pluck("outerWidth").max() : 0; + renderNodeInfo.inExtractBox.height = + _.reduce(renderNodeInfo.isolatedInExtract, function (height, child, i) { + var yOffset = i > 0 ? params.extractYOffset : 0; + // use outerWidth/Height here to avoid overlaps between extracts + child.x = renderNodeInfo.inExtractBox.width / 2; + child.y = height + yOffset + child.outerHeight / 2; + return height + yOffset + child.outerHeight; + }, 0); + // Calculate the position of nodes in isolatedOutExtract relative to the + // top-left corner of outExtractBox (the bounding box for all outExtract + // nodes) and calculate the size of the outExtractBox. + var hasOutExtract = renderNodeInfo.isolatedOutExtract.length > 0; + renderNodeInfo.outExtractBox.width = hasOutExtract ? + _(renderNodeInfo.isolatedOutExtract).pluck("outerWidth").max() : 0; + renderNodeInfo.outExtractBox.height = + _.reduce(renderNodeInfo.isolatedOutExtract, function (height, child, i) { + var yOffset = i > 0 ? params.extractYOffset : 0; + // use outerWidth/Height here to avoid overlaps between extracts + child.x = renderNodeInfo.outExtractBox.width / 2; + child.y = height + yOffset + child.outerHeight / 2; + return height + yOffset + child.outerHeight; + }, 0); + // Determine the whole metanode's width (from left to right). + renderNodeInfo.width = + params.paddingLeft + renderNodeInfo.coreBox.width + params.paddingRight + + (hasInExtract ? + renderNodeInfo.inExtractBox.width + params.extractXOffset : 0) + + (hasOutExtract ? + params.extractXOffset + renderNodeInfo.outExtractBox.width : 0); + // TODO(jimbo): Remove labelHeight and instead incorporate into box sizes. + // Determine the whole metanode's height (from top to bottom). + renderNodeInfo.height = + renderNodeInfo.labelHeight + + params.paddingTop + + Math.max(renderNodeInfo.inExtractBox.height, renderNodeInfo.coreBox.height, renderNodeInfo.outExtractBox.height) + + params.paddingBottom; + } + /** + * Calculate layout for series node's core graph. Only called for an expanded + * series. + */ + function layoutSeriesNode(node) { + var graph = node.coreGraph; + var params = layout.PARAMS.subscene.series; + _.extend(node, params); + // Layout the core. + _.extend(node.coreBox, dagreLayout(node.coreGraph, layout.PARAMS.graph.series)); + _.each(graph.nodes(), function (nodeName) { + graph.node(nodeName).excluded = false; + }); + // Series do not have in/outExtractBox so no need to include them here. + node.width = node.coreBox.width + params.paddingLeft + params.paddingRight; + node.height = node.coreBox.height + params.paddingTop + params.paddingBottom; + } + /** + * Calculate layout for annotations of a given node. + * This will modify positions of the the given node and its annotations. + * + * @see tf.graph.render.Node and tf.graph.render.Annotation + * for description of each property of each render node. + * + */ + function layoutAnnotation(renderNodeInfo) { + // If the render node is an expanded metanode, then its annotations will not + // be visible and we should skip the annotation calculations. + if (renderNodeInfo.expanded) { + _.extend(renderNodeInfo, { + inboxWidth: 0, + inboxHeight: 0, + outboxWidth: 0, + outboxHeight: 0, + outerWidth: renderNodeInfo.width, + outerHeight: renderNodeInfo.height + }); + return; + } + var inAnnotations = renderNodeInfo.inAnnotations.list; + var outAnnotations = renderNodeInfo.outAnnotations.list; + // Calculate size for in-annotations + _.each(inAnnotations, function (a) { return sizeAnnotation(a); }); + // Calculate size for out-annotations + _.each(outAnnotations, function (a) { return sizeAnnotation(a); }); + var params = layout.PARAMS.annotations; + renderNodeInfo.inboxWidth = + inAnnotations.length > 0 ? + _(inAnnotations).pluck("width").max() + + params.xOffset + params.labelWidth + params.labelOffset : + 0; + renderNodeInfo.outboxWidth = + outAnnotations.length > 0 ? + _(outAnnotations).pluck("width").max() + + params.xOffset + params.labelWidth + params.labelOffset : + 0; + // Calculate annotation node position (a.dx, a.dy) + // and total height for in-annotations + // After this chunk of code: + // inboxHeight = sum of annotation heights+ (annotation.length - 1 * yOffset) + var inboxHeight = _.reduce(inAnnotations, function (height, a, i) { + var yOffset = i > 0 ? params.yOffset : 0; + a.dx = -(renderNodeInfo.width + a.width) / 2 - params.xOffset; + a.dy = height + yOffset + a.height / 2; + return height + yOffset + a.height; + }, 0); + _.each(inAnnotations, function (a) { + a.dy -= inboxHeight / 2; + a.labelOffset = params.labelOffset; + }); + // Calculate annotation node position position (a.dx, a.dy) + // and total height for out-annotations + // After this chunk of code: + // outboxHeight = sum of annotation heights + + // (annotation.length - 1 * yOffset) + var outboxHeight = _.reduce(outAnnotations, function (height, a, i) { + var yOffset = i > 0 ? params.yOffset : 0; + a.dx = (renderNodeInfo.width + a.width) / 2 + params.xOffset; + a.dy = height + yOffset + a.height / 2; + return height + yOffset + a.height; + }, 0); + _.each(outAnnotations, function (a) { + // adjust by (half of ) the total height + // so dy is relative to the host node's center. + a.dy -= outboxHeight / 2; + a.labelOffset = params.labelOffset; + }); + // Creating scales for touch point between the in-annotation edges + // and their hosts. + var inTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, inboxHeight / 2); + inTouchHeight = inTouchHeight < 0 ? 0 : inTouchHeight; + var inY = d3.scale.linear() + .domain([0, inAnnotations.length - 1]) + .range([-inTouchHeight, inTouchHeight]); + // Calculate annotation edge position + _.each(inAnnotations, function (a, i) { + a.points = [ + // The annotation node end + { + dx: a.dx + a.width / 2, + dy: a.dy + }, + // The host node end + { + dx: -renderNodeInfo.width / 2, + // only use scale if there are more than one, + // otherwise center it vertically + dy: inAnnotations.length > 1 ? inY(i) : 0 + } + ]; + }); + // Creating scales for touch point between the out-annotation edges + // and their hosts. + var outTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, outboxHeight / 2); + outTouchHeight = outTouchHeight < 0 ? 0 : outTouchHeight; + var outY = d3.scale.linear() + .domain([0, outAnnotations.length - 1]) + .range([-outTouchHeight, outTouchHeight]); + _.each(outAnnotations, function (a, i) { + // Add point from the border of the annotation node + a.points = [ + // The host node end + { + dx: renderNodeInfo.width / 2, + // only use scale if there are more than one, + // otherwise center it vertically + dy: outAnnotations.length > 1 ? outY(i) : 0 + }, + // The annotation node end + { + dx: a.dx - a.width / 2, + dy: a.dy + } + ]; + }); + renderNodeInfo.outerWidth = renderNodeInfo.width + renderNodeInfo.inboxWidth + + renderNodeInfo.outboxWidth; + renderNodeInfo.outerHeight = + Math.max(renderNodeInfo.height, inboxHeight, outboxHeight); + } + /** + * Set size of an annotation node. + */ + function sizeAnnotation(a) { + switch (a.annotationType) { + case graph_1.render.AnnotationType.CONSTANT: + _.extend(a, layout.PARAMS.constant.size); + break; + case graph_1.render.AnnotationType.SHORTCUT: + if (a.node.type === graph_1.NodeType.OP) { + _.extend(a, layout.PARAMS.shortcutSize.op); + } + else if (a.node.type === graph_1.NodeType.META) { + _.extend(a, layout.PARAMS.shortcutSize.meta); + } + else if (a.node.type === graph_1.NodeType.SERIES) { + _.extend(a, layout.PARAMS.shortcutSize.series); + } + else { + throw Error("Invalid node type: " + a.node.type); + } + break; + case graph_1.render.AnnotationType.SUMMARY: + _.extend(a, layout.PARAMS.constant.size); + break; + } + } + })(layout = graph_1.layout || (graph_1.layout = {})); + })(graph = tf.graph || (tf.graph = {})); +})(tf || (tf = {})); // close module +</script> + + + + + + + +</head><body><div hidden="" by-vulcanize=""><dom-module id="tf-data-coordinator" assetpath="../components/tf-event-dashboard/"> + <script>/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> +var TF; +(function (TF) { + /* The DataCoordinator generates TF.Datasets for each run/tag combination, + * and is responsible for communicating with the backend to load data into them. + * A key fact about this design is that when Datasets modify their data, they + * automatically notify all dependent Plottable charts. + */ + var DataCoordinator = (function () { + function DataCoordinator(urlGenerator, runToTag) { + this.datasets = {}; + this.urlGenerator = urlGenerator; + this.runToTag = runToTag; + } + /* Create or return an array of Datasets for the given + * tag and runs. It filters which runs it uses by checking + * that data exists for each tag-run combination. + * Calling this triggers a load on the dataset. + */ + DataCoordinator.prototype.getDatasets = function (tag, runs) { + var _this = this; + var usableRuns = runs.filter(function (r) { + var tags = _this.runToTag[r]; + return tags.indexOf(tag) !== -1; + }); + return usableRuns.map(function (r) { return _this.getDataset(tag, r); }); + }; + /* Create or return a Dataset for given tag and run. + * Calling this triggers a load on the dataset. + */ + DataCoordinator.prototype.getDataset = function (tag, run) { + var dataset = this._getDataset(tag, run); + dataset.load(); + return dataset; + }; + DataCoordinator.prototype._getDataset = function (tag, run) { + var key = [tag, run].toString(); + var dataset; + if (this.datasets[key] != null) { + dataset = this.datasets[key]; + } + else { + dataset = new TF.Dataset(tag, run, this.urlGenerator); + this.datasets[key] = dataset; + } + return dataset; + }; + return DataCoordinator; + })(); + TF.DataCoordinator = DataCoordinator; +})(TF || (TF = {})); +</script> + <script>/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TF; +(function (TF) { + /* An extension of Plottable.Dataset that knows how to load data from a backend. + */ + var Dataset = (function (_super) { + __extends(Dataset, _super); + function Dataset(tag, run, urlGenerator) { + _super.call(this, [], { tag: tag, run: run }); + this.load = _.debounce(this._load, 10); + this.tag = tag; + this.run = run; + this.urlGenerator = urlGenerator; + } + Dataset.prototype._load = function () { + var _this = this; + var url = this.urlGenerator(this.tag, this.run); + if (this.lastRequest != null) { + this.lastRequest.abort(); + } + this.lastRequest = d3.json(url, function (error, json) { + _this.lastRequest = null; + if (error) { + /* tslint:disable */ + console.log(error); + /* tslint:enable */ + throw new Error("Failure loading JSON at url: \"" + url + "\""); + } + else { + _this.data(json); + } + }); + }; + return Dataset; + })(Plottable.Dataset); + TF.Dataset = Dataset; +})(TF || (TF = {})); +</script> + <script> + Polymer({ + is: "tf-data-coordinator", + properties: { + urlGenerator: Object, + outDataCoordinator: { + type: Object, + computed: "getCoordinator(urlGenerator, runToTag)", + notify: true, + }, + }, + getCoordinator: function(generator, runToTag) { + return new TF.DataCoordinator(generator, runToTag); + } + }); + </script> +</dom-module> +<dom-module id="tf-tooltip-coordinator" assetpath="../components/tf-event-dashboard/"> + <script> + Polymer({ + is: "tf-tooltip-coordinator", + properties: { + outTooltipUpdater: { + type: Function, + value: function() { + return (function(tooltipMap, xValue, closestRun) { + this._setOutTooltipMap(tooltipMap); + this._setOutXValue(xValue); + this._setOutClosestRun(closestRun); + }).bind(this); + }, + notify: true, + readOnly: true, + }, + outTooltipMap: { + // a {runName: tooltipValue} map, where runName and tooltipValue are strings. + type: Object, + notify: true, + readOnly: true, + }, + outXValue: { + // a string representation of the closest x value for the tooltips + type: Number, + notify: true, + readOnly: true, + }, + outClosestRun: { + // the name of the run that is closest to the user cursor (if any) + type: String, + notify: true, + readOnly: true, + }, + }, + }); + </script> +</dom-module> +<dom-module id="scrollbar-style" assetpath="../components/tf-dashboard-common/"> + <template> + <style> + .scrollbar::-webkit-scrollbar-track + { + visibility: hidden; + } + + .scrollbar::-webkit-scrollbar + { + width: 10px; + } + + .scrollbar::-webkit-scrollbar-thumb + { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,.3); + background-color: var(--paper-grey-500); + color: var(--paper-grey-900); + } + .scrollbar { + box-sizing: border-box; + } + </style> + </template> +</dom-module> +<dom-module id="run-color-style" assetpath="../components/tf-dashboard-common/"> + <template> + <style> + [color-class="light-blue"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-light-blue-500); + --paper-checkbox-checked-ink-color: var(--paper-light-blue-500); + --paper-checkbox-unchecked-color: var(--paper-light-blue-900); + --paper-checkbox-unchecked-ink-color: var(--paper-light-blue-900); + } + [color-class="red"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-red-500); + --paper-checkbox-checked-ink-color: var(--paper-red-500); + --paper-checkbox-unchecked-color: var(--paper-red-900); + --paper-checkbox-unchecked-ink-color: var(--paper-red-900); + } + [color-class="green"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-green-500); + --paper-checkbox-checked-ink-color: var(--paper-green-500); + --paper-checkbox-unchecked-color: var(--paper-green-900); + --paper-checkbox-unchecked-ink-color: var(--paper-green-900); + } + [color-class="purple"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-purple-500); + --paper-checkbox-checked-ink-color: var(--paper-purple-500); + --paper-checkbox-unchecked-color: var(--paper-purple-900); + --paper-checkbox-unchecked-ink-color: var(--paper-purple-900); + } + [color-class="teal"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-teal-500); + --paper-checkbox-checked-ink-color: var(--paper-teal-500); + --paper-checkbox-unchecked-color: var(--paper-teal-900); + --paper-checkbox-unchecked-ink-color: var(--paper-teal-900); + } + [color-class="pink"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-pink-500); + --paper-checkbox-checked-ink-color: var(--paper-pink-500); + --paper-checkbox-unchecked-color: var(--paper-pink-900); + --paper-checkbox-unchecked-ink-color: var(--paper-pink-900); + } + [color-class="orange"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-orange-500); + --paper-checkbox-checked-ink-color: var(--paper-orange-500); + --paper-checkbox-unchecked-color: var(--paper-orange-900); + --paper-checkbox-unchecked-ink-color: var(--paper-orange-900); + } + [color-class="brown"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-brown-500); + --paper-checkbox-checked-ink-color: var(--paper-brown-500); + --paper-checkbox-unchecked-color: var(--paper-brown-900); + --paper-checkbox-unchecked-ink-color: var(--paper-brown-900); + } + [color-class="indigo"] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-indigo-500); + --paper-checkbox-checked-ink-color: var(--paper-indigo-500); + --paper-checkbox-unchecked-color: var(--paper-indigo-900); + --paper-checkbox-unchecked-ink-color: var(--paper-indigo-900); + } + </style> + </template> +</dom-module> +<dom-module id="tf-multi-checkbox" assetpath="../components/tf-multi-checkbox/"> + <style include="scrollbar-style"></style> + <style include="run-color-style"></style> + + <template> + <div id="outer-container" class="scrollbar"> + <template is="dom-repeat" items="[[names]]" sort="[[_tooltipComparator(tooltips, tooltipOrderer)]]"> + <div class="run-row" color-class$="[[_applyColorClass(item, classScale)]]" null-tooltip$="[[_isNullTooltip(item, tooltips)]]" highlight$="[[_isHighlighted(item, highlights.*)]]"> + <div class="checkbox-container vertical-align-container"> + <paper-checkbox class="checkbox vertical-align-center" name="[[item]]" checked$="[[_isChecked(item,outSelected.*)]]" on-change="_checkboxChange"></paper-checkbox> + </div> + <div class="item-label-container"> + <span>[[item]]</span> + </div> + <div class="tooltip-value-container vertical-align-container"> + <span class="vertical-align-top">[[_lookupTooltip(item,tooltips)]]</span> + </div> + </div> + </template> + </div> + <style> + :host { + display: flex; + flex-direction: column; + height: 100%; + } + #outer-container { + overflow-y: scroll; + overflow-x: hidden; + width: 100%; + flex-grow: 1; + flex-shrink: 1; + word-wrap: break-word; + } + .run-row { + padding-top: 5px; + padding-bottom: 5px; + display: flex; + flex-direction: row; + font-size: 13px; + } + .checkbox-container { + flex-grow: 0; + flex-shrink: 0; + } + .checkbox { + padding-left: 2px; + width: 32px; + } + .item-label-container { + flex-grow: 1; + flex-shrink: 1; + width: 0px; /* hack to get the flex-grow to work properly */ + } + .tooltip-value-container { + display: flex; + justify-content: center; + flex-grow: 0; + flex-shrink: 0; + text-align:right; + padding-left: 2px; + } + .vertical-align-container { + display: flex; + justify-content: center; + } + .vertical-align-container .vertical-align-center { + align-self: center; + } + .vertical-align-container .vertical-align-top { + align-self: start; + } + [null-tooltip] { + display: none; + } + [highlight] { + font-weight: bold; + } + </style> + </template> + + <script> + Polymer({ + is: "tf-multi-checkbox", + properties: { + names: Array, + tooltipOrderer: { + /* Used to compute how to order the tooltips based on the tooltip value. + * By default, it parses the tooltip strings as numbers. + * If set to a falsey value, tooltips are always ordered lexicographically. + */ + type: Function, + value: function() { + return function(x) {return +x;} + }, + }, + tooltips: Object, + highlights: Array, + outSelected: { + type: Array, + notify: true, + value: function() { + return []; + }, + }, + hideMissingTooltips: { + // If we have tooltips, but some names are missing, do we hide them? + type: Boolean, + value: true, + }, + classScale: Function, // map from run name to css class + }, + observers: [ + "_initializeOutSelected(names.*)", + ], + _lookupTooltip: function(item, tooltips) { + return tooltips != null ? tooltips[item] : null; + }, + _isNullTooltip: function(item, tooltips) { + if (!this.hideMissingTooltips) { + return true; + } + if (tooltips == null) { + return false; + } + return tooltips[item] == null; + }, + _initializeOutSelected: function(change) { + this.outSelected = change.base.slice(); + }, + _tooltipComparator: function(tooltips, tooltipOrderer) { + return function(a, b) { + if (!tooltips || !tooltipOrderer) { + // if we're missing tooltips or orderer, do lexicogrpahic sort + return a.localeCompare(b); + } + function getValue(x) { + var value = tooltipOrderer(tooltips[x]); + return value == null || _.isNaN(value) ? -Infinity : value; + } + var aValue = getValue(a); + var bValue = getValue(b); + return aValue === bValue ? a.localeCompare(b) : bValue - aValue; + } + }, + _checkboxChange: function(e) { + var name = e.srcElement.name; + var idx = this.outSelected.indexOf(name); + var checked = e.srcElement.checked; + if (checked && idx === -1) { + this.push("outSelected", name); + } else if (!checked && idx !== -1) { + this.splice("outSelected", idx, 1); + } + }, + _isChecked: function(item, outSelectedChange) { + var outSelected = outSelectedChange.base; + return outSelected.indexOf(item) !== -1; + }, + _initializeRuns: function(change) { + this.outSelected = change.base.slice(); + }, + _applyColorClass: function(item, classScale) { + // TODO: Update style just on the element that changes + // and apply at microtask timing + this.debounce("restyle", function (){ + this.updateStyles(); + }, 16); + return classScale(item); + }, + _isHighlighted: function(item, highlights) { + return highlights.base.indexOf(item) !== -1; + }, + }); + </script> + +</dom-module> +<dom-module id="tf-run-selector" assetpath="../components/tf-event-dashboard/"> + <template> + <div id="top-text"> + <template is="dom-if" if="[[xValue]]"> + <div class="x-tooltip tooltip-container"> + <div class="x-tooltip-label">[[xType]]</div> + <div class="x-tooltip-value">[[xValue]]</div> + </div> + </template> + <template is="dom-if" if="[[!xValue]]"> + <div id="tooltip-help" class="tooltip-container"> + Selected Runs: + </div> + </template> + </div> + <tf-multi-checkbox names="[[runs]]" tooltips="[[tooltips]]" highlights="[[_arrayify(closestRun)]]" out-selected="{{outSelected}}" class-scale="[[classScale]]" hide-missing-tooltips=""></tf-multi-checkbox> + <style> + :host { + display: flex; + flex-direction: column; + padding-bottom: 10px; + box-sizing: border-box; + } + #top-text { + width: 100%; + flex-grow: 0; + flex-shrink: 0; + padding-left: 35px; + padding-right: 16px; + padding-bottom: 6px; + box-sizing: border-box; + color: var(--paper-grey-800); + } + tf-multi-checkbox { + display: flex; + flex-grow: 1; + flex-shrink: 1; + height: 0px; /* hackhack So the flex-grow takes over and gives it space */ + } + .x-tooltip { + display: flex; + flex-direction: row; + } + .x-tooltip-label { + flex-grow: 1; + align-self: flex-start; + } + .x-tooltip-value { + align-self: flex-end; + } + </style> + </template> + <script> + Polymer({ + is: "tf-run-selector", + properties: { + outSelected: {type: Array, notify: true}, + // runs: an array of strings, representing the run names that may be chosen + runs: Array, + tooltips: {type: Object, value: null}, // {[run: string]: string} + xValue: {type: String, value: null}, // the string representing run's x val + xType: String, // string: relative, stpe, wall_time + classScale: Object, // map from run name to color class (css) + closestRun: {type: String, value: null}, // which run has a value closest to mouse coordinate + }, + _arrayify: function(item) { + return [item]; + }, + }); + </script> +</dom-module> +<dom-module id="tf-x-type-selector" assetpath="../components/tf-event-dashboard/"> + <template> + <div id="buttons"> + <p>X Type: </p> + <paper-button class="x-button selected" id="step" on-tap="_select" raised=""> + step + </paper-button> + <paper-button class="x-button" id="relative" on-tap="_select"> + relative + </paper-button> + <paper-button class="x-button" id="wall_time" on-tap="_select"> + wall + </paper-button> + </div> + <style> + .x-button { + width: 29%; + font-size: 14px; + background-color: var(--paper-grey-500); + margin-top: 5px; + color: white; + } + + .x-button.selected { + font-weight: bold; + background-color: var(--tb-orange-strong) !important; + } + + #buttons p { + text-align: center; + font-size: 12px; + margin: 0; + } + </style> + </template> + <script> + Polymer({ + is: "tf-x-type-selector", + properties: { + outXType: {type: String, notify: true, readOnly: true, value: "step"}, + }, + _select: function(e) { + var _this = this; + ["step", "wall_time", "relative"].forEach(function(id) { + _this.$[id].raised = false; + _this.$[id].classList.remove("selected"); + }); + e.currentTarget.raised = true; + this._setOutXType(e.currentTarget.id); + e.currentTarget.classList.add("selected"); + }, + }); + </script> +</dom-module> +<dom-module id="tf-run-generator" assetpath="../components/tf-dashboard-common/"> + <template> + <iron-ajax id="ajax" auto="" url="[[url]]" handle-as="json" debounce="300" on-response="_setResponse" verbose="true"> + </iron-ajax> + </template> + <script> + Polymer({ + is: "tf-run-generator", + properties: { + url: String, + _runToTag: { + type: Object, + readOnly: true, + }, + outRunToScalars: { + // {[runName: string]: string[]} + // the names of scalar tags. + type: Object, + computed: "_scalars(_runToTag.*)", + notify: true, + }, + outRunToHistograms: { + // {[runName: string]: string[]} + // the names of histogram tags. + type: Object, + computed: "_histograms(_runToTag.*)", + notify: true, + }, + outRunToCompressedHistograms: { + // {[runName: string]: string[]} + // the names of histogram tags. + type: Object, + computed: "_compressedHistograms(_runToTag.*)", + notify: true, + }, + outRunToImages: { + // {[runName: string]: string[]} + // the names of image tags. + type: Object, + computed: "_images(_runToTag.*)", + notify: true, + }, + outRunsWithGraph: { + // ["run1", "run2", ...] + // array of run names that have an associated graph definition. + type: Array, + computed: "_graphs(_runToTag.*)", + notify: true + } + }, + _scalars: function(_runToTag) { + return _.mapValues(_runToTag.base, "scalars"); + }, + _histograms: function(_runToTag) { + return _.mapValues(_runToTag.base, "histograms"); + }, + _compressedHistograms: function(_runToTag) { + return _.mapValues(_runToTag.base, "compressedHistograms"); + }, + _images: function(_runToTag) { + return _.mapValues(_runToTag.base, "images"); + }, + _graphs: function(_runToTag) { + var runsWithGraph = []; + _.each(_runToTag.base, function(runInfo, runName) { + if (runInfo.graph === true) { + runsWithGraph.push(runName); + } + }); + return runsWithGraph; + }, + _setResponse: function(event) { + this._set_runToTag(event.detail.response); + } + }); + </script> +</dom-module> +<dom-module id="tf-color-scale" assetpath="../components/tf-event-dashboard/"> + <script> + (function() { + // TODO(danmane) - get Plottable team to make an API point for this + Plottable.Scales.Color._LOOP_LIGHTEN_FACTOR = 0; + var classColorPairs = [ + ["light-blue", "#03A9F4"], + ["red" , "#f44366"], + ["green" , "#4CAF50"], + ["purple" , "#9c27b0"], + ["teal" , "#009688"], + ["pink" , "#e91e63"], + ["orange" , "#ff9800"], + ["brown" , "#795548"], + ["indigo" , "#3f51b5"], + ]; + var classes = _.pluck(classColorPairs, 0); + var colors = _.pluck(classColorPairs, 1); + Polymer({ + is: "tf-color-scale", + properties: { + runs: Array, + outClassScale: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return new d3.scale.ordinal().range(classes); + }, + // TODO(danmane): the class scale will not update if the domain changes. + // this behavior is inconsistent with the ColorScale. + // in practice we don't change runs after initial load so it's not currently an issue + }, + outColorScale: { + type: Object, + notify: true, + readOnly: true, + value: function() { + var scale = new Plottable.Scales.Color().range(colors); + scale.onUpdate(this._notifyColorScaleDomainChange.bind(this)); + return scale; + }, + }, + }, + observers: ["_changeRuns(runs.*)"], + _changeRuns: function(runs) { + this.outClassScale.domain(this.runs); + this.outColorScale.domain(this.runs); + }, + _notifyColorScaleDomainChange: function() { + this.notifyPath("outColorScale.domain_path", this.outColorScale.domain()); + this.outColorScale.domain_path = null; + }, + }); + })(); + </script> +</dom-module> +<dom-module id="tf-url-generator" assetpath="../components/tf-dashboard-common/"> + <script>/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> +var TF; +(function (TF) { + var Urls; + (function (Urls) { + Urls.routes = ["runs", "scalars", "histograms", + "compressedHistograms", "images", + "individualImage", "graph"]; + function router(route) { + return function (tag, run) { + return "/" + route + "?tag=" + encodeURIComponent(tag) + + "&run=" + encodeURIComponent(run); + }; + } + function runsUrl() { + return "/runs"; + } + Urls.runsUrl = runsUrl; + Urls.scalarsUrl = router("scalars"); + Urls.histogramsUrl = router("histograms"); + Urls.compressedHistogramsUrl = router("compressedHistograms"); + Urls.imagesUrl = router("images"); + function individualImageUrl(query) { + return "/individualImage?" + query; + } + Urls.individualImageUrl = individualImageUrl; + function graphUrl(run) { + return "/graph?run=" + encodeURIComponent(run); + } + Urls.graphUrl = graphUrl; + })(Urls = TF.Urls || (TF.Urls = {})); +})(TF || (TF = {})); +</script> + <script> + var polymerObject = { + is: "tf-url-generator", + properties: { + outRunsUrl: { + type: String, + value: function() { + return TF.Urls.runsUrl(); + }, + readOnly: true, + notify: true, + }, + }, + }; + TF.Urls.routes.forEach(function(route) { + /* for each route (other than runs, handled seperately): + * out`RouteName`: { + * type: Function, + * readOnly: true, + * notify: true, + * value: function() { + * return TF.Urls.`routeName`Url; + * } + */ + if (route === "runs") { + return; + } + var urlName = route + "Url"; + var propertyName = Polymer.CaseMap.dashToCamelCase("out-" + urlName + "Generator"); + polymerObject.properties[propertyName] = { + type: Function, + value: function() { + return TF.Urls[urlName]; + }, + notify: true, + readOnly: true, + } + }); + Polymer(polymerObject); + </script> +</dom-module> +<dom-module id="tf-dashboard-layout" assetpath="../components/tf-dashboard-common/"> + <template> + <div id="sidebar"> + <content select=".sidebar"></content> + </div> + + <div id="center" class="scrollbar"> + <content select=".center"></content> + </div> + <style include="scrollbar-style"></style> + <style> + #sidebar { + width: inherit; + height: 100%; + background-color: var(--tb-grey-darker); + background-image: linear-gradient(to right, var(--tb-grey-lighter), var(--tb-grey-lighter)); + overflow: ellipsis; + padding-left: 10px; + padding-right: 10px; + flex-grow: 0; + flex-shrink: 0; + } + + #center { + margin: 0 10px; + height: 100%; + overflow-y: scroll; + padding-right: 12px; + flex-grow: 1; + flex-shrink: 1; + } + :host { + display: flex; + flex-direction: row; + height: 100%; + } + </style> + </template> + <script> + Polymer({ + is: "tf-dashboard-layout", + }); + </script> +</dom-module> +<dom-module id="dashboard-style" assetpath="../components/tf-dashboard-common/"> + <template> + <style> + .card { + height: 200px; + width: 300px; + display: flex; + flex-direction: column; + margin: 5px 5px; + padding: 5px; + border: 1px solid var(--paper-grey-500); + border-radius: 3px; + -webkit-user-select: none; + -moz-user-select: none; + position: relative; + } + + .card .card-title { + flex-grow: 0; + flex-shrink: 0; + margin-bottom: 2px; + font-size: 14px; + font-weight: bold; + text-overflow: ellipsis; + overflow: hidden; + } + + .card .card-content { + flex-grow: 1; + flex-shrink: 1; + display: flex; + } + .card .card-bottom-row { + flex-grow: 0; + flex-shrink: 0; + padding-left: 10px; + padding-right: 10px; + } + + .card.selected { + height: 400px; + width: 100%; + } + + [shift] { + bottom: 20px !important; + } + + .expand-button { + position: absolute; + left: 0px; + bottom: 0px; + color: #2196F3; + display: block; + } + + #content-container{ + display: block; + } + + .sidebar { + display: flex; + flex-direction: column; + height: 100%; + } + + #categorizer { + flex-shrink: 0; + } + + #xTypeSelector { + flex-shrink: 0; + margin: 20px 0; + } + + #runSelector { + flex-shrink: 1; + flex-grow: 1; + } + + #download-option { + padding-left: 55px; + color: var(--paper-grey-700); + font-size: 14px; + } + + #download-option paper-toggle-button { + --paper-toggle-button-checked-button-color: var(--tb-orange-strong); + --paper-toggle-button-checked-bar-color: var(--tb-orange-weak); + + } + </style> + </template> +</dom-module> +<dom-module id="tf-downloader" assetpath="../components/tf-dashboard-common/"> + <template> + <paper-dropdown-menu no-label-float="true" label="run to download" selected-item-label="{{_run}}"> + <paper-menu class="dropdown-content"> + <template is="dom-repeat" items="[[_runs]]"> + <paper-item no-label-float="true">[[item]]</paper-item> + </template> + </paper-menu> + </paper-dropdown-menu> + <a download="[[_csvName(_run)]]" href="[[_csvUrl(_run, urlFn)]]">CSV</a> + <a download="[[_jsonName(_run)]]" href="[[_jsonUrl(_run, urlFn)]]">JSON</a> + <style> + :host { + display: block; + } + paper-dropdown-menu { + width: 220px; + --paper-input-container-label: { + font-size: 10px; + } + --paper-input-container-input: { + font-size: 10px; + } + } + a { + font-size: 10px; + border-radius: 3px; + border: 1px solid #EEE; + } + paper-input { + font-size: 22px; + } + </style> + </template> + <script> + Polymer({ + is: "tf-downloader", + properties: { + _run: String, + _runs: { + type: Array, + computed: "_computeRuns(runToTag.*, selectedRuns.*)", + }, + selectedRuns: Array, + runToTag: Object, + tag: String, + urlFn: Function, + }, + _computeRuns: function(runToTagChange, selectedRunsChange) { + var runToTag = this.runToTag; + var tag = this.tag; + return this.selectedRuns.filter(function(x) { + return runToTag[x].indexOf(tag) !== -1; + }) + }, + _csvUrl: function(_run, urlFn) { + return urlFn(this.tag, _run) + "&format=csv"; + }, + _jsonUrl: function(_run, urlFn) { + return urlFn(this.tag, _run); + }, + _csvName: function(_run) { + return "run_" + _run + ",tag_" + this.tag + ".csv"; + }, + _jsonName: function(_run) { + return "run-" + _run + "-tag-" + this.tag + ".json"; + }, + }); + </script> +</dom-module> +<dom-module id="tf-regex-group" assetpath="../components/tf-regex-group/"> + <template> + <div class="regex-list"> + <template is="dom-repeat" items="{{rawRegexes}}"> + <div class="regex-line"> + <paper-input id="text-input" class="regex-input" label="input new regex" no-label-float="" bind-value="{{item.regex}}" invalid="[[!item.valid]]" on-keyup="moveFocus"></paper-input> + <paper-toggle-button class="active-button" checked="{{item.active}}" disabled="[[!item.valid]]"></paper-toggle-button> + + <paper-icon-button icon="delete" class="delete-button" aria-label="Delete Regex" tabindex="0" on-tap="deleteRegex"></paper-icon-button> + </div> + <style> + .regex-input { + width: 210px; + display: inline-block; + padding-left: 8px; + padding-right: 5px; + } + + .active-button { + --paper-toggle-button-checked-button-color: var(--tb-orange-strong); + --paper-toggle-button-checked-bar-color: var(--tb-orange-weak); + border: none; + } + + .delete-button { + color: var(--paper-pink-900); + width: 24px; + height: 24px; + } + .regex-list { + margin-bottom: 10px; + } + paper-input { + --paper-input-container-focus-color: var(--tb-orange-strong); + } + </style> + </template> + </div> + </template> + <script> + Polymer({ + is: "tf-regex-group", + properties: { + rawRegexes: { + type: Array, + value: function() { + return [{regex: "", active: true, valid: true}]; + } + }, + regexes: {type: Array, computed: "usableRegexes(rawRegexes.*)", notify: true}, + }, + observers: [ + "addNewRegexIfNeeded(rawRegexes.*)", + "checkValidity(rawRegexes.*)", + ], + checkValidity: function(x) { + var match = x.path.match(/rawRegexes\.(\d+)\.regex/); + if (match) { + var idx = match[1]; + this.set("rawRegexes." + idx + ".valid", this.isValid(x.value)); + } + }, + isValid: function(s) { + try { + new RegExp(s); + return true; + } catch (e) { + return false; + } + }, + usableRegexes: function(regexes) { + var isValid = this.isValid; + return regexes.base.filter(function (r) { + // Checking validity here (rather than using the data property) + // is necessary because otherwise we might send invalid regexes due + // to the fact that this function can call before the observer does + return r.regex !== "" && r.active && isValid(r.regex); + }).map(function(r) { + return r.regex; + }); + }, + addNewRegexIfNeeded: function() { + var last = this.rawRegexes[this.rawRegexes.length - 1]; + if (last.regex !== "") { + this.push("rawRegexes", {regex: "", active: true, valid: true}); + } + }, + deleteRegex: function(e) { + if (this.rawRegexes.length > 1) { + this.splice("rawRegexes", e.model.index, 1); + } + }, + moveFocus: function(e) { + if (e.keyCode === 13) { + var idx = e.model.index; + var inputs = Polymer.dom(this.root).querySelectorAll(".regex-input"); + if (idx < this.rawRegexes.length - 1) { + inputs[idx+1].$.input.focus(); + } else { + document.activeElement.blur(); + } + } + } + }); + </script> +</dom-module> +<dom-module id="tf-categorizer" assetpath="../components/tf-categorizer/"> + <template> + <div class="inputs"> + <tf-regex-group id="regex-group" regexes="{{regexes}}"></tf-regex-group> + </div> + <div id="underscore-categorization"> + <span>Split On Underscores:</span> + <paper-toggle-button checked="{{splitOnUnderscore}}"></paper-toggle-button> + </div> + <style> + :host { + display: block; + padding-bottom: 5px; + padding-top: 5px; + } + + .inputs { + padding-left: 5px; + } + + paper-toggle-button { + --paper-toggle-button-checked-button-color: var(--tb-orange-strong); + --paper-toggle-button-checked-bar-color: var(--tb-orange-weak); + } + #underscore-categorization { + padding-left: 94px; + color: var(--paper-grey-700); + font-size: 14px; + } + </style> + </template> + <script>/// <reference path="../../typings/tsd.d.ts" /> +var Categorizer; +(function (Categorizer) { + /* Canonical TensorFlow ops are namespaced using forward slashes. + * This fallback categorizer categorizes by the top-level namespace. + */ + Categorizer.topLevelNamespaceCategorizer = splitCategorizer(/\//); + // Try to produce good categorizations on legacy graphs, which often + // are namespaced like l1_foo/bar or l2_baz/bam. + // If there is no leading underscore before the first forward slash, + // then it behaves the same as topLevelNamespaceCategorizer + Categorizer.legacyUnderscoreCategorizer = splitCategorizer(/[\/_]/); + function fallbackCategorizer(s) { + switch (s) { + case "TopLevelNamespaceCategorizer": + return Categorizer.topLevelNamespaceCategorizer; + case "LegacyUnderscoreCategorizer": + return Categorizer.legacyUnderscoreCategorizer; + default: + throw new Error("Unrecognized categorization strategy: " + s); + } + } + Categorizer.fallbackCategorizer = fallbackCategorizer; + /* An "extractor" is a function that takes a tag name, and "extracts" a category name. + * This function takes an extractor, and produces a categorizer. + * Currently, it is just used for the fallbackCategorizer, but we may want to + * refactor the general categorization logic to use the concept of extractors. + */ + function extractorToCategorizer(extractor) { + return function (tags) { + if (tags.length === 0) { + return []; + } + var sortedTags = tags.slice().sort(); + var categories = []; + var currentCategory = { + name: extractor(sortedTags[0]), + tags: [], + }; + sortedTags.forEach(function (t) { + var topLevel = extractor(t); + if (currentCategory.name !== topLevel) { + categories.push(currentCategory); + currentCategory = { + name: topLevel, + tags: [], + }; + } + currentCategory.tags.push(t); + }); + categories.push(currentCategory); + return categories; + }; + } + function splitCategorizer(r) { + var extractor = function (t) { + return t.split(r)[0]; + }; + return extractorToCategorizer(extractor); + } + function defineCategory(ruledef) { + var r = new RegExp(ruledef); + var f = function (tag) { + return r.test(tag); + }; + return { name: ruledef, matches: f }; + } + Categorizer.defineCategory = defineCategory; + function _categorizer(rules, fallback) { + return function (tags) { + var remaining = d3.set(tags); + var userSpecified = rules.map(function (def) { + var tags = []; + remaining.forEach(function (t) { + if (def.matches(t)) { + tags.push(t); + } + }); + var cat = { name: def.name, tags: tags.sort() }; + return cat; + }); + var defaultCategories = fallback(remaining.values()); + return userSpecified.concat(defaultCategories); + }; + } + Categorizer._categorizer = _categorizer; + function categorizer(s) { + var rules = s.categoryDefinitions.map(defineCategory); + var fallback = fallbackCategorizer(s.fallbackCategorizer); + return _categorizer(rules, fallback); + } + Categorizer.categorizer = categorizer; + ; +})(Categorizer || (Categorizer = {})); +</script> + <script> + Polymer({ + is: "tf-categorizer", + properties: { + regexes: {type: Array}, + tags: {type: Array}, + categoriesAreExclusive: {type: Boolean, value: true}, + fallbackCategorizer: { + type: String, + computed: "chooseFallbackCategorizer(splitOnUnderscore)" + }, + splitOnUnderscore: { + type: Boolean, + value: false, + }, + categorizer: { + type: Object, + computed: "computeCategorization(regexes.*, categoriesAreExclusive, fallbackCategorizer)", + }, + categories: {type: Array, value: function() {return [];}, notify: true, readOnly: true}, + }, + observers: ['recategorize(tags.*, categorizer)'], + computeCategorization: function(regexes, categoriesAreExclusive, fallbackCategorizer) { + var categorizationStrategy = { + categoryDefinitions: regexes.base, + categoriesAreExclusive: categoriesAreExclusive, + fallbackCategorizer: fallbackCategorizer, + }; + return Categorizer.categorizer(categorizationStrategy); + }, + recategorize: function() { + this.debounce("tf-categorizer-recategorize", function (){ + var categories = this.categorizer(this.tags); + this._setCategories(categories); + }) + }, + chooseFallbackCategorizer: function(splitOnUnderscore) { + if (splitOnUnderscore) { + return "LegacyUnderscoreCategorizer"; + } else { + return "TopLevelNamespaceCategorizer"; + } + }, + }); + </script> +</dom-module> +<dom-module id="tf-chart" assetpath="../components/tf-event-dashboard/"> + <template> + <svg id="chartsvg"></svg> + <style> + :host { + -webkit-user-select: none; + -moz-user-select: none; + display: flex; + flex-direction: column; + flex-grow: 1; + flex-shrink: 1; + } + svg { + -webkit-user-select: none; + -moz-user-select: none; + flex-grow: 1; + flex-shrink: 1; + } + .plottable .crosshairs line.guide-line { + stroke: #777; + } + </style> + </template> + <script>var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Plottable; +(function (Plottable) { + var DragZoomLayer = (function (_super) { + __extends(DragZoomLayer, _super); + /* Constructs a SelectionBoxLayer with an attached DragInteraction and ClickInteraction. + * On drag, it triggers an animated zoom into the box that was dragged. + * On double click, it zooms back out to the original view, before any zooming. + * The zoom animation uses an easing function (default d3.ease("cubic-in-out")) and is customizable. + * Usage: Construct the selection box layer and attach x and y scales, and then add the layer + * over the plot you are zooming on using a Component Group. + * TODO(danmane) - merge this into Plottable + */ + function DragZoomLayer(xScale, yScale) { + _super.call(this); + this.isZoomed = false; + this.easeFn = d3.ease("cubic-in-out"); + this._animationTime = 750; + this.xScale(xScale); + this.yScale(yScale); + this._dragInteraction = new Plottable.Interactions.Drag(); + this._dragInteraction.attachTo(this); + this._doubleClickInteraction = new Plottable.Interactions.DoubleClick(); + this._doubleClickInteraction.attachTo(this); + this.setupCallbacks(); + } + DragZoomLayer.prototype.setupCallbacks = function () { + var _this = this; + var dragging = false; + this._dragInteraction.onDragStart(function (startPoint) { + _this.bounds({ + topLeft: startPoint, + bottomRight: startPoint, + }); + }); + this._dragInteraction.onDrag(function (startPoint, endPoint) { + _this.bounds({ topLeft: startPoint, bottomRight: endPoint }); + _this.boxVisible(true); + dragging = true; + }); + this._dragInteraction.onDragEnd(function (startPoint, endPoint) { + _this.boxVisible(false); + _this.bounds({ topLeft: startPoint, bottomRight: endPoint }); + if (dragging) { + _this.zoom(); + } + dragging = false; + }); + this._doubleClickInteraction.onDoubleClick(this.unzoom.bind(this)); + }; + DragZoomLayer.prototype.animationTime = function (animationTime) { + if (animationTime == null) { + return this._animationTime; + } + if (animationTime < 0) { + throw new Error("animationTime cannot be negative"); + } + this._animationTime = animationTime; + return this; + }; + /* Set the easing function, which determines how the zoom interpolates over time. */ + DragZoomLayer.prototype.ease = function (fn) { + if (typeof (fn) !== "function") { + throw new Error("ease function must be a function"); + } + if (fn(0) !== 0 || fn(1) !== 1) { + Plottable.Utils.Window.warn("Easing function does not maintain invariant f(0)==0 && f(1)==1. Bad behavior may result."); + } + this.easeFn = fn; + return this; + }; + // Zoom into extent of the selection box bounds + DragZoomLayer.prototype.zoom = function () { + var x0 = this.xExtent()[0].valueOf(); + var x1 = this.xExtent()[1].valueOf(); + var y0 = this.yExtent()[1].valueOf(); + var y1 = this.yExtent()[0].valueOf(); + if (x0 === x1 || y0 === y1) { + return; + } + if (!this.isZoomed) { + this.isZoomed = true; + this.xDomainToRestore = this.xScale().domain(); + this.yDomainToRestore = this.yScale().domain(); + } + this.interpolateZoom(x0, x1, y0, y1); + }; + // Restore the scales to their state before any zoom + DragZoomLayer.prototype.unzoom = function () { + if (!this.isZoomed) { + return; + } + this.isZoomed = false; + this.interpolateZoom(this.xDomainToRestore[0], this.xDomainToRestore[1], this.yDomainToRestore[0], this.yDomainToRestore[1]); + }; + // If we are zooming, disable interactions, to avoid contention + DragZoomLayer.prototype.isZooming = function (isZooming) { + this._dragInteraction.enabled(!isZooming); + this._doubleClickInteraction.enabled(!isZooming); + }; + DragZoomLayer.prototype.interpolateZoom = function (x0f, x1f, y0f, y1f) { + var _this = this; + var x0s = this.xScale().domain()[0].valueOf(); + var x1s = this.xScale().domain()[1].valueOf(); + var y0s = this.yScale().domain()[0].valueOf(); + var y1s = this.yScale().domain()[1].valueOf(); + // Copy a ref to the ease fn, so that changing ease wont affect zooms in progress + var ease = this.easeFn; + var interpolator = function (a, b, p) { return d3.interpolateNumber(a, b)(ease(p)); }; + this.isZooming(true); + var start = Date.now(); + var draw = function () { + var now = Date.now(); + var passed = now - start; + var p = _this._animationTime === 0 ? 1 : Math.min(1, passed / _this._animationTime); + var x0 = interpolator(x0s, x0f, p); + var x1 = interpolator(x1s, x1f, p); + var y0 = interpolator(y0s, y0f, p); + var y1 = interpolator(y1s, y1f, p); + _this.xScale().domain([x0, x1]); + _this.yScale().domain([y0, y1]); + if (p < 1) { + Plottable.Utils.DOM.requestAnimationFramePolyfill(draw); + } + else { + _this.isZooming(false); + } + }; + draw(); + }; + return DragZoomLayer; + })(Plottable.Components.SelectionBoxLayer); + Plottable.DragZoomLayer = DragZoomLayer; +})(Plottable || (Plottable = {})); +</script> + <script>/// <reference path="../../typings/tsd.d.ts" /> +/// <reference path="../../bower_components/plottable/plottable.d.ts" /> +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TF; +(function (TF) { + var Y_TOOLTIP_FORMATTER_PRECISION = 4; + var STEP_AXIS_FORMATTER_PRECISION = 4; + var Y_AXIS_FORMATTER_PRECISION = 3; + var BaseChart = (function () { + function BaseChart(tag, dataCoordinator, tooltipUpdater, xType, colorScale) { + this.dataCoordinator = dataCoordinator; + this.tag = tag; + this.colorScale = colorScale; + this.tooltipUpdater = tooltipUpdater; + this.buildChart(xType); + } + BaseChart.prototype.changeRuns = function (runs) { + throw new Error("Abstract method not implemented"); + }; + BaseChart.prototype.addCrosshairs = function (plot, yAccessor) { + var _this = this; + var pi = new Plottable.Interactions.Pointer(); + pi.attachTo(plot); + var xGuideLine = new Plottable.Components.GuideLineLayer("vertical"); + var yGuideLine = new Plottable.Components.GuideLineLayer("horizontal"); + xGuideLine.addClass("crosshairs"); + yGuideLine.addClass("crosshairs"); + var group = new Plottable.Components.Group([plot, xGuideLine, yGuideLine]); + var yfmt = multiscaleFormatter(Y_TOOLTIP_FORMATTER_PRECISION); + pi.onPointerMove(function (p) { + var run2val = {}; + var x = _this.xScale.invert(p.x).valueOf(); + var yMin = _this.yScale.domain()[0]; + var yMax = _this.yScale.domain()[1]; + var closestRun = null; + var minYDistToRun = Infinity; + var yValueForCrosshairs = p.y; + plot.datasets().forEach(function (dataset) { + var run = dataset.metadata().run; + var data = dataset.data(); + var xs = data.map(function (d, i) { return _this.xAccessor(d, i, dataset).valueOf(); }); + var idx = _.sortedIndex(xs, x); + if (idx === 0 || idx === data.length) { + // Only find a point when the cursor is inside the range of the data + // if the cursor is to the left or right of all the data, dont attach. + return; + } + var previous = data[idx - 1]; + var next = data[idx]; + var x0 = _this.xAccessor(previous, idx - 1, dataset).valueOf(); + var x1 = _this.xAccessor(next, idx, dataset).valueOf(); + var y0 = yAccessor(previous, idx - 1, dataset).valueOf(); + var y1 = yAccessor(next, idx, dataset).valueOf(); + var slope = (y1 - y0) / (x1 - x0); + var y = y0 + slope * (x - x0); + if (y < yMin || y > yMax || y !== y) { + // don't find data that is off the top or bottom of the plot. + // also don't find data if it is NaN + return; + } + var dist = Math.abs(_this.yScale.scale(y) - p.y); + if (dist < minYDistToRun) { + minYDistToRun = dist; + closestRun = run; + yValueForCrosshairs = _this.yScale.scale(y); + } + // Note this tooltip will display linearly interpolated values + // e.g. will display a y=0 value halfway between [y=-1, y=1], even + // though there is not actually any 0 datapoint. This could be misleading + run2val[run] = yfmt(y); + }); + xGuideLine.pixelPosition(p.x); + yGuideLine.pixelPosition(yValueForCrosshairs); + _this.tooltipUpdater(run2val, _this.xTooltipFormatter(x), closestRun); + }); + pi.onPointerExit(function () { + _this.tooltipUpdater(null, null, null); + xGuideLine.pixelPosition(-1); + yGuideLine.pixelPosition(-1); + }); + return group; + }; + BaseChart.prototype.buildChart = function (xType) { + if (this.outer) { + this.outer.destroy(); + } + var xComponents = getXComponents(xType); + this.xAccessor = xComponents.accessor; + this.xScale = xComponents.scale; + this.xAxis = xComponents.axis; + this.xAxis.margin(0).tickLabelPadding(3); + this.xTooltipFormatter = xComponents.tooltipFormatter; + this.yScale = new Plottable.Scales.Linear(); + this.yAxis = new Plottable.Axes.Numeric(this.yScale, "left"); + var yFormatter = multiscaleFormatter(Y_AXIS_FORMATTER_PRECISION); + this.yAxis.margin(0).tickLabelPadding(5).formatter(yFormatter); + this.yAxis.usesTextWidthApproximation(true); + var center = this.buildPlot(this.xAccessor, this.xScale, this.yScale); + this.gridlines = new Plottable.Components.Gridlines(this.xScale, this.yScale); + var dzl = new Plottable.DragZoomLayer(this.xScale, this.yScale); + this.center = new Plottable.Components.Group([center, this.gridlines, dzl]); + this.outer = new Plottable.Components.Table([ + [this.yAxis, this.center], + [null, this.xAxis] + ]); + }; + BaseChart.prototype.buildPlot = function (xAccessor, xScale, yScale) { + throw new Error("Abstract method not implemented."); + }; + BaseChart.prototype.renderTo = function (target) { + this.outer.renderTo(target); + }; + BaseChart.prototype.redraw = function () { + this.outer.redraw(); + }; + BaseChart.prototype.destroy = function () { + this.outer.destroy(); + }; + return BaseChart; + })(); + TF.BaseChart = BaseChart; + var LineChart = (function (_super) { + __extends(LineChart, _super); + function LineChart() { + _super.apply(this, arguments); + } + LineChart.prototype.buildPlot = function (xAccessor, xScale, yScale) { + var yAccessor = accessorize("2"); + var plot = new Plottable.Plots.Line(); + plot.x(xAccessor, xScale); + plot.y(yAccessor, yScale); + plot.attr("stroke", function (d, i, m) { return m.run; }, this.colorScale); + this.plot = plot; + var group = this.addCrosshairs(plot, yAccessor); + return group; + }; + LineChart.prototype.changeRuns = function (runs) { + var datasets = this.dataCoordinator.getDatasets(this.tag, runs); + this.plot.datasets(datasets); + }; + return LineChart; + })(BaseChart); + TF.LineChart = LineChart; + var HistogramChart = (function (_super) { + __extends(HistogramChart, _super); + function HistogramChart() { + _super.apply(this, arguments); + } + HistogramChart.prototype.changeRuns = function (runs) { + var datasets = this.dataCoordinator.getDatasets(this.tag, runs); + this.plots.forEach(function (p) { return p.datasets(datasets); }); + }; + HistogramChart.prototype.buildPlot = function (xAccessor, xScale, yScale) { + var _this = this; + var percents = [0, 228, 1587, 3085, 5000, 6915, 8413, 9772, 10000]; + var opacities = _.range(percents.length - 1).map(function (i) { return (percents[i + 1] - percents[i]) / 2500; }); + var accessors = percents.map(function (p, i) { return function (datum) { return datum[2][i][1]; }; }); + var median = 4; + var medianAccessor = accessors[median]; + var plots = _.range(accessors.length - 1).map(function (i) { + var p = new Plottable.Plots.Area(); + p.x(xAccessor, xScale); + var y0 = i > median ? accessors[i] : accessors[i + 1]; + var y = i > median ? accessors[i + 1] : accessors[i]; + p.y(y, yScale); + p.y0(y0); + p.attr("fill", function (d, i, m) { return m.run; }, _this.colorScale); + p.attr("stroke", function (d, i, m) { return m.run; }, _this.colorScale); + p.attr("stroke-weight", function (d, i, m) { return "0.5px"; }); + p.attr("stroke-opacity", function () { return opacities[i]; }); + p.attr("fill-opacity", function () { return opacities[i]; }); + return p; + }); + var medianPlot = new Plottable.Plots.Line(); + medianPlot.x(xAccessor, xScale); + medianPlot.y(medianAccessor, yScale); + medianPlot.attr("stroke", function (d, i, m) { return m.run; }, this.colorScale); + this.plots = plots; + var group = this.addCrosshairs(medianPlot, medianAccessor); + return new Plottable.Components.Group([new Plottable.Components.Group(plots), group]); + }; + return HistogramChart; + })(BaseChart); + TF.HistogramChart = HistogramChart; + /* Create a formatter function that will switch between exponential and + * regular display depending on the scale of the number being formatted, + * and show `digits` significant digits. + */ + function multiscaleFormatter(digits) { + return function (v) { + var absv = Math.abs(v); + if (absv < 1E-15) { + // Sometimes zero-like values get an annoying representation + absv = 0; + } + var f; + if (absv >= 1E4) { + f = d3.format("." + digits + "e"); + } + else if (absv > 0 && absv < 0.01) { + f = d3.format("." + digits + "e"); + } + else { + f = d3.format("." + digits + "g"); + } + return f(v); + }; + } + function accessorize(key) { + return function (d, index, dataset) { return d[key]; }; + } + function stepX() { + var scale = new Plottable.Scales.Linear(); + var axis = new Plottable.Axes.Numeric(scale, "bottom"); + var formatter = Plottable.Formatters.siSuffix(STEP_AXIS_FORMATTER_PRECISION); + axis.formatter(formatter); + return { + scale: scale, + axis: axis, + accessor: accessorize("1"), + tooltipFormatter: formatter, + }; + } + function wallX() { + var scale = new Plottable.Scales.Time(); + var formatter = Plottable.Formatters.time("%a %b %e, %H:%M:%S"); + return { + scale: scale, + axis: new Plottable.Axes.Time(scale, "bottom"), + accessor: function (d, index, dataset) { + return d[0] * 1000; // convert seconds to ms + }, + tooltipFormatter: function (d) { return formatter(new Date(d)); }, + }; + } + function relativeX() { + var scale = new Plottable.Scales.Linear(); + var formatter = function (n) { + var days = Math.floor(n / 24); + n -= (days * 24); + var hours = Math.floor(n); + n -= hours; + n *= 60; + var minutes = Math.floor(n); + n -= minutes; + n *= 60; + var seconds = Math.floor(n); + return days + "d " + hours + "h " + minutes + "m " + seconds + "s"; + }; + return { + scale: scale, + axis: new Plottable.Axes.Numeric(scale, "bottom"), + accessor: function (d, index, dataset) { + var data = dataset && dataset.data(); + // I can't imagine how this function would be called when the data is empty + // (after all, it iterates over the data), but lets guard just to be safe. + var first = data.length > 0 ? data[0][0] : 0; + return (d[0] - first) / (60 * 60); // convert seconds to hours + }, + tooltipFormatter: formatter, + }; + } + function getXComponents(xType) { + switch (xType) { + case "step": + return stepX(); + case "wall_time": + return wallX(); + case "relative": + return relativeX(); + default: + throw new Error("invalid xType: " + xType); + } + } +})(TF || (TF = {})); +</script> + <script> + Polymer({ + is: "tf-chart", + properties: { + type: String, // "scalar" or "compressedHistogram" + _chart: Object, + colorScale: Object, + tag: String, + selectedRuns: Array, + xType: String, + dataCoordinator: Object, + tooltipUpdater: Function, + _initialized: Boolean, + }, + observers: [ + "_makeChart(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized)", + "_changeRuns(_chart, selectedRuns.*)" + ], + _changeRuns: function(chart, change) { + this._chart.changeRuns(this.selectedRuns); + this.redraw(); + }, + redraw: function() { + this._chart.redraw(); + }, + _constructor: function(type) { + if (type === "scalar") { + return TF.LineChart; + } else if (type === "compressedHistogram") { + return TF.HistogramChart; + } else { + throw new Error("Unrecognized chart type"); + } + }, + _makeChart: function(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized) { + if (!_initialized) { + return; + } + if (this._chart) this._chart.destroy(); + var cns = this._constructor(type); + var chart = new cns(tag, dataCoordinator, tooltipUpdater, xType, colorScale); + var svg = d3.select(this.$.chartsvg); + this.async(function() { + chart.renderTo(svg); + this._chart = chart; + }, 350); + }, + attached: function() { + this._initialized = true; + }, + detached: function() { + this._initialized = false; + } + }); + </script> +</dom-module> +<dom-module id="tf-collapsable-pane" assetpath="../components/tf-collapsable-pane/"> + <template> + <button class="heading" on-tap="togglePane" open-button$="[[opened]]"> + <span class="name">[[name]]</span> + <span class="hackpadding"></span> + <span class="count"> + (<span>[[count]]</span>) + </span> + </button> + <iron-collapse opened="[[opened]]"> + <div class="content"> + <template is="dom-if" if="[[opened]]" restamp="[[restamp]]"> + <content></content> + </template> + </div> + </iron-collapse> + <style> + .heading { + margin-top: 10px; + padding-left: 15px; + background-color: #f3f3f3; + border: 1px solid #dedede; + border-radius: 5px; + font-size: 18px; + cursor: pointer; + -webkit-tap-highlight-color: rgba(0,0,0,0); + width: 100%; + height: 30px; + box-sizing: border-box; + font-size: 16px; + display: inline-flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + line-height: 1; + padding-top: 2px; + padding-bottom: 2px; + } + + .content { + padding: 15px; + border: 1px solid #dedede; + border-top: none; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } + [open-button] { + border-bottom-left-radius: 0px !important; + border-bottom-right-radius: 0px !important; + } + .name { + flex-grow: 0; + } + .count { + flex-grow: 0; + float: right; + font-size: 12px; + } + .hackpadding { + /* An obnoxious hack, but I can't get justify-content: space-between to work */ + flex-grow: 1; + } + </style> + </template> + <script> + Polymer({ + is: "tf-collapsable-pane", + properties: { + opened: {type: Boolean, value: false}, + restamp: {type: Boolean, value: true}, + name: {type: String, observer: "hide"}, + count: {type: Number}, + }, + hide: function() { + this.opened = false; + }, + togglePane: function() { + this.opened = !this.opened; + } + }); + </script> + +</dom-module> +<dom-module id="warning-style" assetpath="../components/tf-dashboard-common/"> + <template> + <style> + .warning { + max-width: 540px; + margin: 80px auto 0 auto; + } + </style> + </template> +</dom-module> +<dom-module id="tf-event-dashboard" assetpath="../components/tf-event-dashboard/"> + <template> + <div id="plumbing"> + <tf-url-generator out-runs-url="{{runsUrl}}" out-scalars-url-generator="{{scalarsUrlGen}}" id="urlGenerator"></tf-url-generator> + + <tf-data-coordinator id="dataCoordinator" url-generator="[[scalarsUrlGen]]" run-to-tag="[[runToScalars]]" color-scale="[[colorScale]]" out-data-coordinator="{{dataCoordinator}}"></tf-data-coordinator> + + <tf-run-generator id="runGenerator" url="[[runsUrl]]" out-run-to-scalars="{{runToScalars}}"></tf-run-generator> + + <tf-color-scale id="colorScale" runs="[[_runs]]" out-color-scale="{{colorScale}}" out-class-scale="{{classScale}}"></tf-color-scale> + + <tf-tooltip-coordinator id="tooltipCoordinator" out-tooltip-updater="{{tooltipUpdater}}" out-tooltip-map="{{tooltipMap}}" out-x-value="{{tooltipXValue}}" out-closest-run="{{closestRun}}"></tf-tooltip-coordinator> + + </div> + + <tf-dashboard-layout> + <div class="sidebar"> + <tf-categorizer id="categorizer" tags="[[_visibleTags]]" categories="{{categories}}"></tf-categorizer> + <span id="download-option"> + Show Data Download Links: + <paper-toggle-button checked="{{_show_download_links}}"></paper-toggle-button> + </span> + + <tf-x-type-selector id="xTypeSelector" out-x-type="{{xType}}"></tf-x-type-selector> + + <tf-run-selector id="runSelector" runs="[[_runs]]" class-scale="[[classScale]]" out-selected="{{selectedRuns}}" tooltips="[[tooltipMap]]" closest-run="[[closestRun]]" x-value="[[tooltipXValue]]" x-type="[[xType]]"></tf-run-selector> + + </div> + <div class="center"> + <template is="dom-if" if="[[!categories.length]]"> + <div class="warning"> + <p> + No scalar summary tags were found. + </p> + <p> + Maybe data hasn't loaded yet, or maybe you need + to add some <code>tf.scalar_summary</code> ops to your graph, and + serialize them using the <code>tf.training.summary_io.SummaryWriter</code>. + </p> + </div> + </template> + <template is="dom-repeat" items="[[categories]]"> + <tf-collapsable-pane name="[[item.name]]" count="[[item.tags.length]]"> + <div class="layout horizontal wrap"> + <template is="dom-repeat" items="[[item.tags]]" as="tag"> + <div class="card"> + <span class="card-title">[[tag]]</span> + <div class="card-content"> + <tf-chart tag="[[tag]]" type="scalar" id="chart" selected-runs="[[selectedRuns]]" x-type="[[xType]]" data-coordinator="[[dataCoordinator]]" color-scale="[[colorScale]]" on-keyup="toggleSelected" tabindex="2" tooltip-updater="[[tooltipUpdater]]"></tf-chart> + <paper-icon-button class="expand-button" shift$="[[_show_download_links]]" icon="fullscreen" on-tap="toggleSelected"></paper-icon-button> + </div> + <template is="dom-if" if="[[_show_download_links]]"> + <div class="card-bottom-row"> + <tf-downloader selected-runs="[[selectedRuns]]" tag="[[tag]]" url-fn="[[scalarsUrlGen]]" run-to-tag="[[runToScalars]]"> + </tf-downloader> + </div> + </template> + </div> + </template> + </div> + </tf-collapsable-pane> + </template> + </div> + </tf-dashboard-layout> + + <style include="dashboard-style"></style> + <style include="warning-style"></style> + + </template> + + <script> + Polymer({ + is: "tf-event-dashboard", + properties: { + _runs: { + type: Array, + computed: "_getRuns(runToScalars)", + }, + _visibleTags: { + type: Array, + computed: "_getVisibleTags(selectedRuns.*, runToScalars.*)" + }, + _show_download_links: Boolean, + }, + observers: ['redraw(_show_download_links)'], + redraw: function(_show_download_links) { + var els = this.getElementsByTagName("tf-chart"); + for (var i=0; i<els.length; i++) { + els[i].redraw(); + } + }, + _getRuns: function(runToScalars) { + return _.keys(runToScalars); + }, + _getVisibleTags: function(selectedRunsChange, runsToScalarsChange) { + var keys = selectedRunsChange.base; + var dict = runsToScalarsChange.base; + return _.union.apply(null, keys.map(function(k) {return dict[k]})); + }, + toggleSelected: function(e) { + var currentTarget = Polymer.dom(e.currentTarget); + var parentDiv = currentTarget.parentNode.parentNode; + parentDiv.classList.toggle("selected"); + var chart = currentTarget.previousElementSibling; + if (chart) { + chart.redraw(); + } + }, + }); + </script> +</dom-module> +<dom-module id="tf-histogram-dashboard" assetpath="../components/tf-histogram-dashboard/"> + <template> + <div id="plumbing"> + <tf-url-generator out-runs-url="{{runsUrl}}" out-compressed-histograms-url-generator="{{compressedHistogramsUrlGen}}" id="urlGenerator"></tf-url-generator> + + <tf-data-coordinator id="dataCoordinator" url-generator="[[compressedHistogramsUrlGen]]" run-to-tag="[[runToCompressedHistograms]]" color-scale="[[colorScale]]" out-data-coordinator="{{dataCoordinator}}"></tf-data-coordinator> + + <tf-run-generator id="runGenerator" url="[[runsUrl]]" out-run-to-compressed-histograms="{{runToCompressedHistograms}}"></tf-run-generator> + + <tf-color-scale id="colorScale" runs="[[_runs]]" out-color-scale="{{colorScale}}" out-class-scale="{{classScale}}"></tf-color-scale> + + <tf-tooltip-coordinator id="tooltipCoordinator" out-tooltip-updater="{{tooltipUpdater}}" out-tooltip-map="{{tooltipMap}}" out-x-value="{{tooltipXValue}}" out-closest-run="{{closestRun}}"></tf-tooltip-coordinator> + </div> + + <tf-dashboard-layout> + <div class="sidebar"> + + <tf-categorizer id="categorizer" tags="[[_visibleTags]]" categories="{{categories}}"></tf-categorizer> + + <tf-x-type-selector id="xTypeSelector" out-x-type="{{xType}}"></tf-x-type-selector> + + <tf-run-selector id="runSelector" runs="[[_runs]]" class-scale="[[classScale]]" out-selected="{{selectedRuns}}" tooltips="[[tooltipMap]]" closest-run="[[closestRun]]" x-value="[[tooltipXValue]]" x-type="[[xType]]"></tf-run-selector> + + </div> + + <div class="center"> + <template is="dom-if" if="[[!categories.length]]"> + <div class="warning"> + <p> + No histogram tags were found. + </p> + <p> + Maybe data hasn't loaded yet, or maybe you need + to add some <code>tf.histogram_summary</code> ops to your graph, and + serialize them using the <code>tf.training.summary_io.SummaryWriter</code>. + </p> + </div> + </template> + <template is="dom-repeat" items="[[categories]]"> + <tf-collapsable-pane name="[[item.name]]" count="[[_count(item.tags, selectedRuns.*, runToCompressedHistograms.*)]]"> + <div class="layout horizontal wrap"> + <template is="dom-repeat" items="[[item.tags]]" as="tag"> + <template is="dom-repeat" items="[[selectedRuns]]" as="run"> + <template is="dom-if" if="[[_exists(run, tag, runToCompressedHistograms.*)]]"> + <div class="card"> + <span class="card-title">[[tag]]</span> + <div class="card-content"> + <tf-chart tag="[[tag]]" type="compressedHistogram" id="chart" selected-runs="[[_array(run)]]" x-type="[[xType]]" data-coordinator="[[dataCoordinator]]" color-scale="[[colorScale]]" on-keyup="toggleSelected" tabindex="2" tooltip-updater="[[tooltipUpdater]]"></tf-chart> + <paper-icon-button class="expand-button" icon="fullscreen" on-tap="toggleSelected"></paper-icon-button> + </div> + </div> + </template> + </template> + </template> + </div> + </tf-collapsable-pane> + </template> + </div> + </tf-dashboard-layout> + + <style include="dashboard-style"></style> + <style include="warning-style"></style> + </template> + + <script> + Polymer({ + is: "tf-histogram-dashboard", + properties: { + _runs: { + type: Array, + computed: "_getRuns(runToCompressedHistograms)", + }, + _visibleTags: { + type: Array, + computed: "_getVisibleTags(selectedRuns.*, runToCompressedHistograms.*)" + } + }, + _exists: function(run, tag, runToCompressedHistogramsChange) { + var runToCompressedHistograms = runToCompressedHistogramsChange.base; + return runToCompressedHistograms[run].indexOf(tag) !== -1; + }, + _array: function(x) { + return [x]; + }, + _count: function(tags, selectedRunsChange, runToCompressedHistogramsChange) { + var selectedRuns = selectedRunsChange.base; + var runToCompressedHistograms = runToCompressedHistogramsChange.base; + var targetTags = {}; + tags.forEach(function(t) { + targetTags[t] = true; + }); + var count = 0; + selectedRuns.forEach(function(r) { + runToCompressedHistograms[r].forEach(function(t) { + if (targetTags[t]) { + count++; + } + }); + }); + return count; + }, + _getRuns: function(runToCompressedHistograms) { + return _.keys(runToCompressedHistograms); + }, + _getVisibleTags: function(selectedRunsChange, runToCompressedHistogramsChange) { + var keys = selectedRunsChange.base; + var dict = runToCompressedHistogramsChange.base; + return _.union.apply(null, keys.map(function(k) {return dict[k]})); + }, + toggleSelected: function(e) { + var currentTarget = Polymer.dom(e.currentTarget); + var parentDiv = currentTarget.parentNode.parentNode; + parentDiv.classList.toggle("selected"); + var chart = currentTarget.previousElementSibling; + if (chart) { + chart.redraw(); + } + }, + }); + </script> +</dom-module> +<dom-module id="tf-image-loader" assetpath="../components/tf-image-dashboard/"> + <style> + :host { + display: block; + } + img { + width: 100%; + height: 100%; + } + </style> + <template> + <iron-ajax id="ajax" auto="" url="[[metadataUrl]]" handle-as="json" debounce="50" last-response="{{imageMetadata}}" verbose="true"></iron-ajax> + <template is="dom-if" if="[[imageUrl]]"> + <img src="[[imageUrl]]"> + </template> + </template> + <script> + Polymer({ + is: "tf-image-loader", + properties: { + run: String, + tag: String, + imagesGenerator: Function, + individualImageGenerator: Function, + imageMetadata: Array, + metadataUrl: { + type: String, + computed: "apply(imagesGenerator, tag, run)", + }, + imageUrl: { + type: String, + computed: "getLastImage(imageMetadata, individualImageGenerator)", + }, + }, + apply: function(imagesGenerator, run, tag) { + return imagesGenerator(run, tag); + }, + getLastImage: function(imageMetadata, individualImageGenerator) { + if (imageMetadata == null) { + return null; + } + var query = _.last(imageMetadata).query; + return individualImageGenerator(query); + }, + }); + </script> +</dom-module> +<dom-module id="tf-image-grid" assetpath="../components/tf-image-dashboard/"> + <template> + <style include="scrollbar-style"></style> + <div id="fullContainer" class="container scrollbar"> + <div id="topRow" class="container"> + <div class="noshrink" id="paddingCell"></div> + <template is="dom-repeat" items="[[_runs]]" as="run"> + <div class="run-name-cell noshrink"> + <span>[[run]]</span> + </div> + </template> + </div> + <div id="bottomContainer" class="container"> + <template is="dom-repeat" items="[[_tags]]" sort="" as="tag"> + <div class="image-row container noshrink"> + <div class="tag-name-cell noshrink"> + <span class="tag-name">[[tag]]</span> + </div> + <template is="dom-repeat" items="[[_runs]]" as="run"> + <div class="image-cell noshrink"> + <template is="dom-if" if="[[_exists(run, tag, runToImages.*)]]"> + <tf-image-loader id="loader" run="[[run]]" tag="[[tag]]" images-generator="[[imagesGenerator]]" individual-image-generator="[[individualImageGenerator]]"> + </tf-image-loader> + </template> + </div> + </template> + </div> + </template> + </div> + </div> + <style> + :host { + display: block; + height: 100%; + } + .container { + display: flex; + flex-wrap: nowrap; + } + #fullContainer { + width: 100%; + height: 100%; + flex-direction: column; + padding-top: 20px; + overflow: scroll; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + #topRow { + flex-direction: row; + } + #bottomContainer { + flex-direction: column; + height: 100%; + width: 100%; + } + .image-row { + flex-direction: row; + } + .image-cell { + width: 300px; + height: 300px; + border: 1px solid black; + } + .tag-name-cell { + height: 300px; + width: 300px; + display:flex; + flex-direction: column; + justify-content: center; + } + .tag-name { + word-wrap: break-word; + text-align: center; + white-space: nowrap; + } + .run-name-cell { + width: 300px; + height: 30px; + text-align: center; + } + .noshrink { + flex-shrink: 0; + } + #paddingCell { + width: 300px; + height: 30px; + } + </style> + </template> + <script> + Polymer({ + is: "tf-image-grid", + properties: { + runToImages: Object, + _tags: {type: Array, computed: "_getTags(runToImages.*)"}, + _runs: {type: Array, computed: "_getRuns(runToImages.*)"}, + imagesGenerator: Function, + individualImageGenerator: Function, + }, + _getTags: function(runToImages) { + return _.chain(runToImages.base).values().flatten().union().value(); + }, + _getRuns(runToImages) { + var r2i = runToImages.base; + return _.keys(r2i).filter(function(x) {return r2i[x].length > 0;}); + }, + _exists: function (run, tag, runToImages) { + runToImages = runToImages.base; + return runToImages[run].indexOf(tag) !== -1; + }, + }); + </script> +</dom-module> +<dom-module id="tf-image-dashboard" assetpath="../components/tf-image-dashboard/"> + <template> + <div id="plumbing"> + <tf-url-generator out-runs-url="{{runsUrl}}" out-images-url-generator="{{imagesUrlGen}}" out-individual-image-url-generator="{{individualImageUrlGen}}" id="urlGenerator"></tf-url-generator> + + <tf-run-generator id="runGenerator" url="[[runsUrl]]" out-run-to-images="{{runToImages}}"></tf-run-generator> + </div> + + <div class="center"> + <template is="dom-if" if="[[!_hasImages(runToImages.*)]]"> + <div class="warning"> + <p> + No image tags were found. + </p> + <p> + Maybe data hasn't loaded yet, or maybe you need + to add some <code>tf.image_summary</code> ops to your graph, and + serialize them using the <code>tf.training.summary_io.SummaryWriter</code>. + </p> + </div> + </template> + <tf-image-grid id="imageGrid" run-to-images="[[runToImages]]" images-generator="[[imagesUrlGen]]" individual-image-generator="[[individualImageUrlGen]]"></tf-image-grid> + </div> + + <style> + .center { + padding-left: 10px; + padding-right: 10px; + height: 100%; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + :host { + height: 100%; + display: block; + } + + </style> + <style include="warning-style"></style> + </template> + <script> + Polymer({ + is: "tf-image-dashboard", + properties: { + runToImages: Object, + imagesUrlGen: Function, + individualImageUrlGen: Function, + }, + _hasImages: function(runToImagesChange) { + return _.values(runToImagesChange.base).some(function(arr) { + return arr.length > 0; + }); + }, + }); + </script> +</dom-module> +<dom-module id="tf-graph-loader" assetpath="../components/tf-graph-loader/"> +</dom-module> + +<script> +Polymer({ + + is: 'tf-graph-loader', + + properties: { + /** + * @type {value: number, msg: string} + * + * A number between 0 and 100 denoting the % of progress + * for the progress bar and the displayed message. + */ + progress: { + type: Object, + notify: true, + readOnly: true // Produces, does not consume. + }, + datasets: Array, + hasStats: { + type: Boolean, + readOnly: true, // This property produces data. + notify: true + }, + selectedDataset: Number, + selectedFile: { + type: Object, + observer: '_selectedFileChanged' + }, + outGraphHierarchy: { + type: Object, + readOnly: true, //readonly so outsider can't change this via binding + notify: true + }, + outGraph: { + type: Object, + readOnly: true, //readonly so outsider can't change this via binding + notify: true + }, + outGraphName: { + type: String, + readOnly: true, + notify: true + } + }, + observers: [ + '_selectedDatasetChanged(selectedDataset, datasets)' + ], + _parseAndConstructHierarchicalGraph: function(dataset, pbTxtContent) { + var self = this; + // Reset the progress bar to 0. + self._setProgress({ + value: 0, + msg: '' + }); + var tracker = { + setMessage: function(msg) { + self._setProgress({ + value: self.progress.value, + msg: msg + }); + }, + updateProgress: function(value) { + self._setProgress({ + value: self.progress.value + value, + msg: self.progress.msg + }); + }, + reportError: function(msg) { + self._setProgress({ + value: self.progress.value, + msg: msg, + error: true + }); + }, + }; + var statsJson; + var dataTracker = tf.getSubtaskTracker(tracker, 30, 'Data'); + tf.graph.parser.readAndParseData(dataset, pbTxtContent, dataTracker) + .then(function(result) { + // Build the flat graph (consists only of Op nodes). + var nodes = result.nodes; + statsJson = result.statsJson; + + // This is the whitelist of inputs on op types that are considered + // reference edges. "Assign 0" indicates that the first input to + // an OpNode with operation type "Assign" is a reference edge. + var refEdges = {}; + refEdges["Assign 0"] = true; + refEdges["AssignAdd 0"] = true; + refEdges["AssignSub 0"] = true; + refEdges["assign 0"] = true; + refEdges["assign_add 0"] = true; + refEdges["assign_sub 0"] = true; + refEdges["count_up_to 0"] = true; + refEdges["ScatterAdd 0"] = true; + refEdges["ScatterSub 0"] = true; + refEdges["ScatterUpdate 0"] = true; + refEdges["scatter_add 0"] = true; + refEdges["scatter_sub 0"] = true; + refEdges["scatter_update 0"] = true; + var buildParams = { + enableEmbedding: true, + inEmbeddingTypes: ['Const'], + outEmbeddingTypes: ['^[a-zA-Z]+Summary$'], + refEdges: refEdges + }; + var graphTracker = tf.getSubtaskTracker(tracker, 20, + 'Graph'); + return tf.graph.build(nodes, buildParams, graphTracker); + }) + .then(function(graph) { + this._setOutGraph(graph); + if (statsJson) { + // If there are associated stats, join them with the graph. + tf.time('Joining stats info with graph...', function() { + tf.graph.joinStatsInfoWithGraph(graph, statsJson); + }); + } + var hierarchyParams = { + verifyTemplate: true, + groupSeries: true, + }; + var hierarchyTracker = tf.getSubtaskTracker(tracker, 50, + 'Namespace hierarchy'); + return tf.graph.hierarchy.build(graph, hierarchyParams, hierarchyTracker); + }.bind(this)) + .then(function(graphHierarchy) { + // Update the properties which notify the parent with the + // graph hierarchy and whether the data has live stats or not. + this._setHasStats(statsJson != null); + this._setOutGraphHierarchy(graphHierarchy); + }.bind(this)) + .catch(function(reason) { + tracker.reportError("Graph visualization failed: " + reason); + }); + }, + _selectedDatasetChanged: function(datasetIndex, datasets) { + var dataset = datasets[datasetIndex]; + this._parseAndConstructHierarchicalGraph(dataset); + this._setOutGraphName(dataset.name); + }, + _selectedFileChanged: function(e) { + if (!e) { + return; + } + var file = e.target.files[0]; + if (!file) { + return; + } + + // Clear out the value of the file chooser. This ensures that if the user + // selects the same file, we'll re-read it. + e.target.value = ''; + + var reader = new FileReader(); + + reader.onload = function(e) { + this._parseAndConstructHierarchicalGraph(null, e.target.result); + }.bind(this); + + reader.readAsText(file); + } +}); +</script> +<dom-module id="tf-graph-style" assetpath="../components/tf-graph/"> +<template> +<style> +:host { + display: flex; + width: 100%; +} + +::content #svg { + overflow: hidden; + flex: 1; +} + +::content #hidden { + position: fixed; + top: 0px; + visibility: hidden; +} + + +/* --- Node and annotation-node for Metanode --- */ + +::content .meta > .nodeshape > rect, +::content .meta > .annotation-node > rect { + cursor: pointer; + fill: hsl(0, 0%, 70%); +} + + +::content .node.meta.highlighted > .nodeshape > rect, +::content .node.meta.highlighted > .annotation-node > rect { + stroke-width: 2; +} + +::content .annotation.meta.highlighted > .nodeshape > rect, +::content .annotation.meta.highlighted > .annotation-node > rect { + stroke-width: 1; +} + +::content .meta.selected > .nodeshape > rect, +::content .meta.selected > .annotation-node > rect { + stroke: red; + stroke-width: 2; +} + +::content .node.meta.selected.expanded > .nodeshape > rect, +::content .node.meta.selected.expanded > .annotation-node > rect { + stroke: red; + stroke-width: 3; +} + +:content .annotation.meta.selected > .nodeshape > rect, +:content .annotation.meta.selected > .annotation-node > rect { + stroke: red; + stroke-width: 2; +} + +::content .node.meta.selected.expanded.highlighted > .nodeshape > rect, +::content .node.meta.selected.expanded.highlighted > .annotation-node > rect { + stroke: red; + stroke-width: 4; +} + + +/* --- Op Node --- */ + +::content .op > .nodeshape > ellipse, +::content .op > .annotation-node > ellipse { + cursor: pointer; + fill: #fff; + stroke: #ccc; +} + +::content .op.selected > .nodeshape > ellipse, +::content .op.selected > .annotation-node > ellipse { + stroke: red; + stroke-width: 2; +} + +::content .op.highlighted > .nodeshape > ellipse, +::content .op.highlighted > .annotation-node > ellipse { + stroke-width: 2; +} + +/* --- Series Node --- */ + +/* By default, don't show the series background <rect>. */ +::content .series > .nodeshape > rect { + fill: hsl(0, 0%, 70%); + fill-opacity: 0; + stroke-dasharray: 5, 5; + stroke-opacity: 0; + cursor: pointer; +} + +/* Once expanded, show the series background <rect> and hide the <use>. */ +::content .series.expanded > .nodeshape > rect { + fill-opacity: 0.15; + stroke: hsl(0, 0%, 70%); + stroke-opacity: 1; +} +::content .series.expanded > .nodeshape > use { + visibility: hidden; +} + +/** + * TODO(jimbo): Simplify this by applying a stable class name to all <g> + * elements that currently have either the nodeshape or annotation-node classes. + */ +::content .series > .nodeshape > use , +::content .series > .annotation-node > use { + stroke: #ccc; +} +::content .series.highlighted > .nodeshape > use , +::content .series.highlighted > .annotation-node > use { + stroke-width: 2; +} +::content .series.selected > .nodeshape > use , +::content .series.selected > .annotation-node > use { + stroke: red; + stroke-width: 2; +} + +::content .series.selected > .nodeshape > rect { + stroke: red; + stroke-width: 2; +} + +:content .annotation.series.selected > .annotation-node > use { + stroke: red; + stroke-width: 2; +} + +/* --- Bridge Node --- */ +::content .bridge > .nodeshape > rect { + stroke: #f0f; + opacity: 0.2; + display: none; +} + +/* --- Structural Elements --- */ +::content .edge > path.edgeline.structural { + stroke: #f0f; + opacity: 0.2; + display: none; +} + +/* --- Series Nodes --- */ + +/* Hide the rect for a series' annotation. */ +::content .series > .annotation-node > rect { + display: none; +} + +/* --- Node label --- */ + + +::content .node > text.nodelabel { + cursor: pointer; + fill: #444; +} + +::content .meta.expanded > text.nodelabel { + font-size: 9px; +} + +::content .series > text.nodelabel { + font-size: 8px; +} + +::content .op > text.nodelabel { + font-size: 6px; +} + +::content .bridge > text.nodelabel { + display: none; +} + +::content .node.meta.expanded > text.nodelabel{ + cursor: normal; +} + +::content .annotation.meta.highlighted > text.annotation-label { + fill: #50A3F7; +} + +::content .annotation.meta.selected > text.annotation-label { + fill: #4285F4; +} + +/* --- Annotation --- */ + +/* only applied for annotations that are not summary or constant. +(.summary, .constant gets overriden below) */ +::content .annotation > .annotation-node > * { + stroke-width: 0.5; + stroke-dasharray: 1, 1; +} + +::content .annotation.summary > .annotation-node > *, +::content .annotation.constant > .annotation-node > * { + stroke-width: 1; + stroke-dasharray: none; +} + +::content .annotation > .annotation-edge { + fill: none; + stroke: #aaa; + stroke-width: 0.5; + marker-end: url("#annotation-arrowhead"); +} + +::content .annotation > .annotation-edge.refline { + marker-start: url("#ref-annotation-arrowhead"); +} + +::content .annotation > .annotation-control-edge { + stroke-dasharray: 1, 1; +} + +::content #annotation-arrowhead { + fill: #aaa; +} + +::content #ref-annotation-arrowhead { + fill: #aaa; +} + +::content .annotation > .annotation-label { + font-size: 5px; + cursor: pointer; +} +::content .annotation > .annotation-label.annotation-ellipsis { + cursor: default; +} + +/* Hide annotations on expanded meta nodes since they're redundant. */ +::content .expanded > .in-annotations, +::content .expanded > .out-annotations { + display: none; +} + +/* --- Annotation: Constant --- */ + +::content .constant > .annotation-node > ellipse { + cursor: pointer; + fill: white; + stroke: #848484; +} + +::content .constant.selected > .annotation-node > ellipse { + fill: white; + stroke: red; +} + +::content .constant.highlighted > .annotation-node > ellipse { + stroke-width: 1.5; +} + +/* --- Annotation: Summary --- */ + +::content .summary > .annotation-node > ellipse { + cursor: pointer; + fill: #DB4437; + stroke: #DB4437; +} + +::content .summary.selected > .annotation-node > ellipse { + fill: #A52714; + stroke: #A52714; +} + +::content .summary.highlighted > .annotation-node > ellipse { + stroke-width: 1.5; +} + +/* --- Edge --- */ + +::content .edge > path.edgeline { + fill: none; + marker-end: url("#arrowhead"); + stroke: #bbb; + stroke-linecap: round; + stroke-width: 0.75; +} + +::content .edge > path.edgeline.refline { + marker-start: url("#ref-arrowhead"); +} + +::content #arrowhead { + fill: #bbb; +} + +::content #ref-arrowhead { + fill: #bbb; +} + +::content .edge .control-dep { + stroke-dasharray: 2, 2; +} + +/* --- Group node expand/collapse button --- */ + +/* Hides expand/collapse buttons when a node isn't expanded or highlighted. Using + incredibly small opacity so that the bounding box of the <g> parent still takes + this container into account even when it isn't visible */ +::content .node:not(.highlighted):not(.expanded) > .nodeshape > .buttoncontainer { + opacity: 0.01; +} +::content .node.highlighted > .nodeshape > .buttoncontainer { + cursor: pointer; +} +::content .buttoncircle { + fill: #E7811D; +} +::content .buttoncircle:hover { + fill: #B96717; +} +::content .expandbutton, +::content .collapsebutton { + stroke: white; +} +/* Do not let the path elements in the button take pointer focus */ +::content .node > .nodeshape > .buttoncontainer > .expandbutton, +::content .node > .nodeshape > .buttoncontainer > .collapsebutton { + pointer-events: none; +} +/* Only show the expand button when a node is collapsed and only show the + collapse button when a node is expanded. */ +::content .node.expanded > .nodeshape > .buttoncontainer > .expandbutton { + display: none; +} +::content .node:not(.expanded) > .nodeshape > .buttoncontainer > .collapsebutton { + display: none; +} +</style> +</template> +</dom-module> +<dom-module id="tf-graph-minimap" assetpath="../components/tf-graph/"> +<template> +<style> +:host { + background-color:white; + transition: opacity .3s linear; + pointer-events: auto; +} + +:host.hidden { + opacity: 0; + pointer-events: none; +} + +canvas { + border: 1px solid #999; +} + +rect { + fill: white; + stroke: #111111; + stroke-width: 1px; + fill-opacity: 0; + filter: url("#minimapDropShadow"); + cursor: move; +} + +svg { + position: absolute; +} +</style> +<svg> + <defs> + <filter id="minimapDropShadow" x="-20%" y="-20%" width="150%" height="150%"> + <feOffset result="offOut" in="SourceGraphic" dx="1" dy="1"></feOffset> + <feColorMatrix result="matrixOut" in="offOut" type="matrix" values="0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.5 0"></feColorMatrix> + <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="2"></feGaussianBlur> + <feBlend in="SourceGraphic" in2="blurOut" mode="normal"></feBlend> + </filter> + </defs> + <rect></rect> +</svg> +<canvas class="first"></canvas> + +<canvas class="second"></canvas> +</template> +<script> +Polymer({ + is: 'tf-graph-minimap', + + /** + * Initializes the minimap and returns a minimap object to notify when + * things update. + * + * @param svg The main svg element. + * @param zoomG The svg group used for panning and zooming the main svg. + * @param mainZoom The main zoom behavior. + * @param maxWandH The maximum width/height for the minimap. + * @param labelPadding Padding in pixels due to the main graph labels. + */ + init: function(svg, zoomG, mainZoom, maxWAndH, labelPadding) { + return new tf.scene.Minimap(svg, zoomG, mainZoom, this, maxWAndH, + labelPadding); + } +}); +</script> +</dom-module> +<dom-module id="tf-graph-scene" assetpath="../components/tf-graph/"> +<template> +<style include="tf-graph-style"> + :host { + font-size: 20px; + } + .titleContainer { + position: relative; + } + .title { + position: absolute; + } + .auxTitle { + position: absolute; + } + #minimap { + position: absolute; + right: 20px; + bottom: 20px; + } +</style> +<div class="titleContainer"> + <div id="title" class="title">Main Graph</div> + <div id="auxTitle" class="auxTitle">Auxiliary nodes</div> +</div> +<svg id="svg"> + <defs> + + <marker id="arrowhead" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto"> + <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"></path> + </marker> + <marker id="ref-arrowhead" markerWidth="10" markerHeight="10" refX="1" refY="5" orient="auto"> + <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"></path> + </marker> + + <marker id="annotation-arrowhead" markerWidth="5" markerHeight="5" refX="5" refY="2.5" orient="auto"> + <path d="M 0,0 L 5,2.5 L 0,5 L 0,0"></path> + </marker> + <marker id="ref-annotation-arrowhead" markerWidth="5" markerHeight="5" refX="0" refY="2.5" orient="auto"> + <path d="M 5,0 L 0,2.5 L 5,5 L 5,0"></path> + </marker> + + <ellipse id="op-node-stamp" rx="7.5" ry="3" stroke="inherit" fill="inherit"></ellipse> + + <ellipse id="op-node-annotation-stamp" rx="5" ry="2" stroke="inherit" fill="inherit"></ellipse> + + <g id="op-series-vertical-stamp"> + <use xlink:href="#op-node-stamp" x="8" y="9"></use> + <use xlink:href="#op-node-stamp" x="8" y="6"></use> + <use xlink:href="#op-node-stamp" x="8" y="3"></use> + </g> + + <g id="op-series-horizontal-stamp"> + <use xlink:href="#op-node-stamp" x="16" y="4"></use> + <use xlink:href="#op-node-stamp" x="12" y="4"></use> + <use xlink:href="#op-node-stamp" x="8" y="4"></use> + </g> + + <g id="op-series-annotation-stamp"> + <use xlink:href="#op-node-annotation-stamp" x="9" y="2"></use> + <use xlink:href="#op-node-annotation-stamp" x="7" y="2"></use> + <use xlink:href="#op-node-annotation-stamp" x="5" y="2"></use> + </g> + + <g id="linearGradients"></g> + </defs> + + <rect fill="white" width="10000" height="10000"></rect> + <g id="root"></g> +</svg> +<tf-graph-minimap id="minimap"></tf-graph-minimap> +</template> +</dom-module> +<script> +Polymer({ + is: 'tf-graph-scene', + properties: { + graphHierarchy: Object, + name: String, + colorBy: { + type: String, + observer: '_colorByChanged' + }, + /** @type {d3_zoom} d3 zoom object */ + _zoom: Object, + highlightedNode: { + type: String, + observer: '_highlightedNodeChanged' + }, + selectedNode: { + type: String, + observer: '_selectedNodeChanged' + }, + /** Keeps track of if the graph has been zoomed/panned since loading */ + _zoomed: { + type: Boolean, + observer: '_onZoomChanged', + value: false + }, + /** Keeps track of the starting coordinates of a graph zoom/pan */ + _zoomStartCoords: { + type: Array, + value: null + }, + /** Keeps track of the current coordinates of a graph zoom/pan */ + _zoomCoords: { + type: Array, + value: null + }, + /** Maximum distance of a zoom event for it to be interpreted as a click */ + _maxZoomDistanceForClick: { + type: Number, + value: 20 + }, + /** + * @type {d3.scale.ordinal} + * Scale mapping from template name to a number between 0 and N-1 + * where N is the number of different template names. + */ + templateIndex: Object, + /** + * @type {tf.scene.Minimap} + * A minimap object to notify for zoom events. + */ + minimap: Object, + /* + * Dictionary for easily stylizing nodes when state changes. + * _nodeGroupIndex[nodeName] = d3_selection of the nodeGroup + */ + _nodeGroupIndex: { + type: Object, + value: function() { return {}; } + }, + /* + * Dictionary for easily stylizing annotation nodes when state changes. + * _annotationGroupIndex[nodeName][hostNodeName] = + * d3_selection of the annotationGroup + */ + _annotationGroupIndex: { + type: Object, + value: function() { return {}; } + }, + /* + * Dictionary for easily stylizing edges when state changes. + * _edgeGroupIndex[edgeName] = d3_selection of the edgeGroup + */ + _edgeGroupIndex: { + type: Object, + value: function() { return {}; } + }, + /** + * Max font size for metanode label strings. + */ + maxMetanodeLabelLengthFontSize: { + type: Number, + value: 9 + }, + /** + * Min font size for metanode label strings. + */ + minMetanodeLabelLengthFontSize: { + type: Number, + value: 6 + }, + /** + * Metanode label strings longer than this are given smaller fonts. + */ + maxMetanodeLabelLengthLargeFont: { + type: Number, + value: 11 + }, + /** + * Metanode label strings longer than this are truncated with ellipses. + */ + maxMetanodeLabelLength: { + type: Number, + value: 18 + }, + progress: Object + }, + observers: [ + '_buildAndFit(graphHierarchy)' + ], + getNode: function(nodeName) { + return this.graphHierarchy.getRenderNodeByName(nodeName); + }, + isNodeExpanded: function(node) { + return node.expanded; + }, + setNodeExpanded: function(renderNode) { + this._build(this.graphHierarchy); + }, + /** + * Resets the state of the component. Called whenever the whole graph + * (dataset) changes. + */ + _resetState: function() { + // Reset the state of the component. + this._nodeGroupIndex = {}; + this._annotationGroupIndex = {}; + this._edgeGroupIndex = {}; + this._updateLabels(false); + // Remove all svg elements under the 'root' svg group. + d3.select(this.$.svg).select('#root').selectAll('*').remove(); + // And the defs. + d3.select(this.$.svg).select('defs #linearGradients') + .selectAll('*').remove(); + }, + /** Main method for building the scene */ + _build: function(graphHierarchy) { + if (!graphHierarchy) { return; } //handle untruthy input + var templateNames = d3.keys(graphHierarchy.hierarchy.templates); + + this.templateIndex = d3.scale.ordinal() + .domain(templateNames) + .range(d3.range(0, templateNames.length)); + tf.time('tf-graph-scene (layout):', function() { + // layout the scene for this meta / series node + tf.graph.layout.scene(graphHierarchy.root, this); + }.bind(this)); + + tf.time('tf-graph-scene (build scene):', function() { + tf.graph.scene.buildGroup(d3.select(this.$.root), graphHierarchy.root, this); + tf.graph.scene.addGraphClickListener(this.$.svg, this); + }.bind(this)); + // Update the minimap again when the graph is done animating. + setTimeout(function() { + this.minimap.update(); + }.bind(this), tf.graph.layout.PARAMS.animation.duration); + }, + ready: function() { + this._zoom = d3.behavior.zoom() + .on('zoomend', function() { + if (this._zoomStartCoords) { + // Calculate the total distance dragged during the zoom event. + // If it is sufficiently small, then fire an event indicating + // that zooming has ended. Otherwise wait to fire the zoom end + // event, so that a mouse click registered as part of this zooming + // is ignored (as this mouse click was part of a zooming, and should + // not be used to indicate an actual click on the graph). + var dragDistance = Math.sqrt( + Math.pow(this._zoomStartCoords[0] - this._zoomCoords[0], 2) + + Math.pow(this._zoomStartCoords[1] - this._zoomCoords[1], 2)); + if (dragDistance < this._maxZoomDistanceForClick) { + this._fireEnableClick(); + } else { + setTimeout(this._fireEnableClick.bind(this), 50); + } + } + this._zoomStartCoords = null; + }.bind(this)) + .on('zoom', function() { + // Store the coordinates of the zoom event + this._zoomCoords = d3.event.translate; + + // If this is the first zoom event after a zoom-end, then + // store the coordinates as the start coordinates as well, + // and fire an event to indicate that zooming has started. + // This doesn't use the zoomstart event, as d3 sends this + // event on mouse-down, even if there has been no dragging + // done to translate the graph around. + if (!this._zoomStartCoords) { + this._zoomStartCoords = this._zoomCoords.slice(); + this.fire('disable-click'); + } + this._zoomed = true; + d3.select(this.$.root).attr('transform', + 'translate(' + d3.event.translate + ')' + + 'scale(' + d3.event.scale + ')'); + // Notify the minimap. + this.minimap.zoom(d3.event.translate, d3.event.scale); + }.bind(this)); + d3.select(this.$.svg).call(this._zoom) + .on('dblclick.zoom', null); + d3.select(window).on('resize', function() { + // Notify the minimap that the user's window was resized. + // The minimap will figure out the new dimensions of the main svg + // and will use the existing translate and scale params. + this.minimap.zoom(); + }.bind(this)); + // Initialize the minimap. + this.minimap = this.$.minimap.init(this.$.svg, this.$.root, this._zoom, + tf.graph.layout.PARAMS.minimap.size, + tf.graph.layout.PARAMS.subscene.meta.labelHeight); + }, + _buildAndFit: function(graphHierarchy) { + this._resetState(); + this._build(graphHierarchy); + // Fit to screen after the graph is done animating. + setTimeout(this.fit.bind(this), tf.graph.layout.PARAMS.animation.duration); + }, + _updateLabels: function(showLabels) { + var titleStyle = this.getElementsByClassName('title')[0].style; + var auxTitleStyle = this.getElementsByClassName('auxTitle')[0].style; + var core = this.getElementsByClassName(tf.graph.scene.Class.Scene.CORE)[0]; + // Only show labels if the graph is fully loaded. + if (showLabels && core && this.progress && this.progress.value === 100) { + var aux = + this.getElementsByClassName(tf.graph.scene.Class.Scene.INEXTRACT)[0] || + this.getElementsByClassName(tf.graph.scene.Class.Scene.OUTEXTRACT)[0]; + var coreX = core.getCTM().e; + var auxX = aux ? aux.getCTM().e : null; + titleStyle.display = 'inline'; + titleStyle.left = coreX + 'px'; + if (auxX !== null && auxX !== coreX) { + auxTitleStyle.display = 'inline'; + auxTitleStyle.left = auxX + 'px'; + } else { + auxTitleStyle.display = 'none'; + } + } else { + titleStyle.display='none'; + auxTitleStyle.display = 'none'; + } + }, + + + + + /** + * Called whenever the user changed the 'color by' option in the + * UI controls. + */ + _colorByChanged: function() { + // We iterate through each svg node and update its state. + _.each(this._nodeGroupIndex, function(nodeGroup, nodeName) { + this._updateNodeState(nodeName); + }, this); + // Notify also the minimap. + this.minimap.update(); + }, + fit: function() { + tf.graph.scene.fit(this.$.svg, this.$.root, this._zoom, function() { + this._zoomed = false; + }.bind(this)); + }, + isNodeSelected: function(n) { + return n === this.selectedNode; + }, + isNodeHighlighted: function(n) { + return n === this.highlightedNode; + }, + addAnnotationGroup: function(a, d, selection) { + var an = a.node.name; + this._annotationGroupIndex[an] = this._annotationGroupIndex[an] || {}; + this._annotationGroupIndex[an][d.node.name] = selection; + }, + getAnnotationGroupsIndex: function(a) { + return this._annotationGroupIndex[a]; + }, + removeAnnotationGroup: function(a, d) { + delete this._annotationGroupIndex[a.node.name][d.node.name]; + }, + addNodeGroup: function(n, selection) { + this._nodeGroupIndex[n] = selection; + }, + getNodeGroup: function(n) { + return this._nodeGroupIndex[n]; + }, + removeNodeGroup: function(n) { + delete this._nodeGroupIndex[n]; + }, + addEdgeGroup: function(n, selection) { + this._edgeGroupIndex[e] = selection; + }, + getEdgeGroup: function(e) { + return this._edgeGroupIndex[e]; + }, + /** + * Update node and annotation node of the given name. + * @param {String} n node name + */ + _updateNodeState: function(n) { + var node = this.getNode(n); + var nodeGroup = this.getNodeGroup(n); + + if (nodeGroup) { + tf.graph.scene.node.stylize(nodeGroup, node, this); + } + + var annotationGroupIndex = this.getAnnotationGroupsIndex(n); + _.each(annotationGroupIndex, function(aGroup, hostName) { + tf.graph.scene.node.stylize(aGroup, node, this, + tf.graph.scene.Class.Annotation.NODE); + }, this); + }, + + _selectedNodeChanged: function(selectedNode, oldSelectedNode) { + if (selectedNode === oldSelectedNode) { + return; + } + + if (selectedNode) { + this._updateNodeState(selectedNode); + } + if (oldSelectedNode) { + this._updateNodeState(oldSelectedNode); + } + + if (!selectedNode) { + return; + } + // Update the minimap to reflect the highlighted (selected) node. + this.minimap.update(); + var node = this.graphHierarchy.hierarchy.node(selectedNode); + var nodeParents = []; + // Create list of all metanode parents of the selected node. + while (node.parentNode != null + && node.parentNode.name != tf.graph.ROOT_NAME) { + node = node.parentNode; + nodeParents.push(node.name); + } + // Ensure each parent metanode is built and expanded. + var topParentNodeToBeExpanded; + _.forEachRight(nodeParents, function(parentName) { + this.graphHierarchy.buildSubhierarchy(parentName); + var renderNode = this.graphHierarchy.getRenderNodeByName(parentName); + if (renderNode.node.isGroupNode && !renderNode.expanded) { + renderNode.expanded = true; + if (!topParentNodeToBeExpanded) { + topParentNodeToBeExpanded = renderNode; + } + } + }, this); + // If any expansion was needed to display this selected node, then + // inform the scene of the top-most expansion. + if (topParentNodeToBeExpanded) { + this.setNodeExpanded(topParentNodeToBeExpanded); + this._zoomed = true; + } + + if (tf.graph.scene.panToNode(selectedNode, this.$.svg, this.$.root, + this._zoom)) { + this._zoomed = true; + } + }, + _highlightedNodeChanged: function(highlightedNode, oldHighlightedNode) { + if (highlightedNode === oldHighlightedNode) { + return; + } + + if (highlightedNode) { + this._updateNodeState(highlightedNode); + } + if (oldHighlightedNode) { + this._updateNodeState(oldHighlightedNode); + } + }, + _onZoomChanged: function() { + this._updateLabels(!this._zoomed); + }, + _fireEnableClick: function() { + this.fire('enable-click'); + }, +}); +</script> +<dom-module id="tf-graph-params" assetpath="../components/tf-graph/"> +</dom-module> +<script> + Polymer({ + + is: 'tf-graph-params', + + properties: { + // PARAMETERS + + enableExtraction: { + type: Boolean, + value: true + }, + + /** Maximum in-degree that a node can have without being considered as + * high in-degree node. */ + maxInDegree: { + type: Number, + value: 4 + }, + /** Maximum out-degree that a node can have without being considered as + * high out-degree node. */ + maxOutDegree: { + type: Number, + value: 4 + }, + /** Maximum number of control edges a node can have before they aren't + * displayed. */ + maxControlDegree: { + type: Number, + value: 4 + }, + + /** + * Types patterns for predefined out-extract nodes, which are + * sink-like nodes that will be extracted from the main graph. + */ + outExtractTypes: { + type: Array, + value: function() { + return [ + 'NoOp' // for "sgd", "momentum" group + ]; + } + }, + + /** + * Types patterns for predefined in-extract nodes, which are + * source-like nodes that will be extracted from the main graph. + */ + inExtractTypes: { + type: Array, + value: function() { + return ['Variable']; + } + }, + + /** + * When removing edges from a high degree node, remove all of its edges if + * detachAllEdgesForHighDegree is true. Otherwise remove all in-edges if + * the node has high in-degree, or all out-edges if the node has high + * out-degree. + */ + detachAllEdgesForHighDegree: { + type: Boolean, + value: false + }, + + /** + * After extracting high in/out degree nodes and predefined + * source-like/sink-like, extract isolated nodes to the side + * if this extractIsolatedNodesWithAnnotationsOnOneSide is true. + */ + extractIsolatedNodesWithAnnotationsOnOneSide: { + type: Boolean, + value: true + }, + + /** + * Whether to draw bridge paths inside of expanded group nodes. + */ + enableBridgegraph: { + type: Boolean, + value: true + }, + + /** + * Colors for the minimum and maximum values whenever we have a gradient + * scale. + */ + minMaxColors: { + type: Array, + value: function() { + return ["#fff5f0", "#fb6a4a"]; + } + }, + + /** + * Maximum number of annotations to be displayed on a node before an + * ellipsis is used. + */ + maxAnnotations: { + type: Number, + value: 5 + } + } + }); +</script> +<dom-module id="tf-graph" assetpath="../components/tf-graph/"> +<template> +<style> +.container { + width: 100%; + height: 100%; +} + +.vertical { + width:100%; + height:100%; + @apply(--layout-vertical); +} + +.auto { + @apply(--layout-flex-auto); + @apply(--layout-vertical); +} + +h2 { + text-align: center; +} + +paper-button { + text-transform: none; +} +</style> +<div class="container"> + <tf-graph-params id="graphParams"></tf-graph-params> + <div class="vertical"> + <h2>[[title]]</h2> + <tf-graph-scene id="scene" class="auto" graph-hierarchy="[[_renderHierarchy]]" highlighted-node="[[_getVisible(highlightedNode)]]" selected-node="[[selectedNode]]" color-by="[[colorBy]]" name="[[graphName]]" progress="[[progress]]"></tf-graph-scene> + </div> +</div> +</template> +</dom-module> + +<script> +Polymer({ + + is: 'tf-graph', + + properties: { + graphHierarchy: { + type: Object, + notify: true, + observer: '_graphChanged' + }, + title: String, + selectedNode: { + type: String, + notify: true, + }, + highlightedNode: { + type: String, + notify: true + }, + /** What to color the nodes by (compute time, memory, device etc.) */ + colorBy: String, + colorByParams: { + type: Object, + notify: true, + readOnly: true, // Produces and doesn't consume. + }, + // internal properties + _graphParams: { + type: Object, + value: function() { + return this.$.graphParams; + } + }, + _renderDepth: { + type: Number, + value: 1 + }, + _renderHierarchy: { + type: Object, + readOnly: true, + notify: true, + computed: '_buildRenderHierarchy(graphHierarchy, _graphParams)' + }, + _allowGraphSelect: { + type: Boolean, + value: true + } + }, + _buildRenderHierarchy: function(graphHierarchy, params) { + return tf.time('new tf.graph.render.Hierarchy', function() { + if (graphHierarchy.root.type !== tf.graph.NodeType.META) { + // root must be metanode but sometimes Polymer's dom-if has not + // remove tf-graph element yet in <tf-node-info> + // and thus mistakenly pass non-metanode to this module. + return; + } + var renderGraph = new tf.graph.render.RenderGraphInformation( + graphHierarchy, params); + // Producing the 'color by' parameters to be consumed + // by the tf-graph-controls panel. It contains information about the + // min and max values and their respective colors, as well as list + // of devices with their respective colors. + + function getColorParamsFromScale(scale) { + return { + minValue: scale.domain()[0], + maxValue: scale.domain()[1], + startColor: scale.range()[0], + endColor: scale.range()[1] + }; + } + + this._setColorByParams({ + compute_time: getColorParamsFromScale(renderGraph.computeTimeScale), + memory: getColorParamsFromScale(renderGraph.memoryUsageScale), + device: _.map(renderGraph.deviceColorMap.domain(), + function(deviceName) { + return { + device: deviceName, + color: renderGraph.deviceColorMap(deviceName) + }; + }) + }); + return renderGraph; + }.bind(this)); + }, + _getVisible: function(name) { + if (!name) { + return name; + } + return this._renderHierarchy.getNearestVisibleAncestor(name); + }, + listeners: { + 'graph-select': '_graphSelected', + 'disable-click': '_disableClick', + 'enable-click': '_enableClick', + // Nodes + 'node-toggle-expand': '_nodeToggleExpand', + 'node-select': '_nodeSelected', + 'node-highlight': '_nodeHighlighted', + 'node-unhighlight': '_nodeUnhighlighted', + + // Annotations + + /* Note: currently highlighting/selecting annotation node has the same + * behavior as highlighting/selecting actual node so we point to the same + * set of event listeners. However, we might redesign this to be a bit + * different. + */ + 'annotation-select': '_nodeSelected', + 'annotation-highlight': '_nodeHighlighted', + 'annotation-unhighlight': '_nodeUnhighlighted', + }, + _graphChanged: function() { + // When a new graph is loaded, fire this event so that there is no + // info-card being displayed for the previously-loaded graph. + this.fire('graph-select'); + }, + _graphSelected: function(event) { + // Graph selection is not allowed during an active zoom event, as the + // click seen during a zoom/pan is part of the zooming and does not + // indicate a user desire to click on a specific section of the graph. + if (this._allowGraphSelect) { + this.set('selectedNode', null); + } + // Reset this variable as a bug in d3 zoom behavior can cause zoomend + // callback not to be called if a right-click happens during a zoom event. + this._allowGraphSelect = true; + }, + _disableClick: function(event) { + this._allowGraphSelect = false; + }, + _enableClick: function(event) { + this._allowGraphSelect = true; + }, + _nodeSelected: function(event) { + if (this._allowGraphSelect) { + this.set('selectedNode', event.detail.name); + } + // Reset this variable as a bug in d3 zoom behavior can cause zoomend + // callback not to be called if a right-click happens during a zoom event. + this._allowGraphSelect = true; + }, + _nodeHighlighted: function(event) { + this.set('highlightedNode', event.detail.name); + }, + _nodeUnhighlighted: function(event) { + this.set('highlightedNode', null); + }, + _nodeToggleExpand: function(event) { + var nodeName = event.detail.name; + var renderNode = this._renderHierarchy.getRenderNodeByName(nodeName); + // Op nodes are not expandable. + if (renderNode.node.type === tf.graph.NodeType.OP) { + return; + } + this._renderHierarchy.buildSubhierarchy(nodeName); + renderNode.expanded = !renderNode.expanded; + this.querySelector('#scene').setNodeExpanded(renderNode); + // Also select the expanded node. + this._nodeSelected(event); + }, + not: function(x) { + return !x; + } +}); +</script> +<dom-module id="tf-graph-icon" assetpath="../components/tf-graph/"> + <template> + <template is="dom-if" if="[[_isType(node, type, 'OP')]]"> + <template is="dom-if" if="[[_isConst(node, const)]]"> + <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 10 10"> + <circle fill="white" stroke="#848484" cx="5" cy="5" r="3"></circle> + </svg> + </template> + <template is="dom-if" if="[[_isSummary(node, summary)]]"> + <img height$="[[height]]" src="[[resolveUrl('../../lib/svg/summary-icon.svg')]]"> + </template> + <template is="dom-if" if="[[_isRegularOp(node, const, summary)]]"> + <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 8"> + <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#op-node-stamp" fill="white" stroke="#ccc" x="8" y="4"></use> + </svg> + </template> + </template> + <template is="dom-if" if="[[_isType(node, type, 'META')]]"> + <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 37 16"> + <rect x="1" y="1" fill="#d9d9d9" stroke="#ccc" stroke-width="2px" height="14" width="35" rx="5" ry="5"></rect> + </svg> + </template> + <template is="dom-if" if="[[_isType(node, type, 'SERIES')]]"> + <template is="dom-if" if="[[_isVertical(node, vertical)]]"> + <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 15"> + <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#op-series-vertical-stamp" fill="white" stroke="#ccc" x="0" y="2"></use> + </svg> + </template> + <template is="dom-if" if="[[!_isVertical(node, vertical)]]"> + <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 24 10"> + <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#op-series-horizontal-stamp" fill="white" stroke="#ccc" x="0" y="1"></use> + </svg> + </template> + </template> + </template> + + <script> + (function() { + Polymer({ + is: 'tf-graph-icon', + + properties: { + /** + * Node to represent with an icon. Optional, but if specified, its + * properties override those defined in the type, vertical, const and + * summary properties. + * @type {tf.graph.Node} + */ + node: { + type: Object, + value: null + }, + + /** Type of node to draw. */ + type: { + type: String, + value: null + }, + + /** Direction for series (ignored for other types). */ + vertical: { + type: Boolean, + value: false + }, + + /** Whether the op is Const (ignored for non-ops). */ + const: { + type: Boolean, + value: false + }, + + /** Whether the op is a Summary (ignored for non-ops). */ + summary: { + type: Boolean, + value: false + }, + + /** Height of the SVG element in pixels, used for scaling. */ + height: { + type: Number, + value: 20 + } + }, + + /** + * Test whether the specified node's type, or the literal type string, + * match a particular other type. + */ + _isType: function(inputNode, inputType, targetType) { + if (inputNode) { + return tf.graph.NodeType[inputNode.type] === targetType; + } + return inputType === targetType; + }, + + /** + * Test whether the specified node should be represented as a vertical + * series. Defaults to the value of the vertical property if node is + * not specified. + */ + _isVertical: function(inputNode, inputVertical) { + if (inputNode) { + return inputNode.hasNonControlEdges; + } + return !!inputVertical; + }, + + /** + * Test whether the specified node is a constant. Defaults to the value + * of the const property if node is not specified. + */ + _isConst: function(inputNode, inputConst) { + if (inputNode) { + return inputNode.op === 'Const'; + } + return !!inputConst; + }, + + /** + * Test whether the specified node is a summary. Defaults to the value + * of the summary property if node is not specified. + */ + _isSummary: function(inputNode, inputSummary) { + if (inputNode) { + return this._isType(inputNode, null, 'OP') && + inputNode.op.substr(-7) === 'Summary'; + } + return !!inputSummary; + }, + + /** + * Test whether the op node is a regular non-summary non-const node. + */ + _isRegularOp: function(inputNode, inputConst, inputSummary) { + return !this._isConst(inputNode, inputConst) && + !this._isSummary(inputNode, inputSummary); + } + }); + })(); + </script> +</dom-module> +<dom-module id="tf-node-list-item" assetpath="../components/tf-graph-info/"> + <style> + #list-item { + width: 100%; + color: #565656; + font-size: 11pt; + font-weight: 400; + position: relative; + } + + #list-item:hover { + background-color: var(--google-yellow-100); + } + + .clickable { + cursor: pointer; + } + + #list-item span { + display: block; + margin-left: 40px; + } + + #list-item.excluded span { + color: #999; + } + + .node-icon { + position: absolute; + top: 1px; + left: 2px; + } + </style> + <template> + <div id="list-item" on-mouseover="_nodeListener" on-mouseout="_nodeListener" on-click="_nodeListener"> + <tf-graph-icon class="node-icon" node="[[itemNode]]" height="12"></tf-graph-icon> + <span title$="[[name]]">[[name]]</span> + </div> + </template> + + <script> + (function() { + Polymer({ + is: 'tf-node-list-item', + + properties: { + /** + * The Node for the card itself, on which this item is being drawn. + * @type {tf.graph.Node} + */ + cardNode: Object, + /** + * The Node for the item within the card, somehow related to cardNode. + * @type {tf.graph.Node} + */ + itemNode: Object, + name: String, + itemType: { + type: String, + observer: '_itemTypeChanged' + } + }, + + _itemTypeChanged: function() { + if (this.itemType !== 'subnode') { + this.$['list-item'].classList.add('clickable'); + } else { + this.$['list-item'].classList.remove('clickable'); + } + }, + + _nodeListener: function(event) { + // fire node.click/mouseover/mouseout + this.fire('node-list-item-' + event.type, { + cardNode: this.cardNode.name, + nodeName: this.name, + type: this.itemType + }); + } + + }); + })(); + </script> +</dom-module> +<dom-module id="tf-node-info" assetpath="../components/tf-graph-info/"> + <style> + .sub-list-group { + padding: 8px 12px 0px; + font-weight: 500; + font-size: 12pt; + } + + .sub-list { + max-height: 300px; + overflow-y: scroll; + } + + .attr-left { + float: left; + width: 30%; + word-wrap: break-word; + color: #565656; + font-size: 11pt; + font-weight: 400; + } + + .attr-right { + margin-left: 30%; + word-wrap: break-word; + color: #565656; + font-weight: 400; + } + + paper-item { + padding: 0; + background: #e9e9e9; + } + + paper-item-body[two-line] { + min-height: 0; + padding: 8px 12px 4px; + } + + .expandedInfo { + padding: 0 0 8px; + } + + .controlDeps { + padding: 0 0 0 8px; + } + + .node-name { + white-space: normal; + word-wrap: break-word; + font-size: 14pt; + font-weight: 500; + } + + .node-icon { + float: right; + } + + .subtitle { + font-size: 12pt; + color: #5e5e5e; + } + + .controlLine { + font-size: 11pt; + font-weight: 400; + } + + .toggle-button { + float: right; + max-height: 20px; + max-width: 20px; + padding: 0; + } + + .control-toggle-button { + float: left; + max-height: 20px; + max-width: 20px; + padding: 0; + } + </style> + <template> + <paper-item> + <paper-item-body two-line=""> + <div> + <paper-icon-button icon="{{_getToggleIcon(_expanded)}}" on-click="_toggleExpanded" class="toggle-button"> + </paper-icon-button> + <div class="node-name">[[_getNodeName(nodeName)]]</div> + </div> + <div secondary=""> + <tf-graph-icon class="node-icon" node="[[_node]]"></tf-graph-icon> + <template is="dom-if" if="{{_node.op}}"> + <div class="subtitle"> + Operation: + <span>[[_node.op]]</span> + </div> + </template> + <template is="dom-if" if="{{_node.metagraph}}"> + <div class="subtitle"> + Subgraph: + <span>[[_node.cardinality]]</span> nodes + </div> + </template> + </div> + </paper-item-body> + </paper-item> + <iron-collapse opened="{{_expanded}}"> + <template is="dom-if" if="{{_expanded}}" restamp="true"> + <div class="expandedInfo"> + <div class="sub-list-group attributes"> + Attributes + (<span>[[_attributes.length]]</span>) + <iron-list class="sub-list" id="attributesList" items="[[_attributes]]"> + <template> + <div> + <div class="attr-left">[[item.key]]</div> + <div class="attr-right">[[item.value]]</div> + </div> + </template> + </iron-list> + </div> + + <template is="dom-if" if="{{_device}}"> + <div class="sub-list-group device"> + <div class="attr-left">Device</div> + <div class="attr-right">[[_device]]</div> + </div> + </template> + + <div class="sub-list-group predecessors"> + Inputs + (<span>[[_totalPredecessors]]</span>) + <iron-list class="sub-list" id="inputsList" items="[[_predecessors.regular]]"> + <template> + <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="predecessors"> + </tf-node-list-item> + </template> + </iron-list> + <template is="dom-if" if="[[_predecessors.control.length]]"> + <div class="controlDeps"> + <div class="controlLine"> + <paper-icon-button icon="{{_getToggleIcon(_openedControlPred)}}" on-click="_toggleControlPred" class="control-toggle-button"> + </paper-icon-button> + Control dependencies + </div> + <iron-collapse opened="{{_openedControlPred}}"> + <template is="dom-if" if="{{_openedControlPred}}" restamp="true"> + <iron-list class="sub-list" items="[[_predecessors.control]]"> + <template> + <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="predecessors"> + </tf-node-list-item> + </template> + </iron-list> + </template> + </iron-collapse> + </div> + </template> + </div> + + <div class="sub-list-group successors"> + Outputs + (<span>[[_totalSuccessors]]</span>) + <iron-list class="sub-list" id="outputsList" items="[[_successors.regular]]"> + <template> + <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="successor"> + </tf-node-list-item> + </template> + </iron-list> + <template is="dom-if" if="[[_successors.control.length]]"> + <div class="controlDeps"> + <div class="controlLine"> + <paper-icon-button icon="{{_getToggleIcon(_openedControlSucc)}}" on-click="_toggleControlSucc" class="control-toggle-button"> + </paper-icon-button> + Control dependencies + </div> + <iron-collapse opened="{{_openedControlSucc}}"> + <template is="dom-if" if="{{_openedControlSucc}}" restamp="true"> + <iron-list class="sub-list" items="[[_successors.control]]"> + <template> + <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="successors"> + </tf-node-list-item> + </template> + </iron-list> + </template> + </iron-collapse> + </div> + </template> + </div> + </div> + </template> + </iron-collapse> + </template> + + <script> + (function() { + Polymer({ + is: 'tf-node-info', + + properties: { + nodeName: String, + graphHierarchy: Object, + _node: { + type: Object, + computed: '_getNode(nodeName, graphHierarchy)', + observer: '_resetState' + }, + _attributes: { + type: Array, + computed: '_getAttributes(_node)' + }, + _device: { + type: String, + computed: '_getDevice(_node)' + }, + _successors: { + type: Object, + computed: '_getSuccessors(_node, graphHierarchy)' + }, + _predecessors: { + type: Object, + computed: '_getPredecessors(_node, graphHierarchy)' + }, + _subnodes: { + type: Array, + computed: '_getSubnodes(_node)' + }, + _expanded: { + type: Boolean, + value: true + }, + _totalPredecessors: { + type: Number, + computed: '_getTotalPred(_predecessors)' + }, + _totalSuccessors: { + type: Number, + computed: '_getTotalSucc(_successors)' + }, + _openedControlPred: { + type: Boolean, + value: false + }, + _openedControlSucc: { + type: Boolean, + value: false + }, + }, + expandNode: function() { + this.fire('_node.expand', this.node); + }, + _getNode: function(n, graphHierarchy) { + return graphHierarchy.node(n); + }, + _getNodeName: function(nodeName) { + // Insert a zero-width whitespace character before each slash so that + // long node names wrap cleanly at path boundaries. + return (nodeName || '').replace(/\//g, '\u200B/'); + }, + _getAttributes: function(node) { + this.async(this._resizeList.bind(this, "#attributesList")); + return node && node.attr ? node.attr.map(function(entry) { + return {key: entry.key, value: JSON.stringify(entry.value)}; + }) : []; + + }, + _getDevice: function(node) { + return node ? node.device : null; + }, + _getSuccessors: function(node, hierarchy) { + this.async(this._resizeList.bind(this, "#inputsList")); + return node ? hierarchy.getSuccessors(node.name) : [[], []]; + }, + _getPredecessors: function(node, hierarchy) { + this.async(this._resizeList.bind(this, "#outputsList")); + return node ? hierarchy.getPredecessors(node.name) : [[], []]; + }, + _getSubnodes: function(node) { + return node && node.metagraph ? node.metagraph.nodes() : null; + }, + _getTotalPred: function(predecessors) { + return predecessors.regular.length + predecessors.control.length; + }, + _getTotalSucc: function(successors) { + return successors.regular.length + successors.control.length; + }, + _toggleControlPred: function() { + this._openedControlPred = !this._openedControlPred; + }, + _toggleControlSucc: function() { + this._openedControlSucc = !this._openedControlSucc; + }, + _toggleExpanded: function() { + this._expanded = !this._expanded; + }, + _getToggleIcon: function(expanded) { + return expanded ? "expand-less" : "expand-more"; + }, + _resetState: function() { + this._openedControlPred = false; + this._openedControlSucc = false; + }, + _resizeList: function(selector) { + var list = document.querySelector(selector); + if (list) { + list.fire('iron-resize'); + } + } + }); + })(); + </script> +</dom-module> +<dom-module id="tf-graph-info" assetpath="../components/tf-graph-info/"> +<template> +<style> +:host { + font-size: 12px; + margin: 0; + padding: 0; + display: block; +} + +h2 { + padding: 0; + text-align: center; + margin: 0; +} +</style> +<template is="dom-if" if="{{selectedNode}}"> + <paper-material elevation="1" class="card"> + <tf-node-info graph-hierarchy="[[graphHierarchy]]" flat-graph="[[graph]]" node-name="[[selectedNode]]" highlighted-node="{{highlightedNode}}"> + </tf-node-info> + </paper-material> +</template> +</template> +<script> +(function() { + Polymer({ + is: 'tf-graph-info', + + properties: { + title: String, + graphHierarchy: Object, + graph: Object, + // Two-ways + selectedNode: { + type: String, + notify: true + }, + highlightedNode: { + type: String, + notify: true + } + }, + listeners: { + 'node-list-item-click': '_nodeListItemClicked', + 'node-list-item-mouseover': '_nodeListItemMouseover', + 'node-list-item-mouseout': '_nodeListItemMouseout' + }, + _nodeListItemClicked: function(event) { + this.selectedNode = event.detail.nodeName; + }, + _nodeListItemMouseover: function(event) { + this.highlightedNode = event.detail.nodeName; + }, + _nodeListItemMouseout: function() { + this.highlightedNode = null; + } + }); +})(); +</script> +</dom-module> +<dom-module id="tf-graph-board" assetpath="../components/tf-graph-board/"> +<template> +<style> +::host { + display: block; +} + +/deep/ .close { + position: absolute; + cursor: pointer; + left: 15px; + bottom: 15px; +} + +.container { + width: 100%; + height: 100%; + opacity: 1; +} + +.container.loading { + cursor: progress; + opacity: 0.1; +} + +.container.loading.error { + cursor: auto; +} + +#info { + position: absolute; + right: 5px; + top: 5px; + padding: 0px; + max-width: 380px; + min-width: 320px; + background-color: rgba(255,255,255,0.9); + @apply(--shadow-elevation-2dp); +} + +#main { + width: 100%; + height: 100%; +} + +#progress-bar { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + position: absolute; + top: 40px; + left: 0; + font-size: 13px; +} + +#progress-msg { + width: 400px; + margin-bottom: 5px; +} + +paper-progress { + width: 400px; + --paper-progress-height: 6px; + --paper-progress-active-color: #f3913e; +} +</style> +<template is="dom-if" if="[[_isNotComplete(progress)]]"> + <div id="progress-bar"> + <div id="progress-msg">[[progress.msg]]</div> + <paper-progress value="[[progress.value]]"></paper-progress> + </div> +</template> +<div class$="[[_getContainerClass(progress)]]"> + <div id="main"> + <tf-graph id="graph" graph-hierarchy="[[graphHierarchy]]" selected-node="{{_selectedNode}}" highlighted-node="{{_highlightedNode}}" color-by="[[colorBy]]" color-by-params="{{colorByParams}}" graph-name="[[graphName]]" progress="[[progress]]"></tf-graph> + </div> + <div id="info"> + <tf-graph-info id="graph-info" title="selected" graph-hierarchy="[[graphHierarchy]]" graph="[[graph]]" selected-node="{{_selectedNode}}" highlighted-node="{{_highlightedNode}}"></tf-graph-info> + </div> +</div> +</template> +</dom-module> + +<script> +Polymer({ + is: 'tf-graph-board', + properties: { + // Public API. + graphHierarchy: Object, + graph: Object, + graphName: String, + // True if the graph data has also run-time stats. + hasStats: Boolean, + /** + * @type {value: number, msg: string} + * + * A number between 0 and 100 denoting the % of progress + * for the progress bar and the displayed message. + */ + progress: Object, + colorByParams: { + type: Object, + notify: true, + }, + // Private API: Data routing between child components. + _selectedNode: String, + _highlightedNode: String, + }, + /** True if the progress is not complete yet (< 100 %). */ + _isNotComplete: function(progress) { + return progress.value < 100; + }, + _getContainerClass: function(progress) { + var result = 'container'; + if (progress.error) { + result += ' error'; + } + if (this._isNotComplete(progress)) { + result += ' loading'; + } + return result; + } +}); +</script> +<dom-module id="tf-graph-controls" assetpath="../components/tf-graph/"> +<template> +<style> +:host { + font-size: 12px; + color: gray; + --paper-font-subhead: { + font-size: 14px; + color: gray; + }; + --paper-dropdown-menu-icon: { + width: 15px; + height: 15px; + }; + --paper-dropdown-menu-button: { + padding: 0; + }; + --paper-dropdown-menu-input: { + padding: 0; + }; + --paper-item-min-height: 30px; +} + +paper-button[raised].keyboard-focus { + font-weight: normal; +} + +.run-dropdown { + --paper-input-container: { + padding: 9px 0 0 25px; + }; +} + +.color-dropdown { + --paper-input-container: { + padding: 9px 0 0 13px; + }; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +table td { + padding: 0; + margin: 0; +} + +.allcontrols { + padding: 10px; +} + +.legend-holder { + position: absolute; + bottom: 0; + padding-bottom: 10px; +} + +#fit { + color: var(--paper-orange-500); +} + +paper-radio-button { + padding: 5px; +} +svg.icon { + width: 60px; + height: 18px; +} +.icon ellipse { + rx: 10px; + ry: 5px; + stroke: #CCC; + stroke-width: 1px; + fill: #FFFFFF; + cy: 10px; +} +.icon rect { + height: 14px; + width: 35px; + rx: 5px; + ry: 5px; + stroke: #CCC; + stroke-width: 2px; + fill: #D9D9D9; +} +.domainValues { + width: 165px; +} +.domainStart { + float: left; +} +.domainEnd { + float: right; +} +.colorBox { + width: 20px; +} + +.image-icon { + width: 24px; + height: 24px; +} + +.gray { + color: #666; +} + +.title { + font-size: 16px; + margin: 8px 5px 8px 0; + color: black; +} +.title small { + font-weight: normal; +} +.deviceList { + max-height: 100px; + overflow-y: auto; +} + +#file { + padding: 8px 0; +} + +.color-text { + padding: 0 0 0 55px; +} + +.fit-button-text { + text-transform: none; + padding: 8px 18px 0 18px; + font-size: 14px +} + +.upload-button { + width: 165px; + height: 25px; + text-transform: none; + margin-top: 4px; +} + +.fit-button { + padding: 2px; + width: 30px; + height: 30px; +} + +.hidden-input { + height: 0px; + width: 0px; + overflow:hidden; +} + +.allcontrols .control-holder { + display: flex; + clear: both; +} +</style> +<div class="allcontrols"> + <div class="control-holder"> + <paper-icon-button id="fit" icon="aspect-ratio" class="fit-button" on-click="fit" alt="Fit to screen"> + </paper-icon-button> + <paper-button class="fit-button-text" on-click="fit">Fit to screen + </paper-button> + </div> + <div class="control-holder"> + <div class="title">Run</div> + <paper-dropdown-menu no-label-float="" no-animations="" noink="" class="run-dropdown"> + <paper-menu id="select" class="dropdown-content" selected="{{selectedDataset}}"> + <template is="dom-repeat" items="[[datasets]]"> + <paper-item>[[item.name]]</paper-item> + </template> + </paper-menu> + </paper-dropdown-menu> + </div> + <div class="control-holder"> + <div class="title">Upload</div> + <paper-button raised="" class="text-button upload-button" on-click="_getFile">Choose File</paper-button> + <div class="hidden-input"> + <input type="file" id="file" name="file" on-change="_updateFileInput"> + </div> + </div> + <div class="control-holder"> + <div class="title">Color</div> + <paper-dropdown-menu no-label-float="" no-animations="" noink="" class="color-dropdown"> + <paper-menu class="dropdown-content" selected="{{_colorByIndex}}"> + <paper-item>Structure</paper-item> + <paper-item>Device</paper-item> + <template is="dom-if" if="[[hasStats]]"> + <paper-item>Compute time</paper-item> + <paper-item>Memory</paper-item> + </template> + </paper-menu> + </paper-dropdown-menu> + </div> + <div> + <template is="dom-if" if="[[_isGradientColoring(colorBy)]]"> + <svg width="160" height="20" style="margin: 0 5px" class="color-text"> + <defs> + <linearGradient id="linearGradient" x1="0%" y1="0%" x2="100%" y2="0%"> + <stop class="start" offset="0%" stop-color$="[[_currentGradientParams.startColor]]"></stop> + <stop class="end" offset="100%" stop-color$="[[_currentGradientParams.endColor]]"></stop> + </linearGradient> + </defs> + <rect x="0" y="0" width="160" height="20" fill="url(#linearGradient)" stroke="black"></rect> + </svg> + <div class="domainValues color-text"> + <div class="domainStart">[[_currentGradientParams.minValue]]</div> + <div class="domainEnd">[[_currentGradientParams.maxValue]]</div> + </div> + </template> + <template is="dom-if" if="[[_equals(colorBy, 'structure')]]"> + <div class="color-text"> + color: same substructure<br> + gray: unique substructure + </div> + </template> + <template is="dom-if" if="[[_equals(colorBy, 'device')]]"> + <div class="color-text"> + <div class="deviceList"> + <table> + <template is="dom-repeat" items="[[colorByParams.device]]"> + <tr> + <td style$="[[_getBackgroundColor(item.color)]]"> + <div class="colorBox"></div> + </td> + <td> + <div>[[item.device]]</div> + </td> + </tr> + </template> + </table> + </div> + <br> + gray: unknown device + </div> + </template> + </div> + <div class="legend-holder"> + <table> + <tbody><tr> + <td><div class="title">Graph</div></td> + <td>(* = expandable)</td> + </tr> + <tr> + <td> + <svg class="icon"> + <rect transform="translate(3, 1)" height="14" width="35" rx="5" ry="5"></rect> + </svg> + </td> + <td>Namespace<span class="gray">*</span></td> + </tr> + <tr> + <td> + <svg class="icon" preserveAspectRatio="xMinYMid meet" viewBox="0 0 10 10"> + <use xlink:href="#op-node-stamp" fill="white" stroke="#ccc" x="9.5" y="6"></use> + </svg> + </td> + <td>OpNode</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 12 12"> + <use xlink:href="#op-series-horizontal-stamp" fill="white" stroke="#ccc" x="2" y="2"></use> + </svg> + </td> + <td>Unconnected series<span class="gray">*</span></td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <use xlink:href="#op-series-vertical-stamp" fill="white" stroke="#ccc" x="2" y="2"></use> + </svg> + </td> + <td>Connected series<span class="gray">*</span></td> + </tr> + <tr> + <td> + <svg class="icon"> + <circle fill="white" stroke="#848484" cx="10" cy="10" r="5"></circle> + </svg> + </td> + <td>Constant</td> + </tr> + <tr> + <td> + <svg class="image-icon"> + <image id="summary-icon" width="24" height="24" x="0" y="0" class="image-icon"></image> + </svg> + </td> + <td>Summary</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <defs> + <marker id="arrowhead-legend" fill="#bbb" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto"> + <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"></path> + </marker> + <marker id="ref-arrowhead-legend" fill="#bbb" markerWidth="10" markerHeight="10" refX="1" refY="5" orient="auto"> + <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"></path> + </marker> + </defs> + <path marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0" stroke-linecap="round"></path> + </svg> + </td> + <td>Dataflow edge</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <path marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0" stroke-linecap="round" stroke-dasharray="2, 2"></path> + </svg> + </td> + <td>Control dependency edge</td> + </tr> + <tr> + <td> + <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15"> + <path marker-start="url(#ref-arrowhead-legend)" marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0" stroke-linecap="round"></path> + </svg> + </td> + <td>Reference edge</td> + </tr> + </tbody></table> + </div> + </div> +</template> +<script> +(function() { // Private scope. +Polymer({ + is: 'tf-graph-controls', + ready: function() { + // Set the url to download the summary icon. + d3.select(this.$['summary-icon']) + .attr('xlink:href', this.resolveUrl('../../lib/svg/summary-icon.svg')); + }, + properties: { + // Public API. + hasStats: { + type: Boolean + }, + colorBy: { + type: String, + notify: true, + computed: '_getColorBy(_colorByIndex)' + }, + colorByParams: Object, + datasets: { + type: Array, + observer: '_datasetsChanged' + }, + selectedDataset: { + type: Number, + notify: true, + value: 0, + }, + selectedFile: { + type: Object, + notify: true + }, + // Private API. + _colorByIndex: { + type: Number, + value: 0 // Defaults to 'structure'. + }, + _currentGradientParams: { + type: Object, + computed: '_getCurrentGradientParams(colorByParams, colorBy)' + } + }, + _getColorBy: function(colorByIndex) { + return ["structure", "device", "compute_time", "memory"][colorByIndex]; + }, + _getBackgroundColor: function(color) { + return 'background-color:' + color; + }, + fit: function() { + document.querySelector('#scene').fit(); + }, + _isGradientColoring: function(colorBy) { + return ["compute_time", "memory"].indexOf(colorBy) !== -1; + }, + _equals: function(a, b) { + return a === b; + }, + _getCurrentGradientParams: function(colorByParams, colorBy) { + if (!this._isGradientColoring(colorBy)) { + return; + } + var params = colorByParams[colorBy]; + var minValue = params.minValue; + var maxValue = params.maxValue; + if (colorBy === 'memory') { + minValue = convertToHumanReadable(minValue, MEMORY_UNITS); + maxValue = convertToHumanReadable(maxValue, MEMORY_UNITS); + } else if (colorBy === 'compute_time') { + minValue = convertToHumanReadable(minValue, TIME_UNITS); + maxValue = convertToHumanReadable(maxValue, TIME_UNITS); + } + return { + minValue: minValue, + maxValue: maxValue, + startColor: params.startColor, + endColor: params.endColor + }; + }, + _updateFileInput: function(e) { + this.set('selectedFile', e); + }, + _datasetsChanged: function(newDatasets, oldDatasets) { + if (oldDatasets != null || this.selected == null) { + // Select the first dataset by default. + this.set('selectedDataset', 0); + } + }, + _getFile: function() { + this.$.file.click(); + } +}); + +// Private methods. +var MEMORY_UNITS = [ + // Atomic unit. + {symbol: 'B'}, + // numUnits specifies how many previous units this unit contains. + {symbol: 'KB', numUnits: 1024}, + {symbol: 'MB', numUnits: 1024}, + {symbol: 'GB', numUnits: 1024}, + {symbol: 'TB', numUnits: 1024}, + {symbol: 'PB', numUnits: 1024} +]; +var TIME_UNITS = [ + // Atomic unit. Finest granularity in TensorFlow stat collection. + {symbol: 'µs'}, + // numUnits specifies how many previous units this unit contains. + {symbol: 'ms', numUnits: 1000}, + {symbol: 's', numUnits: 1000}, + {symbol: 'min', numUnits: 60}, + {symbol: 'hr', numUnits: 60}, + {symbol: 'days', numUnits: 24} +]; + +/** + * Returns the human readable version of the unit. + * (e.g. 1.35 GB, 23 MB, 34 ms, 6.53 min etc). + */ +function convertToHumanReadable(value, units, unitIndex) { + unitIndex = unitIndex == null ? 0 : unitIndex; + if (unitIndex + 1 < units.length && value >= units[unitIndex + 1].numUnits) { + return convertToHumanReadable(value / units[unitIndex + 1].numUnits, + units, unitIndex + 1); + } + // toPrecision() has the tendency to return a number in scientific + // notation and (number - 0) brings it back to normal notation. + return (value.toPrecision(3) - 0) + ' ' + units[unitIndex].symbol; +} +})(); // Closing private scope. +</script> +</dom-module> +<dom-module id="tf-graph-dashboard" assetpath="../components/tf-graph-dashboard/"> +<template> +<div id="plumbing"> + <tf-url-generator out-runs-url="{{_runsUrl}}" out-graph-url-generator="{{_graphUrlGen}}" id="urlGenerator"></tf-url-generator> + <tf-run-generator id="runGenerator" url="[[_runsUrl]]" out-runs-with-graph="{{_runsWithGraph}}"></tf-run-generator> +</div> +<template is="dom-if" if="[[_datasetsEmpty(_datasets)]]"> +<div class="warning"> + <p> + No graph definition files were found. + </p> + <p> + To store a graph, create a + <code>tf.python.training.summary_io.SummaryWriter</code> + and pass the graph either via the constructor, or by calling its + <code>add_graph()</code> method. + </p> +</div> +</template> +<template is="dom-if" if="[[!_datasetsEmpty(_datasets)]]"> +<tf-dashboard-layout> +<div class="sidebar"> + <tf-graph-controls id="controls" color-by-params="[[_colorByParams]]" has-stats="[[_hasStats]]" color-by="{{_colorBy}}" ,="" datasets="[[_datasets]]" selected-dataset="{{_selectedDataset}}" selected-file="{{_selectedFile}}"></tf-graph-controls> + <tf-graph-loader id="loader" datasets="[[_datasets]]" ,="" selected-dataset="[[_selectedDataset]]" selected-file="[[_selectedFile]]" out-graph-hierarchy="{{_graphHierarchy}}" out-graph="{{_graph}}" out-graph-name="{{_graphName}}" has-stats="{{_hasStats}}" progress="{{_progress}}"></tf-graph-loader> +</div> +<div class="center"> + <tf-graph-board id="graphboard" graph-hierarchy="[[_graphHierarchy]]" graph="[[_graph]]" has-stats="[[_hasStats]]" graph-name="[[_graphName]]" progress="[[_progress]]" color-by="[[_colorBy]]" color-by-params="{{_colorByParams}}"> + </tf-graph-board> +</div> +</tf-dashboard-layout></template> +<style> + +:host /deep/ { + font-family: 'Roboto', sans-serif; +} + +.center { + height: 100%; +} + +</style> +<style include="warning-style"></style> +</template> +</dom-module> + +<script> +(function() { +Polymer({ + is: 'tf-graph-dashboard', + properties: { + _runsWithGraph: Array, + _datasets: { + type: Object, + computed: '_getDatasets(_runsWithGraph, _graphUrlGen)' + } + }, + _getDatasets: function(runsWithGraph, graphUrlGen) { + return _.map(runsWithGraph, function(runName) { + return { + name: runName, + path: graphUrlGen(runName) + }; + }); + }, + _datasetsEmpty: function(datasets) { + return !datasets || !datasets.length; + } +}); +})(); +</script> +</div><dom-module id="tf-tensorboard"> + <template> + <paper-header-panel> + <paper-toolbar id="toolbar"> + <div id="toolbar-content"> + <div class="toolbar-title"> + TensorBoard + </div> + <div class="right-buttons"> + <paper-button class="link-button" on-click="chooseEvents" active$="[[eventDashboard(mode)]]" noink="">Events</paper-button> + <paper-button class="link-button" on-click="chooseImages" active$="[[imageDashboard(mode)]]" noink="">Images</paper-button> + <paper-button class="link-button" on-click="chooseGraphs" active$="[[graphDashboard(mode)]]" noink="">Graph</paper-button> + <paper-button class="link-button" on-click="chooseHistograms" active$="[[histogramDashboard(mode)]]" noink="">Histograms</paper-button> + </div> + </div> + </paper-toolbar> + <div id="content" class="fit"> + <template is="dom-if" if="[[eventDashboard(mode)]]"> + <tf-event-dashboard id="eventDash"></tf-event-dashboard> + </template> + + <template is="dom-if" if="[[imageDashboard(mode)]]"> + <tf-image-dashboard id="imageDash"></tf-image-dashboard> + </template> + + <template is="dom-if" if="[[graphDashboard(mode)]]"> + <tf-graph-dashboard id="graphDash"></tf-graph-dashboard> + </template> + + <template is="dom-if" if="[[histogramDashboard(mode)]]"> + <tf-histogram-dashboard id="histogramDash"></tf-histogram-dashboard> + </template> + </div> + </paper-header-panel> + <style> + #toolbar { + background-color: var(--tb-orange-strong); + background-image: radial-gradient(ellipse, var(--tb-orange-weak), var(--tb-orange-strong)); + } + #toolbar-content { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + .toolbar-title { + font-size: 30px; + } + #content { + height: 100%; + } + .link-button { + height: 30px; + } + [active] { + font-weight: bold; + } + :host { + height: 100%; + display: block; + } + </style> + </template> + <script> + Polymer({ + is: "tf-tensorboard", + properties: { + mode: { + type: String, + value: "events", + }, + }, + chooseEvents: function() { + this.mode = "events"; + }, + chooseImages: function() { + this.mode = "images"; + }, + chooseGraphs: function() { + this.mode = "graphs"; + }, + chooseHistograms: function() { + this.mode = "histograms"; + }, + eventDashboard: function(mode) { + return mode === "events"; + }, + imageDashboard: function(mode) { + return mode === "images"; + }, + graphDashboard: function(mode) { + return mode === "graphs"; + }, + histogramDashboard: function(mode) { + return mode === "histograms"; + } + }); + </script> +</dom-module> +</body></html>
\ No newline at end of file diff --git a/tensorflow/tensorboard/float_wrapper.py b/tensorflow/tensorboard/float_wrapper.py new file mode 100644 index 0000000000..9fe45d9070 --- /dev/null +++ b/tensorflow/tensorboard/float_wrapper.py @@ -0,0 +1,30 @@ +"""A module providing a function for serializing JSON values with Infinity. + +Python provides no way to override how json.dumps serializes +Infinity/-Infinity/NaN; if allow_nan is true, it encodes them as +Infinity/-Infinity/NaN, in violation of the JSON spec and in violation of what +JSON.parse accepts. If it's false, it throws a ValueError, Neither subclassing +JSONEncoder nor passing a function in the |default| keyword argument overrides +this. +""" + +import math + + +def WrapSpecialFloats(obj): + """Replaces all instances of Infinity/-Infinity/NaN with strings.""" + if obj == float('inf'): + return 'Infinity' + elif obj == float('-inf'): + return '-Infinity' + elif isinstance(obj, float) and math.isnan(obj): + return 'NaN' + elif isinstance(obj, list) or isinstance(obj, tuple): + return map(WrapSpecialFloats, obj) + elif isinstance(obj, dict): + return { + WrapSpecialFloats(k): WrapSpecialFloats(v) + for k, v in obj.items() + } + else: + return obj diff --git a/tensorflow/tensorboard/float_wrapper_test.py b/tensorflow/tensorboard/float_wrapper_test.py new file mode 100644 index 0000000000..5f6594733c --- /dev/null +++ b/tensorflow/tensorboard/float_wrapper_test.py @@ -0,0 +1,38 @@ +import tensorflow.python.platform + +from tensorflow.python.platform import googletest +from tensorflow.tensorboard import float_wrapper + +_INFINITY = float('inf') + + +class FloatWrapperTest(googletest.TestCase): + + def _assertWrapsAs(self, to_wrap, expected): + """Asserts that |to_wrap| becomes |expected| when wrapped.""" + actual = float_wrapper.WrapSpecialFloats(to_wrap) + for a, e in zip(actual, expected): + self.assertEqual(e, a) + + def testWrapsPrimitives(self): + self._assertWrapsAs(_INFINITY, 'Infinity') + self._assertWrapsAs(-_INFINITY, '-Infinity') + self._assertWrapsAs(float('nan'), 'NaN') + + def testWrapsObjectValues(self): + self._assertWrapsAs({'x': _INFINITY}, {'x': 'Infinity'}) + + def testWrapsObjectKeys(self): + self._assertWrapsAs({_INFINITY: 'foo'}, {'Infinity': 'foo'}) + + def testWrapsInListsAndTuples(self): + self._assertWrapsAs([_INFINITY], ['Infinity']) + # map() returns a list even if the argument is a tuple. + self._assertWrapsAs((_INFINITY,), ['Infinity',]) + + def testWrapsRecursively(self): + self._assertWrapsAs({'x': [_INFINITY]}, {'x': ['Infinity']}) + + +if __name__ == '__main__': + googletest.main() diff --git a/tensorflow/tensorboard/gulpfile.js b/tensorflow/tensorboard/gulpfile.js new file mode 100644 index 0000000000..34b567d62a --- /dev/null +++ b/tensorflow/tensorboard/gulpfile.js @@ -0,0 +1,170 @@ +// Based on the gulpfile provided by angular team +// (https://github.com/angular/ts2dart/blob/master/gulpfile.js) +var gulp = require('gulp'); +var ts = require('gulp-typescript'); +var typescript = require('typescript'); +var gutil = require('gulp-util'); +var mochaPhantomJS = require('gulp-mocha-phantomjs'); +var tslint = require('gulp-tslint'); +var server = require('gulp-server-livereload'); +var concat = require('gulp-concat'); +var merge = require('merge2'); +var gulpFilter = require('gulp-filter'); +var vulcanize = require('gulp-vulcanize'); +var rename = require('gulp-rename'); +var minimist = require('minimist'); +var replace = require('gulp-replace'); + +var options = minimist(process.argv.slice(2), { + default: { + p: 8000 // port for gulp server + } +}); + +var tsProject = ts.createProject('tsconfig.json', { + typescript: typescript, + noExternalResolve: true, // opt-in for faster compilation! +}); + +var hasError; +var failOnError = true; // Is set to false when watching. + +var onError = function(err) { + hasError = true; + gutil.log(err.message); + if (failOnError) { + process.exit(1); + } +}; + +gulp.task('compile.all', function() { + hasError = false; + var isComponent = gulpFilter(['components/**/*.js', '!components/**/test/*']); + var isApp = gulpFilter(['app/**/*.js']); + var isTest = gulpFilter(['test/**/*', 'components/**/test/*']); + + var srcs = ['components/**/*.ts', 'test/**/*.ts', 'app/**/*.ts', + 'typings/**/*.d.ts', 'bower_components/**/*.d.ts']; + + var tsResult = gulp.src(srcs, {base: '.'}) + .pipe(ts(tsProject)) + .on('error', onError); + return merge([ + // Send concatenated component code to build/component + tsResult.js + .pipe(isComponent) + .pipe(concat('components.js')) + .pipe(gulp.dest('build')), + + // Duplicate all component code to live next to the ts file + // (makes polymer imports very clean) + tsResult.js + .pipe(isComponent) + .pipe(gulp.dest('.')), + + tsResult.js + .pipe(isApp) + .pipe(gulp.dest('.')), + + // Send all test code to build/test.js + tsResult.js + .pipe(isTest) + .pipe(concat('test.js')) + .pipe(gulp.dest('build')), + + // Create a unified defintions file at build/all.d.ts + tsResult.dts + .pipe(concat('all.d.ts')) + .pipe(gulp.dest('build')), + ]); +}); + +var tslintTask = function(strict) { + return function(done) { + if (hasError) { + done(); + return; + } + return gulp.src(['components/**/*.ts', 'test/**/*.ts']) + .pipe(tslint()) + .pipe(tslint.report('verbose', { + emitError: strict, + })); + }; +}; + +// Since constructs like console.log are disabled by tslint +// but very useful while developing, create a "permissive" +// version of tslint that warns without erroring, for the +// watch task. +gulp.task('tslint-permissive', [], tslintTask(false)); +gulp.task('tslint-strict', [], tslintTask(true)); + + +gulp.task('run-tests', ['compile.all'], function(done) { + if (hasError) { + done(); + return; + } + return gulp.src('tests.html') + .pipe(mochaPhantomJS({reporter: 'dot'})); +}); + +gulp.task('test', ['run-tests', 'tslint-strict']); +gulp.task('watch', ['run-tests', 'tslint-permissive'], function() { + failOnError = false; + // Avoid watching generated .d.ts in the build (aka output) directory. + return gulp.watch(['test/**/*.ts', 'components/**/*.ts'], + {ignoreInitial: true}, + ['run-tests', 'tslint-permissive']); +}); + +gulp.task('server', function() { + gulp.src('.') + .pipe(server({ + host: '0.0.0.0', + port: options.p, + livereload: { + enable: true, + port: 27729 + options.p + }, + directoryListing: true, + })); +}); + + +var linkRegex = /<link rel="[^"]*" (type="[^"]*" )?href=".*bower_components[^"]*">\n/g; +var scriptRegex = /<script src=".*bower_components[^"]*"><\/script>\n/g; +gulp.task('vulcanize', ['compile.all', 'tslint-strict'], function() { + gulp.src('app/tf-tensorboard.html') + .pipe(vulcanize({ + inlineScripts: true, + inlineCss: true, + stripComments: true, + excludes: ['/bower_components/'], + })) + // TODO(danmane): Remove this worrysome brittleness when vulcanize + // fixes https://github.com/Polymer/vulcanize/issues/273 + .pipe(replace(linkRegex, '')) + .pipe(replace(scriptRegex, '')) + .pipe(gulp.dest('dist')); + + gulp.src('app/index.html') + .pipe(vulcanize({ + inlineScripts: true, + inlineCss: true, + stripComments: true, + })) + .pipe(gulp.dest('dist')); + + gulp.src('app/tf-tensorboard-demo.html') + .pipe(vulcanize({ + inlineScripts: true, + inlineCss: true, + stripComments: true, + })) + .pipe(gulp.dest('dist')); +}); + +gulp.task('serve', ['server']); // alias +gulp.task('default', ['watch']); diff --git a/tensorflow/tensorboard/http_api.md b/tensorflow/tensorboard/http_api.md new file mode 100644 index 0000000000..953c020692 --- /dev/null +++ b/tensorflow/tensorboard/http_api.md @@ -0,0 +1,210 @@ +# Tensorboard client-server HTTP API + +## Runs, Tags, and Tag Types + +TensorBoard data is organized around the concept of a `run`, which represents +all the related data thrown off by a single execution of TensorFlow, a `tag`, +which groups values of data that come from the same source within a TensorFlow +run, and `tag types`, which are our way of distinguishing different types of +data that have fundamentally different representations and should be processed +on different code paths. For example, a "train" run may have a `scalars` +tag that represents the learning rate, another `scalars` tag that +represents the value of the objective function, a `histograms` tag that reveals +information on weights in a particular layer over time, and an `images` tag that +shows input images flowing into the system. The "eval" run might have an +entirely different set of tag names, or some duplicated tag names. + +The currently supported tag types are `scalars`, `images`, `histograms` and +`graph`. Each tag type corresponds to a route (documented below) for +retrieving tag data of that type. + +All of the data provided comes from TensorFlow events files ('\*.tfevents\*'), +which are written using the SummaryWriter class +(tensorflow/python/training/summary_writer.py), and the data is generated by +summary ops (tensorflow/python/ops/summary_ops.py). The `scalars` come from +the `ScalarSummary` op, the `histograms` from the `HistogramSummary`, and the +`images` from `ImageSummary`. The tag type `graph` is special in that it is not +a collection of tags of that type, but a boolean denoting if there is a graph +definition associated with the run. The tag is provided to the summary +op (usually as a constant). + +## `/runs` + +Returns a dictionary mapping from `run name` (quoted string) to dictionaries +mapping from all available tagTypes to a list of tags of that type available for +the run. Think of this as a comprehensive index of all of the data available +from the TensorBoard server. Here is an example: + +{ + "train_run": { + "histograms": ["foo_histogram", "bar_histogram"], + "scalars": ["xent", "loss", "learning_rate"], + "images": ["input"], + "graph": true + }, + "eval": { + "histograms": ["foo_histogram", "bar_histogram"], + "scalars": ["precision", "recall"], + "images": ["input"], + "graph": false + } +} + +Note that the same tag may be present for many runs. It is not guaranteed that +they will have the same meaning across runs. It is also not guaranteed that they +will have the same tag type across different runs. + +## '/scalars?run=foo&tag=bar' + +Returns an array of event_accumulator.SimpleValueEvents ([wall_time, step, +value]) for the given run and tag. wall_time is seconds since epoch. + +Example: +[ + [1443856985.705543, 1448, 0.7461960315704346], # wall_time, step, value + [1443857105.704628, 3438, 0.5427092909812927], + [1443857225.705133, 5417, 0.5457325577735901], + ... +] + +If the format parameter is set to 'csv', the response will instead be in CSV +format: + + Wall time,step,value + 1443856985.705543,1448,0.7461960315704346 + 1443857105.704628,3438,0.5427092909812927 + 1443857225.705133,5417,0.5457325577735901 + + +## '/histograms?run=foo&tag=bar' + +Returns an array of event_accumulator.HistogramEvents ([wall_time, step, +HistogramValue]) for the given run and tag. A HistogramValue is [min, max, num, +sum, sum_squares, bucket_limit, bucket]. wall_time is seconds since epoch. + +Annotated Example: (note - real data is higher precision) + +[ + [ + 1443871386.185149, # wall_time + 235166, # step + [ + -0.66, # minimum value + 0.44, # maximum value + 8.0, # number of items in the histogram + -0.80, # sum of items in the histogram + 0.73, # sum of squares of items in the histogram + [-0.68, -0.62, -0.292, -0.26, -0.11, -0.10, -0.08, -0.07, -0.05, + -0.0525, -0.0434, -0.039, -0.029, -0.026, 0.42, 0.47, 1.8e+308], + # the right edge of each bucket + [0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, + 1.0, 0.0] # the number of elements within each bucket + ] + ] + ] + +## '/compressedHistograms?run=foo&tag=bar' + +Returns an array of event_accumulator.CompressedHistogramEvents ([wall_time, +step, CompressedHistogramValues]) for the given run and tag. + +CompressedHistogramValues is a list of namedtuples with each tuple specifying +a basis point (bps) as well as an interpolated value of the histogram value +at that basis point. A basis point is 1/100 of a percent. + +The current compression strategy is to choose basis points that correspond to +the median and bands of 1SD, 2SD, and 3SDs around the median. Note that the +current compression strategy does not work well for representing multimodal +data -- this is something that will be improved in a later iteration. + +Annotated Example: (note - real data is higher precision) + +[ + [ + 1441154832.580509, # wall_time + 5, # step + [ [0, -3.67], # CompressedHistogramValue for 0th percentile + [2500, -4.19], # CompressedHistogramValue for 25th percentile + [5000, 6.29], + [7500, 1.64], + [10000, 3.67] + ] + ], + ... +] + +## `/images?run=foo&tag=bar` + +Gets a sample of ImageMetadatas for the given run and tag. + +Returns an array of objects containing information about available images, +crucially including the query parameter that may be used to retrieve that image. +(See /individualImage for details.) + +For example: + { + "width": 28, # width in pixels + "height": 28, # height in pixels + "wall_time": 1440210599.246, # time in seconds since epoch + "step": 63702821, # number of steps that have passed + "query": "index=0&tagname=input%2Fimage%2F2&run=train" + # param for /individualImage + } + +## `/individualImage?{{query}}` + +Retrieves an individual image. The image query should not be generated by the +frontend, but instead acquired from calling the /images route (the image +metadata objects contain the query to use). The response is the image itself +with mime-type 'image/png'. + +Note that the query is not guaranteed to always refer to the same image even +within a single run, as images may be removed from the sampling reservoir and +replaced with other images. (See Notes for details on the reservoir sampling.) + +An example call to this route would look like this: +/individualImage?index=0&tagname=input%2Fimage%2F2&run=train + +## `/graph?run=foo` + +Returns the graph definition for the given run in gzipped pbtxt format. The +graph is composed of a list of nodes, where each node is a specific TensorFlow +operation which takes as inputs other nodes (operations). + +An example pbtxt response of graph with 3 nodes: +node { + op: "Input" + name: "A" +} +node { + op: "Input" + name: "B" +} +node { + op: "MatMul" + name: "C" + input: "A" + input: "B" +} + +## Notes + +All returned values, histograms, and images are returned in the order they were +written by Tensorflow (which should correspond to increasing `wall_time` order, +but may not necessarily correspond to increasing step count if the process had +to restart from a previous checkpoint). + +The returned values may be downsampled using reservoir sampling, which is +configurable by the TensorBoard server. When downsampling occurs, the server +guarantees that different tags will all sample at the same sequence of indices, +so that if if there are two tags `A` and `B` which are related so that `A[i] ~ +B[i]` for all `i`, then `D(A)[i] ~ D(B)[i]` for all `i`, where `D` represents +the downsampling operation. + +The reservoir sampling puts an upper bound on the number of items that will be +returned for a given run-tag combination, and guarantees that all items are +equally likely to be in the final sample (ie it is a uniform distribution over +the values), with the proviso that the most recent individual item is always +included in the sample. + +The reservoir sizes are configurable on a per-tag type basis. diff --git a/tensorflow/tensorboard/lib/css/global.css b/tensorflow/tensorboard/lib/css/global.css new file mode 100644 index 0000000000..b3681d766f --- /dev/null +++ b/tensorflow/tensorboard/lib/css/global.css @@ -0,0 +1,6 @@ +html,body { + margin: 0; + padding: 0; + height: 100%; + font-family: "RobotoDraft","Roboto",sans-serif; +} diff --git a/tensorflow/tensorboard/lib/svg/summary-icon.svg b/tensorflow/tensorboard/lib/svg/summary-icon.svg new file mode 100644 index 0000000000..f66c99580c --- /dev/null +++ b/tensorflow/tensorboard/lib/svg/summary-icon.svg @@ -0,0 +1,3 @@ +<svg fill="#848484" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> + <path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/> +</svg> diff --git a/tensorflow/tensorboard/package.json b/tensorflow/tensorboard/package.json new file mode 100644 index 0000000000..3c78a5831c --- /dev/null +++ b/tensorflow/tensorboard/package.json @@ -0,0 +1,34 @@ +{ + "name": "tensorflow-vis", + "version": "0.0.0", + "description": "Visualizers for TensorFlow", + "scripts": { + "test": "gulp test" + }, + "keywords": [ + "tensorflow" + ], + "author": "Google", + "license": "Apache-2.0", + "devDependencies": { + "gulp": "~3.9.0", + "gulp-typescript": "~2.8.0", + "tsd": "~0.6.3", + "chai": "~3.2.0", + "typescript": "~1.5.3", + "gulp-cli": "~0.3.0", + "gulp-util": "~3.0.6", + "gulp-mocha-phantomjs": "~0.8.0", + "mocha": "~2.2.5", + "gulp-tslint": "~3.1.1-beta", + "gulp-server-livereload": "~1.4.0", + "gulp-concat": "~2.6.0", + "merge2": "~0.3.6", + "gulp-filter": "~3.0.0", + "gulp-rename": "~1.2.2", + "vulcanize": "~1.14.0", + "gulp-vulcanize": "~6.0.1", + "minimist": "~1.2.0", + "gulp-replace": "~0.5.4" + } +} diff --git a/tensorflow/tensorboard/tensorboard.py b/tensorflow/tensorboard/tensorboard.py new file mode 100644 index 0000000000..dcbc50401c --- /dev/null +++ b/tensorflow/tensorboard/tensorboard.py @@ -0,0 +1,139 @@ +"""Serve TensorFlow summary data to a web frontend. + +This is a simple web server to proxy data from the event_loader to the web, and +serve static web files. +""" + +import BaseHTTPServer +import functools +import os +import socket +import SocketServer + +import tensorflow.python.platform + +from tensorflow.python.platform import app +from tensorflow.python.platform import flags +from tensorflow.python.platform import logging +from tensorflow.python.platform import status_bar +from tensorflow.python.summary import event_accumulator +from tensorflow.python.summary import event_multiplexer +from tensorflow.tensorboard import tensorboard_handler + +flags.DEFINE_string('logdir', None, """ +logdir specifies where TensorBoard will look to find TensorFlow event files +that it can display. In the simplest case, logdir is a directory containing +tfevents files. TensorBoard also supports comparing multiple TensorFlow +executions: to do this, you can use directory whose subdirectories contain +tfevents files, as in the following example: + +foo/bar/logdir/ +foo/bar/logdir/mnist_1/events.out.tfevents.1444088766 +foo/bar/logdir/mnist_2/events.out.tfevents.1444090064 + +You may also pass a comma seperated list of log directories, and you can +assign names to individual log directories by putting a colon between the name +and the path, as in + +tensorboard --logdir=name1:/path/to/logs/1,name2:/path/to/logs/2 +""") +flags.DEFINE_boolean('debug', False, 'Whether to run the app in debug mode. ' + 'This increases log verbosity to DEBUG.') +flags.DEFINE_string('host', '0.0.0.0', 'What host to listen to. Defaults to ' + 'allowing remote access, set to 127.0.0.1 to serve only on ' + 'localhost.') +flags.DEFINE_integer('port', 6006, 'What port to serve TensorBoard on.') + +FLAGS = flags.FLAGS + +# How many elements to store per tag, by tag type +TENSORBOARD_SIZE_GUIDANCE = { + event_accumulator.COMPRESSED_HISTOGRAMS: 500, + event_accumulator.IMAGES: 4, + event_accumulator.SCALARS: 10000, + event_accumulator.HISTOGRAMS: 1, +} + + +def ParseEventFilesFlag(flag_value): + """Parses the logdir flag into a map from paths to run group names. + + The events files flag format is a comma-separated list of path specifications. + A path specification either looks like 'group_name:/path/to/directory' or + '/path/to/directory'; in the latter case, the group is unnamed. Group names + cannot start with a forward slash: /foo:bar/baz will be interpreted as a + spec with no name and path '/foo:bar/baz'. + + Globs are not supported. + + Args: + flag_value: A comma-separated list of run specifications. + Returns: + A dict mapping directory paths to names like {'/path/to/directory': 'name'}. + Groups without an explicit name are named after their path. If flag_value + is None, returns an empty dict, which is helpful for testing things that + don't require any valid runs. + """ + files = {} + if flag_value is None: + return files + for specification in flag_value.split(','): + # If the spec looks like /foo:bar/baz, then we assume it's a path with a + # colon. + if ':' in specification and specification[0] != '/': + # We split at most once so run_name:/path:with/a/colon will work. + run_name, path = specification.split(':', 1) + else: + run_name = None + path = specification + files[path] = run_name + return files + + +class ThreadedHTTPServer(SocketServer.ThreadingMixIn, + BaseHTTPServer.HTTPServer): + """A threaded HTTP server.""" + daemon = True + + +def main(unused_argv=None): + # Change current working directory to tensorflow/'s parent directory. + server_root = os.path.join(os.path.dirname(__file__), + os.pardir, os.pardir) + os.chdir(server_root) + + if FLAGS.debug: + logging.set_verbosity(logging.DEBUG) + + if not FLAGS.logdir: + logging.error('A logdir must be specified. Run `tensorboard --help` for ' + 'details and examples.') + return -1 + + if FLAGS.debug: + logging.info('Starting TensorBoard in directory %s' % os.getcwd()) + + path_to_run = ParseEventFilesFlag(FLAGS.logdir) + multiplexer = event_multiplexer.AutoloadingMultiplexer( + path_to_run=path_to_run, interval_secs=60, + size_guidance=TENSORBOARD_SIZE_GUIDANCE) + + multiplexer.AutoUpdate(interval=30) + + factory = functools.partial(tensorboard_handler.TensorboardHandler, + multiplexer) + try: + server = ThreadedHTTPServer((FLAGS.host, FLAGS.port), factory) + except socket.error: + logging.error('Tried to connect to port %d, but that address is in use.' % + FLAGS.port) + return -2 + + status_bar.SetupStatusBarInsideGoogle('TensorBoard', FLAGS.port) + print 'Starting TensorBoard on port %d' % FLAGS.port + print '(You can navigate to http://localhost:%d)' % FLAGS.port + server.serve_forever() + + +if __name__ == '__main__': + app.run() diff --git a/tensorflow/tensorboard/tensorboard_handler.py b/tensorflow/tensorboard/tensorboard_handler.py new file mode 100644 index 0000000000..cd50f43069 --- /dev/null +++ b/tensorflow/tensorboard/tensorboard_handler.py @@ -0,0 +1,379 @@ +"""TensorBoard server handler logic. + +TensorboardHandler contains all the logic for serving static files off of disk +and for handling the API calls to endpoints like /tags that require information +about loaded events. +""" + +import BaseHTTPServer +import csv +import gzip +import imghdr +import json +import mimetypes +import os +import StringIO +import urllib +import urlparse + +from google.protobuf import text_format +import tensorflow.python.platform + +from tensorflow.python.platform import logging +from tensorflow.python.platform import resource_loader +from tensorflow.python.summary import event_accumulator +from tensorflow.tensorboard import float_wrapper + +RUNS_ROUTE = '/runs' +SCALARS_ROUTE = '/' + event_accumulator.SCALARS +IMAGES_ROUTE = '/' + event_accumulator.IMAGES +HISTOGRAMS_ROUTE = '/' + event_accumulator.HISTOGRAMS +COMPRESSED_HISTOGRAMS_ROUTE = '/' + event_accumulator.COMPRESSED_HISTOGRAMS +INDIVIDUAL_IMAGE_ROUTE = '/individualImage' +GRAPH_ROUTE = '/' + event_accumulator.GRAPH + +_IMGHDR_TO_MIMETYPE = { + 'bmp': 'image/bmp', + 'gif': 'image/gif', + 'jpeg': 'image/jpeg', + 'png': 'image/png' +} +_DEFAULT_IMAGE_MIMETYPE = 'application/octet-stream' + + +def _content_type_for_image(encoded_image_string): + image_type = imghdr.what(None, encoded_image_string) + return _IMGHDR_TO_MIMETYPE.get(image_type, _DEFAULT_IMAGE_MIMETYPE) + + +class _OutputFormat(object): + """An enum used to list the valid output formats for API calls. + + Not all API calls support all formats (for example, only scalars and + compressed histograms support CSV). + """ + JSON = 'json' + CSV = 'csv' + + +class TensorboardHandler(BaseHTTPServer.BaseHTTPRequestHandler): + """Handler class for use with BaseHTTPServer.HTTPServer. + + This is essentially a thin wrapper around calls to an EventMultiplexer object + as well as serving files off disk. + """ + + def __init__(self, multiplexer, *args): + self._multiplexer = multiplexer + BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args) + + # We use underscore_names for consistency with inherited methods. + + def _image_response_for_run(self, run_images, run, tag): + """Builds a JSON-serializable object with information about run_images. + + Args: + run_images: A list of event_accumulator.ImageValueEvent objects. + run: The name of the run. + tag: The name of the tag the images all belong to. + + Returns: + A list of dictionaries containing the wall time, step, URL, width, and + height for each image. + """ + response = [] + for index, run_image in enumerate(run_images): + response.append({ + 'wall_time': run_image.wall_time, + 'step': run_image.step, + # We include the size so that the frontend can add that to the <img> + # tag so that the page layout doesn't change when the image loads. + 'width': run_image.width, + 'height': run_image.height, + 'query': self._query_for_individual_image(run, tag, index) + }) + return response + + def _path_is_safe(self, path): + """Check path is safe (stays within current directory). + + This is for preventing directory-traversal attacks. + + Args: + path: The path to check for safety. + + Returns: + True if the given path stays within the current directory, and false + if it would escape to a higher directory. E.g. _path_is_safe('index.html') + returns true, but _path_is_safe('../../../etc/password') returns false. + """ + base = os.path.abspath(os.curdir) + absolute_path = os.path.abspath(path) + prefix = os.path.commonprefix([base, absolute_path]) + return prefix == base + + def _send_gzip_response(self, content, content_type, code=200): + """Writes the given content as gzip response using the given content type. + + Args: + content: The content to respond with. + content_type: The mime type of the content. + code: The numeric HTTP status code to use. + """ + out = StringIO.StringIO() + f = gzip.GzipFile(fileobj=out, mode='w') + f.write(content) + f.close() + gzip_content = out.getvalue() + self.send_response(code) + self.send_header('Content-Type', content_type) + self.send_header('Content-Length', len(gzip_content)) + self.send_header('Content-Encoding', 'gzip') + self.end_headers() + self.wfile.write(gzip_content) + + def _send_json_response(self, obj, code=200): + """Writes out the given object as JSON using the given HTTP status code. + + This also replaces special float values with stringified versions. + + Args: + obj: The object to respond with. + code: The numeric HTTP status code to use. + """ + + output = json.dumps(float_wrapper.WrapSpecialFloats(obj)) + + self.send_response(code) + self.send_header('Content-Type', 'application/json') + self.send_header('Content-Length', len(output)) + self.end_headers() + self.wfile.write(output) + + def _send_csv_response(self, serialized_csv, code=200): + """Writes out the given string, which represents CSV data. + + Unlike _send_json_response, this does *not* perform the CSV serialization + for you. It only sets the proper headers. + + Args: + serialized_csv: A string containing some CSV data. + code: The numeric HTTP status code to use. + """ + + self.send_response(code) + self.send_header('Content-Type', 'text/csv') + self.send_header('Content-Length', len(serialized_csv)) + self.end_headers() + self.wfile.write(serialized_csv) + + def _serve_scalars(self, query_params): + """Given a tag and single run, return array of ScalarEvents.""" + # TODO(cassandrax): return HTTP status code for malformed requests + tag = query_params.get('tag') + run = query_params.get('run') + values = self._multiplexer.Scalars(run, tag) + + if query_params.get('format') == _OutputFormat.CSV: + string_io = StringIO.StringIO() + writer = csv.writer(string_io) + writer.writerow(['Wall time', 'Step', 'Value']) + writer.writerows(values) + self._send_csv_response(string_io.getvalue()) + else: + self._send_json_response(values) + + def _serve_graph(self, query_params): + """Given a single run, return the graph definition in json format.""" + run = query_params.get('run', None) + if run is None: + self.send_error(400, 'query parameter "run" is required') + return + + try: + graph = self._multiplexer.Graph(run) + except ValueError: + self.send_response(404) + return + + # Serialize the graph to pbtxt format. + graph_pbtxt = text_format.MessageToString(graph) + # Gzip it and send it to the user. + self._send_gzip_response(graph_pbtxt, 'text/plain') + + def _serve_histograms(self, query_params): + """Given a tag and single run, return an array of histogram values.""" + tag = query_params.get('tag') + run = query_params.get('run') + values = self._multiplexer.Histograms(run, tag) + self._send_json_response(values) + + def _serve_compressed_histograms(self, query_params): + """Given a tag and single run, return an array of compressed histograms.""" + tag = query_params.get('tag') + run = query_params.get('run') + compressed_histograms = self._multiplexer.CompressedHistograms(run, tag) + if query_params.get('format') == _OutputFormat.CSV: + string_io = StringIO.StringIO() + writer = csv.writer(string_io) + + # Build the headers; we have two columns for timing and two columns for + # each compressed histogram bucket. + headers = ['Wall time', 'Step'] + if compressed_histograms: + bucket_count = len(compressed_histograms[0].compressed_histogram_values) + for i in xrange(bucket_count): + headers += ['Edge %d basis points' % i, 'Edge %d value' % i] + writer.writerow(headers) + + for compressed_histogram in compressed_histograms: + row = [compressed_histogram.wall_time, compressed_histogram.step] + for value in compressed_histogram.compressed_histogram_values: + row += [value.rank_in_bps, value.value] + writer.writerow(row) + self._send_csv_response(string_io.getvalue()) + else: + self._send_json_response(compressed_histograms) + + def _serve_images(self, query_params): + """Given a tag and list of runs, serve a list of images. + + Note that the images themselves are not sent; instead, we respond with URLs + to the images. The frontend should treat these URLs as opaque and should not + try to parse information about them or generate them itself, as the format + may change. + + Args: + query_params: The query parameters as a dict. + """ + tag = query_params.get('tag') + run = query_params.get('run') + + images = self._multiplexer.Images(run, tag) + response = self._image_response_for_run(images, run, tag) + self._send_json_response(response) + + def _serve_image(self, query_params): + """Serves an individual image.""" + tag = query_params.get('tag') + run = query_params.get('run') + index = int(query_params.get('index')) + image = self._multiplexer.Images(run, tag)[index] + encoded_image_string = image.encoded_image_string + content_type = _content_type_for_image(encoded_image_string) + + self.send_response(200) + self.send_header('Content-Type', content_type) + self.send_header('Content-Length', len(encoded_image_string)) + self.end_headers() + self.wfile.write(encoded_image_string) + + def _query_for_individual_image(self, run, tag, index): + """Builds a URL for accessing the specified image. + + This should be kept in sync with _serve_image. Note that the URL is *not* + guaranteed to always return the same image, since images may be unloaded + from the reservoir as new images come in. + + Args: + run: The name of the run. + tag: The tag. + index: The index of the image. Negative values are OK. + + Returns: + A string representation of a URL that will load the index-th + sampled image in the given run with the given tag. + """ + query_string = urllib.urlencode({ + 'run': run, + 'tag': tag, + 'index': index + }) + return query_string + + def _serve_runs(self, unused_query_params): + """Return a JSON object about runs and tags. + + Returns a mapping from runs to tagType to list of tags for that run. + + Returns: + {runName: {images: [tag1, tag2, tag3], + scalars: [tagA, tagB, tagC], + histograms: [tagX, tagY, tagZ]}} + """ + self._send_json_response(self._multiplexer.Runs()) + + def _serve_index(self, unused_query_params): + """Serves the index page (i.e., the tensorboard app itself).""" + self._serve_static_file('/dist/index.html') + + def _serve_static_file(self, path): + """Serves the static file located at the given path. + + Args: + path: The path of the static file, relative to the tensorboard/ directory. + """ + # Strip off the leading forward slash. + path = path.lstrip('/') + if not self._path_is_safe(path): + logging.info('path %s not safe, sending 404' % path) + # Traversal attack, so 404. + self.send_error(404) + return + + if path.startswith('external'): + path = os.path.join('../', path) + else: + path = os.path.join('tensorboard', path) + # Open the file and read it. + try: + contents = resource_loader.load_resource(path) + except IOError: + logging.info('path %s not found, sending 404' % path) + self.send_error(404) + return + + self.send_response(200) + + mimetype = mimetypes.guess_type(path)[0] or 'application/octet-stream' + self.send_header('Content-Type', mimetype) + self.end_headers() + self.wfile.write(contents) + + def do_GET(self): # pylint: disable=invalid-name + """Handler for all get requests.""" + parsed_url = urlparse.urlparse(self.path) + + # Remove a trailing slash, if present. + clean_path = parsed_url.path + if clean_path.endswith('/'): + clean_path = clean_path[:-1] + + handlers = { + SCALARS_ROUTE: self._serve_scalars, + GRAPH_ROUTE: self._serve_graph, + HISTOGRAMS_ROUTE: self._serve_histograms, + COMPRESSED_HISTOGRAMS_ROUTE: self._serve_compressed_histograms, + IMAGES_ROUTE: self._serve_images, + INDIVIDUAL_IMAGE_ROUTE: self._serve_image, + RUNS_ROUTE: self._serve_runs, + '': self._serve_index + } + + if clean_path in handlers: + query_params = urlparse.parse_qs(parsed_url.query) + # parse_qs returns a list of values for each key; we're only interested in + # the first. + for key in query_params: + value_count = len(query_params[key]) + if value_count != 1: + self.send_error( + 400, + 'query parameter %s should have exactly one value, had %d' % + (key, value_count)) + return + + query_params[key] = query_params[key][0] + handlers[clean_path](query_params) + else: + self._serve_static_file(clean_path) diff --git a/tensorflow/tensorboard/tests.html b/tensorflow/tensorboard/tests.html new file mode 100644 index 0000000000..31773f705c --- /dev/null +++ b/tensorflow/tensorboard/tests.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>Mocha</title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" href="node_modules/mocha/mocha.css" /> + </head> + <body> + <div id="mocha"></div> + <script src="node_modules/chai/chai.js"></script> + <script src="node_modules/mocha/mocha.js"></script> + <script>mocha.setup('bdd')</script> + <script>Polymer = function() {} + // hack hack - can't get polymer to run in phantomjs, so mock it out + </script> + <script src="bower_components/d3/d3.js"></script> + <script src="bower_components/svg-typewriter/svgtypewriter.js"></script> + <script src="bower_components/plottable/plottable.js"></script> + <script src="build/components.js"></script> + <script src="build/test.js"></script> + <script> + if (window.mochaPhantomJS) { + mochaPhantomJS.run(); + } else { + mocha.run(); + } + </script> + </body> +</html> + diff --git a/tensorflow/tensorboard/tfgraph-demo-index.html b/tensorflow/tensorboard/tfgraph-demo-index.html new file mode 100644 index 0000000000..84b7aaa94c --- /dev/null +++ b/tensorflow/tensorboard/tfgraph-demo-index.html @@ -0,0 +1,38 @@ +<!doctype html> +<!-- +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> + <title>tf-graph Demo</title> + <!-- Libraries that should be imported in TensorBoard when the Graph visualizer ports to TensorBoard --> + <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> + <script src="bower_components/es6-promise/promise.min.js"></script> + <link rel="import" href="components/tf-graph/demo/tf-graph-demo.html"> + <style> + html { + width: 100%; + height: 100%; + } + + body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + } + </style> + </head> + + <body unresolved> + <tf-graph-demo></tf-graph-demo> + </body> +</html> diff --git a/tensorflow/tensorboard/tsconfig.json b/tensorflow/tensorboard/tsconfig.json new file mode 100644 index 0000000000..ea9d69237c --- /dev/null +++ b/tensorflow/tensorboard/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "noImplicitAny": false, + "noEmitOnError": true, + "compileOnSave": false, + "target": "ES5" + } +} diff --git a/tensorflow/tensorboard/tsd.json b/tensorflow/tensorboard/tsd.json new file mode 100644 index 0000000000..de25bb111c --- /dev/null +++ b/tensorflow/tensorboard/tsd.json @@ -0,0 +1,30 @@ +{ + "version": "v4", + "repo": "borisyankov/DefinitelyTyped", + "ref": "master", + "path": "typings", + "bundle": "typings/tsd.d.ts", + "installed": { + "chai/chai-assert.d.ts": { + "commit": "16dd1ab76fb4c65e532ca820dd45c875636521b6" + }, + "d3/d3.d.ts": { + "commit": "eb59a40d3c2f3257e34ec2ede181046230814a41" + }, + "mocha/mocha.d.ts": { + "commit": "484544d14d400190b20f270341c97b16adc0f1ef" + }, + "webcomponents.js/webcomponents.js.d.ts": { + "commit": "e9be3cecf8a326d3e220c52b42d218169a7bb9f2" + }, + "lodash/lodash.d.ts": { + "commit": "eb835aa72f45eee4246b1de8beeffe2010c689e6" + }, + "polymer/polymer.d.ts": { + "commit": "e9be3cecf8a326d3e220c52b42d218169a7bb9f2" + }, + "es6-promise/es6-promise.d.ts": { + "commit": "e9be3cecf8a326d3e220c52b42d218169a7bb9f2" + } + } +} diff --git a/tensorflow/tensorboard/tslint.json b/tensorflow/tensorboard/tslint.json new file mode 100644 index 0000000000..bd1efdbd6f --- /dev/null +++ b/tensorflow/tensorboard/tslint.json @@ -0,0 +1,66 @@ +{ + "rules": { + "class-name": true, + "comment-format": [true, "check-space"], + "curly": true, + "eofline": true, + "forin": true, + "jsdoc-format": true, + "label-position": true, + "label-undefined": true, + "max-line-length": [true, 140], + "member-ordering": [false, "variables-before-functions"], + "no-arg": true, + "no-bitwise": true, + "no-consecutive-blank-lines": true, + "no-console": [true, + "log", + "debug", + "info", + "time", + "timeEnd", + "trace", + "warn" + ], + "no-construct": true, + "no-constructor-vars": true, + "no-debugger": true, + "no-duplicate-key": true, + "no-duplicate-variable": true, + "no-empty": true, + "no-eval": true, + "no-trailing-whitespace": true, + "no-unreachable": true, + "no-unused-expression": true, + "no-unused-variable": false, + "no-use-before-declare": true, + "one-line": [true, + "check-catch", + "check-else", + "check-open-brace", + "check-whitespace" + ], + "quotemark": [true, + "double" + ], + "radix": true, + "semicolon": true, + "triple-equals": [true, + "allow-null-check" + ], + "typedef-whitespace": [true, { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} |