diff --git a/README.md b/README.md index 55e452ae888ccd637e6f9b73b1993b4a7e904480..11e894b79e117039ee5e991400f6131ed1d000f2 100644 --- a/README.md +++ b/README.md @@ -203,4 +203,13 @@ You can now run Cuttlefish by doing: It should then report an IP and port. One is your local address, if the browser you are using is on the same machine as the node process, and the other is the machine's outward facing IP. You should be able to point the browser to one of these IPs, and you're off and cuttling. -... +# Dev Golf + +``` +- assign meaning to charts and graphs (date / location / etc) + - this should be generic json-object making, yeah? / csv +- save tests as .json objects (optionally) develop program for reading + - overlay multiples, save images + - read-in csv as well, polymorphic for outputs +- generic wrap / unwrap data objects ... +``` diff --git a/hunks/adhoc/2x_linechart.js b/hunks/adhoc/2x_linechart.js new file mode 100644 index 0000000000000000000000000000000000000000..d1b1faa0d0db6a771b371e121aa022c02598b266 --- /dev/null +++ b/hunks/adhoc/2x_linechart.js @@ -0,0 +1,138 @@ +/* + +simple line chart, talking to array reference + +minuteman hack for displaying instron data w/ dex data ... jake is tired +this should expand to generalize against any # of inputs (state, polymorphic) +and should have labels, and wrap with some generalized system understanding of data sets ? md ? +paired / matched sets of array data ? + +*/ + +// using https://bl.ocks.org/d3noob/402dd382a51a4f6eea487f9a35566de0 + +import { + Hunkify, + Input, + Output, + State +} from '../hunks.js' + +function LineChart() { + Hunkify(this) + // + let dtRef0 = new Input('reference', 'array', this) + let dtRef1 = new Input('reference', 'array', this) + this.inputs.push(dtRef0, dtRef1) + // how many to keep + let displayNum = new State('number', 'displayCount', 50) + this.states.push(displayNum) + + // some global items, + var datas = [ + [ + [0, 0], + [1, 1] + ], + [ + [0, 0], + [2, 2] + ] + ] + let uniqueDivId = '' + + // to claim some space in the DOM, we make a handle for ourselv + this.dom = {} + + this.init = () => { + console.log('INIT linechart') + // make a unique id, we use a flat d3 search to find and update this ... + uniqueDivId = 'linechart_div_' + Math.round(Math.random() * 1000) + this.dom = $('<div>').attr('id', uniqueDivId).get(0) + } + + this.onload = () => { + // our vars, + var margin = { + top: 20, + right: 20, + bottom: 30, + left: 90 + }, + width = 960 - margin.left - margin.right, + height = 500 - margin.top - margin.bottom; + var x = d3.scaleLinear().range([0, width]) + var y = d3.scaleLinear().range([height, 0]) + var thesvg = null + // make ah function + this.reloadDatas = () => { + var valueline = d3.line() + .x(function(d) { + return x(d[0]) + }) + .y(function(d) { + return y(d[1]) + }) + // scale + x.domain([0, d3.max(datas[0], function(d) { + return d[0]; + })]) + y.domain([d3.min(datas[0], function(d) { + return d[1] + }), d3.max(datas[0], function(d) { + return d[1]; + })]) + if (thesvg) { + d3.select(`#${uniqueDivId}`).selectAll("*").remove() + } + thesvg = d3.select(`#${uniqueDivId}`).append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + // write it? + thesvg.append("path") + .data([datas[0]]) + .attr("class", "line") + .attr("d", valueline) + thesvg.append("path") + .data([datas[1]]) + .attr("class", "line") + .attr("d", valueline) + // write the x axis + thesvg.append("g") + .attr("transform", "translate(0," + height + ")") + .call(d3.axisBottom(x)) + // the y axis + thesvg.append("g") + .call(d3.axisLeft(y)) + } + // so then + this.requestResize(1000, 520) + // startup + this.reloadDatas() + } + + this.onresize = () => { + console.log(this.dom.clientHeight, this.dom.clientWidth) + } + + // hmmm + this.loop = () => { + // pull and append + if (dtRef0.io()) { + // WARN to others... the -1 is here bc is it a useful hack for jake + // at the moment ! apologies + datas[0] = dtRef0.get() + this.reloadDatas() + } + if (dtRef1.io()) { + // WARN to others... the -1 is here bc is it a useful hack for jake + // at the moment ! apologies + datas[1] = dtRef1.get() + this.reloadDatas() + } + } +} + +export default LineChart diff --git a/hunks/adhoc/open-4411-csv.js b/hunks/adhoc/open-4411-csv.js new file mode 100644 index 0000000000000000000000000000000000000000..e656b5e91bf08fa38f8f7ba8e62256a3c03fcdac --- /dev/null +++ b/hunks/adhoc/open-4411-csv.js @@ -0,0 +1,58 @@ +/* + +open csv, setup outputs for fields (?) + +*/ + +import { + Hunkify, + Input, + Output, + State +} from '../hunks.js' + +import { CSV } from '../../libs/csv.js' + +export default function OpenCSV() { + Hunkify(this) + + let outref = new Output('reference', 'data', this) + this.outputs.push(outref) + + let readCsv = (file) => { + let reader = new FileReader() + reader.onload = (evt) => { + let parsed = CSV.parse(evt.target.result) + // wrip headers off + let records = parsed.slice(2) + let zc = records.findIndex((elem) => { + return elem[1] > 0 + }) + console.log('zc', zc) + records = records.slice(zc) + let adjusted = [] + for(let item of records){ + adjusted.push([item[1], item[2]]) + } + // now we can write outputs + outref.put(adjusted) + } + reader.readAsText(file) + } + + this.init = () => { + this.dom = $('<div>').get(0) + } + + this.onload = () => { + let btn = $('<input type="file" accept=".csv">').get(0) + $(btn).on('change', (evt) => { + readCsv(evt.target.files[0]) + }) + $(this.dom).append(btn) + } + + this.loop = () => { + } + +} diff --git a/hunks/adhoc/open-dex-json.js b/hunks/adhoc/open-dex-json.js new file mode 100644 index 0000000000000000000000000000000000000000..c71751e0ac21caa702d5e2e32c5040a2adc884b3 --- /dev/null +++ b/hunks/adhoc/open-dex-json.js @@ -0,0 +1,57 @@ +/* + +open csv, setup outputs for fields (?) + +*/ + +import { + Hunkify, + Input, + Output, + State +} from '../hunks.js' + + +export default function OpenJSON() { + Hunkify(this) + + let outref = new Output('reference', 'data', this) + this.outputs.push(outref) + + let readJSON = (file) => { + let reader = new FileReader() + reader.onload = (evt) => { + let parsed = JSON.parse(evt.target.result) + // put zeroes together + let zc = parsed.findIndex((elem) => { + return elem[1] > 0 + }) + console.log(zc) + parsed = parsed.slice(zc) + console.log('json', parsed) + for(let pt of parsed){ + pt[0] = pt[0]*0.001 + pt[1] = pt[1]*0.0098 + } + outref.put(parsed) + // outref.put(adjusted) + } + reader.readAsText(file) + } + + this.init = () => { + this.dom = $('<div>').get(0) + } + + this.onload = () => { + let btn = $('<input type="file" accept=".json">').get(0) + $(btn).on('change', (evt) => { + readJSON(evt.target.files[0]) + }) + $(this.dom).append(btn) + } + + this.loop = () => { + } + +} diff --git a/hunks/data/linechart.js b/hunks/data/linechart.js index d1893776820928f44e2aa987b3e9a7e9da9a2250..1b103f6310d80665f9f893aaa90c09c673d8643d 100644 --- a/hunks/data/linechart.js +++ b/hunks/data/linechart.js @@ -40,7 +40,6 @@ function LineChart() { } this.onload = () => { - console.log('DOMLOAD linechart') // our vars, var margin = { top: 20, @@ -53,7 +52,6 @@ function LineChart() { var x = d3.scaleLinear().range([0, width]) var y = d3.scaleLinear().range([height, 0]) var thesvg = null - console.log("svg", thesvg) // make ah function this.reloadDatas = () => { var valueline = d3.line() diff --git a/hunks/data/save.js b/hunks/data/save.js index 2b4e2badb43b34438119d9347c74c225c47c1e12..78e666d811b4fdebba2da9a1ec86653c87a4f660 100644 --- a/hunks/data/save.js +++ b/hunks/data/save.js @@ -11,7 +11,7 @@ import { State } from '../hunks.js' -function Save(){ +export default function Save(){ Hunkify(this) let inobj = new Input("reference", "object", this) @@ -54,5 +54,3 @@ function Save(){ } } } - -export default Save diff --git a/hunks/incomplete/opencsv.js b/hunks/incomplete/opencsv.js new file mode 100644 index 0000000000000000000000000000000000000000..5906681440cb95c7ee01e90871b119648ba7fc86 --- /dev/null +++ b/hunks/incomplete/opencsv.js @@ -0,0 +1,128 @@ +/* + +open csv, setup outputs for fields (?) + +INCOMPLETE: have to fix 'replaceDef' in the view ... scuttles the HTML, but should only update the +inputs / outputs ... +in general: hunk polymorphism is tough ? + +*/ + +import { + Hunkify, + Input, + Output, + State +} from '../hunks.js' + +import { CSV } from '../../libs/csv.js' + +export default function OpenCSV() { + Hunkify(this) + + let names = [] + let records = [] + let updates = [] + let headerCount = new State('number', 'header rows', 2) + let syncOption = new State('boolean', 'synchronous', true) + let releaseData = new State('boolean', 'release', false) + this.states.push(headerCount, syncOption, releaseData) + releaseData.onChange = (value) => { + for (let i in updates) { + updates[i] = true + } + } + + // trouble with this method: on restore program, no outputs will exist... + let writeOutputs = () => { + console.log('records', records) + // ensure our list is this long: + this.outputs.length = records[0].length + // and sweep, + for (let i in records[0]) { + // if we have it already, and it's the same type, maintain connections... + if (this.outputs[i] && this.outputs[i].type === typeof records[i][0]) { + this.outputs[i].name = names[i] + continue + } else { + this.outputs[i] = new Output(typeof records[i][0], names[i], this) + } + } + // and reset + this.mgr.evaluateHunk(this) + } + + let readCsv = (file) => { + let reader = new FileReader() + reader.onload = (evt) => { + let parsed = CSV.parse(evt.target.result) + console.log('parsed', parsed) + // ok, + if (headerCount.value) { + for (let i = 0; i < parsed[0].length; i++) { + names[i] = '' + for (let j = 0; j < headerCount.value; j++) { + names[i] += `${parsed[j][i]}` + } + } + // make header names by this row, otherwise do by types + } else { + for (let i = 0; i < parsed[0].length; i++) { + names[i] = typeof parsed[0][i] + } + } + // have names, + console.log('names', names) + // records, less headers + records = parsed.slice(headerCount.value) + // all should ship: + updates.length = 0 + for (let i in parsed[0]) { + updates.push(true) + } + // now we can write outputs: + writeOutputs() + } + reader.readAsText(file) + } + + this.init = () => { + this.dom = $('<div>').get(0) + } + + this.onload = () => { + let btn = $('<input type="file" accept=".csv">').get(0) + $(btn).on('change', (evt) => { + readCsv(evt.target.files[0]) + }) + $(this.dom).append(btn) + } + + this.loop = () => { + // flow behaviour: if 'sync', check all clear and all updated, then ship all + // if not sync, ship any that are updated & clear + if(this.outputs.length < 1) return + // continue... + if(syncOption.value){ + // synchronous shipments + let clear = true + for(let o in this.outputs){ + if(this.outputs[o].io()) clear = false + if(!updates[o]) clear = false + } + if(clear){ + for(let o in this.outputs){ + this.outputs[o].put(records[o]) + } + } + } else { + // spaghetti shipments + for(let o in this.outputs){ + if(updates[o] && !this.outputs[o].io()){ + this.outputs[o].put(records[o]) + } + } + } + } + +} diff --git a/libs/csv.js b/libs/csv.js new file mode 100644 index 0000000000000000000000000000000000000000..363feddb3aaaa3f3d867f493292ac1c17df8af48 --- /dev/null +++ b/libs/csv.js @@ -0,0 +1,358 @@ +// from https://github.com/okfn/csv.js + +/* global jQuery, _ */ +var CSV = {}; + +// Note that provision of jQuery is optional (it is **only** needed if you use fetch on a remote file) +(function(my) { + "use strict"; + my.__type__ = "csv"; + + // use either jQuery or Underscore Deferred depending on what is available + var Deferred = + (typeof jQuery !== "undefined" && jQuery.Deferred) || + (typeof _ !== "undefined" && _.Deferred) || + function() { + var resolve, reject; + var promise = new Promise(function(res, rej) { + resolve = res; + reject = rej; + }); + return { + resolve: resolve, + reject: reject, + promise: function() { + return promise; + } + }; + }; + + my.fetch = function(dataset) { + var dfd = new Deferred(); + if (dataset.file) { + var reader = new FileReader(); + var encoding = dataset.encoding || "UTF-8"; + reader.onload = function(e) { + var out = my.extractFields(my.parse(e.target.result, dataset), dataset); + out.useMemoryStore = true; + out.metadata = { + filename: dataset.file.name + }; + dfd.resolve(out); + }; + reader.onerror = function(e) { + dfd.reject({ + error: { + message: "Failed to load file. Code: " + e.target.error.code + } + }); + }; + reader.readAsText(dataset.file, encoding); + } else if (dataset.data) { + var out = my.extractFields(my.parse(dataset.data, dataset), dataset); + out.useMemoryStore = true; + dfd.resolve(out); + } else if (dataset.url) { + var fetch = + window.fetch || + function(url) { + var jq = jQuery.get(url); + + var promiseResult = { + then: function(res) { + jq.done(res); + return promiseResult; + }, + catch: function(rej) { + jq.fail(rej); + return promiseResult; + } + }; + return promiseResult; + }; + fetch(dataset.url) + .then(function(response) { + if (response.text) { + return response.text(); + } else { + return response; + } + }) + .then(function(data) { + var out = my.extractFields(my.parse(data, dataset), dataset); + out.useMemoryStore = true; + dfd.resolve(out); + }) + .catch(function(req, status) { + dfd.reject({ + error: { + message: "Failed to load file. " + + req.statusText + + ". Code: " + + req.status, + request: req + } + }); + }); + } + return dfd.promise(); + }; + + // Convert array of rows in { records: [ ...] , fields: [ ... ] } + // @param {Boolean} noHeaderRow If true assume that first row is not a header (i.e. list of fields but is data. + my.extractFields = function(rows, noFields) { + if (noFields.noHeaderRow !== true && rows.length > 0) { + return { + fields: rows[0], + records: rows.slice(1) + }; + } else { + return { + records: rows + }; + } + }; + + my.normalizeDialectOptions = function(options) { + // note lower case compared to CSV DDF + var out = { + delimiter: ",", + doublequote: true, + lineterminator: "\n", + quotechar: '"', + skipinitialspace: true, + skipinitialrows: 0 + }; + for (var key in options) { + if (key === "trim") { + out["skipinitialspace"] = options.trim; + } else { + out[key.toLowerCase()] = options[key]; + } + } + return out; + }; + + // ## parse + // + // For docs see the README + // + // Heavily based on uselesscode's JS CSV parser (MIT Licensed): + // http://www.uselesscode.org/javascript/csv/ + my.parse = function(s, dialect) { + // When line terminator is not provided then we try to guess it + // and normalize it across the file. + if (!dialect || (dialect && !dialect.lineterminator)) { + s = my.normalizeLineTerminator(s, dialect); + } + + // Get rid of any trailing \n + var options = my.normalizeDialectOptions(dialect); + s = chomp(s, options.lineterminator); + + var cur = "", // The character we are currently processing. + inQuote = false, + fieldQuoted = false, + field = "", // Buffer for building up the current field + row = [], + out = [], + i, + processField; + + processField = function(field) { + if (fieldQuoted !== true) { + // If field is empty set to null + if (field === "") { + field = null; + // If the field was not quoted and we are trimming fields, trim it + } else if (options.skipinitialspace === true) { + field = trim(field); + } + + // Convert unquoted numbers to their appropriate types + if (rxIsInt.test(field)) { + field = parseInt(field, 10); + } else if (rxIsFloat.test(field)) { + field = parseFloat(field, 10); + } + } + return field; + }; + + for (i = 0; i < s.length; i += 1) { + cur = s.charAt(i); + + // If we are at a EOF or EOR + if ( + inQuote === false && + (cur === options.delimiter || cur === options.lineterminator) + ) { + field = processField(field); + // Add the current field to the current row + row.push(field); + // If this is EOR append row to output and flush row + if (cur === options.lineterminator) { + out.push(row); + row = []; + } + // Flush the field buffer + field = ""; + fieldQuoted = false; + } else { + // If it's not a quotechar, add it to the field buffer + if (cur !== options.quotechar) { + field += cur; + } else { + if (!inQuote) { + // We are not in a quote, start a quote + inQuote = true; + fieldQuoted = true; + } else { + // Next char is quotechar, this is an escaped quotechar + if (s.charAt(i + 1) === options.quotechar) { + field += options.quotechar; + // Skip the next char + i += 1; + } else { + // It's not escaping, so end quote + inQuote = false; + } + } + } + } + } + + // Add the last field + field = processField(field); + row.push(field); + out.push(row); + + // Expose the ability to discard initial rows + if (options.skipinitialrows) out = out.slice(options.skipinitialrows); + + return out; + }; + + my.normalizeLineTerminator = function(csvString, dialect) { + dialect = dialect || {}; + + // Try to guess line terminator if it's not provided. + if (!dialect.lineterminator) { + return csvString.replace(/(\r\n|\n|\r)/gm, "\n"); + } + // if not return the string untouched. + return csvString; + }; + + my.objectToArray = function(dataToSerialize) { + var a = []; + var fieldNames = []; + for (var ii = 0; ii < dataToSerialize.fields.length; ii++) { + fieldNames.push(dataToSerialize.fields[ii].id); + } + a.push(fieldNames); + for (var ii = 0; ii < dataToSerialize.records.length; ii++) { + var tmp = []; + var record = dataToSerialize.records[ii]; + for (var jj = 0; jj < fieldNames.length; jj++) { + tmp.push(record[fieldNames[jj]]); + } + a.push(tmp); + } + return a; + }; + + // ## serialize + // + // See README for docs + // + // Heavily based on uselesscode's JS CSV serializer (MIT Licensed): + // http://www.uselesscode.org/javascript/csv/ + my.serialize = function(dataToSerialize, dialect) { + var a = null; + if (dataToSerialize instanceof Array) { + a = dataToSerialize; + } else { + a = my.objectToArray(dataToSerialize); + } + var options = my.normalizeDialectOptions(dialect); + + var cur = "", // The character we are currently processing. + field = "", // Buffer for building up the current field + row = "", + out = "", + i, + j, + processField; + + processField = function(field) { + if (field === null) { + // If field is null set to empty string + field = ""; + } else if (typeof field === "string" && rxNeedsQuoting.test(field)) { + if (options.doublequote) { + field = field.replace(/"/g, '""'); + } + // Convert string to delimited string + field = options.quotechar + field + options.quotechar; + } else if (typeof field === "number") { + // Convert number to string + field = field.toString(10); + } + + return field; + }; + + for (i = 0; i < a.length; i += 1) { + cur = a[i]; + + for (j = 0; j < cur.length; j += 1) { + field = processField(cur[j]); + // If this is EOR append row to output and flush row + if (j === cur.length - 1) { + row += field; + out += row + options.lineterminator; + row = ""; + } else { + // Add the current field to the current row + row += field + options.delimiter; + } + // Flush the field buffer + field = ""; + } + } + + return out; + }; + + var rxIsInt = /^\d+$/, + rxIsFloat = /^\d*\.\d+$|^\d+\.\d*$/, + // If a string has leading or trailing space, + // contains a comma double quote or a newline + // it needs to be quoted in CSV output + rxNeedsQuoting = /^\s|\s$|,|"|\n/, + trim = (function() { + // Fx 3.1 has a native trim function, it's about 10x faster, use it if it exists + if (String.prototype.trim) { + return function(s) { + return s.trim(); + }; + } else { + return function(s) { + return s.replace(/^\s*/, "").replace(/\s*$/, ""); + }; + } + })(); + + function chomp(s, lineterminator) { + if (s.charAt(s.length - lineterminator.length) !== lineterminator) { + // Does not end with \n, just return string + return s; + } else { + // Remove the \n + return s.substring(0, s.length - lineterminator.length); + } + } +})(CSV); + +export { CSV } diff --git a/save/systems/chart-adhoc-compare.json b/save/systems/chart-adhoc-compare.json new file mode 100644 index 0000000000000000000000000000000000000000..b16ba9b795bfd21f179e538b4c9dc2a6b340e8ad --- /dev/null +++ b/save/systems/chart-adhoc-compare.json @@ -0,0 +1,103 @@ +{ + "interpreterName": "cuttlefish", + "interpreterVersion": "v0.1", + "hunks": [ + { + "type": "manager", + "name": "nrol", + "inputs": [ + { + "name": "msgs", + "type": "byteArray" + } + ], + "outputs": [ + { + "name": "msgs", + "type": "byteArray", + "connections": [ + { + "inHunkIndex": "1", + "inHunkInput": "0" + } + ] + } + ] + }, + { + "type": "view", + "name": "tlview", + "inputs": [ + { + "name": "msgs", + "type": "byteArray" + } + ], + "outputs": [ + { + "name": "msgs", + "type": "byteArray", + "connections": [ + { + "inHunkIndex": "0", + "inHunkInput": "0" + } + ] + } + ] + }, + { + "type": "adhoc/open-dex-json", + "name": "adhoc/open-dex-json_5", + "outputs": [ + { + "name": "data", + "type": "reference", + "connections": [ + { + "inHunkIndex": "4", + "inHunkInput": "0" + } + ] + } + ] + }, + { + "type": "adhoc/open-4411-csv", + "name": "adhoc/open-4411-csv_5", + "outputs": [ + { + "name": "data", + "type": "reference", + "connections": [ + { + "inHunkIndex": "4", + "inHunkInput": "1" + } + ] + } + ] + }, + { + "type": "adhoc/2x_linechart", + "name": "adhoc/2x_linechart_5", + "inputs": [ + { + "name": "array", + "type": "reference" + }, + { + "name": "array", + "type": "reference" + } + ], + "states": [ + { + "name": "displayCount", + "type": "number", + "value": "50" + } + ] + } + ] +} \ No newline at end of file diff --git a/test_files/Specimen_RawData_4.csv b/test_files/Specimen_RawData_4.csv new file mode 100644 index 0000000000000000000000000000000000000000..a4b236205387246796b31781888198945df0efd9 --- /dev/null +++ b/test_files/Specimen_RawData_4.csv @@ -0,0 +1,1522 @@ +Time,Extension,Load +(sec),(mm),(N) +0.00000,0.00000,-9.06038 +0.10000,0.00100,-9.06038 +0.20000,0.00270,-9.06038 +0.30000,0.00430,-9.06038 +0.40000,0.00600,-9.06038 +0.50000,0.00770,-9.06038 +0.60000,0.00930,-9.03354 +0.70000,0.01100,-8.97985 +0.80000,0.01270,-8.92616 +0.90000,0.01430,-8.85904 +1.00000,0.01600,-8.79193 +1.10000,0.01770,-8.69797 +1.20000,0.01930,-8.59059 +1.30000,0.02100,-8.48320 +1.40000,0.02270,-8.34898 +1.50000,0.02430,-8.21475 +1.60000,0.02600,-8.05368 +1.70000,0.02770,-7.87918 +1.80000,0.02930,-7.67784 +1.90000,0.03100,-7.44965 +2.00000,0.03270,-7.23489 +2.10000,0.03430,-6.97985 +2.20000,0.03600,-6.68455 +2.30000,0.03770,-6.37583 +2.40000,0.03930,-6.08053 +2.50000,0.04100,-5.78523 +2.60000,0.04270,-5.47650 +2.70000,0.04430,-5.14093 +2.80000,0.04600,-4.81878 +2.90000,0.04770,-4.45637 +3.00000,0.04930,-4.06711 +3.10000,0.05100,-3.70469 +3.20000,0.05270,-3.35570 +3.30000,0.05430,-3.02013 +3.40000,0.05600,-2.65772 +3.50000,0.05770,-2.30872 +3.60000,0.05930,-1.94631 +3.70000,0.06100,-1.58389 +3.80000,0.06270,-1.19463 +3.90000,0.06430,-0.83222 +4.00000,0.06600,-0.48323 +4.10000,0.06770,-0.13423 +4.20000,0.06930,0.26845 +4.30000,0.07100,0.63087 +4.40000,0.07270,0.97986 +4.50000,0.07430,1.35570 +4.60000,0.07600,1.75838 +4.70000,0.07770,2.09395 +4.80000,0.07930,2.46979 +4.90000,0.08100,2.80536 +5.00000,0.08270,3.16777 +5.10000,0.08430,3.50334 +5.20000,0.08600,3.86576 +5.30000,0.08770,4.24159 +5.40000,0.08930,4.65770 +5.50000,0.09100,5.00669 +5.60000,0.09270,5.38253 +5.70000,0.09430,5.71810 +5.80000,0.09600,6.05367 +5.90000,0.09770,6.40266 +6.00000,0.09930,6.75166 +6.10000,0.10100,7.12749 +6.20000,0.10270,7.50333 +6.30000,0.10430,7.85232 +6.40000,0.10600,8.20132 +6.50000,0.10770,8.55031 +6.60000,0.10930,8.88588 +6.70000,0.11100,9.23487 +6.80000,0.11270,9.58386 +6.90000,0.11430,9.94628 +7.00000,0.11600,10.34896 +7.10000,0.11770,10.71138 +7.20000,0.11930,11.08721 +7.30000,0.12100,11.42278 +7.40000,0.12270,11.77178 +7.50000,0.12430,12.10735 +7.60000,0.12600,12.49661 +7.70000,0.12770,12.87245 +7.80000,0.12930,13.26171 +7.90000,0.13100,13.61070 +8.00000,0.13260,13.97311 +8.10000,0.13430,14.29526 +8.20000,0.13600,14.64425 +8.30000,0.13760,14.99325 +8.40000,0.13930,15.34224 +8.50000,0.14100,15.70465 +8.60000,0.14260,16.08049 +8.70000,0.14430,16.42948 +8.80000,0.14600,16.76505 +8.90000,0.14760,17.10062 +9.00000,0.14930,17.42277 +9.10000,0.15100,17.75834 +9.20000,0.15260,18.12075 +9.30000,0.15430,18.48317 +9.40000,0.15600,18.84558 +9.50000,0.15760,19.19458 +9.60000,0.15930,19.54357 +9.70000,0.16100,19.86572 +9.80000,0.16260,20.21471 +9.90000,0.16430,20.56370 +10.00000,0.16600,20.88585 +10.10000,0.16760,21.22142 +10.20000,0.16930,21.61068 +10.30000,0.17100,21.97309 +10.40000,0.17260,22.28182 +10.50000,0.17430,22.60396 +10.60000,0.17600,22.93953 +10.70000,0.17760,23.28853 +10.80000,0.17930,23.62410 +10.90000,0.18100,23.95967 +11.00000,0.18260,24.32208 +11.10000,0.18430,24.67107 +11.20000,0.18600,25.02007 +11.30000,0.18760,25.34221 +11.40000,0.18930,25.70463 +11.50000,0.19100,26.06704 +11.60000,0.19260,26.38919 +11.70000,0.19430,26.75160 +11.80000,0.19600,27.14087 +11.90000,0.19760,27.47643 +12.00000,0.19930,27.82543 +12.10000,0.20100,28.14757 +12.20000,0.20260,28.52341 +12.30000,0.20430,28.84556 +12.40000,0.20600,29.20797 +12.50000,0.20760,29.54354 +12.60000,0.20930,29.90596 +12.70000,0.21100,30.22811 +12.80000,0.21260,30.55025 +12.90000,0.21430,30.87240 +13.00000,0.21600,31.22139 +13.10000,0.21760,31.54354 +13.20000,0.21930,31.87911 +13.30000,0.22100,32.22810 +13.40000,0.22260,32.59052 +13.50000,0.22430,32.92609 +13.60000,0.22600,33.26165 +13.70000,0.22760,33.58380 +13.80000,0.22930,33.91937 +13.90000,0.23100,34.25494 +14.00000,0.23260,34.59051 +14.10000,0.23430,34.93950 +14.20000,0.23600,35.30192 +14.30000,0.23760,35.65091 +14.40000,0.23930,35.98648 +14.50000,0.24100,36.29520 +14.60000,0.24260,36.61735 +14.70000,0.24430,36.96634 +14.80000,0.24600,37.28849 +14.90000,0.24760,37.65091 +15.00000,0.24930,38.01332 +15.10000,0.25100,38.33547 +15.20000,0.25260,38.67104 +15.30000,0.25430,38.97976 +15.40000,0.25600,39.30191 +15.50000,0.25760,39.63748 +15.60000,0.25930,39.99989 +15.70000,0.26100,40.36231 +15.80000,0.26260,40.72472 +15.90000,0.26430,41.06029 +16.00000,0.26600,41.39586 +16.10000,0.26760,41.69116 +16.20000,0.26930,42.02673 +16.30000,0.27100,42.33546 +16.40000,0.27260,42.67103 +16.50000,0.27430,43.03344 +16.60000,0.27600,43.38243 +16.70000,0.27760,43.71800 +16.80000,0.27930,44.04015 +16.90000,0.28100,44.32203 +17.00000,0.28260,44.67102 +17.10000,0.28430,44.97975 +17.20000,0.28600,45.31532 +17.30000,0.28760,45.66431 +17.40000,0.28930,45.99988 +17.50000,0.29100,46.32202 +17.60000,0.29260,46.63075 +17.70000,0.29430,46.92605 +17.80000,0.29600,47.24820 +17.90000,0.29760,47.57034 +18.00000,0.29930,47.91934 +18.10000,0.30100,48.24148 +18.20000,0.30260,48.61732 +18.30000,0.30430,48.91262 +18.40000,0.30600,49.26161 +18.50000,0.30760,49.55692 +18.60000,0.30930,49.90591 +18.70000,0.31100,50.20121 +18.80000,0.31260,50.55020 +18.90000,0.31430,50.87235 +19.00000,0.31600,51.22134 +19.10000,0.31760,51.51664 +19.20000,0.31930,51.83879 +19.30000,0.32100,52.16094 +19.40000,0.32260,52.48308 +19.50000,0.32430,52.77838 +19.60000,0.32600,53.12738 +19.70000,0.32760,53.44952 +19.80000,0.32930,53.79851 +19.90000,0.33100,54.09382 +20.00000,0.33260,54.44281 +20.10000,0.33430,54.73811 +20.20000,0.33600,55.08710 +20.30000,0.33760,55.40925 +20.40000,0.33930,55.73140 +20.50000,0.34100,56.05354 +20.60000,0.34260,56.37569 +20.70000,0.34430,56.72468 +20.80000,0.34600,57.01998 +20.90000,0.34760,57.31528 +21.00000,0.34930,57.61059 +21.10000,0.35100,57.90589 +21.20000,0.35260,58.28172 +21.30000,0.35430,58.63072 +21.40000,0.35600,58.92602 +21.50000,0.35760,59.22132 +21.60000,0.35930,59.51662 +21.70000,0.36100,59.83877 +21.80000,0.36260,60.13407 +21.90000,0.36430,60.42937 +22.00000,0.36600,60.75152 +22.10000,0.36760,61.10051 +22.20000,0.36930,61.42266 +22.30000,0.37100,61.74480 +22.40000,0.37260,62.06695 +22.50000,0.37430,62.33541 +22.60000,0.37600,62.63071 +22.70000,0.37760,62.95285 +22.80000,0.37930,63.27500 +22.90000,0.38100,63.59715 +23.00000,0.38260,63.91929 +23.10000,0.38430,64.21460 +23.20000,0.38600,64.50990 +23.30000,0.38760,64.80520 +23.40000,0.38930,65.10050 +23.50000,0.39100,65.42265 +23.60000,0.39260,65.71795 +23.70000,0.39430,66.06694 +23.80000,0.39600,66.38909 +23.90000,0.39760,66.71123 +24.00000,0.39930,67.00653 +24.10000,0.40100,67.30184 +24.20000,0.40260,67.59714 +24.30000,0.40430,67.91928 +24.40000,0.40600,68.21459 +24.50000,0.40760,68.56358 +24.60000,0.40930,68.83203 +24.70000,0.41100,69.15418 +24.80000,0.41260,69.42264 +24.90000,0.41430,69.71794 +25.00000,0.41600,70.01324 +25.10000,0.41760,70.30854 +25.20000,0.41930,70.60384 +25.30000,0.42100,70.92599 +25.40000,0.42260,71.22129 +25.50000,0.42430,71.54344 +25.60000,0.42600,71.81189 +25.70000,0.42760,72.10719 +25.80000,0.42930,72.40249 +25.90000,0.43100,72.69780 +26.00000,0.43260,72.99310 +26.10000,0.43430,73.28840 +26.20000,0.43600,73.58370 +26.30000,0.43760,73.87900 +26.40000,0.43930,74.14746 +26.50000,0.44100,74.44276 +26.60000,0.44260,74.73806 +26.70000,0.44430,75.00651 +26.80000,0.44600,75.30182 +26.90000,0.44760,75.59712 +27.00000,0.44930,75.89242 +27.10000,0.45100,76.18772 +27.20000,0.45260,76.42933 +27.30000,0.45430,76.72463 +27.40000,0.45600,77.01993 +27.50000,0.45760,77.28839 +27.60000,0.45930,77.58369 +27.70000,0.46100,77.90584 +27.80000,0.46260,78.17429 +27.90000,0.46430,78.46959 +28.00000,0.46600,78.76489 +28.10000,0.46760,79.06020 +28.20000,0.46930,79.35550 +28.30000,0.47100,79.62395 +28.40000,0.47260,79.91925 +28.50000,0.47430,80.24140 +28.60000,0.47600,80.53670 +28.70000,0.47760,80.80516 +28.80000,0.47930,81.07361 +28.90000,0.48100,81.34207 +29.00000,0.48260,81.63737 +29.10000,0.48430,81.93267 +29.20000,0.48600,82.22797 +29.30000,0.48760,82.52327 +29.40000,0.48930,82.79173 +29.50000,0.49100,83.08703 +29.60000,0.49260,83.32864 +29.70000,0.49430,83.62394 +29.80000,0.49600,83.89240 +29.90000,0.49760,84.16085 +30.00000,0.49930,84.45615 +30.10000,0.50100,84.75146 +30.20000,0.50260,84.99307 +30.30000,0.50430,85.26152 +30.40000,0.50600,85.52998 +30.50000,0.50760,85.79843 +30.60000,0.50930,86.06689 +30.70000,0.51100,86.33534 +30.80000,0.51260,86.63065 +30.90000,0.51430,86.92595 +31.00000,0.51600,87.19440 +31.10000,0.51760,87.46286 +31.20000,0.51930,87.70447 +31.30000,0.52100,87.97292 +31.40000,0.52260,88.24138 +31.50000,0.52430,88.50984 +31.60000,0.52600,88.77829 +31.70000,0.52760,89.07359 +31.80000,0.52930,89.34205 +31.90000,0.53100,89.58366 +32.00000,0.53260,89.82527 +32.10000,0.53430,90.09372 +32.20000,0.53600,90.33533 +32.30000,0.53760,90.63064 +32.40000,0.53930,90.89909 +32.50000,0.54100,91.19439 +32.60000,0.54260,91.46285 +32.70000,0.54430,91.73130 +32.80000,0.54600,91.97291 +32.90000,0.54760,92.24137 +33.00000,0.54930,92.45613 +33.10000,0.55100,92.72459 +33.20000,0.55260,92.99305 +33.30000,0.55430,93.28835 +33.40000,0.55600,93.52996 +33.50000,0.55760,93.77157 +33.60000,0.55930,93.98633 +33.70000,0.56100,94.25479 +33.80000,0.56260,94.46955 +33.90000,0.56430,94.73801 +34.00000,0.56600,95.00646 +34.10000,0.56760,95.30176 +34.20000,0.56930,95.57022 +34.30000,0.57100,95.77156 +34.40000,0.57260,95.97290 +34.50000,0.57430,96.24136 +34.60000,0.57600,96.50982 +34.70000,0.57760,96.71116 +34.80000,0.57930,96.97961 +34.90000,0.58100,97.24807 +35.00000,0.58260,97.44941 +35.10000,0.58430,97.71787 +35.20000,0.58600,97.91921 +35.30000,0.58760,98.18766 +35.40000,0.58930,98.38900 +35.50000,0.59100,98.59035 +35.60000,0.59260,98.85880 +35.70000,0.59430,99.12726 +35.80000,0.59600,99.32860 +35.90000,0.59760,99.59706 +36.00000,0.59930,99.79840 +36.10000,0.60100,99.99974 +36.20000,0.60260,100.26819 +36.30000,0.60430,100.53665 +36.40000,0.60600,100.73799 +36.50000,0.60760,101.00645 +36.60000,0.60930,101.20779 +36.70000,0.61100,101.47625 +36.80000,0.61260,101.67759 +36.90000,0.61430,101.94604 +37.00000,0.61600,102.14738 +37.10000,0.61760,102.34873 +37.20000,0.61930,102.61718 +37.30000,0.62100,102.81852 +37.40000,0.62260,103.01987 +37.50000,0.62430,103.28832 +37.60000,0.62600,103.48966 +37.70000,0.62760,103.69100 +37.80000,0.62930,103.89235 +37.90000,0.63100,104.09369 +38.00000,0.63260,104.36214 +38.10000,0.63430,104.56349 +38.20000,0.63600,104.76483 +38.30000,0.63760,104.96617 +38.40000,0.63930,105.16751 +38.50000,0.64100,105.36885 +38.60000,0.64260,105.57019 +38.70000,0.64430,105.77154 +38.80000,0.64600,106.03999 +38.90000,0.64760,106.24133 +39.00000,0.64930,106.44268 +39.10000,0.65100,106.64402 +39.20000,0.65260,106.77825 +39.30000,0.65430,106.97959 +39.40000,0.65590,107.24804 +39.50000,0.65760,107.44938 +39.60000,0.65930,107.65073 +39.70000,0.66090,107.78495 +39.80000,0.66260,107.98630 +39.90000,0.66430,108.18764 +40.00000,0.66590,108.38898 +40.10000,0.66760,108.52321 +40.20000,0.66930,108.72455 +40.30000,0.67090,108.92589 +40.40000,0.67260,109.12723 +40.50000,0.67430,109.26146 +40.60000,0.67590,109.46280 +40.70000,0.67760,109.59703 +40.80000,0.67930,109.79837 +40.90000,0.68090,109.93260 +41.00000,0.68260,110.13394 +41.10000,0.68430,110.26817 +41.20000,0.68590,110.46951 +41.30000,0.68760,110.60374 +41.40000,0.68930,110.80508 +41.50000,0.69090,110.93931 +41.60000,0.69260,111.07354 +41.70000,0.69430,111.20776 +41.80000,0.69590,111.34199 +41.90000,0.69760,111.54333 +42.00000,0.69930,111.67756 +42.10000,0.70090,111.81179 +42.20000,0.70260,111.94602 +42.30000,0.70430,112.08024 +42.40000,0.70590,112.21447 +42.50000,0.70760,112.34870 +42.60000,0.70930,112.48293 +42.70000,0.71090,112.61716 +42.80000,0.71260,112.75138 +42.90000,0.71430,112.88561 +43.00000,0.71590,112.95273 +43.10000,0.71760,113.08695 +43.20000,0.71930,113.22118 +43.30000,0.72090,113.28830 +43.40000,0.72260,113.42252 +43.50000,0.72430,113.48964 +43.60000,0.72590,113.62387 +43.70000,0.72760,113.75809 +43.80000,0.72930,113.82521 +43.90000,0.73090,113.89232 +44.00000,0.73260,113.95943 +44.10000,0.73430,114.02655 +44.20000,0.73590,114.16078 +44.30000,0.73760,114.22789 +44.40000,0.73930,114.29500 +44.50000,0.74090,114.42923 +44.60000,0.74260,114.49635 +44.70000,0.74430,114.56346 +44.80000,0.74590,114.63057 +44.90000,0.74760,114.69769 +45.00000,0.74930,114.76480 +45.10000,0.75090,114.83192 +45.20000,0.75260,114.89903 +45.30000,0.75430,114.96614 +45.40000,0.75590,114.96614 +45.50000,0.75760,115.03326 +45.60000,0.75930,115.03326 +45.70000,0.76090,115.10037 +45.80000,0.76260,115.16749 +45.90000,0.76430,115.16749 +46.00000,0.76590,115.23460 +46.10000,0.76760,115.23460 +46.20000,0.76930,115.23460 +46.30000,0.77090,115.30171 +46.40000,0.77260,115.30171 +46.50000,0.77430,115.30171 +46.60000,0.77590,115.36883 +46.70000,0.77760,115.36883 +46.80000,0.77930,115.36883 +46.90000,0.78090,115.36883 +47.00000,0.78260,115.36883 +47.10000,0.78430,115.30171 +47.20000,0.78590,115.36883 +47.30000,0.78760,115.30171 +47.40000,0.78930,115.30171 +47.50000,0.79090,115.36883 +47.60000,0.79260,115.36883 +47.70000,0.79430,115.30171 +47.80000,0.79590,115.30171 +47.90000,0.79760,115.23460 +48.00000,0.79930,115.23460 +48.10000,0.80090,115.16749 +48.20000,0.80260,115.16749 +48.30000,0.80430,115.16749 +48.40000,0.80590,115.10037 +48.50000,0.80760,115.03326 +48.60000,0.80930,115.03326 +48.70000,0.81090,114.96614 +48.80000,0.81260,114.89903 +48.90000,0.81430,114.83192 +49.00000,0.81590,114.83192 +49.10000,0.81760,114.76480 +49.20000,0.81930,114.69769 +49.30000,0.82090,114.69769 +49.40000,0.82260,114.63057 +49.50000,0.82430,114.49635 +49.60000,0.82590,114.42923 +49.70000,0.82760,114.36212 +49.80000,0.82930,114.29500 +49.90000,0.83090,114.29500 +50.00000,0.83260,114.22789 +50.10000,0.83430,114.16078 +50.20000,0.83590,114.09366 +50.30000,0.83760,113.95943 +50.40000,0.83930,113.89232 +50.50000,0.84090,113.82521 +50.60000,0.84260,113.75809 +50.70000,0.84430,113.69098 +50.80000,0.84590,113.62387 +50.90000,0.84760,113.55675 +51.00000,0.84930,113.42252 +51.10000,0.85090,113.35541 +51.20000,0.85260,113.28830 +51.30000,0.85430,113.22118 +51.40000,0.85590,113.15407 +51.50000,0.85760,113.08695 +51.60000,0.85930,113.01984 +51.70000,0.86090,112.95273 +51.80000,0.86260,112.81850 +51.90000,0.86430,112.75138 +52.00000,0.86590,112.68427 +52.10000,0.86760,112.61716 +52.20000,0.86930,112.48293 +52.30000,0.87090,112.48293 +52.40000,0.87260,112.34870 +52.50000,0.87430,112.28159 +52.60000,0.87590,112.21447 +52.70000,0.87760,112.14736 +52.80000,0.87930,112.08024 +52.90000,0.88090,112.01313 +53.00000,0.88260,111.94602 +53.10000,0.88430,111.87890 +53.20000,0.88590,111.81179 +53.30000,0.88760,111.74468 +53.40000,0.88930,111.61045 +53.50000,0.89090,111.61045 +53.60000,0.89260,111.54333 +53.70000,0.89430,111.40911 +53.80000,0.89590,111.34199 +53.90000,0.89760,111.34199 +54.00000,0.89930,111.27488 +54.10000,0.90090,111.20776 +54.20000,0.90260,111.07354 +54.30000,0.90430,111.00642 +54.40000,0.90590,110.93931 +54.50000,0.90760,110.87219 +54.60000,0.90930,110.87219 +54.70000,0.91090,110.80508 +54.80000,0.91260,110.73797 +54.90000,0.91430,110.67085 +55.00000,0.91590,110.60374 +55.10000,0.91760,110.53662 +55.20000,0.91930,110.46951 +55.30000,0.92090,110.40240 +55.40000,0.92260,110.33528 +55.50000,0.92430,110.33528 +55.60000,0.92590,110.26817 +55.70000,0.92760,110.26817 +55.80000,0.92930,110.13394 +55.90000,0.93090,110.13394 +56.00000,0.93260,109.99971 +56.10000,0.93430,109.99971 +56.20000,0.93590,109.93260 +56.30000,0.93760,109.93260 +56.40000,0.93930,109.86549 +56.50000,0.94090,109.79837 +56.60000,0.94260,109.73126 +56.70000,0.94430,109.66414 +56.80000,0.94590,109.59703 +56.90000,0.94760,109.59703 +57.00000,0.94930,109.52992 +57.10000,0.95090,109.52992 +57.20000,0.95260,109.46280 +57.30000,0.95430,109.46280 +57.40000,0.95590,109.32857 +57.50000,0.95760,109.32857 +57.60000,0.95930,109.26146 +57.70000,0.96090,109.26146 +57.80000,0.96260,109.19435 +57.90000,0.96430,109.12723 +58.00000,0.96590,109.12723 +58.10000,0.96760,109.06012 +58.20000,0.96930,108.99300 +58.30000,0.97090,108.92589 +58.40000,0.97260,108.85878 +58.50000,0.97430,108.85878 +58.60000,0.97590,108.79166 +58.70000,0.97760,108.79166 +58.80000,0.97930,108.72455 +58.90000,0.98090,108.65743 +59.00000,0.98260,108.59032 +59.10000,0.98430,108.52321 +59.20000,0.98590,108.52321 +59.30000,0.98760,108.45609 +59.40000,0.98930,108.45609 +59.50000,0.99090,108.38898 +59.60000,0.99260,108.32187 +59.70000,0.99430,108.32187 +59.80000,0.99590,108.25475 +59.90000,0.99760,108.18764 +60.00000,0.99930,108.18764 +60.10000,1.00090,108.12052 +60.20000,1.00260,108.05341 +60.30000,1.00430,108.05341 +60.40000,1.00590,107.98630 +60.50000,1.00760,107.91918 +60.60000,1.00930,107.85207 +60.70000,1.01090,107.85207 +60.80000,1.01260,107.78495 +60.90000,1.01430,107.71784 +61.00000,1.01590,107.71784 +61.10000,1.01760,107.65073 +61.20000,1.01930,107.58361 +61.30000,1.02090,107.51650 +61.40000,1.02260,107.51650 +61.50000,1.02430,107.44938 +61.60000,1.02590,107.38227 +61.70000,1.02760,107.38227 +61.80000,1.02930,107.31516 +61.90000,1.03090,107.31516 +62.00000,1.03260,107.24804 +62.10000,1.03430,107.18093 +62.20000,1.03590,107.11381 +62.30000,1.03760,107.04670 +62.40000,1.03930,107.04670 +62.50000,1.04090,106.97959 +62.60000,1.04260,106.91247 +62.70000,1.04430,106.84536 +62.80000,1.04590,106.84536 +62.90000,1.04760,106.77825 +63.00000,1.04930,106.71113 +63.10000,1.05090,106.64402 +63.20000,1.05260,106.57690 +63.30000,1.05430,106.50979 +63.40000,1.05590,106.44268 +63.50000,1.05760,106.37556 +63.60000,1.05930,106.30845 +63.70000,1.06090,106.30845 +63.80000,1.06260,106.24133 +63.90000,1.06430,106.17422 +64.00000,1.06590,106.10711 +64.10001,1.06760,106.03999 +64.20000,1.06930,105.97288 +64.30000,1.07090,105.97288 +64.40000,1.07260,105.90576 +64.50000,1.07430,105.83865 +64.60001,1.07590,105.77154 +64.70000,1.07760,105.70442 +64.80000,1.07930,105.63731 +64.90000,1.08090,105.57019 +65.00000,1.08260,105.50308 +65.10001,1.08430,105.43597 +65.20000,1.08590,105.36885 +65.30000,1.08760,105.30174 +65.40000,1.08930,105.23462 +65.50000,1.09090,105.16751 +65.60001,1.09260,105.10040 +65.70001,1.09430,105.03328 +65.80000,1.09590,105.03328 +65.90000,1.09760,104.96617 +66.00000,1.09930,104.89906 +66.10001,1.10090,104.76483 +66.20001,1.10260,104.69771 +66.30000,1.10430,104.63060 +66.40000,1.10590,104.49637 +66.50000,1.10760,104.42926 +66.60001,1.10930,104.36214 +66.70001,1.11090,104.29503 +66.80000,1.11260,104.22792 +66.90000,1.11430,104.16080 +67.00000,1.11590,104.02657 +67.10001,1.11760,103.95946 +67.20001,1.11930,103.82523 +67.30000,1.12090,103.75812 +67.40000,1.12260,103.69100 +67.50000,1.12430,103.62389 +67.60001,1.12590,103.48966 +67.70001,1.12760,103.35544 +67.80000,1.12930,103.22121 +67.90000,1.13090,103.15409 +68.00000,1.13260,103.01987 +68.10001,1.13430,102.88564 +68.20001,1.13590,102.81852 +68.30000,1.13760,102.68430 +68.40000,1.13930,102.55007 +68.50000,1.14090,102.41584 +68.60001,1.14260,102.28161 +68.70001,1.14430,102.14738 +68.80000,1.14590,101.94604 +68.90000,1.14760,101.81181 +69.00000,1.14930,101.67759 +69.10001,1.15090,101.47625 +69.20001,1.15260,101.27490 +69.30000,1.15430,101.07356 +69.40000,1.15590,100.87222 +69.50000,1.15760,100.67088 +69.60001,1.15930,100.40242 +69.70001,1.16090,100.20108 +69.80000,1.16260,99.93263 +69.90000,1.16430,99.66417 +70.00000,1.16590,99.32860 +70.10001,1.16760,98.92592 +70.20001,1.16930,98.59035 +70.30000,1.17090,98.12055 +70.40000,1.17260,97.65075 +70.50000,1.17420,97.18095 +70.60001,1.17590,96.64404 +70.70001,1.17760,96.04002 +70.80000,1.17920,95.43599 +70.90000,1.18090,94.76485 +71.00000,1.18260,94.09371 +71.10001,1.18420,93.42257 +71.20001,1.18590,92.68432 +71.30000,1.18760,92.01318 +71.40000,1.18920,91.27493 +71.50000,1.19090,90.53668 +71.60001,1.19260,89.73131 +71.70001,1.19420,88.92594 +71.80000,1.19590,88.18769 +71.90000,1.19760,87.38232 +72.00000,1.19920,86.57695 +72.10001,1.20090,85.83870 +72.20001,1.20260,85.03333 +72.30000,1.20420,84.22797 +72.40000,1.20590,83.42260 +72.50000,1.20760,82.55012 +72.60001,1.20920,81.71791 +72.70001,1.21090,80.88569 +72.80000,1.21260,80.08033 +72.90000,1.21420,79.30181 +73.00000,1.21590,78.52328 +73.10001,1.21760,77.74476 +73.20001,1.21920,76.99309 +73.30000,1.22090,76.26826 +73.40000,1.22260,75.57027 +73.50000,1.22420,74.87229 +73.60001,1.22590,74.25484 +73.70001,1.22760,73.69108 +73.80000,1.22920,73.12732 +73.90000,1.23090,72.59041 +74.00000,1.23260,72.08035 +74.10001,1.23420,71.57028 +74.20001,1.23590,71.14075 +74.30000,1.23760,70.73807 +74.40000,1.23920,70.33539 +74.50000,1.24090,70.01324 +74.60001,1.24260,69.63740 +74.70001,1.24420,69.34210 +74.80000,1.24590,68.99311 +74.90000,1.24760,68.72465 +75.00000,1.24920,68.45620 +75.10001,1.25090,68.21459 +75.20001,1.25260,67.99982 +75.30000,1.25420,67.81190 +75.40000,1.25590,67.62398 +75.50000,1.25760,67.43606 +75.60001,1.25920,67.22130 +75.70001,1.26090,67.06023 +75.80000,1.26260,66.89915 +75.90000,1.26420,66.76492 +76.00000,1.26590,66.63070 +76.10001,1.26760,66.55016 +76.20001,1.26920,66.44278 +76.30000,1.27090,66.33540 +76.40000,1.27260,66.22801 +76.50000,1.27420,66.12063 +76.60001,1.27590,66.04009 +76.70001,1.27760,65.95956 +76.80000,1.27920,65.90587 +76.90000,1.28090,65.85218 +77.00000,1.28260,65.77164 +77.10001,1.28420,65.69110 +77.20001,1.28590,65.63741 +77.30000,1.28760,65.55687 +77.40000,1.28920,65.53003 +77.50000,1.29090,65.44949 +77.60001,1.29260,65.42265 +77.70001,1.29420,65.39580 +77.80000,1.29590,65.36896 +77.90000,1.29760,65.34211 +78.00000,1.29920,65.28842 +78.10001,1.30090,65.26157 +78.20001,1.30260,65.23473 +78.30000,1.30420,65.18104 +78.40000,1.30590,65.18104 +78.50000,1.30760,65.18104 +78.60001,1.30920,65.15419 +78.70001,1.31090,65.10050 +78.80000,1.31260,65.04681 +78.90000,1.31420,65.04681 +79.00000,1.31590,64.99312 +79.10001,1.31760,64.96627 +79.20001,1.31920,64.93943 +79.30000,1.32090,64.93943 +79.40000,1.32260,64.91258 +79.50000,1.32420,64.85889 +79.60001,1.32590,64.83204 +79.70001,1.32760,64.80520 +79.80000,1.32920,64.77835 +79.90000,1.33090,64.77835 +80.00000,1.33260,64.75151 +80.10001,1.33420,64.72466 +80.20001,1.33590,64.69782 +80.30000,1.33760,64.67097 +80.40000,1.33920,64.64412 +80.50001,1.34090,64.61728 +80.60001,1.34260,64.59043 +80.70001,1.34420,64.56359 +80.80000,1.34590,64.56359 +80.90000,1.34760,64.56359 +81.00001,1.34920,64.56359 +81.10001,1.35090,64.50990 +81.20001,1.35260,64.45621 +81.30000,1.35420,64.42936 +81.40000,1.35590,64.42936 +81.50001,1.35760,64.40251 +81.60001,1.35920,64.40251 +81.70001,1.36090,64.37567 +81.80000,1.36260,64.34882 +81.90000,1.36420,64.32198 +82.00001,1.36590,64.29513 +82.10001,1.36760,64.26829 +82.20001,1.36920,64.24144 +82.30000,1.37090,64.24144 +82.40000,1.37260,64.26829 +82.50001,1.37420,64.29513 +82.60001,1.37590,64.29513 +82.70001,1.37760,64.26829 +82.80000,1.37920,64.24144 +82.90000,1.38090,64.21460 +83.00001,1.38260,64.18775 +83.10001,1.38420,64.16090 +83.20001,1.38590,64.16090 +83.30000,1.38760,64.16090 +83.40000,1.38920,64.16090 +83.50001,1.39090,64.16090 +83.60001,1.39260,64.10721 +83.70001,1.39420,64.10721 +83.80000,1.39590,64.08037 +83.90000,1.39760,64.08037 +84.00001,1.39920,64.10721 +84.10001,1.40090,64.08037 +84.20001,1.40260,64.05352 +84.30000,1.40420,64.02668 +84.40000,1.40590,63.97299 +84.50001,1.40760,63.97299 +84.60001,1.40920,63.97299 +84.70001,1.41090,63.97299 +84.80000,1.41260,63.97299 +84.90000,1.41420,63.99983 +85.00001,1.41590,63.97299 +85.10001,1.41760,63.94614 +85.20001,1.41920,63.94614 +85.30000,1.42090,63.91929 +85.40000,1.42260,63.89245 +85.50001,1.42420,63.89245 +85.60001,1.42590,63.89245 +85.70001,1.42760,63.89245 +85.80000,1.42920,63.89245 +85.90000,1.43090,63.86560 +86.00001,1.43260,63.86560 +86.10001,1.43420,63.86560 +86.20001,1.43590,63.83876 +86.30000,1.43760,63.86560 +86.40000,1.43920,63.86560 +86.50001,1.44090,63.86560 +86.60001,1.44260,63.83876 +86.70001,1.44420,63.86560 +86.80000,1.44590,63.83876 +86.90000,1.44760,63.83876 +87.00001,1.44920,63.81191 +87.10001,1.45090,63.81191 +87.20001,1.45260,63.83876 +87.30000,1.45420,63.83876 +87.40000,1.45590,63.81191 +87.50001,1.45760,63.78507 +87.60001,1.45920,63.78507 +87.70001,1.46090,63.78507 +87.80000,1.46260,63.78507 +87.90000,1.46420,63.75822 +88.00001,1.46590,63.78507 +88.10001,1.46760,63.75822 +88.20001,1.46920,63.75822 +88.30000,1.47090,63.73138 +88.40000,1.47260,63.70453 +88.50001,1.47420,63.67768 +88.60001,1.47590,63.67768 +88.70001,1.47760,63.67768 +88.80000,1.47920,63.70453 +88.90000,1.48090,63.67768 +89.00001,1.48260,63.67768 +89.10001,1.48420,63.65084 +89.20001,1.48590,63.65084 +89.30000,1.48760,63.62399 +89.40000,1.48920,63.62399 +89.50001,1.49090,63.62399 +89.60001,1.49260,63.62399 +89.70001,1.49420,63.59715 +89.80000,1.49590,63.57030 +89.90000,1.49760,63.54346 +90.00001,1.49920,63.51661 +90.10001,1.50090,63.48977 +90.20001,1.50260,63.48977 +90.30000,1.50420,63.46292 +90.40000,1.50590,63.48977 +90.50001,1.50760,63.48977 +90.60001,1.50920,63.46292 +90.70001,1.51090,63.46292 +90.80000,1.51260,63.43607 +90.90000,1.51420,63.40923 +91.00001,1.51590,63.40923 +91.10001,1.51760,63.38238 +91.20001,1.51920,63.40923 +91.30000,1.52090,63.38238 +91.40000,1.52260,63.35554 +91.50001,1.52420,63.32869 +91.60001,1.52590,63.30185 +91.70001,1.52760,63.27500 +91.80000,1.52920,63.27500 +91.90000,1.53090,63.24816 +92.00001,1.53260,63.24816 +92.10001,1.53420,63.22131 +92.20001,1.53590,63.16762 +92.30000,1.53760,63.08708 +92.40000,1.53920,63.03339 +92.50001,1.54090,62.97970 +92.60001,1.54260,62.95285 +92.70001,1.54420,62.92601 +92.80000,1.54590,62.89916 +92.90000,1.54760,62.87232 +93.00001,1.54920,62.81863 +93.10001,1.55090,62.73809 +93.20001,1.55260,62.71124 +93.30000,1.55420,62.65755 +93.40000,1.55590,62.63071 +93.50001,1.55760,62.60386 +93.60001,1.55920,62.60386 +93.70001,1.56090,62.55017 +93.80000,1.56260,62.49648 +93.90000,1.56420,62.44279 +94.00001,1.56590,62.41594 +94.10001,1.56760,62.38910 +94.20001,1.56920,62.36225 +94.30000,1.57090,62.30856 +94.40000,1.57260,62.28171 +94.50001,1.57420,62.25487 +94.60001,1.57590,62.22802 +94.70001,1.57760,62.17433 +94.80000,1.57920,62.17433 +94.90000,1.58090,62.12064 +95.00001,1.58260,62.12064 +95.10001,1.58420,62.09380 +95.20001,1.58590,62.09380 +95.30000,1.58760,62.06695 +95.40000,1.58920,62.04010 +95.50001,1.59090,62.01326 +95.60001,1.59260,61.98641 +95.70001,1.59420,61.95957 +95.80000,1.59590,61.93272 +95.90000,1.59760,61.90588 +96.00001,1.59920,61.90588 +96.10001,1.60090,61.87903 +96.20001,1.60260,61.85219 +96.30000,1.60420,61.82534 +96.40000,1.60590,61.82534 +96.50001,1.60760,61.82534 +96.60001,1.60920,61.82534 +96.70001,1.61090,61.82534 +96.80000,1.61260,61.85219 +96.90000,1.61420,61.82534 +97.00001,1.61590,61.79849 +97.10001,1.61760,61.77165 +97.20001,1.61920,61.77165 +97.30000,1.62090,61.74480 +97.40000,1.62260,61.74480 +97.50001,1.62420,61.74480 +97.60001,1.62590,61.77165 +97.70001,1.62760,61.77165 +97.80000,1.62920,61.77165 +97.90000,1.63090,61.71796 +98.00001,1.63260,61.71796 +98.10001,1.63420,61.69111 +98.20001,1.63590,61.69111 +98.30000,1.63760,61.69111 +98.40000,1.63920,61.69111 +98.50001,1.64090,61.69111 +98.60001,1.64260,61.66427 +98.70001,1.64420,61.63742 +98.80000,1.64590,61.66427 +98.90000,1.64760,61.63742 +99.00001,1.64920,61.63742 +99.10001,1.65090,61.66427 +99.20001,1.65260,61.69111 +99.30000,1.65420,61.69111 +99.40000,1.65590,61.69111 +99.50001,1.65760,61.66427 +99.60001,1.65920,61.66427 +99.70001,1.66090,61.63742 +99.80000,1.66260,61.63742 +99.90000,1.66420,61.63742 +100.00001,1.66590,61.66427 +100.10001,1.66760,61.63742 +100.20001,1.66920,61.63742 +100.30000,1.67090,61.61058 +100.40000,1.67260,61.61058 +100.50001,1.67420,61.58373 +100.60001,1.67590,61.58373 +100.70001,1.67760,61.58373 +100.80000,1.67920,61.55688 +100.90000,1.68090,61.53004 +101.00001,1.68260,61.47635 +101.10001,1.68420,61.42266 +101.20001,1.68590,61.39581 +101.30000,1.68760,61.36897 +101.40000,1.68920,61.36897 +101.50001,1.69090,61.34212 +101.60001,1.69260,61.34212 +101.70001,1.69420,61.31527 +101.80000,1.69590,61.26158 +101.90000,1.69750,61.26158 +102.00001,1.69920,61.23474 +102.10001,1.70090,61.20789 +102.20001,1.70250,61.18105 +102.30000,1.70420,61.18105 +102.40000,1.70590,61.18105 +102.50001,1.70750,61.15420 +102.60001,1.70920,61.12736 +102.70001,1.71090,61.10051 +102.80000,1.71250,61.07366 +102.90000,1.71420,61.04682 +103.00001,1.71590,61.04682 +103.10001,1.71750,61.07366 +103.20001,1.71920,61.04682 +103.30000,1.72090,61.04682 +103.40000,1.72250,61.01997 +103.50001,1.72420,61.01997 +103.60001,1.72590,61.01997 +103.70001,1.72750,60.99313 +103.80000,1.72920,60.99313 +103.90000,1.73090,60.99313 +104.00001,1.73250,60.99313 +104.10001,1.73420,60.96628 +104.20001,1.73590,60.93944 +104.30000,1.73750,60.93944 +104.40000,1.73920,60.88575 +104.50001,1.74090,60.88575 +104.60001,1.74250,60.88575 +104.70001,1.74420,60.88575 +104.80000,1.74590,60.85890 +104.90000,1.74750,60.83205 +105.00001,1.74920,60.80521 +105.10001,1.75090,60.77836 +105.20001,1.75250,60.72467 +105.30000,1.75420,60.72467 +105.40000,1.75590,60.72467 +105.50001,1.75750,60.72467 +105.60001,1.75920,60.69783 +105.70001,1.76090,60.69783 +105.80000,1.76250,60.64414 +105.90000,1.76420,60.61729 +106.00001,1.76590,60.59044 +106.10001,1.76750,60.59044 +106.20001,1.76920,60.59044 +106.30000,1.77090,60.59044 +106.40000,1.77250,60.53675 +106.50001,1.77420,60.50991 +106.60001,1.77590,60.45622 +106.70001,1.77750,60.45622 +106.80000,1.77920,60.40252 +106.90000,1.78090,60.37568 +107.00001,1.78250,60.37568 +107.10001,1.78420,60.34883 +107.20001,1.78590,60.32199 +107.30000,1.78750,60.29514 +107.40000,1.78920,60.21461 +107.50001,1.79090,60.18776 +107.60001,1.79250,60.13407 +107.70001,1.79420,60.10722 +107.80000,1.79590,60.02669 +107.90000,1.79750,59.91930 +108.00001,1.79920,59.78508 +108.10001,1.80090,59.67769 +108.20001,1.80250,59.57031 +108.30000,1.80420,59.46293 +108.40000,1.80590,59.35555 +108.50001,1.80750,59.19447 +108.60001,1.80920,59.11394 +108.70001,1.81090,59.03340 +108.80000,1.81250,58.92602 +108.90000,1.81420,58.81864 +109.00001,1.81590,58.71125 +109.10001,1.81750,58.63072 +109.20001,1.81920,58.55018 +109.30000,1.82090,58.46964 +109.40000,1.82250,58.41595 +109.50001,1.82420,58.36226 +109.60001,1.82590,58.28172 +109.70001,1.82750,58.22803 +109.80000,1.82920,58.14750 +109.90000,1.83090,58.09381 +110.00001,1.83250,58.01327 +110.10001,1.83420,57.95958 +110.20001,1.83590,57.93273 +110.30000,1.83750,57.87904 +110.40000,1.83920,57.82535 +110.50001,1.84090,57.77166 +110.60001,1.84250,57.69112 +110.70001,1.84420,57.66428 +110.80000,1.84590,57.61059 +110.90000,1.84750,57.58374 +111.00001,1.84920,57.53005 +111.10001,1.85090,57.50320 +111.20001,1.85250,57.44951 +111.30000,1.85420,57.42267 +111.40000,1.85590,57.42267 +111.50001,1.85750,57.39582 +111.60001,1.85920,57.34213 +111.70001,1.86090,57.31528 +111.80000,1.86250,57.31528 +111.90000,1.86420,57.28844 +112.00001,1.86590,57.26159 +112.10001,1.86750,57.20790 +112.20001,1.86920,57.15421 +112.30000,1.87090,57.12737 +112.40000,1.87250,57.07367 +112.50001,1.87420,57.01998 +112.60001,1.87590,56.99314 +112.70001,1.87750,56.96629 +112.80000,1.87920,56.93945 +112.90001,1.88090,56.88576 +113.00001,1.88250,56.88576 +113.10001,1.88420,56.83206 +113.20001,1.88590,56.80522 +113.30000,1.88750,56.80522 +113.40001,1.88920,56.77837 +113.50001,1.89090,56.72468 +113.60001,1.89250,56.69784 +113.70001,1.89420,56.67099 +113.80000,1.89590,56.61730 +113.90001,1.89750,56.59045 +114.00001,1.89920,56.53676 +114.10001,1.90090,56.50992 +114.20001,1.90250,56.48307 +114.30000,1.90420,56.42938 +114.40001,1.90590,56.37569 +114.50001,1.90750,56.29515 +114.60001,1.90920,56.21462 +114.70001,1.91090,56.10723 +114.80000,1.91250,55.99985 +114.90001,1.91420,55.89247 +115.00001,1.91590,55.78509 +115.10001,1.91750,55.65086 +115.20001,1.91920,55.54348 +115.30000,1.92090,55.40925 +115.40001,1.92250,55.30187 +115.50001,1.92420,55.19448 +115.60001,1.92590,55.08710 +115.70001,1.92750,55.03341 +115.80000,1.92920,54.95287 +115.90001,1.93090,54.84549 +116.00001,1.93250,54.76496 +116.10001,1.93420,54.63073 +116.20001,1.93590,54.52335 +116.30000,1.93750,54.41596 +116.40001,1.93920,54.30858 +116.50001,1.94090,54.22804 +116.60001,1.94250,54.14751 +116.70001,1.94420,54.04013 +116.80000,1.94590,53.93274 +116.90001,1.94750,53.82536 +117.00001,1.94920,53.71798 +117.10001,1.95090,53.58375 +117.20001,1.95250,53.47637 +117.30000,1.95420,53.28845 +117.40001,1.95590,53.18107 +117.50001,1.95750,53.04684 +117.60001,1.95920,52.91261 +117.70001,1.96090,52.77838 +117.80000,1.96250,52.69785 +117.90001,1.96420,52.56362 +118.00001,1.96590,52.48308 +118.10001,1.96750,52.42939 +118.20001,1.96920,52.37570 +118.30000,1.97090,52.29516 +118.40001,1.97250,52.18778 +118.50001,1.97420,52.10724 +118.60001,1.97590,52.05355 +118.70001,1.97750,51.97302 +118.80000,1.97920,51.89248 +118.90001,1.98090,51.81194 +119.00001,1.98250,51.78510 +119.10001,1.98420,51.70456 +119.20001,1.98590,51.62402 +119.30000,1.98750,51.51664 +119.40001,1.98920,51.43610 +119.50001,1.99090,51.32872 +119.60001,1.99250,51.27503 +119.70001,1.99420,51.22134 +119.80000,1.99590,51.16765 +119.90001,1.99750,51.11396 +120.00001,1.99920,51.06027 +120.10001,2.00090,50.97973 +120.20001,2.00250,50.95288 +120.30000,2.00420,50.89919 +120.40001,2.00590,50.87235 +120.50001,2.00750,50.84550 +120.60001,2.00920,50.79181 +120.70001,2.01090,50.76497 +120.80000,2.01250,50.71127 +120.90001,2.01420,50.65758 +121.00001,2.01590,50.63074 +121.10001,2.01750,50.57705 +121.20001,2.01920,50.57705 +121.30000,2.02090,50.60389 +121.40001,2.02250,50.55020 +121.50001,2.02420,50.52336 +121.60001,2.02590,50.46966 +121.70001,2.02750,50.44282 +121.80000,2.02920,50.41597 +121.90001,2.03090,50.38913 +122.00001,2.03250,50.38913 +122.10001,2.03420,50.38913 +122.20001,2.03590,50.36228 +122.30000,2.03750,50.36228 +122.40001,2.03920,50.33544 +122.50001,2.04090,50.30859 +122.60001,2.04250,50.28175 +122.70001,2.04420,50.25490 +122.80000,2.04590,50.28175 +122.90001,2.04750,50.25490 +123.00001,2.04920,50.25490 +123.10001,2.05090,50.22805 +123.20001,2.05250,50.22805 +123.30000,2.05420,50.17436 +123.40001,2.05590,50.17436 +123.50001,2.05750,50.14752 +123.60001,2.05920,50.14752 +123.70001,2.06090,50.17436 +123.80000,2.06250,50.20121 +123.90001,2.06420,50.20121 +124.00001,2.06590,50.17436 +124.10001,2.06750,50.14752 +124.20001,2.06920,50.14752 +124.30000,2.07090,50.14752 +124.40001,2.07250,50.14752 +124.50001,2.07420,50.14752 +124.60001,2.07590,50.14752 +124.70001,2.07750,50.12067 +124.80000,2.07920,50.09383 +124.90001,2.08090,50.09383 +125.00001,2.08250,50.09383 +125.10001,2.08420,50.06698 +125.20001,2.08590,50.06698 +125.30000,2.08750,50.09383 +125.40001,2.08920,50.06698 +125.50001,2.09090,50.06698 +125.60001,2.09250,50.01329 +125.70001,2.09420,50.01329 +125.80000,2.09590,49.98644 +125.90001,2.09750,49.98644 +126.00001,2.09920,49.98644 +126.10001,2.10090,49.98644 +126.20001,2.10250,49.95960 +126.30000,2.10420,49.95960 +126.40001,2.10590,49.90591 +126.50001,2.10750,49.90591 +126.60001,2.10920,49.87906 +126.70001,2.11090,49.85222 +126.80000,2.11250,49.85222 +126.90001,2.11420,49.85222 +127.00001,2.11590,49.82537 +127.10001,2.11750,49.77168 +127.20001,2.11920,49.71799 +127.30000,2.12090,49.69114 +127.40001,2.12250,49.66430 +127.50001,2.12420,49.63745 +127.60001,2.12590,49.61061 +127.70001,2.12750,49.58376 +127.80000,2.12920,49.53007 +127.90001,2.13090,49.50322 +128.00000,2.13250,49.44953 +128.10001,2.13420,49.42269 +128.20002,2.13590,49.36900 +128.30000,2.13750,49.31530 +128.40001,2.13920,49.26161 +128.50000,2.14090,49.23477 +128.60001,2.14250,49.15423 +128.70002,2.14420,49.07369 +128.80000,2.14590,48.96631 +128.90001,2.14750,48.85893 +129.00000,2.14920,48.72470 +129.10001,2.15090,48.61732 +129.20002,2.15250,48.42940 +129.30000,2.15420,47.99987 +129.40001,2.15590,47.30189 +129.50000,2.15750,46.79182 +129.60001,2.15920,46.01330 +129.70002,2.16090,45.55693 +129.80000,2.16250,45.18109 +129.90001,2.16420,44.83209 +130.00000,2.16590,44.53679 +130.10001,2.16750,44.13411 +130.20002,2.16920,43.83881 +130.30000,2.17090,43.59720 +130.40001,2.17250,43.38243 +130.50000,2.17420,43.19452 +130.60001,2.17590,43.00660 +130.70002,2.17750,42.87237 +130.80000,2.17920,42.73814 +130.90001,2.18090,42.60391 +131.00000,2.18250,42.48311 +131.10000,2.18420,42.34888 +131.20002,2.18590,42.21465 +131.30000,2.18750,42.10727 +131.40002,2.18920,42.01331 +131.50000,2.19090,41.91935 +131.60000,2.19250,41.83881 +131.70002,2.19420,41.75828 +131.80000,2.19590,41.65090 +131.90002,2.19750,41.57036 +132.00000,2.19920,41.48982 +132.10000,2.20090,41.44955 +132.20002,2.20250,41.38244 +132.30000,2.20420,41.35559 +132.40002,2.20590,41.32875 +132.50000,2.20750,41.31533 +132.60000,2.20920,41.27506 +132.70002,2.21090,41.24821 +132.80000,2.21250,41.19452 +132.90002,2.21420,41.16767 +133.00000,2.21580,41.11398 +133.10000,2.21750,41.10056 +133.20002,2.21920,41.10056 +133.30000,2.22080,41.08714 +133.40002,2.22250,41.07372 +133.50000,2.22420,41.04687 +133.60000,2.22580,41.02002 +133.70002,2.22750,41.02002 +133.80000,2.22920,41.00660 +133.90002,2.23080,41.02002 +134.00000,2.23250,41.00660 +134.10000,2.23420,41.02002 +134.20002,2.23580,41.00660 +134.30000,2.23750,41.00660 +134.40002,2.23920,40.97976 +134.50000,2.24080,40.97976 +134.60000,2.24250,40.96633 +134.70002,2.24420,40.97976 +134.80000,2.24580,41.00660 +134.90002,2.24750,41.02002 +135.00000,2.24920,41.02002 +135.10000,2.25080,41.00660 +135.20002,2.25250,40.99318 +135.30000,2.25420,41.00660 +135.40002,2.25580,40.99318 +135.50000,2.25750,41.00660 +135.60000,2.25920,41.00660 +135.70002,2.26080,41.02002 +135.80000,2.26250,41.02002 +135.90002,2.26420,41.02002 +136.00000,2.26580,41.03345 +136.10000,2.26750,41.04687 +136.20002,2.26920,41.03345 +136.30000,2.27080,41.06029 +136.40002,2.27250,41.07372 +136.50000,2.27420,41.11398 +136.60000,2.27580,41.10056 +136.70002,2.27750,41.11398 +136.80000,2.27920,41.11398 +136.90002,2.28080,41.12741 +137.00000,2.28250,41.12741 +137.10000,2.28420,41.14083 +137.20002,2.28580,41.16767 +137.30000,2.28750,41.18110 +137.40002,2.28920,41.19452 +137.50000,2.29080,41.16767 +137.60000,2.29250,41.16767 +137.70002,2.29420,41.16767 +137.80000,2.29580,41.16767 +137.90002,2.29750,41.19452 +138.00000,2.29920,41.22137 +138.10000,2.30080,41.22137 +138.20002,2.30250,41.22137 +138.30000,2.30420,41.20794 +138.40002,2.30580,41.20794 +138.50000,2.30750,41.19452 +138.60000,2.30920,41.19452 +138.70002,2.31080,41.20794 +138.80000,2.31250,41.23479 +138.90002,2.31420,41.24821 +139.00000,2.31580,41.26163 +139.10000,2.31750,41.24821 +139.20002,2.31920,41.24821 +139.30000,2.32080,41.24821 +139.40002,2.32250,41.26163 +139.50000,2.32420,41.26163 +139.60000,2.32580,41.28848 +139.70002,2.32750,41.27506 +139.80000,2.32920,41.27506 +139.90002,2.33080,41.27506 +140.00000,2.33250,41.27506 +140.10000,2.33420,41.26163 +140.20002,2.33580,41.27506 +140.30000,2.33750,41.28848 +140.40002,2.33920,41.30190 +140.50000,2.34080,41.31533 +140.60000,2.34250,41.32875 +140.70002,2.34420,41.31533 +140.80000,2.34580,41.32875 +140.90002,2.34750,41.31533 +141.00000,2.34920,41.32875 +141.10000,2.35080,41.34217 +141.20002,2.35250,41.35559 +141.30000,2.35420,41.34217 +141.40002,2.35580,41.34217 +141.50000,2.35750,41.34217 +141.60000,2.35920,41.32875 +141.70002,2.36080,41.31533 +141.80000,2.36250,41.32875 +141.90002,2.36420,41.32875 +142.00000,2.36580,41.35559 +142.10000,2.36750,41.35559 +142.20002,2.36920,41.34217 +142.30000,2.37080,41.31533 +142.40002,2.37250,41.31533 +142.50000,2.37420,41.31533 +142.60000,2.37580,41.32875 +142.70002,2.37750,41.32875 +142.80000,2.37920,41.34217 +142.90002,2.38080,41.34217 +143.00000,2.38250,41.35559 +143.10000,2.38420,41.32875 +143.20002,2.38580,41.35559 +143.30000,2.38750,41.34217 +143.40002,2.38920,41.34217 +143.50000,2.39080,41.34217 +143.60000,2.39250,41.35559 +143.70002,2.39420,41.35559 +143.80000,2.39580,41.35559 +143.90002,2.39750,41.32875 +144.00000,2.39920,41.31533 +144.10000,2.40080,41.31533 +144.20002,2.40250,41.31533 +144.30000,2.40420,41.31533 +144.40002,2.40580,41.32875 +144.50000,2.40750,41.32875 +144.60000,2.40920,41.32875 +144.70002,2.41080,41.32875 +144.80000,2.41250,41.35559 +144.90002,2.41420,41.34217 +145.00000,2.41580,41.34217 +145.10000,2.41750,41.35559 +145.20002,2.41920,41.38244 +145.30000,2.42080,41.39586 +145.40002,2.42250,41.39586 +145.50000,2.42420,41.38244 +145.60000,2.42580,41.39586 +145.70002,2.42750,41.36902 +145.80000,2.42920,41.36902 +145.90002,2.43080,41.36902 +146.00000,2.43250,41.38244 +146.10000,2.43420,41.38244 +146.20002,2.43580,41.38244 +146.30000,2.43750,41.35559 +146.40002,2.43920,41.36902 +146.50000,2.44080,41.35559 +146.60000,2.44250,41.36902 +146.70002,2.44420,41.38244 +146.80000,2.44580,41.36902 +146.90002,2.44750,41.36902 +147.00000,2.44920,41.36902 +147.10000,2.45080,41.36902 +147.20002,2.45250,41.38244 +147.30000,2.45420,41.35559 +147.40002,2.45580,41.36902 +147.50000,2.45750,41.38244 +147.60000,2.45920,41.40928 +147.70002,2.46080,41.39586 +147.80000,2.46250,41.39586 +147.90002,2.46420,41.36902 +148.00000,2.46580,41.38244 +148.10000,2.46750,41.36902 +148.20002,2.46920,41.38244 +148.30000,2.47080,41.38244 +148.40002,2.47250,41.39586 +148.50000,2.47420,41.38244 +148.60000,2.47580,41.38244 +148.70002,2.47750,41.36902 +148.80000,2.47920,41.38244 +148.90002,2.48080,41.36902 +149.00000,2.48250,41.39586 +149.10000,2.48420,41.40928 +149.20002,2.48580,41.43613 +149.30000,2.48750,41.44955 +149.40002,2.48920,41.43613 +149.50000,2.49080,41.42271 +149.60000,2.49250,41.42271 +149.70002,2.49420,41.40928 +149.80000,2.49580,41.42271 +149.90002,2.49750,41.43613 +150.00000,2.49920,41.43613 +150.10000,2.50080,41.44955 +150.20002,2.50250,41.42271 +150.30000,2.50420,41.40928 +150.40002,2.50580,41.42271 +150.50000,2.50750,41.42271 +150.60000,2.50920,41.42271 +150.70002,2.51080,41.44955 +150.80000,2.51250,41.44955 +150.90002,2.51420,41.43613 +151.00000,2.51580,41.40928 +151.10000,2.51750,41.39586 +151.20002,2.51920,41.40928 +151.30000,2.52080,41.39586 +151.40002,2.52250,41.40928 +151.50000,2.52420,41.42271 +151.60000,2.52580,41.43613 +151.70002,2.52750,41.42271 +151.80000,2.52920,41.40928 +151.85000,2.53000,41.40928 diff --git a/test_files/dex-test-03.json b/test_files/dex-test-03.json new file mode 100644 index 0000000000000000000000000000000000000000..f31b53637875270d7fac95a296213d05f96e714d --- /dev/null +++ b/test_files/dex-test-03.json @@ -0,0 +1,614 @@ +[ + [ + 16.93548, + -1255.0539375550534 + ], + [ + 33.87096, + -1120.031798942332 + ], + [ + 50.806439999999995, + -969.0317479580142 + ], + [ + 67.74192, + -783.1112469003554 + ], + [ + 84.67739999999999, + -603.5589501395755 + ], + [ + 101.61287999999999, + -457.4076485562746 + ], + [ + 118.54835999999999, + -319.3601064175704 + ], + [ + 135.48384, + -132.7980577372143 + ], + [ + 152.41931999999997, + 54.074635055184714 + ], + [ + 169.35479999999998, + 222.085827740285 + ], + [ + 186.29028, + 366.21794259530714 + ], + [ + 203.22575999999998, + 543.541705508823 + ], + [ + 220.16123999999996, + 728.4492366359075 + ], + [ + 237.09671999999998, + 883.1027325031641 + ], + [ + 254.0322, + 1026.87693131605 + ], + [ + 270.96768, + 1205.8687180485788 + ], + [ + 287.90315999999996, + 1387.217348152911 + ], + [ + 304.83863999999994, + 1545.7741548193153 + ], + [ + 321.77412, + 1687.1374851974335 + ], + [ + 338.70959999999997, + 1874.982629123184 + ], + [ + 355.64507999999995, + 2053.245077505699 + ], + [ + 372.58056, + 2193.1699905824016 + ], + [ + 389.51604, + 2306.852229324352 + ], + [ + 406.45151999999996, + 2467.4147164532937 + ], + [ + 423.38699999999994, + 2646.6766285006424 + ], + [ + 440.3224799999999, + 2786.317909996784 + ], + [ + 457.25795999999997, + 2904.6733166851177 + ], + [ + 474.19343999999995, + 3058.3070894889297 + ], + [ + 491.12891999999994, + 3221.307457584121 + ], + [ + 508.0644, + 3353.675614978737 + ], + [ + 524.99988, + 3457.572564191337 + ], + [ + 541.93536, + 3594.5666176022432 + ], + [ + 558.8708399999999, + 3746.1744505449055 + ], + [ + 575.8063199999999, + 3871.701684341708 + ], + [ + 592.7417999999999, + 3977.6178202825863 + ], + [ + 609.6772799999999, + 4101.990268358533 + ], + [ + 626.61276, + 4254.3814647141735 + ], + [ + 643.54824, + 4356.205202135531 + ], + [ + 660.48372, + 4439.761715142193 + ], + [ + 677.4191999999999, + 4558.002318571729 + ], + [ + 694.3546799999999, + 4707.942127695379 + ], + [ + 711.2901599999999, + 4811.737779914921 + ], + [ + 728.2256399999999, + 4896.9082916776315 + ], + [ + 745.16112, + 5012.413876294616 + ], + [ + 762.0966, + 5144.680736696175 + ], + [ + 779.03208, + 5251.711139560685 + ], + [ + 795.9675599999999, + 5329.588267823259 + ], + [ + 812.9030399999999, + 5450.124936428764 + ], + [ + 829.8385199999999, + 5571.49224037734 + ], + [ + 846.7739999999999, + 5687.625866351281 + ], + [ + 863.7094799999999, + 5770.635375595432 + ], + [ + 880.6449599999999, + 5882.480762196607 + ], + [ + 897.58044, + 6009.8988731971485 + ], + [ + 914.5159199999999, + 6112.911162003713 + ], + [ + 931.4513999999999, + 6193.307208826983 + ], + [ + 948.3868799999999, + 6294.577189352959 + ], + [ + 965.3223599999999, + 6429.74114375596 + ], + [ + 982.2578399999999, + 6552.702187061974 + ], + [ + 999.1933199999999, + 6638.62229657331 + ], + [ + 1016.1288, + 6750.197557859665 + ], + [ + 1033.0642799999998, + 6888.940672684031 + ], + [ + 1049.99976, + 7000.630737229184 + ], + [ + 1066.9352399999998, + 7079.21694444316 + ], + [ + 1083.87072, + 7195.742252123589 + ], + [ + 1100.8062, + 7323.626329292196 + ], + [ + 1117.7416799999999, + 7447.384242276928 + ], + [ + 1134.67716, + 7547.810081194091 + ], + [ + 1151.6126399999998, + 7657.548490339672 + ], + [ + 1168.54812, + 7790.071969790309 + ], + [ + 1185.4835999999998, + 7907.542716072608 + ], + [ + 1202.41908, + 7997.183801795588 + ], + [ + 1219.3545599999998, + 8090.559369995953 + ], + [ + 1236.2900399999999, + 8223.78517526512 + ], + [ + 1253.22552, + 8356.349173512981 + ], + [ + 1270.1609999999998, + 8436.650676476063 + ], + [ + 1287.09648, + 8544.700802404019 + ], + [ + 1304.0319599999998, + 8675.738592623147 + ], + [ + 1320.96744, + 8789.44784389658 + ], + [ + 1337.9029199999998, + 8880.932534893205 + ], + [ + 1354.8383999999999, + 8980.088784830716 + ], + [ + 1371.77388, + 9100.632206569091 + ], + [ + 1388.7093599999998, + 9220.581352614863 + ], + [ + 1405.64484, + 9314.64574036802 + ], + [ + 1422.5803199999998, + 9424.032986604332 + ], + [ + 1439.5158, + 9550.769031184955 + ], + [ + 1456.4512799999998, + 9653.193797431786 + ], + [ + 1473.3867599999999, + 9741.53828164363 + ], + [ + 1490.32224, + 9821.164471319662 + ], + [ + 1507.2577199999998, + 9939.661693798278 + ], + [ + 1524.1932, + 10056.49089245788 + ], + [ + 1541.1286799999998, + 10146.158990712342 + ], + [ + 1558.06416, + 10237.66394110758 + ], + [ + 1574.9996399999998, + 10350.076590869876 + ], + [ + 1591.9351199999999, + 10468.519788285526 + ], + [ + 1608.8705999999997, + 10550.104386494002 + ], + [ + 1625.8060799999998, + 10639.941313070227 + ], + [ + 1642.74156, + 10739.354182056817 + ], + [ + 1659.6770399999998, + 10860.242013571587 + ], + [ + 1676.61252, + 10942.738284717581 + ], + [ + 1693.5479999999998, + 11032.23755465028 + ], + [ + 1710.4834799999999, + 11126.261423606215 + ], + [ + 1727.4189599999997, + 11224.911188578437 + ], + [ + 1744.3544399999998, + 11293.9552190464 + ], + [ + 1761.2899199999997, + 11351.161007592384 + ], + [ + 1778.2253999999998, + 11422.69694408956 + ], + [ + 1795.16088, + 11506.989548579106 + ], + [ + 1812.0963599999998, + 11536.939692859762 + ], + [ + 1829.0318399999999, + 11548.575340795627 + ], + [ + 1845.9673199999997, + 11566.484649168187 + ], + [ + 1862.9027999999998, + 11563.783396019988 + ], + [ + 1879.8382799999997, + 11508.39420021617 + ], + [ + 1896.7737599999998, + 11438.019802572719 + ], + [ + 1913.70924, + 11389.01907046439 + ], + [ + 1930.6447199999998, + 11352.545399830835 + ], + [ + 1947.5801999999999, + 11280.192334256328 + ], + [ + 1964.5156799999997, + 11227.180241222924 + ], + [ + 1981.4511599999998, + 11186.040155775856 + ], + [ + 1998.3866399999997, + 11159.432812266097 + ], + [ + 2015.3221199999998, + 11097.081136472796 + ], + [ + 2032.2576, + 11038.774587268923 + ], + [ + 2049.19308, + 11013.06541043094 + ], + [ + 2066.1285599999997, + 11008.31795802298 + ], + [ + 2083.0640399999997, + 10957.433101843784 + ], + [ + 2099.99952, + 10914.624992577701 + ], + [ + 2116.935, + 10899.9301754515 + ], + [ + 2133.8704799999996, + 10892.4679636296 + ], + [ + 2150.8059599999997, + 10851.564237833 + ], + [ + 2167.74144, + 10820.736186279179 + ], + [ + 2184.67692, + 10808.168606007184 + ], + [ + 2201.6124, + 10803.853354102936 + ], + [ + 2218.5478799999996, + 10760.673822528977 + ], + [ + 2235.4833599999997, + 10743.379049247633 + ], + [ + 2252.41884, + 10732.384948934463 + ], + [ + 2269.35432, + 10707.979126740487 + ], + [ + 2286.2897999999996, + 10666.818781894806 + ], + [ + 2303.2252799999997, + 10631.749762898315 + ], + [ + 2320.1607599999998, + 10617.318317954061 + ], + [ + 2337.09624, + 10603.785039681585 + ], + [ + 2354.03172, + 10561.550946709496 + ], + [ + 2370.9671999999996, + 10518.850887569342 + ], + [ + 2387.9026799999997, + 10500.131203252324 + ], + [ + 2404.83816, + 10477.312367282913 + ], + [ + 2421.77364, + 10402.149998434279 + ], + [ + 2438.7091199999995, + 9331.92025425075 + ], + [ + 2455.6445999999996, + 5.924797688539551 + ], + [ + 2472.5800799999997, + 0.06983148981846293 + ], + [ + 2489.51556, + 0.1373628185234351 + ], + [ + 2506.45104, + 0.20489414722840726 + ], + [ + 2523.3865199999996, + 0.44800693056630714 + ], + [ + 2540.3219999999997, + 0.2994380074153683 + ], + [ + 2557.2574799999998, + 0.22515354583989894 + ], + [ + 2574.19296, + 0.3332036717678544 + ], + [ + 2591.12844, + 0.36021620324984327 + ] +] \ No newline at end of file