title fingerprint description book code
Search
We found 1 example(s) We found example(s) We couldn't find
Tag results Tag results for tag:
[{"id":"lcjs-example-0000-lineSeries","title":"JavaScript Line Chart","tags":["xy","line","legendbox"],"description":"Example showcasing the use of Line Series. Also known as Line Graph and Line Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases a simple XY line series.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n Themes\n} = lcjs\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 8, 1)\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n// Modify the default X Axis to use DateTime TickStrategy, and set the origin for the DateTime Axis.\nchart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.DateTime, (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin))\n\nchart.setPadding({\n right: 50\n})\n .setTitle('Diesel and Gasoline Price Comparison')\n\nconst diesel = [\n { x: 0, y: 1.52 },\n { x: 1, y: 1.52 },\n { x: 2, y: 1.52 },\n { x: 3, y: 1.58 },\n { x: 4, y: 2.00 },\n { x: 5, y: 2.00 },\n { x: 6, y: 2.00 },\n { x: 7, y: 2.00 },\n { x: 8, y: 2.26 },\n { x: 9, y: 1.90 },\n { x: 10, y: 1.90 },\n { x: 11, y: 1.90 },\n { x: 12, y: 1.90 },\n { x: 13, y: 1.60 },\n { x: 14, y: 1.60 },\n { x: 15, y: 1.60 },\n { x: 16, y: 1.00 },\n { x: 17, y: 1.00 },\n { x: 18, y: 1.00 },\n { x: 19, y: 1.74 },\n { x: 20, y: 1.47 },\n { x: 21, y: 1.47 },\n { x: 22, y: 1.47 },\n { x: 23, y: 1.74 },\n { x: 24, y: 1.74 },\n { x: 25, y: 1.74 },\n { x: 27, y: 1.5 },\n { x: 28, y: 1.5 },\n { x: 29, y: 1.5 }\n]\n\nconst gasoline = [\n { x: 0, y: 1.35 },\n { x: 1, y: 1.35 },\n { x: 2, y: 1.35 },\n { x: 3, y: 1.35 },\n { x: 4, y: 1.90 },\n { x: 5, y: 1.90 },\n { x: 6, y: 1.90 },\n { x: 7, y: 1.92 },\n { x: 8, y: 1.50 },\n { x: 9, y: 1.50 },\n { x: 10, y: 1.3 },\n { x: 11, y: 1.3 },\n { x: 12, y: 1.3 },\n { x: 13, y: 1.3 },\n { x: 14, y: 1.3 },\n { x: 15, y: 1.32 },\n { x: 16, y: 1.40 },\n { x: 17, y: 1.44 },\n { x: 18, y: 1.02 },\n { x: 19, y: 1.02 },\n { x: 20, y: 1.02 },\n { x: 21, y: 1.02 },\n { x: 22, y: 1.02 },\n { x: 23, y: 1.02 },\n { x: 24, y: 1.02 },\n { x: 25, y: 1.02 },\n { x: 27, y: 1.30 },\n { x: 28, y: 1.30 },\n { x: 29, y: 1.30 }\n]\n\n// Add two line series.\nconst lineSeries = chart.addLineSeries()\n .setName('Diesel')\n\nconst lineSeries2 = chart.addLineSeries()\n .setName('Gasoline')\n\n// Set the correct value to use for the data frequency.\n// 1000ms * 60s * 60min * 24h\nconst dataFrequency = 1000 * 60 * 60 * 24\n\n// Add the points to each Series - the X values are multiplied by dataFrequency to set the values properly on the X Axis.\nlineSeries2.add(diesel.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\nlineSeries.add(gasoline.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\n\n// Setup view nicely.\nchart.getDefaultAxisY()\n .setTitle('$/litre')\n .setInterval(0, 3, false, true)\n\n// Enable AutoCursor auto-fill.\nchart.setAutoCursor(cursor => cursor\n .setResultTableAutoTextStyle(true)\n .disposeTickMarkerX()\n .setTickMarkerYAutoTextStyle(true)\n)\nconst legend = chart.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Add Chart to LegendBox.\nlegend.add(chart)\n","url":null,"readme":"*Also known as a Line Graph or Line Chart*\n\nThis example shows the basic usage of a line series. The line series is drawn on a Cartesian coordinate system and represents the relationship between two variables. Line series display information as a series of data points connected by straight line segments. They are most often used to visualize the changes in data or reveal trends in a dataset.\n\nThis type of series does not contain the visual representation of 'markers' for the data points but only continuously connected line between all of them. Additionally, it allows drawing lines in any direction.\n\nThe chart can be created with few simple lines of code:\n\n```javascript\n// Create a new ChartXY.\nconst chart = lightningChart().ChartXY()\n\n// Add a line series using default X and Y axes.\nconst series = chart.addLineSeries()\n```\n\nThe series accepts points in format `{ x: number, y: number }`. Any number of points can be added with a single call.\n\n```javascript\n// Single point.\nseries.add({ x: 50, y: 60 })\n\n// Multiple points at once.\nseries.add([\n { x: 55, y: 60 },\n { x: 60, y: 62},\n { x: 65, y: 65}\n])\n```\n","image":"lineSeries.png"},{"id":"lcjs-example-0001-simpleScatter","title":"JavaScript Scatter Chart","tags":["scatter","point","xy","legendbox"],"description":"Using a point series to display a Point Graph. Also known as a Scatter Graph, Scatter Series, Point Graph, Scatter diagram or Scattergram.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Multiple chart examples, dynamic point coloring, Scatter Charts, Point Cluster Charts, 3D charts for JS.","src":"/*\n * LightningChartJS example that showcases a simple scatter series.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n emptyLine,\n PointShape,\n SolidFill,\n ColorRGBA,\n UIElementBuilders,\n UIButtonPictures,\n LegendBoxBuilders,\n Themes\n} = lcjs\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 6, 1)\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n\n// Modify the default X Axis to use DateTime TickStrategy, and set the origin for the DateTime Axis.\nchart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.DateTime, (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin))\n\nchart.setTitle('Product Sales')\n .setAutoCursor(cursor => {\n cursor.disposeTickMarkerY()\n cursor.setGridStrokeYStyle(emptyLine)\n })\n\n// Create a LegendBox as part of the chart.\nconst legend = chart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n\n// Create series.\nconst smartPhonesSeries = chart.addPointSeries({ pointShape: PointShape.Circle })\n .setName('Smart Phones')\n .setPointSize(10)\n\nconst laptopsSeries = chart.addPointSeries({ pointShape: PointShape.Square })\n .setName('Laptops')\n .setPointSize(10)\n\nconst smartTvSeries = chart.addPointSeries({ pointShape: PointShape.Triangle })\n .setName('Smart TV')\n .setPointSize(10)\n\n// Generate some points using for each day of 3 months\nconst dataFrequency = 1000 * 60 * 60 * 24\n\n// Setup view nicely.\nchart.getDefaultAxisX()\n .setInterval(0, 92 * dataFrequency)\n\nchart.getDefaultAxisY()\n .setScrollStrategy(undefined)\n .setInterval(0, 2000)\n .setTitle('Units Sold')\n\n// Data for the plotting\nconst smartPhoneData = [\n { x: 0, y: 200 },\n { x: 1, y: 220 },\n { x: 2, y: 260 },\n { x: 3, y: 264 },\n { x: 4, y: 280 },\n { x: 5, y: 288 },\n { x: 6, y: 280 },\n { x: 7, y: 248 },\n { x: 8, y: 292 },\n { x: 9, y: 308 },\n { x: 10, y: 316 },\n { x: 11, y: 328 },\n { x: 12, y: 344 },\n { x: 13, y: 360 },\n { x: 14, y: 388 },\n { x: 15, y: 404 },\n { x: 16, y: 432 },\n { x: 17, y: 444 },\n { x: 18, y: 432 },\n { x: 19, y: 444 },\n { x: 20, y: 452 },\n { x: 21, y: 460 },\n { x: 22, y: 464 },\n { x: 23, y: 492 },\n { x: 24, y: 508 },\n { x: 25, y: 492 },\n { x: 26, y: 520 },\n { x: 27, y: 532 },\n { x: 28, y: 548 },\n { x: 29, y: 576 },\n { x: 30, y: 600 },\n { x: 31, y: 608 },\n { x: 32, y: 628 },\n { x: 33, y: 624 },\n { x: 34, y: 640 },\n { x: 35, y: 672 },\n { x: 36, y: 692 },\n { x: 37, y: 716 },\n { x: 38, y: 732 },\n { x: 39, y: 744 },\n { x: 40, y: 760 },\n { x: 41, y: 792 },\n { x: 42, y: 840 },\n { x: 43, y: 884 },\n { x: 44, y: 880 },\n { x: 45, y: 900 },\n { x: 46, y: 928 },\n { x: 47, y: 992 },\n { x: 48, y: 980 },\n { x: 49, y: 1004 },\n { x: 50, y: 1032 },\n { x: 51, y: 1056 },\n { x: 52, y: 1072 },\n { x: 53, y: 1080 },\n { x: 54, y: 1108 },\n { x: 55, y: 1136 },\n { x: 56, y: 1160 },\n { x: 57, y: 1188 },\n { x: 58, y: 1200 },\n { x: 59, y: 1204 },\n { x: 60, y: 1220 },\n { x: 61, y: 1244 },\n { x: 62, y: 1272 },\n { x: 63, y: 1308 },\n { x: 64, y: 1340 },\n { x: 65, y: 1364 },\n { x: 66, y: 1388 },\n { x: 67, y: 1400 },\n { x: 68, y: 1420 },\n { x: 69, y: 1480 },\n { x: 70, y: 1460 },\n { x: 71, y: 1484 },\n { x: 72, y: 1520 },\n { x: 73, y: 1552 },\n { x: 74, y: 1568 },\n { x: 75, y: 1600 },\n { x: 76, y: 1620 },\n { x: 77, y: 1632 },\n { x: 78, y: 1660 },\n { x: 79, y: 1680 },\n { x: 80, y: 1740 },\n { x: 81, y: 1728 },\n { x: 82, y: 1772 },\n { x: 83, y: 1792 },\n { x: 84, y: 1788 },\n { x: 85, y: 1800 },\n { x: 86, y: 1808 },\n { x: 87, y: 1840 },\n { x: 88, y: 1872 },\n { x: 89, y: 1900 },\n { x: 90, y: 1932 }\n]\nconst laptopsData = [\n { x: 0, y: 70 },\n { x: 1, y: 57.2 },\n { x: 2, y: 88.4 },\n { x: 3, y: 83.6 },\n { x: 4, y: 80.8 },\n { x: 5, y: 106 },\n { x: 6, y: 117.2 },\n { x: 7, y: 108.4 },\n { x: 8, y: 95.6 },\n { x: 9, y: 108.8 },\n { x: 10, y: 118 },\n { x: 11, y: 127.2 },\n { x: 12, y: 138.4 },\n { x: 13, y: 131.6 },\n { x: 14, y: 128.8 },\n { x: 15, y: 142 },\n { x: 16, y: 157.2 },\n { x: 17, y: 164.4 },\n { x: 18, y: 163.6 },\n { x: 19, y: 182.8 },\n { x: 20, y: 192 },\n { x: 21, y: 199.2 },\n { x: 22, y: 204.4 },\n { x: 23, y: 213.6 },\n { x: 24, y: 226.8 },\n { x: 25, y: 218 },\n { x: 26, y: 229.2 },\n { x: 27, y: 228.4 },\n { x: 28, y: 243.6 },\n { x: 29, y: 254.8 },\n { x: 30, y: 264 },\n { x: 31, y: 287.2 },\n { x: 32, y: 266.4 },\n { x: 33, y: 277.6 },\n { x: 34, y: 278.8 },\n { x: 35, y: 306 },\n { x: 36, y: 311.2 },\n { x: 37, y: 320.4 },\n { x: 38, y: 333.6 },\n { x: 39, y: 324.8 },\n { x: 40, y: 330 },\n { x: 41, y: 353.2 },\n { x: 42, y: 378.4 },\n { x: 43, y: 401.6 },\n { x: 44, y: 396.8 },\n { x: 45, y: 396 },\n { x: 46, y: 413.2 },\n { x: 47, y: 452.4 },\n { x: 48, y: 441.6 },\n { x: 49, y: 444.8 },\n { x: 50, y: 462 },\n { x: 51, y: 485.2 },\n { x: 52, y: 492.4 },\n { x: 53, y: 483.6 },\n { x: 54, y: 494.8 },\n { x: 55, y: 514 },\n { x: 56, y: 531.2 },\n { x: 57, y: 536.4 },\n { x: 58, y: 535.6 },\n { x: 59, y: 544.8 },\n { x: 60, y: 556 },\n { x: 61, y: 557.2 },\n { x: 62, y: 566.4 },\n { x: 63, y: 587.6 },\n { x: 64, y: 602.8 },\n { x: 65, y: 624 },\n { x: 66, y: 639.2 },\n { x: 67, y: 640.4 },\n { x: 68, y: 645.6 },\n { x: 69, y: 678.8 },\n { x: 70, y: 660 },\n { x: 71, y: 683.2 },\n { x: 72, y: 694.4 },\n { x: 73, y: 709.6 },\n { x: 74, y: 712.8 },\n { x: 75, y: 722 },\n { x: 76, y: 745.2 },\n { x: 77, y: 744.4 },\n { x: 78, y: 755.6 },\n { x: 79, y: 768.8 },\n { x: 80, y: 792 },\n { x: 81, y: 793.2 },\n { x: 82, y: 820.4 },\n { x: 83, y: 817.6 },\n { x: 84, y: 820.8 },\n { x: 85, y: 816 },\n { x: 86, y: 831.2 },\n { x: 87, y: 844.4 },\n { x: 88, y: 853.6 },\n { x: 89, y: 870.8 },\n { x: 90, y: 886 }\n]\nconst smartTvData = [\n { x: 0, y: 10 },\n { x: 1, y: 15.5 },\n { x: 2, y: 21.1 },\n { x: 3, y: 27 },\n { x: 4, y: 30.8 },\n { x: 5, y: 38 },\n { x: 6, y: 40 },\n { x: 7, y: 44.4 },\n { x: 8, y: 47.6 },\n { x: 9, y: 50.8 },\n { x: 10, y: 52 },\n { x: 11, y: 54.2 },\n { x: 12, y: 59.4 },\n { x: 13, y: 65.6 },\n { x: 14, y: 57.8 },\n { x: 15, y: 62 },\n { x: 16, y: 74.2 },\n { x: 17, y: 70.4 },\n { x: 18, y: 82.6 },\n { x: 19, y: 74.8 },\n { x: 20, y: 84 },\n { x: 21, y: 87.2 },\n { x: 22, y: 98.4 },\n { x: 23, y: 99.6 },\n { x: 24, y: 98.8 },\n { x: 25, y: 98 },\n { x: 26, y: 102.2 },\n { x: 27, y: 99.4 },\n { x: 28, y: 111.6 },\n { x: 29, y: 121.8 },\n { x: 30, y: 117 },\n { x: 31, y: 127.2 },\n { x: 32, y: 117.4 },\n { x: 33, y: 125.6 },\n { x: 34, y: 131.8 },\n { x: 35, y: 136 },\n { x: 36, y: 138.2 },\n { x: 37, y: 142.4 },\n { x: 38, y: 148.6 },\n { x: 39, y: 146.8 },\n { x: 40, y: 157 },\n { x: 41, y: 159.2 },\n { x: 42, y: 168.4 },\n { x: 43, y: 184.6 },\n { x: 44, y: 181.8 },\n { x: 45, y: 189 },\n { x: 46, y: 195.2 },\n { x: 47, y: 202.4 },\n { x: 48, y: 197.6 },\n { x: 49, y: 207.8 },\n { x: 50, y: 218 },\n { x: 51, y: 216.2 },\n { x: 52, y: 221.4 },\n { x: 53, y: 226.6 },\n { x: 54, y: 231.8 },\n { x: 55, y: 233 },\n { x: 56, y: 241.2 },\n { x: 57, y: 250.4 },\n { x: 58, y: 246.6 },\n { x: 59, y: 248.8 },\n { x: 60, y: 251 },\n { x: 61, y: 254.2 },\n { x: 62, y: 267.4 },\n { x: 63, y: 275.6 },\n { x: 64, y: 282.8 },\n { x: 65, y: 285 },\n { x: 66, y: 291.2 },\n { x: 67, y: 292.4 },\n { x: 68, y: 292.6 },\n { x: 69, y: 304.8 },\n { x: 70, y: 307 },\n { x: 71, y: 313.2 },\n { x: 72, y: 317.4 },\n { x: 73, y: 326.6 },\n { x: 74, y: 327.8 },\n { x: 75, y: 338 },\n { x: 76, y: 342.2 },\n { x: 77, y: 345.4 },\n { x: 78, y: 350.6 },\n { x: 79, y: 347.8 },\n { x: 80, y: 371 },\n { x: 81, y: 362.2 },\n { x: 82, y: 376.4 },\n { x: 83, y: 378.6 },\n { x: 84, y: 378.8 },\n { x: 85, y: 372 },\n { x: 86, y: 375.2 },\n { x: 87, y: 385.4 },\n { x: 88, y: 390.6 },\n { x: 89, y: 396.8 },\n { x: 90, y: 406 }\n]\n\n// Adding points to the series\nsmartPhonesSeries.add(smartPhoneData.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\nlaptopsSeries.add(laptopsData.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\nsmartTvSeries.add(smartTvData.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\n\n// Add series to LegendBox and style entries.\nlegend.add(\n smartPhonesSeries,\n {\n builder: UIElementBuilders.CheckBox\n .setPictureOff(UIButtonPictures.Circle)\n .setPictureOn(UIButtonPictures.Circle)\n }\n)\nlegend.add(\n laptopsSeries,\n {\n builder: UIElementBuilders.CheckBox\n .setPictureOff(UIButtonPictures.Rectangle)\n .setPictureOn(UIButtonPictures.Rectangle)\n }\n)\nlegend.add(\n smartTvSeries,\n {\n builder: UIElementBuilders.CheckBox\n .setPictureOff(UIButtonPictures.Diamond)\n .setPictureOn(UIButtonPictures.Diamond)\n }\n)\n\n// Enable AutoCursor auto-fill.\nchart.setAutoCursor((cursor) => {\n cursor\n .setResultTableAutoTextStyle(true)\n .disposeTickMarkerX()\n .setTickMarkerXAutoTextStyle(false)\n .setTickMarkerYAutoTextStyle(false)\n})\n","url":null,"readme":"*Also known as a Scatter Graph, Scatter Series, Point Graph, Scatter diagram or Scattergram*\n\nThis example shows a simple Point Graph with points drawn using PointSeries for a visual representation of the data points 'markers'. The point graph is a type of chart or mathematical diagram drawn on a Cartesian coordinate system and represents the relationship between two variables.\n\nThis type of series does not contain the visual representation of lines for the connection of data points but only data 'markers'.\n\nThe chart can be created with few simple lines of code:\n\n```javascript\n// Add a scatter series with markers using default X and Y axes.\nconst pointSeries = chart.addPointSeries()\n```\n\nThe PointSeries API allows configuring the visual representation of data markers.\n\n- PointShape: *enum*\n\n | PointShape | Description |\n | :-----------: | :--------------------------------------: |\n | Rectangle | The series with rectangle-shaped points |\n | Triangle | The series with triangle-shaped points. |\n | Square | The series with square-shaped points. |\n\n PointShape must be specified upon creation of Series!\n\n ```javascript\n // Add a scatter series with markers using default X and Y axes. Select Circle PointShape.\n const pointSeries = chart.addPointSeries( { pointShape: PointShape.Circle } )\n ```\n\n- PointSize: *number*\n ```javascript\n pointSeries\n .setPointSize(5.0)\n ```\n\n- FillStyle\n Scatter Series with markers provides an ability to specify a fill style of data markers as well as individual point fill style (explained further).\n\n ```javascript\n pointSeries\n .setPointFillStyle(fillStyleObject)\n ```\n\n- IndividualPointFill: *FillStyle*\n\n The style indicates individual per point coloring. The style enables the usage of individual fill taken from the input. \n The series can accept points in format `{ x: number, y: number, color: Color }`\n If the color is not provided during the input of data points ( e.g. in format `{ x: number, y: number }` ), the configurable fallback color is used.\n ```javascript\n // Create the instance of IndividualPointFill fill style.\n const individualStyle = new IndividualPointFill()\n // Set red color as a fallback color\n individualStyle.setFallbackColor( ColorRGBA( 255, 0, 0 ) )\n ```\n\nAs it was mentioned before, the series accepts points in format `{ x: number, y: number: color: Color }` with specified IndividualPointFill to enable individual point coloring or `{ x: number, y: number }` for other fill styles. Any number of points can be added with a single call similarly to line series with point markers.\n\n- Dataset without colors. If IndividualPointFill is specified, the fallback color is used. Otherwise, the specified fill style is used.\n\n ```javascript\n // Dataset of Vec2 data points without color.\n pointSeries\n .add([\n { x: 5, y: 10 },\n { x: 7.5, y: 20 },\n { x: 10, y: 30 }\n ])\n ```\n- Dataset with individual colors. If IndividualPointFill is specified, the color from data point or fallback color is used. Otherwise, the specified fill style is used.\n\n ```javascript\n // Dataset of Vec2Color data points with individual color.\n pointSeries\n .add([\n // use red color if IndividualPointFill is specified\n { x: 2.5, y: 0, color: ColorRGBA( 255, 0, 0 ) },\n // use fallback color if IndividualPointFill is specified\n { x: 5, y: 10 },\n // use green color if IndividualPointFill is specified\n { x: 7.5, y: 20, color: ColorRGBA( 0, 255, 0 ) },\n // use blue color if IndividualPointFill is specified\n { x: 10, y: 30, color: ColorRGBA( 0, 0, 255 ) },\n ])\n ```\n","image":"simpleScatter.png"},{"id":"lcjs-example-0002-styledSplines","title":"JavaScript Spline Line Chart","tags":["spline","xy"],"description":"Example showing how to draw and style Spline Series.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases creation and styling of spline-series.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n AxisScrollStrategies,\n PointShape,\n SolidFill,\n ColorHEX,\n Themes\n} = lcjs\n\nconst {\n createProgressiveRandomGenerator\n} = require('@arction/xydata')\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date()\nconst dataFrequency = 1000\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n\nchart\n .setTitle('Live power consumption')\n // Modify the default X Axis to use DateTime TickStrategy, and set the origin for the DateTime Axis.\n .getDefaultAxisX().setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n // Progressive DateTime view of 61 seconds.\n .setInterval(-61 * 1000, 0)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n\nchart.getDefaultAxisY()\n .setTitle('Power consumption (kW)')\n .setInterval(0, 500)\n .setScrollStrategy(AxisScrollStrategies.expansion)\n\nconst series = chart.addSplineSeries({ pointShape: PointShape.Circle })\n .setName('Power consumption')\n .setCursorInterpolationEnabled(false)\n .setCursorResultTableFormatter((tableBuilder, series, x, y) => tableBuilder\n .addRow(series.getName())\n .addRow(series.axisX.formatValue(x))\n .addRow(series.axisY.formatValue(y) + ' kW')\n )\n\n// Stream some random data.\ncreateProgressiveRandomGenerator()\n .setNumberOfPoints(10000)\n .generate()\n .setStreamBatchSize(1)\n .setStreamInterval(1000)\n .setStreamRepeat(true)\n .toStream()\n .forEach(point => {\n point.x = point.x * dataFrequency\n point.y = point.y * 2000\n series.add(point)\n })\n","url":null,"readme":"This example shows how to draw and style spline-series. \n\nFirst create the series using chart method.\n\n```javascript\n// Add a spline series using default X and Y axes.\nconst splineSeries = chart.addSplineSeries()\n```\n\n## Option 1: Styling using a style object.\n\nThe first option for styling of series is to create a new object that contains the necessary information about visual settings. In the case of line-series, the object must be type of *SolidLine* to be visible.\n\n```javascript\n// Create a new instance of visible solid line-style.\nconst strokeStyle = new SolidLine()\n // Set desired fill style of the stroke.\n .setFillStyle(\n // SolidLine can have only SolidFill fill-style.\n new SolidFill().setColor(ColorRGBA(96, 204, 232))\n )\n // Set thickness of the stroke.\n .setThickness(5.0)\n\n// Apply styling settings to the series.\nsplineSeries.setStrokeStyle(strokeStyle)\n```\n\n## Option 2: Styling using a mutator function.\n\nUsually, it can be even more easy to simply modify the existing *Style* of a component, rather than constructing a new one. This is done using so-called *mutator-functions*. Here's an example:\n\n```javascript\n// Modify the previous Stroke style of a SplineSeries, by overriding its previous thickness.\nsplineSeries.setStrokeStyle(strokeStyle => strokeStyle.setThickness(1.0))\n```\n\nOur coding practices include fluent, self-returning API, which allows us to easily call multiple setters in one statement.\n\n```javascript\nsplineSeries\n .setStrokeStyle(strokeStyle)\n // 'transparentFill' is a static constant\n // that needs to be imported from the library in order to be used.\n // It is used to draw things with transparent fill that aren't disposable \n // - like the points of a PointLineSeries.\n .setPointFillStyle(transparentFill)\n```\n","image":"styledSplines.png"},{"id":"lcjs-example-0003-pointLinePlot","title":"JavaScript Point Line Chart","tags":["point-line","xy","point","line"],"description":"Basic use of Point Line Series. Also known as a Line Series, Line Graph, Line Chart, and Line with Markers.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases point & line -series with different point types.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PointShape,\n Themes\n} = lcjs\n\nconst pointSize = 10\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Car Mileage Comparison')\n\n// Add point line series with different point styles with a few static points.\n// Combine different LineStyles, FillStyles and PointShapes.\n\n// Add line series with rectangle-shaped points.\nchart.addPointLineSeries()\n .setName('Sports Car')\n .setPointSize(pointSize)\n .add([\n { x: 0, y: 0 },\n { x: 50, y: 10 },\n { x: 80, y: 20 },\n { x: 100, y: 30 },\n { x: 150, y: 40 },\n { x: 180, y: 50 },\n { x: 230, y: 60 },\n { x: 290, y: 70 }\n ])\n\n// Add line series with circle-shaped points.\nchart.addPointLineSeries({ pointShape: PointShape.Circle })\n .setName('Family Car')\n .setPointSize(pointSize)\n .add([\n { x: 0, y: 0 },\n { x: 100, y: 10 },\n { x: 230, y: 20 },\n { x: 390, y: 30 },\n { x: 470, y: 40 },\n { x: 540, y: 50 },\n { x: 600, y: 60 },\n { x: 800, y: 70 }\n ])\n\n// Add line series with triangle-shaped points.\nchart.addPointLineSeries({ pointShape: PointShape.Triangle })\n .setName('Pick-up Car')\n .setPointSize(pointSize)\n .add([\n { x: 0, y: 0 },\n { x: 80, y: 10 },\n { x: 100, y: 20 },\n { x: 150, y: 30 },\n { x: 230, y: 40 },\n { x: 380, y: 50 },\n { x: 450, y: 60 },\n { x: 580, y: 70 }\n ])\n\n// Setup view nicely.\nchart.getDefaultAxisX()\n .setInterval(0, 1000, false, true)\n .setTitle('Km')\nchart.getDefaultAxisY()\n .setInterval(0, 100, false, true)\n .setTitle('Litre')\nchart.setAutoCursor((cursor) => cursor\n .setResultTableAutoTextStyle(true)\n .setTickMarkerXAutoTextStyle(true)\n .setTickMarkerYAutoTextStyle(true)\n)\n\n// Add Legend Box.\nconst legend = chart.addLegendBox().add(chart)\n","url":null,"readme":"*Also known as a Line Series, Line Graph, Line Chart, and Line with Markers*\n\nThis example shows the basic usage of a line series with 'markers' for visual representation of the data points. Similarly to line series, it is drawn on a Cartesian coordinate system and represents the relationship between two variables. Line series display information as a series of data points connected by straight line segments in any direction. This type of series additionally draws data markers on top of the line at the location specified in a dataset.\n\nThe chart can be created with few simple lines of code:\n\n```javascript\n// Add a line series with markers using default X and Y axes.\nconst lineSeries = chart.addPointLineSeries()\n```\n\nLine Series with markers provides an ability to specify styles for both markers and lines individually.\n\n```javascript\nlineSeries\n .setStrokeStyle(lineStyleObject)\n .setPointFillStyle(fillStyleObject)\n```\n\nIt shares the same API with the PointSeries, which allows configuring the visual representation of data markers.\n\n- PointShape: *enum*\n\n | PointShape | Description |\n | :-----------: | :--------------------------------------: |\n | Rectangle | The series with rectangle-shaped points |\n | Triangle | The series with triangle-shaped points. |\n | Square | The series with square-shaped points. |\n\n PointShape must be specified upon creation of Series!\n\n ```javascript\n // Add a line series with markers using default X and Y axes. Select Circle PointShape.\n const lineSeries = chart.addPointLineSeries( { pointShape: PointShape.Circle } )\n ```\n\n- PointSize: *number*\n\n ```javascript\n lineSeries.setPointSize(5.0)\n ```\n\n- IndividualPointFill: *FillStyle*\n\n The style indicates individual per point coloring. The style enables the usage of individual fill taken from the input. \n The series can accept points in format `{ x: number, y: number, color: Color }`\n If the color is not provided during the input of data points ( e.g. in format `{ x: number, y: number }` ), the configurable fallback color is used.\n\n ```javascript\n // Create the instance of IndividualPointFill fill style.\n const individualStyle = new IndividualPointFill()\n // Set red color as a fallback color\n individualStyle.setFallbackColor( ColorRGBA( 255, 0, 0 ) )\n ```\n\nAs it was mentioned before, the series accepts points in format `{ x: number, y: number: color: Color }` with specified IndividualPointFill to enable individual point coloring or `{ x: number, y: number }` for other fill styles. Any number of points can be added with a single call similarly to line series with point markers.\n\n- Dataset without colors.\n - If IndividualPointFill is specified, the fallback color is used. Otherwise, the specified fill style is used.\n\n ```javascript\n // Dataset of Vec2 data points without color.\n lineSeries\n .add([\n { x: 5, y: 10 },\n { x: 7.5, y: 20 },\n { x: 10, y: 30 }\n ])\n ```\n\n- Dataset with individual colors.\n - If IndividualPointFill is specified, the color from data point or fallback color is used. Otherwise, the specified fill style is used.\n\n ```javascript\n // Dataset of Vec2Color data points with individual color.\n lineSeries\n .add([\n // use red color if IndividualPointFill is specified\n { x: 2.5, y: 0, color: ColorRGBA( 255, 0, 0 ) },\n // use fallback color if IndividualPointFill is specified\n { x: 5, y: 10 },\n // use green color if IndividualPointFill is specified\n { x: 7.5, y: 20, color: ColorRGBA( 0, 255, 0 ) },\n // use blue color if IndividualPointFill is specified\n { x: 10, y: 30, color: ColorRGBA( 0, 0, 255 ) },\n ])\n ```\n","image":"pointLinePlot.png"},{"id":"lcjs-example-0004-1MillionPointsLineTrace","title":"1 Million Points JavaScript Line Chart","tags":["line","xy","datapattern"],"description":"Example plotting a million data points using progressive Line Series.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases a line series with 1 Million streamed points with animated transitions.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n\n// Create line series optimized for regular progressive X data.\nconst series = chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true => The X step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n })\n\n// Generate traced points stream using 'xydata'-library.\nchart.setTitle('Generating test data...')\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(1 * 1000 * 1000)\n .generate()\n .toPromise()\n .then(data => {\n chart.setTitle('1 Million Points Line Trace')\n const dataLen = data.length\n let dataPointsCount = 0\n const addPoints = () => {\n const addDataPointsCount = 20000\n const newDataPoints = data.slice(dataPointsCount, dataPointsCount + addDataPointsCount)\n series.add(newDataPoints)\n dataPointsCount += addDataPointsCount\n if (dataPointsCount < dataLen) {\n requestAnimationFrame(addPoints)\n }\n }\n addPoints()\n })\n","url":null,"readme":"This example plots a million data points in an instant using line series.\n\n## Progressive data optimizations\n\nBy default, `LineSeries` can take list of XY coordinates in any order, connecting them with a line stroke.\nHowever, in a lot of applications, the input data comes in a distinct order, for example, X coordinates describe a timestamp which increases between each consecutive data point. We refer to this as a *progressive data pattern*.\n\n`LineSeries` is coupled together with highly sophisticated optimizations that can be enabled in applications where input data follows a *data pattern*. This example showcases the `'ProgressiveX'` *pattern*.\n\n### Enabling data pattern optimizations\n\n*Data pattern* must be specified when the *series* is created:\n\n```typescript\n// Create LineSeries with 'ProgressiveX' data pattern.\nconst series = ChartXY.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true => The X step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n })\n```\n\nAvailable *data patterns* are:\n- `'ProgressiveX'`: Each consecutive data point has increased X coordinate.\n- `'ProgressiveY'`: Each consecutive data point has increased Y coordinate.\n- `'RegressiveX'`: Each consecutive data point has decreased X coordinate.\n- `'RegressiveX'`: Each consecutive data point has decreased Y coordinate.\n\nThe pattern of data can be identified even further with the optional `regularProgressiveStep` property.\nThis can be enabled when the *progressive step* (for example, `'ProgressiveX'` -> X step) between each data point is regular, leading to even more significant optimizations.\n\n### Side-effects and good to know\n\nWhen a series is configured with a *data pattern*, the rendering process makes logical deductions and ssumptions on the user input data, according to the *data pattern* specification. **If the supplied input data does not follow the specification, rendering errors or even crashes can occur.** If you run into strange issues, first see if disabling the *data pattern* helps, or if your input data is somehow invalid.\n\n\n## Automatic Axis scrolling\n\nThe scrolling of data in progressive series can also be automated and optimized by specifying ***ScrollStrategy*** for both x-axis & y-axis to perform the scrolling efficiently.\n\n- Select ***AxisScrollStrategies.expansion***. Automatically increases a scale if some points are out of scale. Retains progressivity/regressivity of used scale.\n- Select ***AxisScrollStrategies.fitting***. Automatically increases a scale if some points are out of scale and reduces it if there is too much empty space. Retains progressivity/regressivity of used scale.\n- Select ***AxisScrollStrategies.progressive***. Automatically scrolls a scale in a positive direction.\n- Select ***AxisScrollStrategies.regressive***. Automatically scrolls a scale to a negative direction.\n- Pass ***undefined*** to disable automatic scrolling. Scale can then be manually set using *setInterval* method of ***Axis***\n","image":"1mPointsLineTrace.png"},{"id":"lcjs-example-0005-stepPlot","title":"JavaScript Step Series","tags":["step","xy","legendbox"],"description":"Example showing the use of a Step Series with different preprocessing modes. Also known as a Step Graph or Step Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases step-series with dynamically changeable stepping-options.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n StepOptions,\n UILayoutBuilders,\n UIElementBuilders,\n UIButtonPictures,\n UIOrigins,\n AxisTickStrategies,\n Themes\n} = lcjs\n\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n}).setTitle('Survey Report')\n\nconst reportTableXlabel = ['January', 'February', 'March', 'April', 'May', 'June', 'July',\n 'August', 'September', 'October', 'November', 'December']\n\n// Create step series for each available step-option.\n// The step-function can not be changed during runtime!\nconst stepSeries = []\nconst addSeries = (stepOption) =>\n stepSeries.push(\n chart.addStepSeries({ mode: stepOption })\n // Show identifier of stepping option as the name of the Series.\n .setName(StepOptions[stepOption])\n .dispose()\n .setCursorResultTableFormatter((builder, _, xValue, yValue) =>\n builder\n .addRow('Survey Report')\n .addRow('Month: ' + reportTableXlabel[Math.trunc(xValue)])\n .addRow('Amount: ' + yValue.toFixed(2))\n )\n )\naddSeries(StepOptions.before)\naddSeries(StepOptions.middle)\naddSeries(StepOptions.after)\n\n// X-axis of the series\nconst axisX = chart.getDefaultAxisX()\n .setMouseInteractions(false)\n // Disable default ticks.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n// Enable AutoCursor auto-fill.\nchart.setAutoCursor(cursor => {\n (cursor)\n .setResultTableAutoTextStyle(true)\n .disposeTickMarkerX()\n .setTickMarkerYAutoTextStyle(true)\n})\n\n// Generate progressive points and add it to every series.\nconst data = [{\n x: 'Jan', y: 1\n}, {\n x: 'Feb', y: 11\n}, {\n x: 'Mar', y: 21\n}, {\n x: 'Apr', y: 15\n}, {\n x: 'May', y: 57\n}, {\n x: 'Jun', y: 77\n}, {\n x: 'Jul', y: 47\n}, {\n x: 'Aug', y: 24\n}, {\n x: 'Sep', y: 76\n}, {\n x: 'Oct', y: 88\n}, {\n x: 'Nov', y: 99\n}, {\n x: 'Dec', y: 3\n}]\nlet x = 0\nlet changedData = []\n\nstepSeries.forEach((values, i) => {\n changedData = data.map((changex, index) => ({ x: index, y: changex.y }))\n values.add(changedData)\n})\n\nchangedData.forEach((_, index) => {\n // Add custom tick, more like categorical axis.\n axisX.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(index)\n .setGridStrokeLength(0)\n .setTextFormatter((_) => data[index].x)\n x += 1\n})\nchart.getDefaultAxisY()\n .setTitle('Amount / Month')\n .setInterval(0, 100)\n\n// Add UI controls for switching between step-mode-options.\n// NOTE: This is not the focus of the example, and will be better covered elsewhere.\nconst stepControls = chart.addUIElement(UILayoutBuilders.Column)\nstepControls.addElement(UIElementBuilders.TextBox)\n .setText('Step options')\nconst buttonLayout = stepControls.addElement(UILayoutBuilders.Row)\nconst radioButtons = []\nlet switching = false\nconst radioButtonBuilder = UIElementBuilders.CheckBox\n .setPictureOff(UIButtonPictures.Rectangle)\n .setPictureOn(UIButtonPictures.Diamond)\n .addStyler((checkBox) => {\n radioButtons.push(checkBox)\n checkBox\n .setOn(false)\n .setPadding({ left: 10, bottom: 5 })\n // Add radio button logic immediately afterwards so that it is applied after plot.\n // Attach logic (otherwise plot logic will override this)\n setTimeout(() => {\n checkBox.onSwitch((activatedButton, state) => {\n if (switching) {\n return\n }\n switching = true\n if (state) {\n // Deactivate other buttons\n for (const button of radioButtons)\n if (button !== activatedButton)\n button.setOn(false)\n } else {\n // Prevent turning of the selected option\n activatedButton.setOn(true)\n }\n switching = false\n })\n }, 100)\n })\nstepSeries[0].attach(\n buttonLayout.addElement(radioButtonBuilder)\n)\nstepSeries[1].attach(\n buttonLayout.addElement(radioButtonBuilder)\n)\nstepSeries[2].attach(\n buttonLayout.addElement(radioButtonBuilder)\n)\nconst margin = 10\nstepControls\n .setPosition({ x: 30, y: 80 })\n .setOrigin(UIOrigins.CenterBottom)\n .setMargin(margin)\n\n// Apply initial selection\nstepSeries[1].restore()\n","url":null,"readme":"*Also known as a Step Graph or Step Chart*\n\nThis example shows the basic usage of a step series with different preprocessing modes. Similarly to line series, it is drawn on a Cartesian coordinate system and represents the relationship between two variables. However, it is used to visualize the changing variables that have irregular fluctuation forming a step-like progression.\n\nThe data that changes at irregular intervals remains constant between the changes. The vertical risers of a chart denote changes in the data and their magnitude, the horizontal - the constancy of the data within the interval.\n\n\n\nCreation of a step series is equal to any basic line series, with the exception of an additional optional parameter, which specifies the 'step option' of the series.\n\n```javascript\nconst stepSeries = chart.addStepSeries( { mode: stepOption } )\n```\nThere is no need in data preparation, step chart will be generated automatically from the provided curve based on selected step mode.\n\n| Step Options | Description |\n| :-----------: | :-----------------------------------------------------: |\n| before | The magnitude changes before the next interval start. |\n| middle | The magnitude changes at the midpoint of the interval. |\n| after | The magnitude changes after the previous interval end. |\n\nThe series accepts points in format `{ x: number, y: number: color: Color }` with specified IndividualPointFill to enable individual point coloring or `{ x: number, y: number }` for other fill styles. Any number of points can be added with a single call similarly to line series with point markers.\n","image":"stepPlot.png"},{"id":"lcjs-example-0006-pointClusters","title":"JavaScript Point Clusters Chart","tags":["point-cluster","point","xy","rectangle"],"description":"Example showing how to create clusters of differently colored points. Using Point Series.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Multiple chart examples, dynamic point coloring, Scatter Charts, Point Cluster Charts, 3D charts for JS.","src":"/*\n * LightningChartJS example that showcases clusters of points.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n SolidLine,\n ColorPalettes,\n emptyFill,\n AxisTickStrategies,\n PointShape,\n Themes\n} = lcjs\n\nconst pointSize = 10\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 8, 1)\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Salary differences between Kuopio and Helsinki')\n .setPadding({\n right: 50\n })\n\n// Modify the default X Axis to use DateTime TickStrategy, and set the origin for the DateTime Axis.\nchart.getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\n// Add a series for each cluster of points\nconst fstClusterSeries = chart.addPointSeries({ pointShape: PointShape.Circle })\n .setName('Kuopio')\n .setPointSize(pointSize)\nconst sndClusterSeries = chart.addPointSeries({ pointShape: PointShape.Triangle })\n .setName('Helsinki')\n .setPointSize(pointSize)\n\n// The point supplied to series will have their X values multiplied by this value (for easier addition of DateTime-values).\nconst dataFrequency = 1000 * 60 * 60 * 24\nconst kuopioPoints = [\n { x: 12.152641878669275, y: 5335.336538461539 },\n { x: 11.62426614481409, y: 5259.615384615385 },\n { x: 10.919765166340508, y: 5082.932692307692 },\n { x: 10.156555772994128, y: 4923.076923076923 },\n { x: 9.334637964774949, y: 4796.875 },\n { x: 8.101761252446183, y: 4704.326923076923 },\n { x: 6.634050880626223, y: 4620.192307692308 },\n { x: 3.933463796477495, y: 4418.2692307692305 },\n { x: 3.111545988258317, y: 4342.548076923077 },\n { x: 2.8180039138943247, y: 4199.5192307692305 },\n { x: 2.8180039138943247, y: 4014.423076923077 },\n { x: 2.4657534246575334, y: 3930.2884615384614 },\n { x: 2.407045009784736, y: 3745.1923076923076 },\n { x: 2.935420743639921, y: 3408.653846153846 },\n { x: 3.6399217221135025, y: 3307.6923076923076 },\n { x: 5.107632093933463, y: 3181.4903846153848 },\n { x: 6.868884540117416, y: 3181.4903846153848 },\n { x: 7.749510763209393, y: 3198.3173076923076 },\n { x: 9.217221135029353, y: 3316.1057692307695 },\n { x: 10.215264187866929, y: 3475.9615384615386 },\n { x: 11.037181996086105, y: 3585.3365384615386 },\n { x: 12.035225048923678, y: 3719.951923076923 },\n { x: 12.798434442270057, y: 3778.846153846154 },\n { x: 16.027397260273972, y: 3820.9134615384614 },\n { x: 22.544031311154598, y: 3896.6346153846152 },\n { x: 24.187866927592953, y: 3963.9423076923076 },\n { x: 24.83365949119374, y: 4325.721153846154 },\n { x: 24.65753424657534, y: 4435.096153846154 },\n { x: 24.422700587084147, y: 4603.365384615385 },\n { x: 24.129158512720156, y: 4754.807692307692 },\n { x: 22.4853228962818, y: 5082.932692307692 },\n { x: 21.78082191780822, y: 5167.067307692308 },\n { x: 19.080234833659492, y: 5562.5 },\n { x: 17.31898238747554, y: 5722.3557692307695 },\n { x: 16.262230919765166, y: 5865.384615384615 },\n { x: 15.264187866927593, y: 5924.278846153846 },\n { x: 14.324853228962818, y: 5966.346153846154 },\n { x: 11.859099804305282, y: 5915.865384615385 },\n { x: 10.919765166340508, y: 5865.384615384615 },\n { x: 7.749510763209393, y: 5579.326923076923 },\n { x: 6.164383561643835, y: 5419.471153846154 },\n { x: 5.048923679060665, y: 5108.173076923077 },\n { x: 3.5812133072407044, y: 4460.336538461539 },\n { x: 2.8767123287671232, y: 4174.278846153846 },\n { x: 0.3522504892367906, y: 4342.548076923077 },\n { x: 0.3522504892367906, y: 4056.4903846153848 },\n { x: 0.23483365949119372, y: 3551.6826923076924 },\n { x: 0.410958904109589, y: 3282.4519230769233 },\n { x: 0.23483365949119372, y: 3046.875 },\n { x: 0.410958904109589, y: 2887.019230769231 },\n { x: 0.6457925636007827, y: 2693.5096153846152 },\n { x: 2.759295499021526, y: 2643.028846153846 },\n { x: 3.7573385518590996, y: 2643.028846153846 },\n { x: 5.98825831702544, y: 2668.269230769231 },\n { x: 9.510763209393346, y: 2693.5096153846152 },\n { x: 10.391389432485322, y: 2802.8846153846157 },\n { x: 11.037181996086105, y: 3030.048076923077 },\n { x: 11.741682974559687, y: 3274.038461538462 },\n { x: 12.857142857142856, y: 3475.9615384615386 },\n { x: 14.383561643835616, y: 3602.1634615384614 },\n { x: 15.205479452054796, y: 3652.6442307692305 },\n { x: 16.43835616438356, y: 3711.5384615384614 },\n { x: 17.96477495107632, y: 3804.0865384615386 },\n { x: 19.256360078277883, y: 4090.1442307692305 },\n { x: 19.021526418786692, y: 4233.173076923077 },\n { x: 17.201565557729943, y: 4384.615384615385 },\n { x: 15.088062622309199, y: 4435.096153846154 },\n { x: 12.270058708414872, y: 4376.201923076923 },\n { x: 10.626223091976517, y: 4207.932692307692 },\n { x: 8.336594911937379, y: 3862.9807692307695 },\n { x: 7.808219178082191, y: 3770.4326923076924 },\n { x: 5.283757338551859, y: 4485.576923076923 },\n { x: 4.87279843444227, y: 3896.6346153846152 },\n { x: 4.285714285714286, y: 3669.471153846154 },\n { x: 2.172211350293542, y: 4578.125 },\n { x: 3.933463796477495, y: 4981.971153846154 },\n { x: 5.518590998043054, y: 5335.336538461539 },\n { x: 7.749510763209393, y: 5798.076923076923 },\n { x: 10.09784735812133, y: 5688.701923076923 },\n { x: 9.628180039138943, y: 5352.163461538461 },\n { x: 13.209393346379647, y: 5570.913461538461 },\n { x: 12.68101761252446, y: 5772.836538461539 },\n { x: 14.794520547945204, y: 5688.701923076923 },\n { x: 16.203522504892366, y: 5461.538461538461 },\n { x: 18.493150684931507, y: 5183.8942307692305 },\n { x: 20.19569471624266, y: 4998.798076923077 },\n { x: 21.42857142857143, y: 4788.461538461539 },\n { x: 22.07436399217221, y: 4443.509615384615 },\n { x: 22.720156555772995, y: 4123.798076923077 },\n { x: 21.722113502935418, y: 4039.6634615384614 },\n { x: 19.608610567514678, y: 4443.509615384615 },\n { x: 18.786692759295498, y: 4586.538461538461 },\n { x: 16.731898238747554, y: 4822.115384615385 },\n { x: 14.500978473581215, y: 5032.451923076923 },\n { x: 13.972602739726026, y: 5099.759615384615 },\n { x: 12.38747553816047, y: 4754.807692307692 },\n { x: 14.911937377690801, y: 4687.5 },\n { x: 14.500978473581215, y: 4822.115384615385 },\n { x: 16.027397260273972, y: 5125 },\n { x: 15.029354207436398, y: 5394.2307692307695 },\n { x: 13.737769080234832, y: 5436.298076923077 },\n { x: 15.322896281800393, y: 5242.788461538461 },\n { x: 17.495107632093934, y: 5183.8942307692305 },\n { x: 18.904109589041095, y: 4838.942307692308 },\n { x: 20.900195694716242, y: 4603.365384615385 },\n { x: 22.133072407045006, y: 4620.192307692308 },\n { x: 22.367906066536204, y: 4737.9807692307695 },\n { x: 21.78082191780822, y: 4889.423076923077 },\n { x: 20.54794520547945, y: 5116.586538461539 },\n { x: 19.49119373776908, y: 5259.615384615385 },\n { x: 18.258317025440316, y: 5411.057692307692 },\n { x: 17.436399217221137, y: 5478.365384615385 },\n { x: 16.497064579256357, y: 5621.3942307692305 },\n { x: 14.383561643835616, y: 5814.903846153846 },\n { x: 13.561643835616438, y: 5840.1442307692305 },\n { x: 12.093933463796477, y: 5646.634615384615 },\n { x: 11.037181996086105, y: 5411.057692307692 },\n { x: 10.861056751467709, y: 5293.2692307692305 },\n { x: 9.921722113502934, y: 5150.240384615385 },\n { x: 8.336594911937379, y: 5301.682692307692 },\n { x: 6.927592954990215, y: 5217.548076923077 },\n { x: 6.34050880626223, y: 5015.625 },\n { x: 5.518590998043054, y: 4889.423076923077 },\n { x: 2.5244618395303324, y: 4679.086538461539 },\n { x: 4.1682974559686885, y: 4780.048076923077 },\n { x: 3.170254403131115, y: 4805.288461538461 },\n { x: 2.407045009784736, y: 4527.6442307692305 },\n { x: 1.8199608610567513, y: 4334.134615384615 },\n { x: 1.467710371819961, y: 4048.076923076923 },\n { x: 1.467710371819961, y: 3888.221153846154 },\n { x: 1.2915851272015655, y: 3711.5384615384614 },\n { x: 1.11545988258317, y: 3484.375 },\n { x: 1.3502935420743638, y: 3223.5576923076924 },\n { x: 1.4090019569471623, y: 3080.528846153846 },\n { x: 1.9960861056751458, y: 3030.048076923077 },\n { x: 4.10958904109589, y: 2929.0865384615386 },\n { x: 5.401174168297455, y: 2903.846153846154 },\n { x: 6.046966731898238, y: 2887.019230769231 },\n { x: 6.75146771037182, y: 2920.673076923077 },\n { x: 8.101761252446183, y: 2929.0865384615386 },\n { x: 9.217221135029353, y: 2996.394230769231 },\n { x: 10.09784735812133, y: 3189.903846153846 },\n { x: 6.34050880626223, y: 3097.3557692307695 },\n { x: 4.050880626223091, y: 3147.8365384615386 },\n { x: 2.8767123287671232, y: 3206.7307692307695 },\n { x: 2.1135029354207435, y: 2811.298076923077 },\n { x: 3.2289628180039136, y: 2929.0865384615386 },\n { x: 2.8180039138943247, y: 3055.288461538462 },\n { x: 4.931506849315069, y: 3265.625 },\n { x: 5.518590998043054, y: 3467.548076923077 },\n { x: 4.637964774951076, y: 3518.028846153846 },\n { x: 3.874755381604696, y: 3534.8557692307695 },\n { x: 2.8180039138943247, y: 3602.1634615384614 },\n { x: 2.23091976516634, y: 3644.2307692307695 },\n { x: 3.7573385518590996, y: 3879.8076923076924 },\n { x: 4.1682974559686885, y: 4098.557692307692 },\n { x: 4.6966731898238745, y: 4191.1057692307695 },\n { x: 5.694716242661448, y: 4258.413461538461 },\n { x: 6.986301369863013, y: 4350.961538461539 },\n { x: 7.86692759295499, y: 4409.8557692307695 },\n { x: 8.864970645792564, y: 4527.6442307692305 },\n { x: 9.217221135029353, y: 4586.538461538461 },\n { x: 9.041095890410958, y: 5141.826923076923 },\n { x: 8.512720156555773, y: 5074.5192307692305 },\n { x: 7.984344422700587, y: 4965.1442307692305 },\n { x: 7.455968688845399, y: 4838.942307692308 },\n { x: 6.457925636007829, y: 4754.807692307692 },\n { x: 5.577299412915851, y: 4679.086538461539 },\n { x: 6.986301369863013, y: 5343.75 },\n { x: 8.63013698630137, y: 5469.951923076923 },\n { x: 10.215264187866929, y: 5503.6057692307695 },\n { x: 11.154598825831703, y: 5537.259615384615 },\n { x: 13.033268101761252, y: 5427.884615384615 },\n { x: 13.09197651663405, y: 5192.307692307692 },\n { x: 12.152641878669275, y: 4990.384615384615 },\n { x: 10.919765166340508, y: 4695.913461538461 },\n { x: 10.450097847358121, y: 4611.778846153846 },\n { x: 9.804305283757339, y: 4477.163461538461 },\n { x: 8.806262230919765, y: 4359.375 },\n { x: 8.043052837573384, y: 4275.240384615385 },\n { x: 7.10371819960861, y: 4174.278846153846 },\n { x: 6.105675146771037, y: 3921.875 },\n { x: 5.636007827788649, y: 3719.951923076923 },\n { x: 6.223091976516634, y: 3568.5096153846152 },\n { x: 6.34050880626223, y: 3375 },\n { x: 6.986301369863013, y: 3324.519230769231 },\n { x: 7.632093933463796, y: 3425.4807692307695 },\n { x: 8.160469667318981, y: 3518.028846153846 },\n { x: 9.217221135029353, y: 3610.576923076923 },\n { x: 10.09784735812133, y: 3694.7115384615386 },\n { x: 11.037181996086105, y: 3787.2596153846152 },\n { x: 11.97651663405088, y: 3862.9807692307695 },\n { x: 12.915851272015654, y: 3947.1153846153848 },\n { x: 13.385518590998043, y: 4073.3173076923076 },\n { x: 14.442270058708415, y: 4115.384615384615 },\n { x: 15.616438356164382, y: 4123.798076923077 },\n { x: 17.201565557729943, y: 4115.384615384615 },\n { x: 18.375733855185906, y: 4048.076923076923 },\n { x: 19.608610567514678, y: 3947.1153846153848 },\n { x: 19.608610567514678, y: 3879.8076923076924 },\n { x: 21.42857142857143, y: 4182.692307692308 },\n { x: 20.958904109589042, y: 4308.894230769231 },\n { x: 23.01369863013699, y: 4275.240384615385 },\n { x: 19.021526418786692, y: 4426.682692307692 },\n { x: 17.377690802348333, y: 4645.432692307692 },\n { x: 17.553816046966734, y: 4931.490384615385 },\n { x: 16.262230919765166, y: 4990.384615384615 },\n { x: 16.203522504892366, y: 4679.086538461539 },\n { x: 14.853228962818003, y: 4468.75 },\n { x: 13.09197651663405, y: 4628.6057692307695 },\n { x: 13.913894324853228, y: 4805.288461538461 },\n { x: 12.622309197651663, y: 4906.25 },\n { x: 11.330724070450097, y: 4847.3557692307695 },\n { x: 11.037181996086105, y: 4199.5192307692305 },\n { x: 9.628180039138943, y: 3989.1826923076924 },\n { x: 9.217221135029353, y: 3930.2884615384614 },\n { x: 13.561643835616438, y: 4157.451923076923 },\n { x: 14.20743639921722, y: 4199.5192307692305 },\n { x: 18.904109589041095, y: 5823.317307692308 },\n { x: 19.608610567514678, y: 5739.182692307692 },\n { x: 20.900195694716242, y: 5713.942307692308 },\n { x: 21.722113502935418, y: 5865.384615384615 },\n { x: 22.720156555772995, y: 5655.048076923077 },\n { x: 23.95303326810176, y: 5528.846153846154 },\n { x: 23.894324853228966, y: 5394.2307692307695 },\n { x: 23.835616438356162, y: 5326.923076923077 },\n { x: 23.835616438356162, y: 5183.8942307692305 },\n { x: 23.894324853228966, y: 5024.038461538461 },\n { x: 24.481409001956948, y: 4872.596153846154 },\n { x: 21.487279843444227, y: 5394.2307692307695 },\n { x: 21.956947162426612, y: 5562.5 },\n { x: 22.367906066536204, y: 5512.0192307692305 },\n { x: 22.89628180039139, y: 5352.163461538461 },\n { x: 20.841487279843445, y: 5444.711538461539 },\n { x: 14.031311154598825, y: 3862.9807692307695 },\n { x: 15.557729941291585, y: 3854.5673076923076 },\n { x: 12.32876712328767, y: 4174.278846153846 },\n { x: 11.859099804305282, y: 4115.384615384615 },\n { x: 11.330724070450097, y: 3921.875 }\n]\n\nconst helsinkiPoints = [\n { x: 6.164383561643835, y: 2314.6634615384614 },\n { x: 6.516634050880624, y: 2351.2019230769233 },\n { x: 7.045009784735812, y: 2479.0865384615386 },\n { x: 7.279843444227005, y: 2543.028846153846 },\n { x: 7.514677103718199, y: 2638.9423076923076 },\n { x: 8.277886497064578, y: 2794.230769230769 },\n { x: 8.63013698630137, y: 2853.605769230769 },\n { x: 10.156555772994128, y: 2972.355769230769 },\n { x: 10.919765166340508, y: 3018.028846153846 },\n { x: 11.800391389432484, y: 3063.7019230769233 },\n { x: 12.798434442270057, y: 3109.375 },\n { x: 14.442270058708415, y: 3155.0480769230767 },\n { x: 16.555772994129157, y: 3228.125 },\n { x: 17.025440313111545, y: 3292.0673076923076 },\n { x: 17.729941291585128, y: 3419.951923076923 },\n { x: 18.610567514677104, y: 3904.086538461538 },\n { x: 18.6692759295499, y: 3753.3653846153848 },\n { x: 18.31702544031311, y: 3616.346153846154 },\n { x: 18.082191780821915, y: 3534.1346153846152 },\n { x: 19.667318982387478, y: 3922.355769230769 },\n { x: 20.782778864970645, y: 3894.951923076923 },\n { x: 22.07436399217221, y: 3858.413461538461 },\n { x: 23.131115459882583, y: 3799.0384615384614 },\n { x: 24.951076320939336, y: 3739.6634615384614 },\n { x: 26.301369863013697, y: 3639.1826923076924 },\n { x: 26.59491193737769, y: 3424.5192307692305 },\n { x: 26.771037181996086, y: 3200.721153846154 },\n { x: 27.76908023483366, y: 2949.5192307692305 },\n { x: 28.12133072407045, y: 2712.0192307692305 },\n { x: 26.53620352250489, y: 2638.9423076923076 },\n { x: 25.655577299412915, y: 2437.980769230769 },\n { x: 15.616438356164382, y: 2150.2403846153848 },\n { x: 19.138943248532293, y: 2227.8846153846152 },\n { x: 20.782778864970645, y: 2300.9615384615386 },\n { x: 23.776908023483365, y: 2469.951923076923 },\n { x: 25.71428571428571, y: 2757.6923076923076 },\n { x: 26.301369863013697, y: 2849.0384615384614 },\n { x: 26.947162426614483, y: 2954.086538461538 },\n { x: 24.951076320939336, y: 3050 },\n { x: 24.83365949119374, y: 3324.0384615384614 },\n { x: 25.949119373776906, y: 3547.836538461538 },\n { x: 27.06457925636008, y: 3598.076923076923 },\n { x: 27.886497064579256, y: 3630.0480769230767 },\n { x: 28.003913894324853, y: 3767.0673076923076 },\n { x: 27.59295499021526, y: 3780.7692307692305 },\n { x: 26.066536203522503, y: 3744.230769230769 },\n { x: 24.36399217221135, y: 3853.8461538461534 },\n { x: 19.080234833659492, y: 3218.9903846153848 },\n { x: 14.442270058708415, y: 2944.951923076923 },\n { x: 10.626223091976517, y: 2821.6346153846152 },\n { x: 9.628180039138943, y: 2670.9134615384614 },\n { x: 8.454011741682974, y: 2492.7884615384614 },\n { x: 9.393346379647749, y: 2469.951923076923 },\n { x: 10.743639921722114, y: 2465.3846153846152 },\n { x: 13.033268101761252, y: 2488.221153846154 },\n { x: 8.21917808219178, y: 2323.798076923077 },\n { x: 7.10371819960861, y: 2273.5576923076924 },\n { x: 6.2818003913894325, y: 2264.423076923077 },\n { x: 6.223091976516634, y: 2186.778846153846 },\n { x: 6.457925636007829, y: 2168.5096153846152 },\n { x: 8.101761252446183, y: 2145.673076923077 },\n { x: 10.567514677103718, y: 2232.4519230769233 },\n { x: 11.448140900195694, y: 2442.548076923077 },\n { x: 12.270058708414872, y: 2661.778846153846 },\n { x: 14.031311154598825, y: 2967.7884615384614 },\n { x: 15.73385518590998, y: 3282.9326923076924 },\n { x: 16.908023483365948, y: 3438.221153846154 },\n { x: 17.61252446183953, y: 3570.6730769230767 },\n { x: 13.50293542074364, y: 3328.605769230769 },\n { x: 11.97651663405088, y: 3155.0480769230767 },\n { x: 10.332681017612524, y: 2958.653846153846 },\n { x: 8.864970645792564, y: 2826.201923076923 },\n { x: 7.162426614481409, y: 2652.644230769231 },\n { x: 10.450097847358121, y: 2702.8846153846152 },\n { x: 13.033268101761252, y: 2903.846153846154 },\n { x: 18.610567514677104, y: 3342.3076923076924 },\n { x: 19.608610567514678, y: 3575.2403846153848 },\n { x: 20.19569471624266, y: 3652.8846153846152 },\n { x: 19.960861056751465, y: 3739.6634615384614 },\n { x: 22.015655577299416, y: 3693.9903846153848 },\n { x: 23.24853228962818, y: 3333.1730769230767 },\n { x: 21.07632093933464, y: 3191.586538461538 },\n { x: 19.726027397260275, y: 3109.375 },\n { x: 18.31702544031311, y: 3086.5384615384614 },\n { x: 15.499021526418783, y: 3013.461538461538 },\n { x: 15.264187866927593, y: 2684.6153846153848 },\n { x: 14.031311154598825, y: 2529.326923076923 },\n { x: 13.561643835616438, y: 2680.048076923077 },\n { x: 16.908023483365948, y: 2775.961538461538 },\n { x: 18.02348336594912, y: 2830.7692307692305 },\n { x: 22.89628180039139, y: 2817.0673076923076 },\n { x: 21.78082191780822, y: 2437.980769230769 },\n { x: 20.724070450097848, y: 2433.4134615384614 },\n { x: 16.908023483365948, y: 2433.4134615384614 },\n { x: 12.915851272015654, y: 2218.75 },\n { x: 11.62426614481409, y: 2223.3173076923076 },\n { x: 13.85518590998043, y: 2364.903846153846 },\n { x: 16.08610567514677, y: 2278.125 },\n { x: 17.260273972602743, y: 2310.096153846154 },\n { x: 18.7279843444227, y: 2406.0096153846152 },\n { x: 19.021526418786692, y: 2465.3846153846152 },\n { x: 18.610567514677104, y: 2575 },\n { x: 17.201565557729943, y: 2588.701923076923 },\n { x: 15.675146771037182, y: 2451.6826923076924 },\n { x: 15.264187866927593, y: 2424.278846153846 },\n { x: 15.557729941291585, y: 2620.673076923077 },\n { x: 18.140900195694716, y: 2725.721153846154 },\n { x: 18.6692759295499, y: 2739.423076923077 },\n { x: 20.900195694716242, y: 2625.2403846153848 },\n { x: 22.309197651663403, y: 2620.673076923077 },\n { x: 23.95303326810176, y: 2570.4326923076924 },\n { x: 25.303326810176124, y: 2538.4615384615386 },\n { x: 25.655577299412915, y: 2538.4615384615386 },\n { x: 25.00978473581213, y: 2652.644230769231 },\n { x: 24.77495107632094, y: 2890.1442307692305 },\n { x: 23.424657534246577, y: 2986.0576923076924 },\n { x: 21.545988258317024, y: 2903.846153846154 },\n { x: 21.135029354207433, y: 2785.096153846154 },\n { x: 20.313111545988257, y: 2849.0384615384614 },\n { x: 19.726027397260275, y: 2972.355769230769 },\n { x: 17.96477495107632, y: 2958.653846153846 },\n { x: 17.553816046966734, y: 2940.3846153846152 },\n { x: 15.557729941291585, y: 2821.6346153846152 },\n { x: 13.620352250489233, y: 2803.3653846153848 },\n { x: 13.50293542074364, y: 2862.7403846153848 },\n { x: 12.38747553816047, y: 3008.8942307692305 },\n { x: 16.731898238747554, y: 3132.211538461538 },\n { x: 19.080234833659492, y: 3465.625 },\n { x: 20.430528375733854, y: 3511.2980769230767 },\n { x: 21.898238747553815, y: 3561.5384615384614 },\n { x: 22.95499021526419, y: 3602.6442307692305 },\n { x: 23.424657534246577, y: 3648.3173076923076 },\n { x: 23.718199608610565, y: 3675.721153846154 },\n { x: 24.77495107632094, y: 3520.4326923076924 },\n { x: 22.544031311154598, y: 3433.6538461538457 },\n { x: 20.078277886497062, y: 3342.3076923076924 },\n { x: 22.95499021526419, y: 3241.826923076923 },\n { x: 24.246575342465754, y: 3187.0192307692305 },\n { x: 22.661448140900195, y: 3109.375 },\n { x: 21.545988258317024, y: 3063.7019230769233 },\n { x: 26.360078277886497, y: 3118.5096153846152 },\n { x: 26.53620352250489, y: 3301.201923076923 },\n { x: 25.655577299412915, y: 3387.980769230769 },\n { x: 24.89236790606654, y: 3429.086538461538 },\n { x: 24.070450097847356, y: 3502.1634615384614 },\n { x: 25.244618395303327, y: 3643.75 },\n { x: 22.837573385518592, y: 3721.3942307692305 },\n { x: 21.135029354207433, y: 3776.201923076923 },\n { x: 19.608610567514678, y: 3821.875 },\n { x: 18.8454011741683, y: 3643.75 },\n { x: 20.665362035225048, y: 3419.951923076923 },\n { x: 21.252446183953033, y: 3319.471153846154 },\n { x: 16.379647749510767, y: 2986.0576923076924 },\n { x: 16.84931506849315, y: 3031.730769230769 },\n { x: 14.677103718199607, y: 3072.836538461538 },\n { x: 12.152641878669275, y: 2807.9326923076924 },\n { x: 11.682974559686889, y: 2593.269230769231 },\n { x: 10.626223091976517, y: 2561.298076923077 },\n { x: 9.686888454011742, y: 2570.4326923076924 },\n { x: 8.63013698630137, y: 2716.586538461538 },\n { x: 11.62426614481409, y: 2332.9326923076924 },\n { x: 6.986301369863013, y: 2369.471153846154 },\n { x: 8.63013698630137, y: 2383.173076923077 },\n { x: 9.334637964774949, y: 2364.903846153846 },\n { x: 9.804305283757339, y: 2328.3653846153848 },\n { x: 9.393346379647749, y: 2287.2596153846152 },\n { x: 9.393346379647749, y: 2246.153846153846 },\n { x: 10.450097847358121, y: 2214.1826923076924 },\n { x: 12.093933463796477, y: 2182.2115384615386 },\n { x: 13.561643835616438, y: 2191.346153846154 },\n { x: 14.383561643835616, y: 2273.5576923076924 },\n { x: 15.264187866927593, y: 2314.6634615384614 },\n { x: 17.201565557729943, y: 2332.9326923076924 },\n { x: 18.7279843444227, y: 2319.2307692307695 },\n { x: 19.78473581213307, y: 2364.903846153846 },\n { x: 19.960861056751465, y: 2606.971153846154 },\n { x: 20.371819960861057, y: 2611.5384615384614 },\n { x: 20.900195694716242, y: 2712.0192307692305 },\n { x: 22.77886497064579, y: 2739.423076923077 },\n { x: 23.894324853228966, y: 2775.961538461538 },\n { x: 21.956947162426612, y: 2976.9230769230767 },\n { x: 18.02348336594912, y: 3209.855769230769 },\n { x: 21.66340508806262, y: 3310.336538461538 },\n { x: 21.36986301369863, y: 3260.096153846154 },\n { x: 22.07436399217221, y: 3205.2884615384614 },\n { x: 23.659491193737768, y: 3100.2403846153843 },\n { x: 25.479452054794518, y: 3205.2884615384614 },\n { x: 26.65362035225049, y: 3036.2980769230767 },\n { x: 25.538160469667318, y: 2995.1923076923076 },\n { x: 25.244618395303327, y: 2954.086538461538 },\n { x: 27.945205479452053, y: 3159.6153846153848 },\n { x: 27.651663405088062, y: 3081.971153846154 },\n { x: 27.651663405088062, y: 3264.6634615384614 },\n { x: 27.945205479452053, y: 3547.836538461538 },\n { x: 27.475538160469664, y: 3511.2980769230767 },\n { x: 28.356164383561644, y: 3456.4903846153848 },\n { x: 28.767123287671232, y: 3438.221153846154 },\n { x: 16.379647749510767, y: 3442.7884615384614 },\n { x: 15.499021526418783, y: 3374.2788461538457 },\n { x: 14.500978473581215, y: 3269.230769230769 },\n { x: 13.268101761252446, y: 3214.4230769230767 },\n { x: 15.968688845401173, y: 3141.346153846154 },\n { x: 15.381604696673193, y: 3200.721153846154 },\n { x: 15.029354207436398, y: 3104.8076923076924 },\n { x: 11.682974559686889, y: 2922.1153846153848 },\n { x: 10.626223091976517, y: 2894.711538461538 },\n { x: 9.628180039138943, y: 2839.903846153846 },\n { x: 9.686888454011742, y: 2762.2596153846152 },\n { x: 11.859099804305282, y: 2734.855769230769 },\n { x: 9.217221135029353, y: 2912.980769230769 },\n { x: 8.277886497064578, y: 2584.1346153846152 },\n { x: 11.272015655577299, y: 2661.778846153846 },\n { x: 14.324853228962818, y: 2780.528846153846 },\n { x: 15.616438356164382, y: 2762.2596153846152 },\n { x: 16.614481409001957, y: 2712.0192307692305 },\n { x: 17.436399217221137, y: 2675.480769230769 },\n { x: 13.79647749510763, y: 2602.403846153846 },\n { x: 16.320939334637963, y: 2538.4615384615386 },\n { x: 17.729941291585128, y: 2511.0576923076924 },\n { x: 14.442270058708415, y: 2465.3846153846152 },\n { x: 12.093933463796477, y: 2529.326923076923 },\n { x: 12.857142857142856, y: 2597.8365384615386 },\n { x: 12.563600782778865, y: 2419.7115384615386 },\n { x: 12.798434442270057, y: 2342.0673076923076 },\n { x: 13.79647749510763, y: 2296.394230769231 },\n { x: 13.033268101761252, y: 2282.6923076923076 },\n { x: 10.567514677103718, y: 2369.471153846154 },\n { x: 9.041095890410958, y: 2433.4134615384614 },\n { x: 7.749510763209393, y: 2442.548076923077 },\n { x: 8.688845401174168, y: 2648.076923076923 },\n { x: 7.690802348336595, y: 2730.2884615384614 },\n { x: 23.01369863013699, y: 2931.25 },\n { x: 29, y: 2931.25 },\n { x: 29, y: 2931.25 },\n { x: 29, y: 2931.25 }\n]\n\n// Create collection of rectangles which are going to be used as frame for clusters\nconst rects = chart.addRectangleSeries()\n .setCursorEnabled(false)\n\n// Base style for strokes of frames. Line-FillStyle will be overridden per each cluster.\nconst strokeStyle = new SolidLine()\n .setThickness(2)\n\n// Setup view nicely.\nchart.getDefaultAxisX()\n .setInterval(0 * dataFrequency, 30 * dataFrequency, true, true)\n\nchart.getDefaultAxisY()\n .setTitle('Salary ($)')\n .setInterval(1500, 6500, true, true)\n/**\n* Adds clusters of points to specified series and creates frames for them\n* @param {PointSeries} series Series which should hold the cluster\n* @return Function which receives a cluster of points\n*/\nconst drawCluster = (series, points) => {\n // Add points to specified series\n series.add(points.map(point => ({ x: point.x * dataFrequency, y: point.y })))\n // Cache top left corner of cluster area\n series.setCursorResultTableFormatter((builder, series, Xvalue, Yvalue) => {\n return builder\n .addRow(`${series.getName()}`)\n .addRow('Date : ' + series.axisX.formatValue(Xvalue))\n .addRow('Salary : $' + Yvalue.toFixed(0))\n })\n const topLeftCorner = {\n x: series.getXMin(),\n y: series.getYMin(),\n }\n // Create frame around cluster\n rects.add({\n x: topLeftCorner.x,\n y: topLeftCorner.y,\n width: series.getXMax() - topLeftCorner.x,\n height: series.getYMax() - topLeftCorner.y\n })\n // Disable filling of frame\n .setFillStyle(emptyFill)\n // Configure thickness and color of stroke via strokeStyle\n .setStrokeStyle(strokeStyle.setFillStyle(series.getPointFillStyle()))\n}\n\ndrawCluster(fstClusterSeries, kuopioPoints)\ndrawCluster(sndClusterSeries, helsinkiPoints)\n\n// Enable AutoCursor auto-fill.\nchart.setAutoCursor(cursor => (cursor)\n .setResultTableAutoTextStyle(true)\n .setTickMarkerXAutoTextStyle(true)\n .setTickMarkerYAutoTextStyle(true)\n)\n\n// Finally, add LegendBox to chart.\nchart.addLegendBox()\n .add(fstClusterSeries)\n .add(sndClusterSeries)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n","url":null,"readme":"This example shows how to create clusters of differently colored points, how to get the boundaries of a series and use them to draw frames around each cluster.\n\nThe most efficient way to draw point cloud clusters is utilizing ***PointSeries***. The description of how to configure the visual appearance of points can be found in previous tutorials and more information can be found in API documentation.\n\n```javascript\n// Create point series which represents a single cluster.\nconst cluster = chart.addPointSeries()\n```\n\n## Boundaries\n\nEach series automatically computes its boundaries based on the data input and configuration of a series. Get the boundaries in axis values using the following methods:\n\n```javascript\n// Cache min corner of a series (this would be bottom left on progressive axes).\nconst minCorner = {\n x: series.getXMin(),\n y: series.getYMin(),\n}\n\n// Cache max corner of a series (this would be top right on progressive axes).\nconst maxCorner = {\n x: series.getXMax(),\n y: series.getYMax(),\n}\n```\n\nThe boundary rectangle is defined by two points in 2D space. The same methods are applicable to all the series as well as ***progressive series*** in any directions.\n","image":"pointClusters.png"},{"id":"lcjs-example-0007-sharedAxis","title":"Shared Axis","tags":["spline","axis","xy","legendbox"],"description":"Shows how to combine multiple series in to one chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases sharing an Axis between two series.\n * Also, styling of chart zooming rectangle & axes.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n ColorPalettes,\n ColorRGBA,\n SolidFill,\n SolidLine,\n emptyLine,\n AxisTickStrategies,\n LegendBoxBuilders,\n UIOrigins,\n Themes\n} = lcjs\n\n// ----- Cache used styles -----\nconst palette = ColorPalettes.arction(10)\nconst colors = [6, 9, 0].map(palette)\nconst axisYColors = [colors[0], colors[1]]\nconst axisYStyles = axisYColors.map((color) => new SolidFill({ color }))\nconst axisYStrokeStyles = axisYStyles.map((fillStyle) => new SolidLine({ fillStyle, thickness: 2 }))\nconst axisYStylesHighlight = axisYStyles.map((fillStyle) => fillStyle.setA(100))\nconst axisXStyleHighlight = new SolidFill({ color: colors[2].setA(100) })\nconst seriesStrokeStyles = axisYStrokeStyles\nconst fittingRectangleStrokeStyle = new SolidLine({ fillStyle: new SolidFill({ color: ColorRGBA(255, 255, 255, 100) }), thickness: 2 })\nconst zoomingRectangleFillStyle = new SolidFill({ color: colors[2].setA(100) })\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 1, 5)\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setPadding({\n right: 50\n })\n .setTitle('Unit production comparison')\n // Style chart zooming rectangle.\n .setFittingRectangleStrokeStyle(fittingRectangleStrokeStyle)\n .setZoomingRectangleFillStyle(zoomingRectangleFillStyle)\n\n// Cache reference to default axes and style them.\nconst axisX = chart.getDefaultAxisX()\n .setOverlayStyle(axisXStyleHighlight)\n .setNibOverlayStyle(axisXStyleHighlight)\n // Set the X Axis to use DateTime TickStrategy\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\n// Style the default Y Axis.\nconst axisY1 = chart.getDefaultAxisY()\n .setStrokeStyle(axisYStrokeStyles[0])\n .setOverlayStyle(axisYStylesHighlight[0])\n .setNibOverlayStyle(axisYStylesHighlight[0])\n // Modify the TickStrategy to remove gridLines from this Y Axis.\n .setTickStrategy(\n // Use Numeric TickStrategy as base.\n AxisTickStrategies.Numeric,\n // Use mutator to modify the TickStrategy.\n tickStrategy => tickStrategy\n // Modify Major Tick Style by using a mutator.\n .setMajorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n // Modify Minor Tick Style by using a mutator.\n .setMinorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n )\n\n// Create additional styled Y axis on left side.\nconst axisY2 = chart.addAxisY(false)\n .setTitle('No of units produced')\n .setStrokeStyle(axisYStrokeStyles[1])\n .setOverlayStyle(axisYStylesHighlight[1])\n .setNibOverlayStyle(axisYStylesHighlight[1])\n // Modify the TickStrategy to remove gridLines from this Y Axis.\n .setTickStrategy(\n // Use Numeric TickStrategy as base.\n AxisTickStrategies.Numeric,\n // Use mutator to modify the TickStrategy.\n tickStrategy => tickStrategy\n // Modify Major Tick Style by using a mutator.\n .setMajorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n // Modify Minor Tick Style by using a mutator.\n .setMinorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n )\n\n// Create series with explicit axes.\nconst splineSeries1 = chart.addSplineSeries({\n xAxis: axisX,\n yAxis: axisY1\n})\n .setName('TechComp')\n .setStrokeStyle(seriesStrokeStyles[0])\n .setPointFillStyle(() => seriesStrokeStyles[0].getFillStyle())\n\nconst splineSeries2 = chart.addSplineSeries({\n xAxis: axisX,\n yAxis: axisY2\n})\n .setName('UniTek')\n .setStrokeStyle(seriesStrokeStyles[1])\n .setPointFillStyle(() => seriesStrokeStyles[1].getFillStyle())\n\nconst techcomp = [\n { x: 0, y: 352 },\n { x: 1, y: 352 },\n { x: 2, y: 352 },\n { x: 3, y: 358 },\n { x: 4, y: 400 },\n { x: 5, y: 400 },\n { x: 6, y: 400 },\n { x: 7, y: 400 },\n { x: 8, y: 426 },\n { x: 9, y: 390 },\n { x: 10, y: 390 },\n { x: 11, y: 390 },\n { x: 12, y: 390 },\n { x: 13, y: 360 },\n { x: 14, y: 360 },\n { x: 15, y: 360 },\n { x: 16, y: 500 },\n { x: 17, y: 500 },\n { x: 18, y: 500 },\n { x: 19, y: 600 },\n]\n\nconst unitek = [\n { x: 0, y: 235 },\n { x: 1, y: 235 },\n { x: 2, y: 335 },\n { x: 3, y: 335 },\n { x: 4, y: 490 },\n { x: 5, y: 490 },\n { x: 6, y: 490 },\n { x: 7, y: 492 },\n { x: 8, y: 550 },\n { x: 9, y: 550 },\n { x: 10, y: 600 },\n { x: 11, y: 600 },\n { x: 12, y: 900 },\n { x: 13, y: 900 },\n { x: 14, y: 900 },\n { x: 15, y: 850 },\n { x: 16, y: 1000 },\n { x: 17, y: 1200 },\n { x: 18, y: 1200 },\n { x: 19, y: 1300 }\n]\nconst dataFrequency = 1000 * 60 * 60 * 24\nsplineSeries1.add(techcomp.map((point) => ({ x: point.x * dataFrequency * 7, y: point.y })))\nsplineSeries2.add(unitek.map((point) => ({ x: point.x * dataFrequency * 7, y: point.y })))\n\n// Setup Y views manually (for some extra margins).\naxisY1.setInterval(splineSeries1.getYMin() - 10, splineSeries1.getYMax() + 10, true, true)\naxisY2.setInterval(splineSeries2.getYMin() - 10, splineSeries2.getYMax() + 10, true, true)\n\n// Enable AutoCursor auto-fill.\nchart.setAutoCursor(cursor => {\n (cursor)\n .setResultTableAutoTextStyle(true)\n .setTickMarkerXAutoTextStyle(true)\n .setTickMarkerYAutoTextStyle(true)\n})\nconst legend = chart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n})\n\n// Add Chart to LegendBox\nlegend.add(chart)\n\nconst parser = (builder, series, Xvalue, Yvalue) => {\n return builder\n .addRow(series.getName())\n .addRow(axisX.formatValue(Xvalue))\n .addRow('Units: ' + Math.floor(Yvalue))\n}\nsplineSeries1.setCursorResultTableFormatter(parser)\nsplineSeries2.setCursorResultTableFormatter(parser)\n","url":null,"readme":"Best practice of data visualization within Data Analysis in different fields and industries is combining multiple series in one chart to examine and get richer insight about collected data. Moreover, it allows researchers to make conclusions about the researching phenomena out of each data set, to search patterns and relationships both within a collection and across collections\n\nThis example shows how to:\n- configure the axis styling;\n- create additional axes;\n- assign series to explicit axes;\n- styling of ChartXY zooming rectangle.\n\n## Request default axes.\n\nCartesian XY charts contains default X and Y axes by default. To request the default axes of a chart, you can simply use:\n\n```javascript\n// Cache reference to default X-axis for further usage.\nconst axisXDefault = chart.getDefaultAxisX()\n\n// Cache reference to default Y-axis for further usage.\nconst axisYDefault = chart.getDefaultAxisY()\n```\n\nDuring the creation of any XY series, you can attach series to default axes by not specifying the xAxis or yAxis options.\n\n## Create new axis and attach series.\n\n```javascript\n// Create additional X-axis\nconst axisYNew = chart.addAxisX()\n\n// Create additional Y-axis\nconst axisYNew = chart.addAxisY()\n```\n\nDuring the creation of any XY series, you can attach series to any axes via the cached references as the arguments.\n\n```javascript\n// Create series with explicit axes, share the same x-axis between two series.\nconst allSeries = [\n chart.addSplineSeries({\n xAxis: axisXDefault,\n yAxis: AxisYDefault\n }),\n chart.addSplineSeries({\n xAxis: axisXDefault,\n yAxis: axisYNew \n }),\n ...\n]\n```\n\n## Axis styling.\n\nBoth X and Y axes share the same flexible and fully customizable API, meaning the same setters and getters. The full list of methods of the class ***Axis*** you can find in LightningChart JS API reference.\n\n```javascript\n// Add additional styling for the axis.\naxis\n .setTitle( 'My axis' )\n // Configure axis line style.\n .setStrokeStyle( axisStrokeStyle )\n // Configure axis tick style by modifying the Axis TickStrategy.\n .setTickStrategy(\n // Use Numeric TickStrategy as Base.\n AxisTickStrategies.Numeric,\n // Use a mutator to modify the TickStrategy.\n ( tickStrategy ) => tickStrategy\n // Modify the Major Ticks for the TickStrategy.\n // Minor and Extreme TickStyles must be set separately.\n .setMajorTickStyle( visibleTicks => visibleTicks\n // Label fill Style.\n .setLabelFillStyle( axisLabelFillStyle )\n // Font.\n .setLabelFont( font => font\n // Configure the font.\n ...\n )\n // Grid stroke style\n .setGridStrokeStyle( gridStrokeStyle )\n )\n )\n // Configure axis overlay style (interactive axis area).\n .setOverlayStyle( axisFillStyleHighlight )\n // Configure axis nibs overlay style (interactive axis nibs area).\n .setNibOverlayStyle( axisFillStyleHighlight )\n```\n","image":"sharedAxis.png"},{"id":"lcjs-example-0008-lineSeriesMicroseconds","title":"JavaScript Microseconds Line Chart","tags":["xy","line","legendbox"],"description":"Example on how to deal with high-resolution data - for example, measurements in microseconds precision.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases an Axis interval that is depicted as microseconds.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n Themes\n} = lcjs\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setPadding({\n right: 50\n })\n .setTitle('High resolution voltage measurement')\n\n// Create line series optimized for regular progressive X data.\nconst lineSeries = chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true => The X step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n})\n .setName('Voltage')\n\n// Axes can't properly scroll data with microseconds precision - define a factor to scale all X values with.\nconst dataScaleX = 1 * Math.pow( 1000, 3 ) // 1 us\n\n// Style Axes.\nchart.getDefaultAxisX()\n .setTitle( 'Time' )\n .setTickStrategy( AxisTickStrategies.Numeric, ( strategy ) => strategy\n // Format ticks with units.\n .setFormattingFunction( timeScaled =>\n Math.round( timeScaled ) + ' μs'\n )\n )\n\nchart.getDefaultAxisY()\n .setTitle( 'Voltage' )\n .setTickStrategy( AxisTickStrategies.Numeric, ( strategy ) => strategy\n // Format ticks with units.\n .setFormattingFunction( voltage =>\n voltage.toFixed( 2 ) + ' V'\n )\n )\n\nconst renderData = ( data ) => {\n // Add data.\n lineSeries.add( data.map( p => ({ x: p.x * dataScaleX, y: p.y }) ) )\n}\n\n// Data where 'x' = time in seconds and 'y' = voltage (V).\nrenderData(\n [\t{ x: -0.0000020000000000000003, y: 0.027443997800008942 },\n { x: -0.0000019990000000000003, y: -0.011040000894077058 },\n { x: -0.000001998, y: 0.03220101591561531 },\n { x: -0.000001997, y: 0.0032277195700614984 },\n { x: -0.000001996, y: -0.016034820491464274 },\n { x: -0.000001995, y: -0.008368059183426731 },\n { x: -0.000001994, y: -0.02177862894781828 },\n { x: -0.000001993, y: 0.001636039091765307 },\n { x: -0.0000019919999999999997, y: -0.03158798144826885 },\n { x: -0.0000019909999999999997, y: -0.013230578513313334 },\n { x: -0.0000019899999999999996, y: -0.012694187571129261 },\n { x: -0.0000019889999999999995, y: -0.0027350699497441875 },\n { x: -0.0000019879999999999994, y: 0.03298847629763905 },\n { x: -0.0000019869999999999994, y: -0.03717782287193666 },\n { x: -0.0000019859999999999993, y: 0.028062788701891394 },\n { x: -0.000001984999999999999, y: -0.016266999601182712 },\n { x: -0.000001983999999999999, y: -0.008046589284136109 },\n { x: -0.000001982999999999999, y: -0.003740378143367308 },\n { x: -0.000001981999999999999, y: 0.019358216986926403 },\n { x: -0.000001980999999999999, y: 0.02805533324925918 },\n { x: -0.000001979999999999999, y: 0.031225670024134983 },\n { x: -0.0000019789999999999988, y: 0.020582142130848646 },\n { x: -0.0000019779999999999987, y: -0.007463655137510183 },\n { x: -0.0000019769999999999986, y: -0.012432948528416126 },\n { x: -0.0000019759999999999985, y: -0.008897767785342523 },\n { x: -0.0000019749999999999985, y: 0.009059768800837458 },\n { x: -0.0000019739999999999984, y: -0.01802759024130608 },\n { x: -0.0000019729999999999983, y: -0.02600377226442229 },\n { x: -0.0000019719999999999982, y: 0.028207624634314542 },\n { x: -0.000001970999999999998, y: -0.012739022918053046 },\n { x: -0.000001969999999999998, y: -0.029461215330813854 },\n { x: -0.000001968999999999998, y: 0.03805686913709322 },\n { x: -0.000001967999999999998, y: 0.00863873273448897 },\n { x: -0.000001966999999999998, y: -0.023022703625994633 },\n { x: -0.0000019659999999999978, y: -0.0373599679488816 },\n { x: -0.0000019649999999999977, y: -0.035682458658072 },\n { x: -0.0000019639999999999976, y: 0.01684443788295703 },\n { x: -0.0000019629999999999976, y: 0.0328927810844329 },\n { x: -0.0000019619999999999975, y: -0.007839367701313547 },\n { x: -0.0000019609999999999974, y: 0.010748498921052238 },\n { x: -0.0000019599999999999973, y: -0.014900326268457866 },\n { x: -0.0000019589999999999973, y: 0.03595859412516749 },\n { x: -0.000001957999999999997, y: -0.02923854638665586 },\n { x: -0.000001956999999999997, y: -0.02341062868016332 },\n { x: -0.000001955999999999997, y: 0.007523826280203083 },\n { x: -0.000001954999999999997, y: -0.003733821934002091 },\n { x: -0.000001953999999999997, y: -0.021005461742955544 },\n { x: -0.000001952999999999997, y: -0.03151378617897506 },\n { x: -0.0000019519999999999967, y: 0.02774790358861265 },\n { x: -0.0000019509999999999967, y: 0.03795208393331581 },\n { x: -0.0000019499999999999966, y: 0.026283318084466992 },\n { x: -0.0000019489999999999965, y: 0.0039971746651379 },\n { x: -0.0000019479999999999964, y: -0.010837607472969751 },\n { x: -0.0000019469999999999964, y: 0.0045505495440374515 },\n { x: -0.0000019459999999999963, y: 0.02760932266323016 },\n { x: -0.000001944999999999996, y: -0.012932797683883203 },\n { x: -0.000001943999999999996, y: 0.026313178254021314 },\n { x: -0.000001942999999999996, y: -0.006753080306960189 },\n { x: -0.000001941999999999996, y: -0.005829791514477386 },\n { x: -0.000001940999999999996, y: 0.030479168110012805 },\n { x: -0.000001939999999999996, y: 0.019178344607547356 },\n { x: -0.0000019389999999999958, y: 0.025456333122878295 },\n { x: -0.0000019379999999999957, y: 0.035631691174438956 },\n { x: -0.0000019369999999999956, y: 0.00859127099361588 },\n { x: -0.0000019359999999999955, y: 0.031193035102678842 },\n { x: -0.0000019349999999999954, y: -0.007024064866093383 },\n { x: -0.0000019339999999999954, y: -0.02066494292075876 },\n { x: -0.0000019329999999999953, y: 0.03336475598292969 },\n { x: -0.0000019319999999999952, y: -0.00035095400945603806 },\n { x: -0.000001930999999999995, y: -0.034745500954158105 },\n { x: -0.000001929999999999995, y: 0.005364859917507523 },\n { x: -0.000001928999999999995, y: -0.02445169288471954 },\n { x: -0.000001927999999999995, y: -0.02441816045956086 },\n { x: -0.000001926999999999995, y: 0.027959876909385544 },\n { x: -0.0000019259999999999948, y: -0.007642897144741695 },\n { x: -0.0000019249999999999947, y: 0.032599275065726394 },\n { x: -0.0000019239999999999946, y: 0.01897552794893236 },\n { x: -0.0000019229999999999945, y: -0.0363220820132121 },\n { x: -0.0000019219999999999945, y: 0.03505807770706757 },\n { x: -0.0000019209999999999944, y: 0.009264323825879552 },\n { x: -0.0000019199999999999943, y: -0.02143546262960617 },\n { x: -0.0000019189999999999942, y: 0.028527256171897965 },\n { x: -0.000001917999999999994, y: -0.0067127373419447805 },\n { x: -0.000001916999999999994, y: -0.020852541725547107 },\n { x: -0.000001915999999999994, y: -0.021657662150244002 },\n { x: -0.000001914999999999994, y: -0.03396864467141348 },\n { x: -0.000001913999999999994, y: 0.025170812430718562 },\n { x: -0.000001912999999999994, y: -0.034041062837669465 },\n { x: -0.0000019119999999999937, y: 0.02651841202431338 },\n { x: -0.0000019109999999999936, y: -0.006762134246684295 },\n { x: -0.0000019099999999999936, y: -0.03227858249048464 },\n { x: -0.0000019089999999999935, y: 0.010328213861666406 },\n { x: -0.0000019079999999999934, y: -0.035234975360768035 },\n { x: -0.0000019069999999999933, y: 0.008202285542611463 },\n { x: -0.0000019059999999999933, y: 0.03663418613211281 },\n { x: -0.0000019049999999999932, y: 0.028359697089407786 },\n { x: -0.0000019039999999999931, y: -0.0011449575670857686 },\n { x: -0.000001902999999999993, y: -0.03469593477268927 },\n { x: -0.000001901999999999993, y: -0.008822618293776422 },\n { x: -0.000001900999999999993, y: -0.015392005406952342 },\n { x: -0.0000018999999999999928, y: -0.04518360794385557 },\n { x: -0.0000018989999999999927, y: 0.02910126189319455 },\n { x: -0.0000018979999999999927, y: -0.01300708363967233 },\n { x: -0.0000018969999999999926, y: 0.03130258988661914 },\n { x: -0.0000018959999999999925, y: -0.014506761541320573 },\n { x: -0.0000018949999999999924, y: 0.03218783959641612 },\n { x: -0.0000018939999999999924, y: 0.029112212730334326 },\n { x: -0.0000018929999999999923, y: 0.017927598690127274 },\n { x: -0.0000018919999999999922, y: -0.004076533400195019 },\n { x: -0.0000018909999999999921, y: -0.021586538692518108 },\n { x: -0.000001889999999999992, y: 0.024316189169899333 },\n { x: -0.000001888999999999992, y: -0.0009595592660485554 },\n { x: -0.000001887999999999992, y: 0.022661409690115604 },\n { x: -0.0000018869999999999918, y: -0.008687166080617334 },\n { x: -0.0000018859999999999918, y: -0.023019856894362905 },\n { x: -0.0000018849999999999917, y: -0.036456061302591346 },\n { x: -0.0000018839999999999916, y: -0.029041951272953746 },\n { x: -0.0000018829999999999915, y: 0.00028304357792953736 },\n { x: -0.0000018819999999999915, y: -0.005840458277975979 },\n { x: -0.0000018809999999999914, y: -0.03132213845755484 },\n { x: -0.0000018799999999999913, y: -0.036268599852988324 },\n { x: -0.0000018789999999999912, y: 0.002205837610027757 },\n { x: -0.0000018779999999999912, y: 0.013031057600248145 },\n { x: -0.000001876999999999991, y: -0.03455574905322708 },\n { x: -0.000001875999999999991, y: -0.029743157999385265 },\n { x: -0.000001874999999999991, y: -0.010761312798439556 },\n { x: -0.0000018739999999999909, y: 0.013523124350955592 },\n { x: -0.0000018729999999999908, y: 0.03568361714025206 },\n { x: -0.0000018719999999999907, y: -0.016715409638851157 },\n { x: -0.0000018709999999999906, y: -0.00206357013860716 },\n { x: -0.0000018699999999999906, y: 0.03411670680972927 },\n { x: -0.0000018689999999999905, y: -0.02059153285669426 },\n { x: -0.0000018679999999999904, y: -0.03633104201502672 },\n { x: -0.0000018669999999999903, y: -0.006489791618759054 },\n { x: -0.0000018659999999999903, y: 0.01045866733469699 },\n { x: -0.0000018649999999999902, y: -0.0027697467676163503 },\n { x: -0.0000018639999999999901, y: -0.029697004907042607 },\n { x: -0.00000186299999999999, y: 0.005723695241045038 },\n { x: -0.00000186199999999999, y: -0.023432819432466293 },\n { x: -0.0000018609999999999899, y: 0.018208640624164177 },\n { x: -0.0000018599999999999898, y: 0.03397687566261656 },\n { x: -0.0000018589999999999897, y: 0.001044150533833599 },\n { x: -0.0000018579999999999897, y: 0.016601315132935505 },\n { x: -0.0000018569999999999896, y: 0.03443461371113354 },\n { x: -0.0000018559999999999895, y: 0.030551410069500705 },\n { x: -0.0000018549999999999894, y: 0.023762302714107127 },\n { x: -0.0000018539999999999894, y: 0.0013342846525567543 },\n { x: -0.0000018529999999999893, y: -0.0037704642983602326 },\n { x: -0.0000018519999999999892, y: 0.02075692057102816 },\n { x: -0.0000018509999999999891, y: 0.023435128809193326 },\n { x: -0.000001849999999999989, y: -0.016480263785375045 },\n { x: -0.000001848999999999989, y: 0.008988784831886632 },\n { x: -0.000001847999999999989, y: 0.02373799637260906 },\n { x: -0.0000018469999999999888, y: -0.029384486124532948 },\n { x: -0.0000018459999999999888, y: 0.035290195796315094 },\n { x: -0.0000018449999999999887, y: 0.0020322517599329587 },\n { x: -0.0000018439999999999886, y: 0.013459324289630826 },\n { x: -0.0000018429999999999885, y: -0.03349981225685477 },\n { x: -0.0000018419999999999885, y: 0.0004503222444585232 },\n { x: -0.0000018409999999999884, y: -0.025282688802514657 },\n { x: -0.0000018399999999999883, y: -0.008140477762443664 },\n { x: -0.0000018389999999999882, y: 0.038161874411562505 },\n { x: -0.0000018379999999999882, y: -0.009017410538765064 },\n { x: -0.000001836999999999988, y: 0.00739591383229465 },\n { x: -0.000001835999999999988, y: 0.020793198627238142 },\n { x: -0.000001834999999999988, y: 0.03600691188395843 },\n { x: -0.0000018339999999999879, y: -0.014613405824333863 },\n { x: -0.0000018329999999999878, y: -0.03556249668928594 },\n { x: -0.0000018319999999999877, y: -0.006977721579423031 },\n { x: -0.0000018309999999999876, y: 0.00218877764318305 },\n { x: -0.0000018299999999999876, y: 0.03145750642434614 },\n { x: -0.0000018289999999999875, y: 0.025384659279849106 },\n { x: -0.0000018279999999999874, y: -0.001949637967593855 },\n { x: -0.0000018269999999999873, y: -0.017396974557809246 },\n { x: -0.0000018259999999999873, y: 0.032611469706830126 },\n { x: -0.0000018249999999999872, y: -0.002817649514673136 },\n { x: -0.0000018239999999999871, y: 0.027260544960630944 },\n { x: -0.000001822999999999987, y: 0.00033326240856916046 },\n { x: -0.000001821999999999987, y: 0.03486195512822336 },\n { x: -0.0000018209999999999869, y: 0.03690884703117051 },\n { x: -0.0000018199999999999868, y: 0.03489597947977195 },\n { x: -0.0000018189999999999867, y: -0.030348952949814937 },\n { x: -0.0000018179999999999867, y: 0.026688499136513034 },\n { x: -0.0000018169999999999866, y: 0.006863276108334038 },\n { x: -0.0000018159999999999865, y: -0.026016793825958878 },\n { x: -0.0000018149999999999864, y: 0.014008012573715482 },\n { x: -0.0000018139999999999864, y: 0.009940815646185914 },\n { x: -0.0000018129999999999863, y: -0.037945867585199876 },\n { x: -0.0000018119999999999862, y: -0.001443902586843467 },\n { x: -0.0000018109999999999861, y: 0.01991400228379446 },\n { x: -0.000001809999999999986, y: 0.01020360634032546 },\n { x: -0.000001808999999999986, y: 0.027383171571702034 },\n { x: -0.000001807999999999986, y: -0.011592117108027615 },\n { x: -0.0000018069999999999858, y: 0.03810667828556246 },\n { x: -0.0000018059999999999858, y: 0.009892743158172968 },\n { x: -0.0000018049999999999857, y: 0.02332286861861942 },\n { x: -0.0000018039999999999856, y: -0.029160930928847445 },\n { x: -0.0000018029999999999855, y: 0.03083595102606925 },\n { x: -0.0000018019999999999855, y: 0.03185933705766087 },\n { x: -0.0000018009999999999854, y: -0.016322833672328733 },\n { x: -0.0000017999999999999853, y: -0.037541498780036035 },\n { x: -0.0000017989999999999852, y: 0.03756493189487169 },\n { x: -0.0000017979999999999852, y: 0.00855067935575207 },\n { x: -0.000001796999999999985, y: 0.01762873682077035 },\n { x: -0.000001795999999999985, y: -0.031271530406916194 },\n { x: -0.000001794999999999985, y: -0.007511235404087135 },\n { x: -0.0000017939999999999849, y: 0.008675065759418225 },\n { x: -0.0000017929999999999848, y: 0.003963060404253502 },\n { x: -0.0000017919999999999847, y: 0.00029004691820512697 },\n { x: -0.0000017909999999999846, y: -0.0062925581838445335 },\n { x: -0.0000017899999999999846, y: -0.019073943132143625 },\n { x: -0.0000017889999999999845, y: 0.021782356217131624 },\n { x: -0.0000017879999999999844, y: 0.014551121055763026 },\n { x: -0.0000017869999999999843, y: -0.0037712770378505334 },\n { x: -0.0000017859999999999843, y: 0.003196404071630132 },\n { x: -0.0000017849999999999842, y: 0.004097601482372611 },\n { x: -0.000001783999999999984, y: -0.02760739005761792 },\n { x: -0.000001782999999999984, y: 0.02346455705246093 },\n { x: -0.000001781999999999984, y: 0.028157954639258607 },\n { x: -0.0000017809999999999839, y: -0.0281663646584906 },\n { x: -0.0000017799999999999838, y: -0.020050321492854864 },\n { x: -0.0000017789999999999837, y: -0.03450758648650922 },\n { x: -0.0000017779999999999837, y: -0.004711109700737442 },\n { x: -0.0000017769999999999836, y: -0.02153624154001886 },\n { x: -0.0000017759999999999835, y: 0.0024897326824874764 },\n { x: -0.0000017749999999999834, y: -0.02929082189178312 },\n { x: -0.0000017739999999999834, y: -0.021160404534973545 },\n { x: -0.0000017729999999999833, y: 0.002926598875496956 },\n { x: -0.0000017719999999999832, y: 0.02210674047685129 },\n { x: -0.0000017709999999999831, y: -0.026253693966361482 },\n { x: -0.000001769999999999983, y: 0.05359998036268774 },\n { x: -0.000001768999999999983, y: 0.03806738529198046 },\n { x: -0.000001767999999999983, y: 0.026994016056222522 },\n { x: -0.0000017669999999999828, y: 0.02625644997491527 },\n { x: -0.0000017659999999999828, y: 0.01665819435009591 },\n { x: -0.0000017649999999999827, y: 0.023990832366654127 },\n { x: -0.0000017639999999999826, y: 0.03265737148275018 },\n { x: -0.0000017629999999999825, y: -0.018629533687752838 },\n { x: -0.0000017619999999999825, y: -0.019302626236293367 },\n { x: -0.0000017609999999999824, y: 0.02876098449524871 },\n { x: -0.0000017599999999999823, y: 0.02063751975883102 },\n { x: -0.0000017589999999999822, y: 0.003113301195771266 },\n { x: -0.0000017579999999999822, y: 0.024922292320332523 },\n { x: -0.000001756999999999982, y: -0.0025514888923617663 },\n { x: -0.000001755999999999982, y: -0.028108413760713165 },\n { x: -0.000001754999999999982, y: 0.03770333639507348 },\n { x: -0.0000017539999999999819, y: -0.03317018103662581 },\n { x: -0.0000017529999999999818, y: 0.02577908324360529 },\n { x: -0.0000017519999999999817, y: -0.004217730571231011 },\n { x: -0.0000017509999999999816, y: -0.010211916917125268 },\n { x: -0.0000017499999999999816, y: 0.0002387325693502609 },\n { x: -0.0000017489999999999815, y: 0.01730955555392116 },\n { x: -0.0000017479999999999814, y: -0.003231023023180327 },\n { x: -0.0000017469999999999813, y: 0.015104797909205239 },\n { x: -0.0000017459999999999813, y: -0.01581055133778467 },\n { x: -0.0000017449999999999812, y: -0.014337983194033614 },\n { x: -0.000001743999999999981, y: -0.03189010354523514 },\n { x: -0.000001742999999999981, y: -0.005811701639256257 },\n { x: -0.000001741999999999981, y: 0.02131138341707936 },\n { x: -0.0000017409999999999809, y: 0.033494505712979725 },\n { x: -0.0000017399999999999808, y: -0.011268725478945517 },\n { x: -0.0000017389999999999807, y: -0.00732929990942941 },\n { x: -0.0000017379999999999806, y: 0.0208494277293929 },\n { x: -0.0000017369999999999806, y: -0.004183691156097971 },\n { x: -0.0000017359999999999805, y: 0.002863262513397182 },\n { x: -0.0000017349999999999804, y: 0.011653655449059285 },\n { x: -0.0000017339999999999803, y: 0.004248393677670983 },\n { x: -0.0000017329999999999803, y: 0.03482355223939272 },\n { x: -0.0000017319999999999802, y: -0.03701881013794184 },\n { x: -0.0000017309999999999801, y: -0.004771932178194324 },\n { x: -0.00000172999999999998, y: 0.005817386986338741 },\n { x: -0.00000172899999999998, y: 0.014114083473255634 },\n { x: -0.00000172799999999998, y: -0.005084168187920563 },\n { x: -0.0000017269999999999798, y: -0.028948148966163323 },\n { x: -0.0000017259999999999797, y: 0.026854936956580734 },\n { x: -0.0000017249999999999797, y: -0.014406758716746666 },\n { x: -0.0000017239999999999796, y: 0.0014100396411234517 },\n { x: -0.0000017229999999999795, y: -0.0242366217939274 },\n { x: -0.0000017219999999999794, y: -0.021505584137149807 },\n { x: -0.0000017209999999999794, y: -0.0015774938453259181 },\n { x: -0.0000017199999999999793, y: -0.011577040773153862 },\n { x: -0.0000017189999999999792, y: -0.01651527046796279 },\n { x: -0.0000017179999999999791, y: 0.01351805827157814 },\n { x: -0.000001716999999999979, y: -0.02532953126946272 },\n { x: -0.000001715999999999979, y: -0.00785046991469629 },\n { x: -0.000001714999999999979, y: 0.024158535288603317 },\n { x: -0.0000017139999999999788, y: 0.02136620501046216 },\n { x: -0.0000017129999999999788, y: -0.030617441000178443 },\n { x: -0.0000017119999999999787, y: -0.010374656275300837 },\n { x: -0.0000017109999999999786, y: 0.03092700293256923 },\n { x: -0.0000017099999999999785, y: -0.018237460571863425 },\n { x: -0.0000017089999999999785, y: 0.017185053715860495 },\n { x: -0.0000017079999999999784, y: -0.013665421833832443 },\n { x: -0.0000017069999999999783, y: 0.007695845787504048 },\n { x: -0.0000017059999999999782, y: -0.01826986965854103 },\n { x: -0.0000017049999999999782, y: -0.03568570786873319 },\n { x: -0.000001703999999999978, y: 0.017205170628042856 },\n { x: -0.000001702999999999978, y: -0.02766296350511127 },\n { x: -0.000001701999999999978, y: 0.006249663368645423 },\n { x: -0.0000017009999999999779, y: 0.026237862328107483 },\n { x: -0.0000016999999999999778, y: -0.0006922538726388271 },\n { x: -0.0000016989999999999777, y: -0.01157977691779717 },\n { x: -0.0000016979999999999776, y: -0.006116621163963813 },\n { x: -0.0000016969999999999776, y: -0.01826167999463326 },\n { x: -0.0000016959999999999775, y: -0.0202664714611218 },\n { x: -0.0000016949999999999774, y: 0.019580936889153466 },\n { x: -0.0000016939999999999773, y: 0.036516020922498144 },\n { x: -0.0000016929999999999773, y: 0.006726740477367732 },\n { x: -0.0000016919999999999772, y: 0.037557247726196515 },\n { x: -0.0000016909999999999771, y: 0.002067814002438272 },\n { x: -0.000001689999999999977, y: 0.037599406847097165 },\n { x: -0.000001688999999999977, y: -0.0017070734718797657 },\n { x: -0.0000016879999999999769, y: -0.023570591476728377 },\n { x: -0.0000016869999999999768, y: -0.0077551906537367205 },\n { x: -0.0000016859999999999767, y: -0.029287936482090843 },\n { x: -0.0000016849999999999767, y: 0.006663992282813844 },\n { x: -0.0000016839999999999766, y: -0.005548332476572741 },\n { x: -0.0000016829999999999765, y: -0.023951053384545097 },\n { x: -0.0000016819999999999764, y: -0.03291321066508165 },\n { x: -0.0000016809999999999764, y: -0.019960586070344042 },\n { x: -0.0000016799999999999763, y: -0.007054054584606562 },\n { x: -0.0000016789999999999762, y: 0.0028747173734658613 },\n { x: -0.0000016779999999999761, y: -0.00045323748266656204 },\n { x: -0.000001676999999999976, y: 0.02470966737147559 },\n { x: -0.000001675999999999976, y: 0.02555662047756956 },\n { x: -0.000001674999999999976, y: 0.001403952338910754 },\n { x: -0.0000016739999999999758, y: 0.010690444473446312 },\n { x: -0.0000016729999999999758, y: -0.03754330222745358 },\n { x: -0.0000016719999999999757, y: 0.024041042260192626 },\n { x: -0.0000016709999999999756, y: 0.01822540019455112 },\n { x: -0.0000016699999999999755, y: -0.0353528108635974 },\n { x: -0.0000016689999999999755, y: 0.022709725473962775 },\n { x: -0.0000016679999999999754, y: 0.013263211725082578 },\n { x: -0.0000016669999999999753, y: -0.036001865944095844 },\n { x: -0.0000016659999999999752, y: -0.021589626479641633 },\n { x: -0.0000016649999999999752, y: -0.0009457269156792226 },\n { x: -0.000001663999999999975, y: -0.03526730551618745 },\n { x: -0.000001662999999999975, y: -0.031139949355087664 },\n { x: -0.000001661999999999975, y: 0.004528737376877672 },\n { x: -0.0000016609999999999749, y: -0.03827465514571537 },\n { x: -0.0000016599999999999748, y: -0.02503998889103173 },\n { x: -0.0000016589999999999747, y: -0.010169102639365898 },\n { x: -0.0000016579999999999746, y: -0.01001446525404002 },\n { x: -0.0000016569999999999746, y: 0.016680736485168293 },\n { x: -0.0000016559999999999745, y: -0.013732467310046926 },\n { x: -0.0000016549999999999744, y: -0.017721649992474872 },\n { x: -0.0000016539999999999743, y: -0.0019302643202449875 },\n { x: -0.0000016529999999999743, y: -0.0081300397611309 },\n { x: -0.0000016519999999999742, y: 0.011309441104275324 },\n { x: -0.0000016509999999999741, y: -0.0069967222102437845 },\n { x: -0.000001649999999999974, y: 0.027687391042178315 },\n { x: -0.000001648999999999974, y: 0.038273352069532154 },\n { x: -0.0000016479999999999739, y: -0.02129943201691494 },\n { x: -0.0000016469999999999738, y: 0.02732918341023124 },\n { x: -0.0000016459999999999737, y: 0.03498099852687302 },\n { x: -0.0000016449999999999737, y: 0.032307917109769727 },\n { x: -0.0000016439999999999736, y: 0.005823496283235522 },\n { x: -0.0000016429999999999735, y: 0.010325729735277123 },\n { x: -0.0000016419999999999734, y: -0.017081451782887343 },\n { x: -0.0000016409999999999734, y: -0.016511195560129546 },\n { x: -0.0000016399999999999733, y: 0.028076988497025952 },\n { x: -0.0000016389999999999732, y: 0.025124124947821923 },\n { x: -0.0000016379999999999731, y: 0.003913201123204757 },\n { x: -0.000001636999999999973, y: 0.016040005116074802 },\n { x: -0.000001635999999999973, y: -0.0058825529035995035 },\n { x: -0.000001634999999999973, y: 0.027711083464403975 },\n { x: -0.0000016339999999999728, y: -0.03637297933871895 },\n { x: -0.0000016329999999999728, y: 0.02417521122398841 },\n { x: -0.0000016319999999999727, y: -0.025972328826643874 },\n { x: -0.0000016309999999999726, y: 0.026150542055262474 },\n { x: -0.0000016299999999999725, y: 0.010180716162685193 },\n { x: -0.0000016289999999999725, y: -0.03420629545303245 },\n { x: -0.0000016279999999999724, y: 0.009302769603414154 },\n { x: -0.0000016269999999999723, y: -0.03513708423837472 },\n { x: -0.0000016259999999999722, y: 0.001002193988481779 },\n { x: -0.0000016249999999999722, y: -0.02176335991314274 },\n { x: -0.000001623999999999972, y: -0.007806508307155519 },\n { x: -0.000001622999999999972, y: -0.030911213821737196 },\n { x: -0.000001621999999999972, y: -0.027088600574083705 },\n { x: -0.0000016209999999999719, y: 0.03267522902742575 },\n { x: -0.0000016199999999999718, y: -0.0011230303124528781 },\n { x: -0.0000016189999999999717, y: 0.02264220548172921 },\n { x: -0.0000016179999999999716, y: 0.019222764186777923 },\n { x: -0.0000016169999999999716, y: 0.014582739267587812 },\n { x: -0.0000016159999999999715, y: 0.023712052179536054 },\n { x: -0.0000016149999999999714, y: 0.03793832988011892 },\n { x: -0.0000016139999999999713, y: 0.029776525394076048 },\n { x: -0.0000016129999999999713, y: -0.02656036550095476 },\n { x: -0.0000016119999999999712, y: -0.03710389085820699 },\n { x: -0.0000016109999999999711, y: 0.003956991603219941 },\n { x: -0.000001609999999999971, y: -0.015159294164777766 },\n { x: -0.000001608999999999971, y: 0.02878750291330663 },\n { x: -0.0000016079999999999709, y: 0.0306487879720793 },\n { x: -0.0000016069999999999708, y: 0.006111693429665233 },\n { x: -0.0000016059999999999707, y: -0.018419938506552807 },\n { x: -0.0000016049999999999707, y: 0.022337135627419805 },\n { x: -0.0000016039999999999706, y: 0.0038467144798397346 },\n { x: -0.0000016029999999999705, y: 0.02397815606698168 },\n { x: -0.0000016019999999999704, y: -0.018691207063099256 },\n { x: -0.0000016009999999999704, y: -0.004247287342880034 },\n { x: -0.0000015999999999999703, y: -0.013588836507485508 },\n { x: -0.0000015989999999999702, y: -0.02234393890864792 },\n { x: -0.0000015979999999999701, y: 0.02763686603284322 },\n { x: -0.00000159699999999997, y: 0.01830383168190865 },\n { x: -0.00000159599999999997, y: 0.030411638585228492 },\n { x: -0.00000159499999999997, y: 0.028976314214250697 },\n { x: -0.0000015939999999999698, y: 0.032471366429675075 },\n { x: -0.0000015929999999999698, y: 0.005275984619956652 },\n { x: -0.0000015919999999999697, y: 0.01202838566774187 },\n { x: -0.0000015909999999999696, y: -0.030463302243678353 },\n { x: -0.0000015899999999999695, y: -0.027903637871968798 },\n { x: -0.0000015889999999999695, y: -0.01564286546158084 },\n { x: -0.0000015879999999999694, y: -0.026594371449461626 },\n { x: -0.0000015869999999999693, y: -0.004368804744709417 },\n { x: -0.0000015859999999999692, y: -0.029326479185961565 },\n { x: -0.0000015849999999999692, y: -0.03692357810548272 },\n { x: -0.000001583999999999969, y: -0.009035109854370968 },\n { x: -0.000001582999999999969, y: 0.027295175150539256 },\n { x: -0.000001581999999999969, y: -0.016117249239187812 },\n { x: -0.0000015809999999999689, y: -0.024946630431160816 },\n { x: -0.0000015799999999999688, y: -0.022865028495272093 },\n { x: -0.0000015789999999999687, y: 0.028965465589157326 },\n { x: -0.0000015779999999999686, y: -0.004570467627980707 },\n { x: -0.0000015769999999999686, y: 0.03629402789384118 },\n { x: -0.0000015759999999999685, y: 0.01682744387323598 },\n { x: -0.0000015749999999999684, y: 0.007814712769640611 },\n { x: -0.0000015739999999999683, y: 0.0019249147715995946 },\n { x: -0.0000015729999999999683, y: -0.021704365266979865 },\n { x: -0.0000015719999999999682, y: -0.023673888940024205 },\n { x: -0.000001570999999999968, y: -0.004677381551044262 },\n { x: -0.000001569999999999968, y: -0.006068617237826557 },\n { x: -0.000001568999999999968, y: -0.017918076789667885 },\n { x: -0.0000015679999999999679, y: 0.026551550390859543 },\n { x: -0.0000015669999999999678, y: 0.014500599778608384 },\n { x: -0.0000015659999999999677, y: -0.03642499249327356 },\n { x: -0.0000015649999999999677, y: -0.0037760651011045864 },\n { x: -0.0000015639999999999676, y: 0.023517454573185794 },\n { x: -0.0000015629999999999675, y: 0.016814922373429277 },\n { x: -0.0000015619999999999674, y: -0.014137761182278887 },\n { x: -0.0000015609999999999674, y: -0.01732752047890942 },\n { x: -0.0000015599999999999673, y: 0.03369900701162833 },\n { x: -0.0000015589999999999672, y: 0.025786809907088922 },\n { x: -0.0000015579999999999671, y: 0.03494285565327627 },\n { x: -0.000001556999999999967, y: -0.020796040081896092 },\n { x: -0.000001555999999999967, y: -0.0358237436655389 },\n { x: -0.000001554999999999967, y: -0.022319507433199957 },\n { x: -0.0000015539999999999668, y: 0.004650034718501579 },\n { x: -0.0000015529999999999668, y: -0.007666410808605413 },\n { x: -0.0000015519999999999667, y: 0.009137852540213638 },\n { x: -0.0000015509999999999666, y: -0.010767696400769713 },\n { x: -0.0000015499999999999665, y: -0.005587811745368615 },\n { x: -0.0000015489999999999664, y: 0.008415642214975446 },\n { x: -0.0000015479999999999664, y: -0.01081446284084006 },\n { x: -0.0000015469999999999663, y: 0.015314461815086179 },\n { x: -0.0000015459999999999662, y: 0.008450995041305025 },\n { x: -0.0000015449999999999661, y: 0.004444324412883591 },\n { x: -0.000001543999999999966, y: -0.018955883210844692 },\n { x: -0.000001542999999999966, y: 0.037255692656265195 },\n { x: -0.000001541999999999966, y: 0.03688475931060501 },\n { x: -0.0000015409999999999658, y: 0.050730434673620324 },\n { x: -0.0000015399999999999658, y: -0.01758099399889343 },\n { x: -0.0000015389999999999657, y: 0.001879036494873778 },\n { x: -0.0000015379999999999656, y: 0.025673340786925784 },\n { x: -0.0000015369999999999655, y: -0.007330310913538365 },\n { x: -0.0000015359999999999655, y: 0.022629615096798922 },\n { x: -0.0000015349999999999654, y: 0.015213991925625812 },\n { x: -0.0000015339999999999653, y: -0.009524043428847741 },\n { x: -0.0000015329999999999652, y: 0.02007465671903068 },\n { x: -0.0000015319999999999652, y: 0.004227700939355161 },\n { x: -0.000001530999999999965, y: -0.004024839587506067 },\n { x: -0.000001529999999999965, y: 0.01047966241120587 },\n { x: -0.000001528999999999965, y: -0.030366590788430216 },\n { x: -0.0000015279999999999649, y: -0.008926299594305263 },\n { x: -0.0000015269999999999648, y: -0.020224092451015124 },\n { x: -0.0000015259999999999647, y: 0.006585604801753251 },\n { x: -0.0000015249999999999646, y: 0.010846671749648913 },\n { x: -0.0000015239999999999646, y: 0.016093650543890038 },\n { x: -0.0000015229999999999645, y: 0.0018563985150977886 },\n { x: -0.0000015219999999999644, y: 0.033758821423495164 },\n { x: -0.0000015209999999999643, y: -0.003168435574904403 },\n { x: -0.0000015199999999999643, y: -0.01132088989622624 },\n { x: -0.0000015189999999999642, y: 0.0007549758022283582 },\n { x: -0.0000015179999999999641, y: -0.030825787058457187 },\n { x: -0.000001516999999999964, y: -0.006838645511243576 },\n { x: -0.000001515999999999964, y: 0.02906803026576124 },\n { x: -0.000001514999999999964, y: 0.02742744909956504 },\n { x: -0.0000015139999999999638, y: 0.00665307937926437 },\n { x: -0.0000015129999999999637, y: 0.03316412891553206 },\n { x: -0.0000015119999999999637, y: 0.017803996184510625 },\n { x: -0.0000015109999999999636, y: -0.06589171996638397 },\n { x: -0.0000015099999999999635, y: -0.027603144614221763 },\n { x: -0.0000015089999999999634, y: 0.019489043192729257 },\n { x: -0.0000015079999999999634, y: -0.015630527648990342 },\n { x: -0.0000015069999999999633, y: 0.016025860611987738 },\n { x: -0.0000015059999999999632, y: -0.025830766306315766 },\n { x: -0.0000015049999999999631, y: 0.02135637176769207 },\n { x: -0.000001503999999999963, y: 0.005467210366994031 },\n { x: -0.000001502999999999963, y: 0.02870958963462975 },\n { x: -0.000001501999999999963, y: 0.0197343222335618 },\n { x: -0.0000015009999999999628, y: 0.0215108445606027 },\n { x: -0.0000014999999999999628, y: -0.024554000625190378 },\n { x: -0.0000014989999999999627, y: 0.009766405377519948 },\n { x: -0.0000014979999999999626, y: 0.016604303734639708 },\n { x: -0.0000014969999999999625, y: 0.02614364488390815 },\n { x: -0.0000014959999999999625, y: 0.026593595972571396 },\n { x: -0.0000014949999999999624, y: -0.02508773158101463 },\n { x: -0.0000014939999999999623, y: 0.0004217851630237949 },\n { x: -0.0000014929999999999622, y: 0.00038824184760433394 },\n { x: -0.0000014919999999999622, y: 0.036018010076732346 },\n { x: -0.000001490999999999962, y: -0.001845705278515307 },\n { x: -0.000001489999999999962, y: 0.014418936547289547 },\n { x: -0.000001488999999999962, y: -0.006413652163800691 },\n { x: -0.0000014879999999999619, y: 0.013614132507233676 },\n { x: -0.0000014869999999999618, y: 0.022888423992930774 },\n { x: -0.0000014859999999999617, y: 0.02630156526696778 },\n { x: -0.0000014849999999999616, y: -0.014683265916556519 },\n { x: -0.0000014839999999999616, y: 0.0172981856994561 },\n { x: -0.0000014829999999999615, y: -0.03130213155004245 },\n { x: -0.0000014819999999999614, y: -0.025848845474759317 },\n { x: -0.0000014809999999999613, y: -0.02689770555208866 },\n { x: -0.0000014799999999999613, y: -0.03250423235521302 },\n { x: -0.0000014789999999999612, y: -0.02961638681474093 },\n { x: -0.0000014779999999999611, y: 0.0035325217924576874 },\n { x: -0.000001476999999999961, y: -0.013338067664116765 },\n { x: -0.000001475999999999961, y: 0.014103781002583669 },\n { x: -0.0000014749999999999609, y: 0.028160161100842664 },\n { x: -0.0000014739999999999608, y: -0.02072358885035968 },\n { x: -0.0000014729999999999607, y: -0.012258872740382778 },\n { x: -0.0000014719999999999607, y: 0.014327771077939696 },\n { x: -0.0000014709999999999606, y: -0.027036068482999054 },\n { x: -0.0000014699999999999605, y: 0.0009617176485291096 },\n { x: -0.0000014689999999999604, y: -0.023944562341732315 },\n { x: -0.0000014679999999999604, y: 0.03647736441639213 },\n { x: -0.0000014669999999999603, y: -0.014188368551879518 },\n { x: -0.0000014659999999999602, y: -0.03425407275374076 },\n { x: -0.0000014649999999999601, y: 0.025517563902703894 },\n { x: -0.00000146399999999996, y: -0.0190038712386199 },\n { x: -0.00000146299999999996, y: -0.024506638363246853 },\n { x: -0.00000146199999999996, y: 0.017470478791539557 },\n { x: -0.0000014609999999999598, y: -0.006897958537798765 },\n { x: -0.0000014599999999999598, y: -0.01669165739633163 },\n { x: -0.0000014589999999999597, y: 0.027771923211038208 },\n { x: -0.0000014579999999999596, y: -0.020640591294015694 },\n { x: -0.0000014569999999999595, y: -0.03354556150560368 },\n { x: -0.0000014559999999999595, y: -0.008066856315532563 },\n { x: -0.0000014549999999999594, y: -0.011634281946335177 },\n { x: -0.0000014539999999999593, y: -0.016139012079545993 },\n { x: -0.0000014529999999999592, y: 0.02079255450068453 },\n { x: -0.0000014519999999999592, y: -0.03102102969393635 },\n { x: -0.000001450999999999959, y: 0.03298856541824959 },\n { x: -0.000001449999999999959, y: -0.033427019696285185 },\n { x: -0.000001448999999999959, y: 0.00873626851594936 },\n { x: -0.0000014479999999999589, y: 0.02217444921260821 },\n { x: -0.0000014469999999999588, y: -0.004222592004454241 },\n { x: -0.0000014459999999999587, y: 0.03730086149836957 },\n { x: -0.0000014449999999999586, y: 0.027257368075554504 },\n { x: -0.0000014439999999999586, y: -0.021994380891192402 },\n { x: -0.0000014429999999999585, y: -0.03126856116532146 },\n { x: -0.0000014419999999999584, y: 0.02099266098659368 },\n { x: -0.0000014409999999999583, y: 0.025370337615773637 },\n { x: -0.0000014399999999999583, y: 0.016631860054068946 },\n { x: -0.0000014389999999999582, y: 0.006766847350362779 },\n { x: -0.0000014379999999999581, y: -0.02368053448071696 },\n { x: -0.000001436999999999958, y: -0.017758267849415872 },\n { x: -0.000001435999999999958, y: -0.019362471611339353 },\n { x: -0.0000014349999999999579, y: -0.0048261114143355755 },\n { x: -0.0000014339999999999578, y: -0.02102853079381428 },\n { x: -0.0000014329999999999577, y: 0.008041901856350753 },\n { x: -0.0000014319999999999577, y: -0.024787299935330426 },\n { x: -0.0000014309999999999576, y: -0.02423241432973991 },\n { x: -0.0000014299999999999575, y: 0.023303220028534934 },\n { x: -0.0000014289999999999574, y: 0.037840472733514756 },\n { x: -0.0000014279999999999574, y: -0.007968713344726411 },\n { x: -0.0000014269999999999573, y: -0.008809174412449917 },\n { x: -0.0000014259999999999572, y: -0.03195646202096297 },\n { x: -0.0000014249999999999571, y: -0.01473277825690707 },\n { x: -0.000001423999999999957, y: -0.02206267118100727 },\n { x: -0.000001422999999999957, y: -0.018795395858838607 },\n { x: -0.000001421999999999957, y: -0.027940301585861842 },\n { x: -0.0000014209999999999568, y: -0.031309593314700845 },\n { x: -0.0000014199999999999568, y: 0.01862387801971263 },\n { x: -0.0000014189999999999567, y: -0.03542090674731725 },\n { x: -0.0000014179999999999566, y: 0.02058439907191344 },\n { x: -0.0000014169999999999565, y: -0.01633204340256826 },\n { x: -0.0000014159999999999565, y: -0.031036347474314906 },\n { x: -0.0000014149999999999564, y: 0.01928568032215615 },\n { x: -0.0000014139999999999563, y: -0.02714607627138527 },\n { x: -0.0000014129999999999562, y: -0.005910351368508948 },\n { x: -0.0000014119999999999562, y: -0.02774298660313753 },\n { x: -0.000001410999999999956, y: 0.0009198631014646014 },\n { x: -0.000001409999999999956, y: 0.029804040231150082 },\n { x: -0.000001408999999999956, y: 0.011243413063037647 },\n { x: -0.0000014079999999999559, y: 0.027073847634409037 },\n { x: -0.0000014069999999999558, y: -0.01757282472291928 },\n { x: -0.0000014059999999999557, y: 0.03584189654124867 },\n { x: -0.0000014049999999999556, y: 0.01656371343174638 },\n { x: -0.0000014039999999999556, y: 0.03401034753412705 },\n { x: -0.0000014029999999999555, y: 0.0364293610113262 },\n { x: -0.0000014019999999999554, y: -0.02968634132781467 },\n { x: -0.0000014009999999999553, y: 0.027729709084621565 },\n { x: -0.0000013999999999999553, y: -0.02027414339986988 },\n { x: -0.0000013989999999999552, y: -0.00220875464444255 },\n { x: -0.000001397999999999955, y: 0.036945016665614956 },\n { x: -0.000001396999999999955, y: -0.008306285425409227 },\n { x: -0.000001395999999999955, y: -0.016219089825118223 },\n { x: -0.0000013949999999999549, y: -0.020878229946553497 },\n { x: -0.0000013939999999999548, y: -0.025520979896904446 },\n { x: -0.0000013929999999999547, y: 0.027965267967334048 },\n { x: -0.0000013919999999999547, y: -0.028858358680431264 },\n { x: -0.0000013909999999999546, y: 0.007782789129562599 },\n { x: -0.0000013899999999999545, y: 0.015960109216097515 },\n { x: -0.0000013889999999999544, y: -0.002155913809696033 },\n { x: -0.0000013879999999999544, y: 0.030975181037093333 },\n { x: -0.0000013869999999999543, y: -0.018141006674456533 },\n { x: -0.0000013859999999999542, y: 0.03562673423170332 },\n { x: -0.0000013849999999999541, y: -0.037739831727478385 },\n { x: -0.000001383999999999954, y: -0.0013266178060266228 },\n { x: -0.000001382999999999954, y: 0.01874756023284197 },\n { x: -0.000001381999999999954, y: -0.02081164189724986 },\n { x: -0.0000013809999999999538, y: 0.0025335327434042737 },\n { x: -0.0000013799999999999538, y: 0.005810873518892579 },\n { x: -0.0000013789999999999537, y: -0.01844005482900577 },\n { x: -0.0000013779999999999536, y: 0.037123125325068465 },\n { x: -0.0000013769999999999535, y: 0.02899341595126094 },\n { x: -0.0000013759999999999535, y: 0.02616715237173488 },\n { x: -0.0000013749999999999534, y: -0.007589744321646553 },\n { x: -0.0000013739999999999533, y: -0.005437628901102876 },\n { x: -0.0000013729999999999532, y: -0.03662846529186486 },\n { x: -0.0000013719999999999532, y: -0.011762585503595716 },\n { x: -0.000001370999999999953, y: 0.06286309776804452 },\n { x: -0.000001369999999999953, y: 0.017374807844783857 },\n { x: -0.000001368999999999953, y: 0.030432815929757783 },\n { x: -0.0000013679999999999529, y: -0.008555864397219106 },\n { x: -0.0000013669999999999528, y: 0.017639338599923494 },\n { x: -0.0000013659999999999527, y: 0.004460666964426813 },\n { x: -0.0000013649999999999526, y: -0.02777409992300708 },\n { x: -0.0000013639999999999526, y: 0.019314864238587408 },\n { x: -0.0000013629999999999525, y: 0.034423155361312796 },\n { x: -0.0000013619999999999524, y: 0.013670550074769848 },\n { x: -0.0000013609999999999523, y: 0.01286211671995814 },\n { x: -0.0000013599999999999523, y: 0.025982457056539607 },\n { x: -0.0000013589999999999522, y: -0.0006805076262024958 },\n { x: -0.000001357999999999952, y: -0.014287006133468717 },\n { x: -0.000001356999999999952, y: -0.023866647688169883 },\n { x: -0.000001355999999999952, y: -0.025408245960811048 },\n { x: -0.0000013549999999999519, y: 0.03648168320753453 },\n { x: -0.0000013539999999999518, y: -0.018586982139929514 },\n { x: -0.0000013529999999999517, y: -0.03780791096963317 },\n { x: -0.0000013519999999999516, y: -0.01992709429516638 },\n { x: -0.0000013509999999999516, y: 0.03044672460535575 },\n { x: -0.0000013499999999999515, y: 0.028312860988091743 },\n { x: -0.0000013489999999999514, y: -0.02360258441424135 },\n { x: -0.0000013479999999999513, y: 0.005104407322331412 },\n { x: -0.0000013469999999999513, y: -0.0013732143304002328 },\n { x: -0.0000013459999999999512, y: -0.03616337965323662 },\n { x: -0.0000013449999999999511, y: 0.028618774148557295 },\n { x: -0.000001343999999999951, y: 0.026626077203680727 },\n { x: -0.000001342999999999951, y: -0.005746513963225127 },\n { x: -0.000001341999999999951, y: 0.024456610884775846 },\n { x: -0.0000013409999999999508, y: 0.019485149141960104 },\n { x: -0.0000013399999999999507, y: 0.014656760221359241 },\n { x: -0.0000013389999999999507, y: -0.01997743551050904 },\n { x: -0.0000013379999999999506, y: -0.013548665746939657 },\n { x: -0.0000013369999999999505, y: -0.0036552052674584633 },\n { x: -0.0000013359999999999504, y: -0.018932411367259486 },\n { x: -0.0000013349999999999504, y: -0.03741410646605812 },\n { x: -0.0000013339999999999503, y: 0.032019779185694985 },\n { x: -0.0000013329999999999502, y: -0.0028150237733198503 },\n { x: -0.0000013319999999999501, y: 0.009477877439243262 },\n { x: -0.00000133099999999995, y: 0.005887737824228874 },\n { x: -0.00000132999999999995, y: 0.019774612076245292 },\n { x: -0.00000132899999999995, y: -0.035933311534152815 },\n { x: -0.0000013279999999999498, y: 0.034815576349307376 },\n { x: -0.0000013269999999999498, y: 0.03655103430116427 },\n { x: -0.0000013259999999999497, y: -0.036044950277673 },\n { x: -0.0000013249999999999496, y: -0.009356938082272528 },\n { x: -0.0000013239999999999495, y: 0.02442691225993598 },\n { x: -0.0000013229999999999495, y: 0.008282935748187056 },\n { x: -0.0000013219999999999494, y: 0.005064254039896118 },\n { x: -0.0000013209999999999493, y: 0.0235699108346049 },\n { x: -0.0000013199999999999492, y: -0.04617893873673727 },\n { x: -0.0000013189999999999492, y: -0.011162166306264498 },\n { x: -0.000001317999999999949, y: -0.009361849936235084 },\n { x: -0.000001316999999999949, y: 0.022795588980644012 },\n { x: -0.000001315999999999949, y: -0.0014943328086852324 },\n { x: -0.0000013149999999999489, y: -0.033120288884205956 },\n { x: -0.0000013139999999999488, y: 0.01859106848316777 },\n { x: -0.0000013129999999999487, y: -0.0024396261992518605 },\n { x: -0.0000013119999999999486, y: -0.027445842851692256 },\n { x: -0.0000013109999999999486, y: 0.03404726174315386 },\n { x: -0.0000013099999999999485, y: 0.010251967963258278 },\n { x: -0.0000013089999999999484, y: 0.03284361874163441 },\n { x: -0.0000013079999999999483, y: 0.03134195974897309 },\n { x: -0.0000013069999999999483, y: 0.010239920041759318 },\n { x: -0.0000013059999999999482, y: 0.028121737219261846 },\n { x: -0.0000013049999999999481, y: 0.0014161994123639496 },\n { x: -0.000001303999999999948, y: 0.03637248741087605 },\n { x: -0.000001302999999999948, y: -0.006204972979383949 },\n { x: -0.0000013019999999999479, y: -0.00881814563619294 },\n { x: -0.0000013009999999999478, y: 0.018521032100143175 },\n { x: -0.0000012999999999999477, y: -0.0047163464225027235 },\n { x: -0.0000012989999999999477, y: 0.03363485059648552 },\n { x: -0.0000012979999999999476, y: -0.024161607685016687 },\n { x: -0.0000012969999999999475, y: 0.029114929725366882 },\n { x: -0.0000012959999999999474, y: -0.025863237617867726 },\n { x: -0.0000012949999999999474, y: -0.017998947531199096 },\n { x: -0.0000012939999999999473, y: 0.03730941296377263 },\n { x: -0.0000012929999999999472, y: 0.03223350002485523 },\n { x: -0.0000012919999999999471, y: 0.005801365357315892 },\n { x: -0.000001290999999999947, y: 0.03118217852562385 },\n { x: -0.000001289999999999947, y: -0.007603797320247494 },\n { x: -0.000001288999999999947, y: 0.03205654683499334 },\n { x: -0.0000012879999999999468, y: -0.010087561332330443 },\n { x: -0.0000012869999999999468, y: 0.03711386191878725 },\n { x: -0.0000012859999999999467, y: -0.007799062638556878 },\n { x: -0.0000012849999999999466, y: 0.005915187077683867 },\n { x: -0.0000012839999999999465, y: 0.004579354099010703 },\n { x: -0.0000012829999999999465, y: -0.013683392856120895 },\n { x: -0.0000012819999999999464, y: 0.03306877387370842 },\n { x: -0.0000012809999999999463, y: 0.011685586104961562 },\n { x: -0.0000012799999999999462, y: -0.020144757712756374 },\n { x: -0.0000012789999999999462, y: -0.01358075540878098 },\n { x: -0.000001277999999999946, y: 0.0068746744586625 },\n { x: -0.000001276999999999946, y: 0.007024254864453059 },\n { x: -0.000001275999999999946, y: 0.02951019196221618 },\n { x: -0.0000012749999999999459, y: 0.015535352894516028 },\n { x: -0.0000012739999999999458, y: -0.029617879810418878 },\n { x: -0.0000012729999999999457, y: -0.00425323946021398 },\n { x: -0.0000012719999999999456, y: 0.025894830440814948 },\n { x: -0.0000012709999999999456, y: 0.028364549700151526 },\n { x: -0.0000012699999999999455, y: -0.028199789147076767 },\n { x: -0.0000012689999999999454, y: -0.013671232673688924 },\n { x: -0.0000012679999999999453, y: 0.007897044966350478 },\n { x: -0.0000012669999999999453, y: 0.019850639022674994 },\n { x: -0.0000012659999999999452, y: 0.029443024368187375 },\n { x: -0.0000012649999999999451, y: -0.00937584901174294 },\n { x: -0.000001263999999999945, y: 0.02179092381177665 },\n { x: -0.000001262999999999945, y: 0.01774416205007989 },\n { x: -0.0000012619999999999449, y: -0.0021933726320993063 },\n { x: -0.0000012609999999999448, y: -0.01834146257690179 },\n { x: -0.0000012599999999999447, y: 0.019439364222801892 },\n { x: -0.0000012589999999999447, y: 0.008017386099868653 },\n { x: -0.0000012579999999999446, y: -0.03586449881813231 },\n { x: -0.0000012569999999999445, y: 0.007185050135984963 },\n { x: -0.0000012559999999999444, y: -0.030730811413055156 },\n { x: -0.0000012549999999999444, y: 0.008644592364709804 },\n { x: -0.0000012539999999999443, y: 0.0102304563720502 },\n { x: -0.0000012529999999999442, y: 0.028884913512254543 },\n { x: -0.0000012519999999999441, y: 0.015338485402996616 },\n { x: -0.000001250999999999944, y: -0.0104235832161865 },\n { x: -0.000001249999999999944, y: -0.020514628153497923 },\n { x: -0.000001248999999999944, y: -0.012156381546816692 },\n { x: -0.0000012479999999999438, y: -0.016113308749681667 },\n { x: -0.0000012469999999999438, y: 0.0017151575253081595 },\n { x: -0.0000012459999999999437, y: -0.007157636286032977 },\n { x: -0.0000012449999999999436, y: -0.001641976471777978 },\n { x: -0.0000012439999999999435, y: 0.018566303676046263 },\n { x: -0.0000012429999999999435, y: 0.03082408999166559 },\n { x: -0.0000012419999999999434, y: -0.01493515644534032 },\n { x: -0.0000012409999999999433, y: -0.015812006269594517 },\n { x: -0.0000012399999999999432, y: -0.022805096447225483 },\n { x: -0.0000012389999999999432, y: -0.027537114808600598 },\n { x: -0.000001237999999999943, y: -0.034518255251211744 },\n { x: -0.000001236999999999943, y: 0.03174907307353538 },\n { x: -0.000001235999999999943, y: 0.021058651306083913 },\n { x: -0.0000012349999999999429, y: -0.004635419679502099 },\n { x: -0.0000012339999999999428, y: -0.026757517061456695 },\n { x: -0.0000012329999999999427, y: -0.002293382377237708 },\n { x: -0.0000012319999999999426, y: 0.019623032089150106 },\n { x: -0.0000012309999999999426, y: -0.012288924464331864 },\n { x: -0.0000012299999999999425, y: 0.030772999410255755 },\n { x: -0.0000012289999999999424, y: -0.009273576569640733 },\n { x: -0.0000012279999999999423, y: -0.030587757774173056 },\n { x: -0.0000012269999999999423, y: -0.03215111515224133 },\n { x: -0.0000012259999999999422, y: -0.03320947717726895 },\n { x: -0.0000012249999999999421, y: -0.011155697785155561 },\n { x: -0.000001223999999999942, y: -0.026845066426036037 },\n { x: -0.000001222999999999942, y: -0.03689477791929767 },\n { x: -0.0000012219999999999419, y: -0.024216088196057476 },\n { x: -0.0000012209999999999418, y: 0.017544737255589533 },\n { x: -0.0000012199999999999417, y: -0.020802088219794256 },\n { x: -0.0000012189999999999417, y: 0.008822600155463755 },\n { x: -0.0000012179999999999416, y: 0.026247273956979372 },\n { x: -0.0000012169999999999415, y: -0.008371982878929776 },\n { x: -0.0000012159999999999414, y: -0.0348727238259723 },\n { x: -0.0000012149999999999414, y: 0.012299691201663781 },\n { x: -0.0000012139999999999413, y: 0.014552503889707434 },\n { x: -0.0000012129999999999412, y: -0.00823722377047333 },\n { x: -0.0000012119999999999411, y: 0.01788099085164421 },\n { x: -0.000001210999999999941, y: -0.008074005131419797 },\n { x: -0.000001209999999999941, y: -0.03488463040546863 },\n { x: -0.000001208999999999941, y: 0.034636102940360444 },\n { x: -0.0000012079999999999408, y: 0.030681428735635348 },\n { x: -0.0000012069999999999408, y: -0.014932768446193855 },\n { x: -0.0000012059999999999407, y: 0.012736113577859752 },\n { x: -0.0000012049999999999406, y: 0.0075820715681490765 },\n { x: -0.0000012039999999999405, y: -0.016605500190554016 },\n { x: -0.0000012029999999999405, y: 0.03313652856750357 },\n { x: -0.0000012019999999999404, y: -0.007737942808828586 },\n { x: -0.0000012009999999999403, y: 0.029052595418595353 },\n { x: -0.0000011999999999999402, y: -0.005073178892875431 },\n { x: -0.0000011989999999999402, y: -0.007235926980898817 },\n { x: -0.00000119799999999994, y: 0.01872074038773509 },\n { x: -0.00000119699999999994, y: -0.01916236301447569 },\n { x: -0.00000119599999999994, y: -0.008216718930977264 },\n { x: -0.0000011949999999999399, y: 0.03268756095182446 },\n { x: -0.0000011939999999999398, y: 0.025861855378969848 },\n { x: -0.0000011929999999999397, y: 0.0066621093639115695 },\n { x: -0.0000011919999999999396, y: 0.006482817862923509 },\n { x: -0.0000011909999999999396, y: -0.03378980010517232 },\n { x: -0.0000011899999999999395, y: 0.021504581809908704 },\n { x: -0.0000011889999999999394, y: -0.030769314102892447 },\n { x: -0.0000011879999999999393, y: 0.018917972511959865 },\n { x: -0.0000011869999999999393, y: -0.018172063914816412 },\n { x: -0.0000011859999999999392, y: -0.03643418211886705 },\n { x: -0.000001184999999999939, y: -0.013731021747616598 },\n { x: -0.000001183999999999939, y: -0.024402609716972348 },\n { x: -0.000001182999999999939, y: 0.014289190277567811 },\n { x: -0.0000011819999999999389, y: 0.023712522014093095 },\n { x: -0.0000011809999999999388, y: 0.010132832023869852 },\n { x: -0.0000011799999999999387, y: -0.034396425459355014 },\n { x: -0.0000011789999999999387, y: -0.007143348111840217 },\n { x: -0.0000011779999999999386, y: -0.00222291755992494 },\n { x: -0.0000011769999999999385, y: 0.030700736756949655 },\n { x: -0.0000011759999999999384, y: 0.014428658644920446 },\n { x: -0.0000011749999999999384, y: 0.019863924063457356 },\n { x: -0.0000011739999999999383, y: -0.001136499481345822 },\n { x: -0.0000011729999999999382, y: 0.00810338383197685 },\n { x: -0.0000011719999999999381, y: 0.034890309761107956 },\n { x: -0.000001170999999999938, y: -0.027952431251810975 },\n { x: -0.000001169999999999938, y: -0.0014555206594062775 },\n { x: -0.000001168999999999938, y: -0.027500093515103533 },\n { x: -0.0000011679999999999378, y: 0.005500823812076657 },\n { x: -0.0000011669999999999378, y: 0.029184779830460816 },\n { x: -0.0000011659999999999377, y: -0.014165107011783012 },\n { x: -0.0000011649999999999376, y: 0.035402758809883736 },\n { x: -0.0000011639999999999375, y: 0.016363496671050266 },\n { x: -0.0000011629999999999375, y: -0.031025846704796516 },\n { x: -0.0000011619999999999374, y: -0.03747833024534651 },\n { x: -0.0000011609999999999373, y: -0.005035256521069069 },\n { x: -0.0000011599999999999372, y: 0.02413880708042607 },\n { x: -0.0000011589999999999371, y: 0.004719068383673508 },\n { x: -0.000001157999999999937, y: -0.0025649311128587626 },\n { x: -0.000001156999999999937, y: -0.019335144661670807 },\n { x: -0.000001155999999999937, y: -0.001634621142771009 },\n { x: -0.0000011549999999999368, y: 0.012206046410135455 },\n { x: -0.0000011539999999999368, y: -0.004380262713739856 },\n { x: -0.0000011529999999999367, y: -0.01245147030213906 },\n { x: -0.0000011519999999999366, y: -0.02771703108888614 },\n { x: -0.0000011509999999999365, y: 0.012324873689169817 },\n { x: -0.0000011499999999999365, y: 0.01574336709266946 },\n { x: -0.0000011489999999999364, y: -0.01944584047564326 },\n { x: -0.0000011479999999999363, y: -0.02678272920210347 },\n { x: -0.0000011469999999999362, y: 0.012685345922256688 },\n { x: -0.0000011459999999999362, y: -0.02428445810144817 },\n { x: -0.000001144999999999936, y: 0.02122352192123725 },\n { x: -0.000001143999999999936, y: 0.0017545082389184192 },\n { x: -0.000001142999999999936, y: -0.021247768259625866 },\n { x: -0.0000011419999999999359, y: 0.03736356225080036 },\n { x: -0.0000011409999999999358, y: 0.030465802167615554 },\n { x: -0.0000011399999999999357, y: -0.031203956066424173 },\n { x: -0.0000011389999999999356, y: 0.0038869599827814224 },\n { x: -0.0000011379999999999356, y: -0.03348223608578976 },\n { x: -0.0000011369999999999355, y: 0.021964493943004156 },\n { x: -0.0000011359999999999354, y: 0.012798542237557615 },\n { x: -0.0000011349999999999353, y: 0.018715784823801925 },\n { x: -0.0000011339999999999353, y: 0.02911308278467085 },\n { x: -0.0000011329999999999352, y: 0.0002547274517661491 },\n { x: -0.0000011319999999999351, y: -0.025504043656042204 },\n { x: -0.000001130999999999935, y: 0.020439604106804486 },\n { x: -0.000001129999999999935, y: 0.02636843840864873 },\n { x: -0.000001128999999999935, y: -0.026980297555334716 },\n { x: -0.0000011279999999999348, y: 0.008654209126966602 },\n { x: -0.0000011269999999999347, y: 0.031538000694273774 },\n { x: -0.0000011259999999999347, y: 0.00400299781692588 },\n { x: -0.0000011249999999999346, y: -0.008943049648801386 },\n { x: -0.0000011239999999999345, y: 0.019178196468100817 },\n { x: -0.0000011229999999999344, y: -0.005747326204190344 },\n { x: -0.0000011219999999999344, y: -0.010263411797626174 },\n { x: -0.0000011209999999999343, y: 0.02867837017720057 },\n { x: -0.0000011199999999999342, y: 0.0027619235635548737 },\n { x: -0.0000011189999999999341, y: -0.015116003010013963 },\n { x: -0.000001117999999999934, y: -0.00771187159990163 },\n { x: -0.000001116999999999934, y: 0.02309551474744334 },\n { x: -0.000001115999999999934, y: -0.0259479902773751 },\n { x: -0.0000011149999999999338, y: -0.004191424901319933 },\n { x: -0.0000011139999999999338, y: 0.027423036206542795 },\n { x: -0.0000011129999999999337, y: -0.024195477079481435 },\n { x: -0.0000011119999999999336, y: 0.022663346268164693 },\n { x: -0.0000011109999999999335, y: -0.031191669723367565 },\n { x: -0.0000011099999999999335, y: 0.0043902313725442945 },\n { x: -0.0000011089999999999334, y: 0.02454228906199415 },\n { x: -0.0000011079999999999333, y: 0.03594899636322201 },\n { x: -0.0000011069999999999332, y: -0.03334823887604813 },\n { x: -0.0000011059999999999332, y: -0.01192216245943053 },\n { x: -0.000001104999999999933, y: -0.024783298620515634 },\n { x: -0.000001103999999999933, y: -0.010266033052852314 },\n { x: -0.000001102999999999933, y: 0.023674140547620636 },\n { x: -0.0000011019999999999329, y: 0.01827937875802166 },\n { x: -0.0000011009999999999328, y: -0.026909958677049588 },\n { x: -0.0000010999999999999327, y: 0.035732974549398916 },\n { x: -0.0000010989999999999326, y: 0.0010450278744009746 },\n { x: -0.0000010979999999999326, y: 0.003638863189738167 },\n { x: -0.0000010969999999999325, y: 0.0027361635177537763 },\n { x: -0.0000010959999999999324, y: -0.027114865369770574 },\n { x: -0.0000010949999999999323, y: 0.02913405318551783 },\n { x: -0.0000010939999999999323, y: 0.007090545628145007 },\n { x: -0.0000010929999999999322, y: 0.027538877894034114 },\n { x: -0.0000010919999999999321, y: -0.01575434959194481 },\n { x: -0.000001090999999999932, y: 0.032863695659606305 },\n { x: -0.000001089999999999932, y: -0.020261719076848456 },\n { x: -0.0000010889999999999319, y: 0.008469352679284621 },\n { x: -0.0000010879999999999318, y: 0.010466286310564185 },\n { x: -0.0000010869999999999317, y: -0.03459042154622281 },\n { x: -0.0000010859999999999317, y: -0.002810323145193646 },\n { x: -0.0000010849999999999316, y: -0.029217576094209104 },\n { x: -0.0000010839999999999315, y: 0.021369005236969527 },\n { x: -0.0000010829999999999314, y: 0.020813655397698836 },\n { x: -0.0000010819999999999314, y: -0.016423285385148347 },\n { x: -0.0000010809999999999313, y: -0.03386282677843306 },\n { x: -0.0000010799999999999312, y: -0.025608240521285474 },\n { x: -0.0000010789999999999311, y: 0.021248693139306617 },\n { x: -0.000001077999999999931, y: 0.03587467773171921 },\n { x: -0.000001076999999999931, y: 0.021280586346494452 },\n { x: -0.000001075999999999931, y: 0.018332354420720676 },\n { x: -0.0000010749999999999308, y: 0.036953034432805454 },\n { x: -0.0000010739999999999308, y: -0.03175288541158352 },\n { x: -0.0000010729999999999307, y: -0.024115902675706843 },\n { x: -0.0000010719999999999306, y: 0.02241743611713118 },\n { x: -0.0000010709999999999305, y: 0.015558634002765784 },\n { x: -0.0000010699999999999305, y: 0.01939475490196981 },\n { x: -0.0000010689999999999304, y: 0.02754116596456491 },\n { x: -0.0000010679999999999303, y: 0.03254483574621475 },\n { x: -0.0000010669999999999302, y: 0.00893452209558641 },\n { x: -0.0000010659999999999302, y: 0.021550111633410727 },\n { x: -0.00000106499999999993, y: -0.031364612833633836 },\n { x: -0.00000106399999999993, y: 0.013283452263456794 },\n { x: -0.00000106299999999993, y: -0.00846544250977491 },\n { x: -0.0000010619999999999299, y: 0.0017269260942929937 },\n { x: -0.0000010609999999999298, y: -0.03240923250750345 },\n { x: -0.0000010599999999999297, y: 0.041192342820768335 },\n { x: -0.0000010589999999999296, y: -0.018813376825745184 },\n { x: -0.0000010579999999999296, y: 0.003531927496042505 },\n { x: -0.0000010569999999999295, y: -0.002288720072742805 },\n { x: -0.0000010559999999999294, y: -0.028137635527813357 },\n { x: -0.0000010549999999999293, y: -0.02881793611498535 },\n { x: -0.0000010539999999999293, y: 0.025259562537388088 },\n { x: -0.0000010529999999999292, y: -0.025572479807885126 },\n { x: -0.0000010519999999999291, y: -0.0014499665297990482 },\n { x: -0.000001050999999999929, y: -0.0115115976979226 },\n { x: -0.000001049999999999929, y: 0.006651690670723217 },\n { x: -0.0000010489999999999289, y: 0.03037450323603628 },\n { x: -0.0000010479999999999288, y: 0.024677442332279864 },\n { x: -0.0000010469999999999287, y: -0.009369965111682128 },\n { x: -0.0000010459999999999287, y: 0.004209415111918935 },\n { x: -0.0000010449999999999286, y: -0.025816695328456124 },\n { x: -0.0000010439999999999285, y: 0.008866012270379968 },\n { x: -0.0000010429999999999284, y: 0.02761903092956218 },\n { x: -0.0000010419999999999284, y: 0.013762888673287118 },\n { x: -0.0000010409999999999283, y: -0.015251553265029747 },\n { x: -0.0000010399999999999282, y: 0.019570828173988548 },\n { x: -0.0000010389999999999281, y: 0.061684518220025124 },\n { x: -0.000001037999999999928, y: -0.033167859404168776 },\n { x: -0.000001036999999999928, y: 0.004124457998327737 },\n { x: -0.000001035999999999928, y: 0.022013215600257412 },\n { x: -0.0000010349999999999278, y: 0.03402128738709914 },\n { x: -0.0000010339999999999278, y: 0.01046723658597477 },\n { x: -0.0000010329999999999277, y: 0.021283802624609043 },\n { x: -0.0000010319999999999276, y: 0.0016237554482543739 },\n { x: -0.0000010309999999999275, y: -0.034329811073198775 },\n { x: -0.0000010299999999999275, y: -0.034747120232068246 },\n { x: -0.0000010289999999999274, y: 0.03423877024130284 },\n { x: -0.0000010279999999999273, y: -0.026951904313977565 },\n { x: -0.0000010269999999999272, y: 0.0038978301759391727 },\n { x: -0.0000010259999999999272, y: -0.02396276827687291 },\n { x: -0.000001024999999999927, y: -0.025638382162598967 },\n { x: -0.000001023999999999927, y: 0.036710342459218066 },\n { x: -0.000001022999999999927, y: 0.009563173632159055 },\n { x: -0.0000010219999999999269, y: 0.010339560805856218 },\n { x: -0.0000010209999999999268, y: 0.031520575280031556 },\n { x: -0.0000010199999999999267, y: 0.03110916196871425 },\n { x: -0.0000010189999999999266, y: -0.037235307915742165 },\n { x: -0.0000010179999999999266, y: 0.00943802691845677 },\n { x: -0.0000010169999999999265, y: 0.007666987916140973 },\n { x: -0.0000010159999999999264, y: -0.0305969910471173 },\n { x: -0.0000010149999999999263, y: 0.012445863137599555 },\n { x: -0.0000010139999999999263, y: 0.005710821204960515 },\n { x: -0.0000010129999999999262, y: -0.02326312736145247 },\n { x: -0.000001011999999999926, y: 0.03382934309132999 },\n { x: -0.000001010999999999926, y: -0.028883360855502322 },\n { x: -0.000001009999999999926, y: -0.005793566845652853 },\n { x: -0.0000010089999999999259, y: -0.028267929755766138 },\n { x: -0.0000010079999999999258, y: -0.032621688283622705 },\n { x: -0.0000010069999999999257, y: 0.009374042237734392 },\n { x: -0.0000010059999999999257, y: 0.001868892436261659 },\n { x: -0.0000010049999999999256, y: -0.009269096605986411 },\n { x: -0.0000010039999999999255, y: -0.018993851685004056 },\n { x: -0.0000010029999999999254, y: -0.031847186921473786 },\n { x: -0.0000010019999999999254, y: -0.008046662113942058 },\n { x: -0.0000010009999999999253, y: -0.0023422432857707442 },\n { x: -9.999999999999252e-7, y: 0.010840177491379973 },\n { x: -9.989999999999251e-7, y: 0.01776890612243266 },\n { x: -9.97999999999925e-7, y: 0.01032583214398838 },\n { x: -9.96999999999925e-7, y: -0.01982299283221205 },\n { x: -9.95999999999925e-7, y: -0.019103894919064782 },\n { x: -9.949999999999248e-7, y: -0.0032049332452009963 },\n { x: -9.939999999999248e-7, y: 0.026076522829219777 },\n { x: -9.929999999999247e-7, y: 0.024496783405623928 },\n { x: -9.919999999999246e-7, y: 0.016499846534152162 },\n { x: -9.909999999999245e-7, y: 0.017914212922616624 },\n { x: -9.899999999999245e-7, y: -0.019726952265923206 },\n { x: -9.889999999999244e-7, y: 0.01626033562506649 },\n { x: -9.879999999999243e-7, y: -0.008220705259891027 },\n { x: -9.869999999999242e-7, y: -0.025279691047465153 },\n { x: -9.859999999999242e-7, y: -0.025676415690392144 },\n { x: -9.84999999999924e-7, y: -0.011696763660427259 },\n { x: -9.83999999999924e-7, y: -0.017438070915119865 },\n { x: -9.82999999999924e-7, y: 0.03720750652934234 },\n { x: -9.819999999999239e-7, y: -0.016835484579148588 },\n { x: -9.809999999999238e-7, y: 0.01815980303573615 },\n { x: -9.799999999999237e-7, y: 0.020463557693487008 },\n { x: -9.789999999999236e-7, y: -0.0011654171902938863 },\n { x: -9.779999999999236e-7, y: 0.00606826267542394 },\n { x: -9.769999999999235e-7, y: -0.034513818005990786 },\n { x: -9.759999999999234e-7, y: -0.01991109534464455 },\n { x: -9.749999999999233e-7, y: 0.034712304696758005 },\n { x: -9.739999999999233e-7, y: 0.007774178902658733 },\n { x: -9.729999999999232e-7, y: -0.011368318633134067 },\n { x: -9.71999999999923e-7, y: -0.006061573388917357 },\n { x: -9.70999999999923e-7, y: 0.018126978921157475 },\n { x: -9.69999999999923e-7, y: 0.02726576056209315 },\n { x: -9.689999999999229e-7, y: 0.0003232067519156386 },\n { x: -9.679999999999228e-7, y: 0.01608865369829126 },\n { x: -9.669999999999227e-7, y: 0.0014128747967245428 },\n { x: -9.659999999999226e-7, y: -0.011696456066122221 },\n { x: -9.649999999999226e-7, y: -0.021704958095040052 },\n { x: -9.639999999999225e-7, y: 0.030275711156899327 },\n { x: -9.629999999999224e-7, y: -0.02292842572541188 },\n { x: -9.619999999999223e-7, y: -0.02399627756791023 },\n { x: -9.609999999999223e-7, y: -0.012030959177578095 },\n { x: -9.599999999999222e-7, y: -0.024437055201715352 },\n { x: -9.589999999999221e-7, y: -0.03108969507226391 },\n { x: -9.57999999999922e-7, y: -0.017568398400468543 },\n { x: -9.56999999999922e-7, y: -0.01745744248197696 },\n { x: -9.55999999999922e-7, y: 0.004451029610863574 },\n { x: -9.549999999999218e-7, y: -0.016267207476140206 },\n { x: -9.539999999999217e-7, y: 0.00972251185358209 },\n { x: -9.529999999999218e-7, y: 0.03293065025421619 },\n { x: -9.519999999999218e-7, y: -0.02086997208853251 },\n { x: -9.509999999999218e-7, y: 0.004639619025641843 },\n { x: -9.499999999999219e-7, y: 0.015618224567289337 },\n { x: -9.489999999999219e-7, y: 0.007112025027805449 },\n { x: -9.479999999999219e-7, y: -0.022636518950092655 },\n { x: -9.46999999999922e-7, y: -0.000761372920605377 },\n { x: -9.45999999999922e-7, y: -0.030646906336262093 },\n { x: -9.44999999999922e-7, y: -0.027083786628553968 },\n { x: -9.439999999999221e-7, y: -0.023501480527126164 },\n { x: -9.429999999999221e-7, y: -0.006513222852341783 },\n { x: -9.419999999999221e-7, y: 0.010237058491952876 },\n { x: -9.409999999999221e-7, y: 0.01575903531229099 },\n { x: -9.399999999999222e-7, y: 0.031951775070964465 },\n { x: -9.389999999999222e-7, y: -0.016383227145744337 },\n { x: -9.379999999999222e-7, y: 0.018446823915629015 },\n { x: -9.369999999999223e-7, y: 0.018553872617230658 },\n { x: -9.359999999999223e-7, y: 0.0005302119633774194 },\n { x: -9.349999999999223e-7, y: 0.015342896360415465 },\n { x: -9.339999999999224e-7, y: -0.0013742958150124026 },\n { x: -9.329999999999224e-7, y: 0.024571183233800593 },\n { x: -9.319999999999224e-7, y: -0.02605755800136759 },\n { x: -9.309999999999225e-7, y: 0.022409530383174267 },\n { x: -9.299999999999225e-7, y: -0.012515358070418951 },\n { x: -9.289999999999225e-7, y: 0.021047540449883086 },\n { x: -9.279999999999225e-7, y: 0.02479222693293069 },\n { x: -9.269999999999226e-7, y: 0.03653090770216841 },\n { x: -9.259999999999226e-7, y: -0.017107653369539816 },\n { x: -9.249999999999226e-7, y: -0.011020852861469248 },\n { x: -9.239999999999227e-7, y: -0.025709429149308512 },\n { x: -9.229999999999227e-7, y: -0.015079420700132181 },\n { x: -9.219999999999227e-7, y: 0.03168000868920515 },\n { x: -9.209999999999228e-7, y: -0.00210274362938009 },\n { x: -9.199999999999228e-7, y: -0.025200653167084697 },\n { x: -9.189999999999228e-7, y: -0.01060610960450694 },\n { x: -9.179999999999229e-7, y: -0.02973874410019535 },\n { x: -9.169999999999229e-7, y: -0.030965299051822385 },\n { x: -9.159999999999229e-7, y: 0.0038148260825874476 },\n { x: -9.14999999999923e-7, y: -0.033241250227991105 },\n { x: -9.13999999999923e-7, y: 0.00604867636928691 },\n { x: -9.12999999999923e-7, y: -0.008588997593963985 },\n { x: -9.11999999999923e-7, y: 0.015923611463657814 },\n { x: -9.109999999999231e-7, y: -0.008414811523850744 },\n { x: -9.099999999999231e-7, y: -0.019673634057138158 },\n { x: -9.089999999999231e-7, y: -0.03753147139612505 },\n { x: -9.079999999999232e-7, y: 0.026749614364787684 },\n { x: -9.069999999999232e-7, y: 0.009179864277816011 },\n { x: -9.059999999999232e-7, y: 0.009232479754932152 },\n { x: -9.049999999999233e-7, y: -0.022850441249536425 },\n { x: -9.039999999999233e-7, y: 0.022761860920378196 },\n { x: -9.029999999999233e-7, y: 0.032577228843712 },\n { x: -9.019999999999233e-7, y: -0.009230010340456217 },\n { x: -9.009999999999234e-7, y: 0.014381541869451474 },\n { x: -8.999999999999234e-7, y: 0.007362602069615492 },\n { x: -8.989999999999234e-7, y: 0.019415573503208126 },\n { x: -8.979999999999235e-7, y: -0.038299510323579214 },\n { x: -8.969999999999235e-7, y: 0.0011299450978933597 },\n { x: -8.959999999999235e-7, y: -0.023952376639287416 },\n { x: -8.949999999999236e-7, y: -0.01610169256085411 },\n { x: -8.939999999999236e-7, y: 0.026222417450439836 },\n { x: -8.929999999999236e-7, y: -0.03190218689902641 },\n { x: -8.919999999999237e-7, y: -0.03432020352969162 },\n { x: -8.909999999999237e-7, y: 0.019366613973656507 },\n { x: -8.899999999999237e-7, y: -0.031391386639058196 },\n { x: -8.889999999999237e-7, y: 0.00837424583650163 },\n { x: -8.879999999999238e-7, y: 0.03186906605800279 },\n { x: -8.869999999999238e-7, y: -0.010212834431228921 },\n { x: -8.859999999999238e-7, y: 0.03704848495388489 },\n { x: -8.849999999999239e-7, y: -0.0115572101672419 },\n { x: -8.839999999999239e-7, y: 0.025468208071106894 },\n { x: -8.829999999999239e-7, y: -0.008762272659908157 },\n { x: -8.81999999999924e-7, y: 0.02277877149048695 },\n { x: -8.80999999999924e-7, y: 0.005213360801620121 },\n { x: -8.79999999999924e-7, y: 0.006916896105190616 },\n { x: -8.789999999999241e-7, y: 0.025234732726755055 },\n { x: -8.779999999999241e-7, y: -0.025004339226081897 },\n { x: -8.769999999999241e-7, y: -0.016738614383466303 },\n { x: -8.759999999999241e-7, y: 0.02612479041190105 },\n { x: -8.749999999999242e-7, y: 0.036423903004606774 },\n { x: -8.739999999999242e-7, y: -0.012611155929767593 },\n { x: -8.729999999999242e-7, y: 0.01401632460396602 },\n { x: -8.719999999999243e-7, y: 0.015372814707230552 },\n { x: -8.709999999999243e-7, y: 0.017538893864949563 },\n { x: -8.699999999999243e-7, y: 0.0008130989563025555 },\n { x: -8.689999999999244e-7, y: 0.025128427465391335 },\n { x: -8.679999999999244e-7, y: -0.004526735353483471 },\n { x: -8.669999999999244e-7, y: 0.01800688399974372 },\n { x: -8.659999999999245e-7, y: 0.007805066435189868 },\n { x: -8.649999999999245e-7, y: -0.014885647013308584 },\n { x: -8.639999999999245e-7, y: 0.002873344691174549 },\n { x: -8.629999999999245e-7, y: -0.03127102117251237 },\n { x: -8.619999999999246e-7, y: 0.0034664535817309017 },\n { x: -8.609999999999246e-7, y: -0.030146099359308627 },\n { x: -8.599999999999246e-7, y: 0.0004909610998169021 },\n { x: -8.589999999999247e-7, y: -0.029732361714219932 },\n { x: -8.579999999999247e-7, y: 0.056371423662391125 },\n { x: -8.569999999999247e-7, y: 0.019675474866204128 },\n { x: -8.559999999999248e-7, y: 0.0037055367390445154 },\n { x: -8.549999999999248e-7, y: 0.007958642944636343 },\n { x: -8.539999999999248e-7, y: 0.031170667440981757 },\n { x: -8.529999999999249e-7, y: 0.027922335680716087 },\n { x: -8.519999999999249e-7, y: -0.001310272524085223 },\n { x: -8.509999999999249e-7, y: 0.012618017037633572 },\n { x: -8.499999999999249e-7, y: 0.03093013741614123 },\n { x: -8.48999999999925e-7, y: 0.020968705025750354 },\n { x: -8.47999999999925e-7, y: 0.027369280124057586 },\n { x: -8.46999999999925e-7, y: -0.004806688605153115 },\n { x: -8.459999999999251e-7, y: -0.016249759172511084 },\n { x: -8.449999999999251e-7, y: -0.0006271442121735175 },\n { x: -8.439999999999251e-7, y: -0.019353815379646647 },\n { x: -8.429999999999252e-7, y: -0.017163157879402955 },\n { x: -8.419999999999252e-7, y: -0.03548059904646963 },\n { x: -8.409999999999252e-7, y: 0.02313611703472965 },\n { x: -8.399999999999253e-7, y: -0.014865699271734622 },\n { x: -8.389999999999253e-7, y: 0.01101855729171213 },\n { x: -8.379999999999253e-7, y: -0.005466523368602546 },\n { x: -8.369999999999253e-7, y: -0.03115650717574829 },\n { x: -8.359999999999254e-7, y: -0.01172148758910005 },\n { x: -8.349999999999254e-7, y: 0.027530258103700123 },\n { x: -8.339999999999254e-7, y: -0.013361953130406124 },\n { x: -8.329999999999255e-7, y: -0.02933385697333347 },\n { x: -8.319999999999255e-7, y: 0.02103474064153297 },\n { x: -8.309999999999255e-7, y: 0.02176334224505846 },\n { x: -8.299999999999256e-7, y: 0.018757817803187415 },\n { x: -8.289999999999256e-7, y: -0.03742232055682836 },\n { x: -8.279999999999256e-7, y: -0.013942852796325267 },\n { x: -8.269999999999257e-7, y: 0.0075531746020012416 },\n { x: -8.259999999999257e-7, y: -0.005235030960910617 },\n { x: -8.249999999999257e-7, y: -0.013455942474942653 },\n { x: -8.239999999999257e-7, y: -0.009079405981755651 },\n { x: -8.229999999999258e-7, y: 0.02687889796141142 },\n { x: -8.219999999999258e-7, y: -0.015451987514716829 },\n { x: -8.209999999999258e-7, y: 0.008853814081119179 },\n { x: -8.199999999999259e-7, y: -0.031614768404355904 },\n { x: -8.189999999999259e-7, y: -0.020684353901576812 },\n { x: -8.179999999999259e-7, y: -0.004349344659097599 },\n { x: -8.16999999999926e-7, y: -0.032351128450080244 },\n { x: -8.15999999999926e-7, y: 0.027413184736922346 },\n { x: -8.14999999999926e-7, y: -0.022718398124329027 },\n { x: -8.139999999999261e-7, y: -0.028341448868181796 },\n { x: -8.129999999999261e-7, y: 0.02876741543842008 },\n { x: -8.119999999999261e-7, y: -0.018289808674868468 },\n { x: -8.109999999999261e-7, y: -0.004398059592769029 },\n { x: -8.099999999999262e-7, y: -0.01074398307502024 },\n { x: -8.089999999999262e-7, y: -0.0020476478124832388 },\n { x: -8.079999999999262e-7, y: 0.025789086878987757 },\n { x: -8.069999999999263e-7, y: 0.024251322047085938 },\n { x: -8.059999999999263e-7, y: 0.03721585312378391 },\n { x: -8.049999999999263e-7, y: -0.03155777317318277 },\n { x: -8.039999999999264e-7, y: 0.01957189033880305 },\n { x: -8.029999999999264e-7, y: 0.03195250359530248 },\n { x: -8.019999999999264e-7, y: -0.012501327258465434 },\n { x: -8.009999999999265e-7, y: 0.016875009596899037 },\n { x: -7.999999999999265e-7, y: 0.011342440420052615 },\n { x: -7.989999999999265e-7, y: 0.008386090664766642 },\n { x: -7.979999999999265e-7, y: -0.024106276452187894 },\n { x: -7.969999999999266e-7, y: 0.012117934964467303 },\n { x: -7.959999999999266e-7, y: -0.0007889897266229575 },\n { x: -7.949999999999266e-7, y: 0.02466338985768519 },\n { x: -7.939999999999267e-7, y: 0.03741483224157911 },\n { x: -7.929999999999267e-7, y: -0.008963205404156115 },\n { x: -7.919999999999267e-7, y: 0.015379366724403962 },\n { x: -7.909999999999268e-7, y: 0.018422982108190922 },\n { x: -7.899999999999268e-7, y: 0.00010225846965020577 },\n { x: -7.889999999999268e-7, y: 0.026282972640043624 },\n { x: -7.879999999999269e-7, y: -0.021756984097635636 },\n { x: -7.869999999999269e-7, y: 0.00573016684523125 },\n { x: -7.859999999999269e-7, y: 0.02082208391069466 },\n { x: -7.849999999999269e-7, y: 0.002389662031938346 },\n { x: -7.83999999999927e-7, y: 0.02792645443235875 },\n { x: -7.82999999999927e-7, y: -0.02041865694859452 },\n { x: -7.81999999999927e-7, y: -0.01552050734037055 },\n { x: -7.809999999999271e-7, y: 0.023244930983702793 },\n { x: -7.799999999999271e-7, y: -0.022546177670539725 },\n { x: -7.789999999999271e-7, y: -0.03592121624714324 },\n { x: -7.779999999999272e-7, y: 0.013371666999888565 },\n { x: -7.769999999999272e-7, y: -0.012284709451055982 },\n { x: -7.759999999999272e-7, y: -0.01561671470706963 },\n { x: -7.749999999999273e-7, y: -0.018682672226740367 },\n { x: -7.739999999999273e-7, y: -0.01793498292829704 },\n { x: -7.729999999999273e-7, y: 0.006400554041425754 },\n { x: -7.719999999999273e-7, y: 0.01780707558471629 },\n { x: -7.709999999999274e-7, y: -0.01837198272349219 },\n { x: -7.699999999999274e-7, y: -0.034309745822137847 },\n { x: -7.689999999999274e-7, y: 0.020360037092311094 },\n { x: -7.679999999999275e-7, y: -0.007870483107975617 },\n { x: -7.669999999999275e-7, y: -0.021094785205537498 },\n { x: -7.659999999999275e-7, y: -0.00017115015938054512 },\n { x: -7.649999999999276e-7, y: 0.00720112255388403 },\n { x: -7.639999999999276e-7, y: 0.06171488126204357 },\n { x: -7.629999999999276e-7, y: 0.01897792763743236 },\n { x: -7.619999999999277e-7, y: -0.03500035295518957 },\n { x: -7.609999999999277e-7, y: 0.01792267857458254 },\n { x: -7.599999999999277e-7, y: -0.016264377661825903 },\n { x: -7.589999999999277e-7, y: -0.0021172887541361708 },\n { x: -7.579999999999278e-7, y: 0.028350062222667744 },\n { x: -7.569999999999278e-7, y: 0.00026353928096412764 },\n { x: -7.559999999999278e-7, y: 0.023161104680252013 },\n { x: -7.549999999999279e-7, y: -0.0147413738368382 },\n { x: -7.539999999999279e-7, y: 0.030660190800139427 },\n { x: -7.529999999999279e-7, y: 0.00831821668538952 },\n { x: -7.51999999999928e-7, y: 0.014295025150173776 },\n { x: -7.50999999999928e-7, y: 0.03738171839841807 },\n { x: -7.49999999999928e-7, y: -0.002281660602468275 },\n { x: -7.48999999999928e-7, y: 0.011471266269029789 },\n { x: -7.479999999999281e-7, y: 0.0216577255196688 },\n { x: -7.469999999999281e-7, y: 0.005750570569288274 },\n { x: -7.459999999999281e-7, y: -0.032587461927133576 },\n { x: -7.449999999999282e-7, y: -0.01681796218369945 },\n { x: -7.439999999999282e-7, y: 0.03304170188676783 },\n { x: -7.429999999999282e-7, y: -0.003692451658323054 },\n { x: -7.419999999999283e-7, y: -0.0030563850883970054 },\n { x: -7.409999999999283e-7, y: 0.0016895485700962553 },\n { x: -7.399999999999283e-7, y: -0.018213769450676563 },\n { x: -7.389999999999284e-7, y: 0.0251583969150544 },\n { x: -7.379999999999284e-7, y: 0.03721906823525033 },\n { x: -7.369999999999284e-7, y: 0.014332750958438532 },\n { x: -7.359999999999285e-7, y: 0.004018506071974108 },\n { x: -7.349999999999285e-7, y: -0.009328895241614005 },\n { x: -7.339999999999285e-7, y: -0.017935786289793258 },\n { x: -7.329999999999285e-7, y: 0.03735106821200738 },\n { x: -7.319999999999286e-7, y: -0.010786065959145113 },\n { x: -7.309999999999286e-7, y: -0.02883254651910972 },\n { x: -7.299999999999286e-7, y: 0.00428667254889503 },\n { x: -7.289999999999287e-7, y: -0.03773908537930853 },\n { x: -7.279999999999287e-7, y: -0.0002931725709218301 },\n { x: -7.269999999999287e-7, y: 0.036716197921170875 },\n { x: -7.259999999999288e-7, y: -0.026457202804986164 },\n { x: -7.249999999999288e-7, y: 0.02423487257642817 },\n { x: -7.239999999999288e-7, y: -0.02343398583763106 },\n { x: -7.229999999999289e-7, y: -0.013925319635537338 },\n { x: -7.219999999999289e-7, y: 0.03538221489266571 },\n { x: -7.209999999999289e-7, y: -0.0008697835998210185 },\n { x: -7.199999999999289e-7, y: -0.022260767783963985 },\n { x: -7.18999999999929e-7, y: 0.012419595388602241 },\n { x: -7.17999999999929e-7, y: -0.03196548593981394 },\n { x: -7.16999999999929e-7, y: 0.024714985836480807 },\n { x: -7.159999999999291e-7, y: -0.018956228122529246 },\n { x: -7.149999999999291e-7, y: -0.031300745054078455 },\n { x: -7.139999999999291e-7, y: -0.0348782747532691 },\n { x: -7.129999999999292e-7, y: -0.013674107136283187 },\n { x: -7.119999999999292e-7, y: 0.005432015098493471 },\n { x: -7.109999999999292e-7, y: -0.00887826641364437 },\n { x: -7.099999999999293e-7, y: 0.02747122902020626 },\n { x: -7.089999999999293e-7, y: 0.005285957009757245 },\n { x: -7.079999999999293e-7, y: -0.0304346099279643 },\n { x: -7.069999999999293e-7, y: -0.033989737617403454 },\n { x: -7.059999999999294e-7, y: 0.02928696213333436 },\n { x: -7.049999999999294e-7, y: 0.03092709313677574 },\n { x: -7.039999999999294e-7, y: 0.0220907100004837 },\n { x: -7.029999999999295e-7, y: 0.002097081022607098 },\n { x: -7.019999999999295e-7, y: 0.02927584963188477 },\n { x: -7.009999999999295e-7, y: -0.026563025053022403 },\n { x: -6.999999999999296e-7, y: 0.027955356506882835 },\n { x: -6.989999999999296e-7, y: 0.011717749159196785 },\n { x: -6.979999999999296e-7, y: -0.01844583797651137 },\n { x: -6.969999999999297e-7, y: -0.03279512571645914 },\n { x: -6.959999999999297e-7, y: 0.030106953551930746 },\n { x: -6.949999999999297e-7, y: -0.020434368749354236 },\n { x: -6.939999999999297e-7, y: 0.027718405028198636 },\n { x: -6.929999999999298e-7, y: -0.023812127065734236 },\n { x: -6.919999999999298e-7, y: -0.016961517011275684 },\n { x: -6.909999999999298e-7, y: 0.007860640128169193 },\n { x: -6.899999999999299e-7, y: 0.0072246231204643584 },\n { x: -6.889999999999299e-7, y: -0.026809990666068734 },\n { x: -6.879999999999299e-7, y: 0.019094685110403936 },\n { x: -6.8699999999993e-7, y: 0.01910260361407817 },\n { x: -6.8599999999993e-7, y: -0.021892264193136907 },\n { x: -6.8499999999993e-7, y: -0.0015051666720148052 },\n { x: -6.8399999999993e-7, y: 0.001677891907363871 },\n { x: -6.829999999999301e-7, y: 0.006121967768864928 },\n { x: -6.819999999999301e-7, y: -0.01641753794052324 },\n { x: -6.809999999999301e-7, y: -0.026200855304732047 },\n { x: -6.799999999999302e-7, y: 0.014921284988103039 },\n { x: -6.789999999999302e-7, y: -0.02802718187016387 },\n { x: -6.779999999999302e-7, y: 0.0270094861069588 },\n { x: -6.769999999999303e-7, y: -0.03280403880906488 },\n { x: -6.759999999999303e-7, y: -0.006654548789746699 },\n { x: -6.749999999999303e-7, y: 0.01059287602364014 },\n { x: -6.739999999999304e-7, y: 0.00459015733253834 },\n { x: -6.729999999999304e-7, y: 0.03210706378427855 },\n { x: -6.719999999999304e-7, y: -0.027332589509352783 },\n { x: -6.709999999999305e-7, y: -0.03638117773089946 },\n { x: -6.699999999999305e-7, y: -0.0313984494673226 },\n { x: -6.689999999999305e-7, y: 0.022509852690589686 },\n { x: -6.679999999999305e-7, y: -0.011222849987818764 },\n { x: -6.669999999999306e-7, y: 0.0354456902138389 },\n { x: -6.659999999999306e-7, y: -0.035355338381689735 },\n { x: -6.649999999999306e-7, y: -0.03273456372042448 },\n { x: -6.639999999999307e-7, y: 0.037632377993272195 },\n { x: -6.629999999999307e-7, y: -0.0032497165509312045 },\n { x: -6.619999999999307e-7, y: -0.00525812192844277 },\n { x: -6.609999999999308e-7, y: 0.026082411463927743 },\n { x: -6.599999999999308e-7, y: 0.0005371650287673598 },\n { x: -6.589999999999308e-7, y: -0.005402311725754774 },\n { x: -6.579999999999309e-7, y: 0.029669042177349808 },\n { x: -6.569999999999309e-7, y: -0.0165022373391947 },\n { x: -6.559999999999309e-7, y: 0.03393076455731495 },\n { x: -6.549999999999309e-7, y: 0.007333906715309948 },\n { x: -6.53999999999931e-7, y: -0.028745892897458113 },\n { x: -6.52999999999931e-7, y: 0.02323790254517157 },\n { x: -6.51999999999931e-7, y: 0.0023720779857305777 },\n { x: -6.509999999999311e-7, y: 0.013015333281979458 },\n { x: -6.499999999999311e-7, y: 0.026857012226457568 },\n { x: -6.489999999999311e-7, y: -0.01897999950646951 },\n { x: -6.479999999999312e-7, y: 0.027275525359059215 },\n { x: -6.469999999999312e-7, y: -0.006744561827243408 },\n { x: -6.459999999999312e-7, y: -0.02128910714976712 },\n { x: -6.449999999999312e-7, y: 0.036536987158046264 },\n { x: -6.439999999999313e-7, y: -0.03262356204871867 },\n { x: -6.429999999999313e-7, y: -0.02302919180005553 },\n { x: -6.419999999999313e-7, y: -0.02513408612064682 },\n { x: -6.409999999999314e-7, y: -0.03649315076213799 },\n { x: -6.399999999999314e-7, y: 0.004837253568413848 },\n { x: -6.389999999999314e-7, y: -0.01987630083704264 },\n { x: -6.379999999999315e-7, y: 0.0182994090764373 },\n { x: -6.369999999999315e-7, y: 0.0037682857458279867 },\n { x: -6.359999999999315e-7, y: -0.025857645157095616 },\n { x: -6.349999999999316e-7, y: -0.002547405148933613 },\n { x: -6.339999999999316e-7, y: 0.0012864483880417716 },\n { x: -6.329999999999316e-7, y: 0.01656586953278925 },\n { x: -6.319999999999316e-7, y: 0.005633296789070536 },\n { x: -6.309999999999317e-7, y: -0.02692909228518187 },\n { x: -6.299999999999317e-7, y: 0.033034091430707326 },\n { x: -6.289999999999317e-7, y: 0.000841324146058516 },\n { x: -6.279999999999318e-7, y: 0.02117952105833375 },\n { x: -6.269999999999318e-7, y: -0.021910890070447463 },\n { x: -6.259999999999318e-7, y: -0.0012603429754274448 },\n { x: -6.249999999999319e-7, y: -0.000029963623049062668 },\n { x: -6.239999999999319e-7, y: 0.011504326854161978 },\n { x: -6.229999999999319e-7, y: 0.013443213956065443 },\n { x: -6.21999999999932e-7, y: 0.03423905325494616 },\n { x: -6.20999999999932e-7, y: -0.0012014379203648814 },\n { x: -6.19999999999932e-7, y: -0.03681681489040827 },\n { x: -6.18999999999932e-7, y: -0.011696922483330499 },\n { x: -6.179999999999321e-7, y: 0.004064106555042659 },\n { x: -6.169999999999321e-7, y: 0.026522292233923304 },\n { x: -6.159999999999321e-7, y: 0.026303978180255268 },\n { x: -6.149999999999322e-7, y: -0.012059156570144934 },\n { x: -6.139999999999322e-7, y: 0.021788653083909853 },\n { x: -6.129999999999322e-7, y: -0.022208000100723588 },\n { x: -6.119999999999323e-7, y: 0.013426097878221969 },\n { x: -6.109999999999323e-7, y: -0.019190120926348413 },\n { x: -6.099999999999323e-7, y: 0.029542252697688398 },\n { x: -6.089999999999324e-7, y: -0.021229043465104694 },\n { x: -6.079999999999324e-7, y: -0.02678096061500068 },\n { x: -6.069999999999324e-7, y: 0.018500261386440443 },\n { x: -6.059999999999324e-7, y: -0.03259508777224578 },\n { x: -6.049999999999325e-7, y: 0.021742044288600153 },\n { x: -6.039999999999325e-7, y: 0.02200122800120708 },\n { x: -6.029999999999325e-7, y: -0.00714686327800051 },\n { x: -6.019999999999326e-7, y: -0.01693199206884209 },\n { x: -6.009999999999326e-7, y: -0.024062566092241555 },\n { x: -5.999999999999326e-7, y: -0.0012649725384623466 },\n { x: -5.989999999999327e-7, y: 0.006787035066740783 },\n { x: -5.979999999999327e-7, y: -0.028662918760442524 },\n { x: -5.969999999999327e-7, y: 0.03292025923605793 },\n { x: -5.959999999999328e-7, y: -0.028248750005335662 },\n { x: -5.949999999999328e-7, y: 0.005911788375894198 },\n { x: -5.939999999999328e-7, y: 0.013617901199125624 },\n { x: -5.929999999999328e-7, y: -0.009851667093976588 },\n { x: -5.919999999999329e-7, y: 0.006991583991121393 },\n { x: -5.909999999999329e-7, y: 0.037391102216933494 },\n { x: -5.899999999999329e-7, y: -0.00425707469207949 },\n { x: -5.88999999999933e-7, y: -0.016339341319091674 },\n { x: -5.87999999999933e-7, y: 0.038167253730834946 },\n { x: -5.86999999999933e-7, y: 0.020894697876456935 },\n { x: -5.859999999999331e-7, y: -0.01918880894873754 },\n { x: -5.849999999999331e-7, y: -0.023041720730246493 },\n { x: -5.839999999999331e-7, y: -0.030218680197106256 },\n { x: -5.829999999999332e-7, y: 0.027228109860258032 },\n { x: -5.819999999999332e-7, y: -0.02895668994770278 },\n { x: -5.809999999999332e-7, y: -0.020615890258674288 },\n { x: -5.799999999999332e-7, y: -0.03677379199836666 },\n { x: -5.789999999999333e-7, y: 0.03065222249411227 },\n { x: -5.779999999999333e-7, y: -0.02692351686015201 },\n { x: -5.769999999999333e-7, y: -0.03347121552609948 },\n { x: -5.759999999999334e-7, y: -0.018436815949925033 },\n { x: -5.749999999999334e-7, y: -0.020711923304145244 },\n { x: -5.739999999999334e-7, y: 0.015515264813902845 },\n { x: -5.729999999999335e-7, y: 0.020797217592234296 },\n { x: -5.719999999999335e-7, y: 0.03688947463017097 },\n { x: -5.709999999999335e-7, y: 0.004346529244960781 },\n { x: -5.699999999999336e-7, y: -0.02980132424030097 },\n { x: -5.689999999999336e-7, y: -0.0208207401988313 },\n { x: -5.679999999999336e-7, y: -0.0153339790885583 },\n { x: -5.669999999999336e-7, y: 0.037197042598921974 },\n { x: -5.659999999999337e-7, y: -0.020771203342421902 },\n { x: -5.649999999999337e-7, y: 0.038048546092983825 },\n { x: -5.639999999999337e-7, y: 0.021681075659839816 },\n { x: -5.629999999999338e-7, y: 0.038013314656745845 },\n { x: -5.619999999999338e-7, y: 0.007790282935868771 },\n { x: -5.609999999999338e-7, y: 0.0319063573956932 },\n { x: -5.599999999999339e-7, y: 0.010494676054734347 },\n { x: -5.589999999999339e-7, y: -0.03301383949974486 },\n { x: -5.579999999999339e-7, y: -0.003371837164825826 },\n { x: -5.56999999999934e-7, y: 0.037796564074388445 },\n { x: -5.55999999999934e-7, y: -0.0068843456160199165 },\n { x: -5.54999999999934e-7, y: -0.0016397799921726867 },\n { x: -5.53999999999934e-7, y: -0.027033925958003562 },\n { x: -5.529999999999341e-7, y: 0.030837625712965895 },\n { x: -5.519999999999341e-7, y: 0.02402482696409352 },\n { x: -5.509999999999341e-7, y: 0.005365150378940554 },\n { x: -5.499999999999342e-7, y: -0.002699016971069865 },\n { x: -5.489999999999342e-7, y: -0.01689677285149041 },\n { x: -5.479999999999342e-7, y: 0.034945223123161194 },\n { x: -5.469999999999343e-7, y: -0.02477631221755628 },\n { x: -5.459999999999343e-7, y: 0.002752120716507772 },\n { x: -5.449999999999343e-7, y: -0.01280693354681033 },\n { x: -5.439999999999344e-7, y: -0.018987931888737316 },\n { x: -5.429999999999344e-7, y: 0.03623666664093101 },\n { x: -5.419999999999344e-7, y: -0.02048956128127825 },\n { x: -5.409999999999344e-7, y: -0.013620046993659209 },\n { x: -5.399999999999345e-7, y: 0.0323835954094382 },\n { x: -5.389999999999345e-7, y: -0.009018041646379121 },\n { x: -5.379999999999345e-7, y: -0.010114627595053187 },\n { x: -5.369999999999346e-7, y: -0.038318943615224664 },\n { x: -5.359999999999346e-7, y: 0.015759376601194613 },\n { x: -5.349999999999346e-7, y: -0.0215600233422073 },\n { x: -5.339999999999347e-7, y: -0.015502455862315223 },\n { x: -5.329999999999347e-7, y: -0.01637689200293658 },\n { x: -5.319999999999347e-7, y: 0.037296678672567016 },\n { x: -5.309999999999348e-7, y: 0.00016984160083190658 },\n { x: -5.299999999999348e-7, y: 0.020208980877136348 },\n { x: -5.289999999999348e-7, y: 0.02106492574351752 },\n { x: -5.279999999999348e-7, y: 0.010140411074034801 },\n { x: -5.269999999999349e-7, y: 0.012030641892448275 },\n { x: -5.259999999999349e-7, y: -0.0160382673405169 },\n { x: -5.249999999999349e-7, y: -0.008389576091561253 },\n { x: -5.23999999999935e-7, y: -0.024672980475083036 },\n { x: -5.22999999999935e-7, y: 0.019835518594130918 },\n { x: -5.21999999999935e-7, y: 0.01894037634659523 },\n { x: -5.209999999999351e-7, y: -0.0037410433972414328 },\n { x: -5.199999999999351e-7, y: 0.030193826581296927 },\n { x: -5.189999999999351e-7, y: -0.030511069499683647 },\n { x: -5.179999999999352e-7, y: 0.004402151027481887 },\n { x: -5.169999999999352e-7, y: 0.013669149116530884 },\n { x: -5.159999999999352e-7, y: -0.008998797248273235 },\n { x: -5.149999999999352e-7, y: -0.0075357382227624415 },\n { x: -5.139999999999353e-7, y: 0.027307552666633022 },\n { x: -5.129999999999353e-7, y: -0.008714039875602212 },\n { x: -5.119999999999353e-7, y: -0.010654556595364151 },\n { x: -5.109999999999354e-7, y: -0.014094754058061374 },\n { x: -5.099999999999354e-7, y: -0.005923052582552714 },\n { x: -5.089999999999354e-7, y: 0.037126934365119164 },\n { x: -5.079999999999355e-7, y: 0.024855077671973914 },\n { x: -5.069999999999355e-7, y: -0.00899826193442723 },\n { x: -5.059999999999355e-7, y: -0.020175311969571518 },\n { x: -5.049999999999356e-7, y: -0.009670224239580071 },\n { x: -5.039999999999356e-7, y: -0.02449927600855842 },\n { x: -5.029999999999356e-7, y: 0.016877202567956405 },\n { x: -5.019999999999356e-7, y: 0.024015249183921394 },\n { x: -5.009999999999357e-7, y: 0.016692677709990222 },\n { x: -4.999999999999357e-7, y: -0.03061607807128818 },\n { x: -4.989999999999357e-7, y: 0.0328830465502613 },\n { x: -4.979999999999358e-7, y: -0.02536460955878092 },\n { x: -4.969999999999358e-7, y: -0.00701673329043003 },\n { x: -4.959999999999358e-7, y: -0.00009851986595585799 },\n { x: -4.949999999999359e-7, y: 0.00045193160896987353 },\n { x: -4.939999999999359e-7, y: -0.02821931782806969 },\n { x: -4.929999999999359e-7, y: -0.008911267882016611 },\n { x: -4.91999999999936e-7, y: 0.025025915132938267 },\n { x: -4.90999999999936e-7, y: 0.008696595962662378 },\n { x: -4.89999999999936e-7, y: -0.03148170988750545 },\n { x: -4.88999999999936e-7, y: 0.02601655824539923 },\n { x: -4.879999999999361e-7, y: 0.03716094133856492 },\n { x: -4.869999999999361e-7, y: -0.026329335413725733 },\n { x: -4.859999999999361e-7, y: -0.019010987890180363 },\n { x: -4.849999999999362e-7, y: -0.03696500330457485 },\n { x: -4.839999999999362e-7, y: 0.03722147274506833 },\n { x: -4.829999999999362e-7, y: -0.005944847278957255 },\n { x: -4.819999999999363e-7, y: 0.02273284393958523 },\n { x: -4.809999999999363e-7, y: -0.026743775014016584 },\n { x: -4.799999999999363e-7, y: 0.003374896427794901 },\n { x: -4.789999999999364e-7, y: -0.021645314139998945 },\n { x: -4.779999999999364e-7, y: -0.03740958138926493 },\n { x: -4.769999999999364e-7, y: 0.009461506309069632 },\n { x: -4.759999999999364e-7, y: 0.0013674561444570773 },\n { x: -4.7499999999993637e-7, y: 0.016354953110585334 },\n { x: -4.7399999999993635e-7, y: -0.02324457265267391 },\n { x: -4.7299999999993633e-7, y: -0.01673664805640501 },\n { x: -4.719999999999363e-7, y: -0.00015193183769306276 },\n { x: -4.709999999999363e-7, y: 0.0008039217090670105 },\n { x: -4.6999999999993626e-7, y: 0.01597715371487733 },\n { x: -4.6899999999993624e-7, y: 0.0019769652104212818 },\n { x: -4.679999999999362e-7, y: -0.032851011423476704 },\n { x: -4.669999999999362e-7, y: 0.06932641920808683 },\n { x: -4.6599999999993617e-7, y: 0.02656540293626496 },\n { x: -4.6499999999993615e-7, y: 0.007897039000335783 },\n { x: -4.6399999999993613e-7, y: -0.027103847662122805 },\n { x: -4.629999999999361e-7, y: 0.029694558179882837 },\n { x: -4.619999999999361e-7, y: 0.0018248423122610568 },\n { x: -4.6099999999993606e-7, y: 0.009758548707735707 },\n { x: -4.5999999999993604e-7, y: -0.009428239581410956 },\n { x: -4.58999999999936e-7, y: -0.0356313429142074 },\n { x: -4.57999999999936e-7, y: 0.03593672717025784 },\n { x: -4.5699999999993597e-7, y: 0.018531571981076727 },\n { x: -4.5599999999993595e-7, y: 0.016552444396710556 },\n { x: -4.5499999999993593e-7, y: -0.002337247496148302 },\n { x: -4.539999999999359e-7, y: 0.0007785083458110871 },\n { x: -4.529999999999359e-7, y: -0.02905886063018612 },\n { x: -4.5199999999993586e-7, y: 0.036852363387532006 },\n { x: -4.5099999999993584e-7, y: 0.0022927258407498263 },\n { x: -4.499999999999358e-7, y: 0.032606694860042994 },\n { x: -4.489999999999358e-7, y: -0.034456756692891444 },\n { x: -4.4799999999993577e-7, y: -0.01984547778443541 },\n { x: -4.4699999999993575e-7, y: 0.013405428432036856 },\n { x: -4.4599999999993573e-7, y: 0.026208836494072685 },\n { x: -4.449999999999357e-7, y: 0.014176530718128064 },\n { x: -4.439999999999357e-7, y: -0.03456288120110022 },\n { x: -4.4299999999993566e-7, y: 0.016830473615826024 },\n { x: -4.4199999999993564e-7, y: 0.023872773074407688 },\n { x: -4.409999999999356e-7, y: 0.027047005024774126 },\n { x: -4.399999999999356e-7, y: -0.01678895619778788 },\n { x: -4.3899999999993557e-7, y: -0.005711371228984338 },\n { x: -4.3799999999993555e-7, y: 0.03022710868431257 },\n { x: -4.3699999999993553e-7, y: 0.02409226383776998 },\n { x: -4.359999999999355e-7, y: 0.016454030380970534 },\n { x: -4.349999999999355e-7, y: -0.016608148401473802 },\n { x: -4.3399999999993546e-7, y: 0.004617163937858662 },\n { x: -4.3299999999993544e-7, y: 0.03498457738044681 },\n { x: -4.319999999999354e-7, y: 0.006581533175657876 },\n { x: -4.309999999999354e-7, y: 0.01352623392192395 },\n { x: -4.2999999999993537e-7, y: 0.030714274070325457 },\n { x: -4.2899999999993535e-7, y: 0.036538763878164994 },\n { x: -4.2799999999993533e-7, y: 0.03769958720522041 },\n { x: -4.269999999999353e-7, y: -0.0024929375955899074 },\n { x: -4.259999999999353e-7, y: -0.024323310595140344 },\n { x: -4.2499999999993526e-7, y: 0.013076787058204128 },\n { x: -4.2399999999993524e-7, y: -0.013467613220872292 },\n { x: -4.229999999999352e-7, y: -0.027774140084367967 },\n { x: -4.219999999999352e-7, y: 0.004517907339911999 },\n { x: -4.2099999999993517e-7, y: 0.03749945939631262 },\n { x: -4.1999999999993515e-7, y: 0.004443943512421321 },\n { x: -4.1899999999993513e-7, y: 0.004115654475036444 },\n { x: -4.179999999999351e-7, y: -0.014654039306239115 },\n { x: -4.169999999999351e-7, y: 0.038109915541014415 },\n { x: -4.1599999999993506e-7, y: 0.03746261698864426 },\n { x: -4.1499999999993504e-7, y: -0.0008754086945264309 },\n { x: -4.13999999999935e-7, y: -0.028624933767044402 },\n { x: -4.12999999999935e-7, y: -0.016959004475366465 },\n { x: -4.11999999999935e-7, y: 0.0012284875710190423 },\n { x: -4.1099999999993495e-7, y: -0.008583333568278161 },\n { x: -4.0999999999993493e-7, y: 0.029831692307815773 },\n { x: -4.089999999999349e-7, y: -0.00960009174369107 },\n { x: -4.079999999999349e-7, y: -0.023298294635352924 },\n { x: -4.0699999999993486e-7, y: 0.014722499395278248 },\n { x: -4.0599999999993484e-7, y: -0.009409509873052066 },\n { x: -4.049999999999348e-7, y: -0.01877895297827343 },\n { x: -4.039999999999348e-7, y: 0.035607385872300674 },\n { x: -4.029999999999348e-7, y: 0.027544753079410875 },\n { x: -4.0199999999993475e-7, y: -0.02656906620890856 },\n { x: -4.0099999999993473e-7, y: 0.015627276790128958 },\n { x: -3.999999999999347e-7, y: 0.02218681102676791 },\n { x: -3.989999999999347e-7, y: -0.005376876812212225 },\n { x: -3.9799999999993466e-7, y: -0.007886995843671056 },\n { x: -3.9699999999993464e-7, y: 0.02142751399413668 },\n { x: -3.959999999999346e-7, y: -0.016887140215574064 },\n { x: -3.949999999999346e-7, y: 0.03624855923128197 },\n { x: -3.939999999999346e-7, y: 0.008104464425445997 },\n { x: -3.9299999999993455e-7, y: -0.0032750014970892396 },\n { x: -3.9199999999993453e-7, y: -0.030805592590375037 },\n { x: -3.909999999999345e-7, y: -0.014122601108262673 },\n { x: -3.899999999999345e-7, y: 0.021798765767953858 },\n { x: -3.8899999999993446e-7, y: 0.03829533478050582 },\n { x: -3.8799999999993444e-7, y: 0.02837964532950979 },\n { x: -3.869999999999344e-7, y: -0.027123323515050545 },\n { x: -3.859999999999344e-7, y: -0.019015802863131825 },\n { x: -3.849999999999344e-7, y: -0.033897898380783 },\n { x: -3.8399999999993435e-7, y: -0.02608445807495351 },\n { x: -3.8299999999993433e-7, y: -0.02037540262438684 },\n { x: -3.819999999999343e-7, y: 0.0131079444841664 },\n { x: -3.809999999999343e-7, y: 0.011345953738193281 },\n { x: -3.7999999999993426e-7, y: 0.023746785693104424 },\n { x: -3.7899999999993424e-7, y: -0.0012674335369404627 },\n { x: -3.779999999999342e-7, y: -0.016961371118575243 },\n { x: -3.769999999999342e-7, y: -0.01947993499109862 },\n { x: -3.759999999999342e-7, y: 0.029100593786119774 },\n { x: -3.7499999999993415e-7, y: 0.005747579368175604 },\n { x: -3.7399999999993413e-7, y: -0.023783933782955895 },\n { x: -3.729999999999341e-7, y: -0.016567949412315493 },\n { x: -3.719999999999341e-7, y: 0.00915024742486819 },\n { x: -3.7099999999993406e-7, y: 0.029849594553970314 },\n { x: -3.6999999999993404e-7, y: 0.0045325909916444935 },\n { x: -3.68999999999934e-7, y: -0.0015042669569214448 },\n { x: -3.67999999999934e-7, y: -0.025004458755548447 },\n { x: -3.66999999999934e-7, y: -0.010508426559348936 },\n { x: -3.6599999999993395e-7, y: -0.02697610737889414 },\n { x: -3.6499999999993393e-7, y: -0.011352360485399827 },\n { x: -3.639999999999339e-7, y: -0.038020789012463425 },\n { x: -3.629999999999339e-7, y: -0.0205532335505078 },\n { x: -3.6199999999993386e-7, y: 0.012163200088658266 },\n { x: -3.6099999999993384e-7, y: 0.015273909929938252 },\n { x: -3.599999999999338e-7, y: -0.02235492756287762 },\n { x: -3.589999999999338e-7, y: -0.01866605465802742 },\n { x: -3.579999999999338e-7, y: 0.0014292383924288492 },\n { x: -3.5699999999993375e-7, y: 0.035948995274460625 },\n { x: -3.5599999999993373e-7, y: -0.03370134007133872 },\n { x: -3.549999999999337e-7, y: 0.03023431426334664 },\n { x: -3.539999999999337e-7, y: -0.034331327176150415 },\n { x: -3.5299999999993366e-7, y: -0.03444831481803883 },\n { x: -3.5199999999993364e-7, y: 0.01063462228947142 },\n { x: -3.509999999999336e-7, y: -0.01489766898439868 },\n { x: -3.499999999999336e-7, y: 0.03586754690355203 },\n { x: -3.489999999999336e-7, y: 0.016184357479110553 },\n { x: -3.4799999999993355e-7, y: 0.010408493799289202 },\n { x: -3.4699999999993353e-7, y: 0.016522189266849552 },\n { x: -3.459999999999335e-7, y: -0.023448213183515292 },\n { x: -3.449999999999335e-7, y: 0.0033972943416049907 },\n { x: -3.4399999999993346e-7, y: -0.01972712801423758 },\n { x: -3.4299999999993344e-7, y: -0.016491964007021458 },\n { x: -3.419999999999334e-7, y: -0.007382138015212052 },\n { x: -3.409999999999334e-7, y: -0.035121234567728046 },\n { x: -3.399999999999334e-7, y: 0.03821428153002842 },\n { x: -3.3899999999993335e-7, y: -0.011472240052964676 },\n { x: -3.3799999999993333e-7, y: 0.0183845167764827 },\n { x: -3.369999999999333e-7, y: 0.005725350498037771 },\n { x: -3.359999999999333e-7, y: -0.03470912388654533 },\n { x: -3.3499999999993327e-7, y: -0.00705656191395721 },\n { x: -3.3399999999993324e-7, y: 0.027291201799425978 },\n { x: -3.329999999999332e-7, y: -0.021202866600286814 },\n { x: -3.319999999999332e-7, y: -0.011889542799743299 },\n { x: -3.309999999999332e-7, y: 0.02741262776875824 },\n { x: -3.2999999999993315e-7, y: 0.03524542654188016 },\n { x: -3.2899999999993313e-7, y: -0.029743333395877255 },\n { x: -3.279999999999331e-7, y: -0.03545871693571225 },\n { x: -3.269999999999331e-7, y: 0.037481238634134634 },\n { x: -3.2599999999993307e-7, y: 0.000868038712042484 },\n { x: -3.2499999999993304e-7, y: 0.008138191252355896 },\n { x: -3.23999999999933e-7, y: 0.03028047238881504 },\n { x: -3.22999999999933e-7, y: -0.00847797058562639 },\n { x: -3.21999999999933e-7, y: 0.03775654659760015 },\n { x: -3.2099999999993295e-7, y: -0.013823588073563604 },\n { x: -3.1999999999993293e-7, y: -0.02254704395135032 },\n { x: -3.189999999999329e-7, y: 0.009525372189035595 },\n { x: -3.179999999999329e-7, y: 0.0023775445960528977 },\n { x: -3.1699999999993287e-7, y: 0.027114001841603126 },\n { x: -3.1599999999993284e-7, y: 0.0020019980896420577 },\n { x: -3.149999999999328e-7, y: -0.037692027283707186 },\n { x: -3.139999999999328e-7, y: 0.024365911638839388 },\n { x: -3.129999999999328e-7, y: 0.038036834457867735 },\n { x: -3.1199999999993275e-7, y: 0.026564484320203263 },\n { x: -3.1099999999993273e-7, y: -0.03696169754571912 },\n { x: -3.099999999999327e-7, y: -0.01995828013795558 },\n { x: -3.089999999999327e-7, y: 0.02367356023645286 },\n { x: -3.0799999999993267e-7, y: 0.01140525596555517 },\n { x: -3.0699999999993264e-7, y: 0.0078097665333482 },\n { x: -3.059999999999326e-7, y: -0.0014158938452822933 },\n { x: -3.049999999999326e-7, y: 0.02426850402271181 },\n { x: -3.039999999999326e-7, y: -0.02325227193707388 },\n { x: -3.0299999999993256e-7, y: -0.00566885280125813 },\n { x: -3.0199999999993253e-7, y: -0.03729116676410857 },\n { x: -3.009999999999325e-7, y: 0.015028079439946739 },\n { x: -2.999999999999325e-7, y: 0.009513073411901551 },\n { x: -2.9899999999993247e-7, y: 0.005344653905798962 },\n { x: -2.9799999999993244e-7, y: -0.025153867654681333 },\n { x: -2.969999999999324e-7, y: -0.010104536826985427 },\n { x: -2.959999999999324e-7, y: 0.011694700030693398 },\n { x: -2.949999999999324e-7, y: 0.030316109820884007 },\n { x: -2.9399999999993236e-7, y: -0.018684330958494467 },\n { x: -2.9299999999993233e-7, y: 0.0032932605733379744 },\n { x: -2.919999999999323e-7, y: -0.008830329488269032 },\n { x: -2.909999999999323e-7, y: 0.0028543933230057213 },\n { x: -2.8999999999993227e-7, y: -0.011823972351564719 },\n { x: -2.8899999999993224e-7, y: 0.0292281096060689 },\n { x: -2.879999999999322e-7, y: -0.033097365562273745 },\n { x: -2.869999999999322e-7, y: 0.013075176774745338 },\n { x: -2.859999999999322e-7, y: 0.01916467486574591 },\n { x: -2.8499999999993216e-7, y: -0.0030577751660357017 },\n { x: -2.8399999999993213e-7, y: 0.0024698753505127766 },\n { x: -2.829999999999321e-7, y: 0.006726865754168589 },\n { x: -2.819999999999321e-7, y: -0.03352103444506385 },\n { x: -2.8099999999993207e-7, y: -0.0006328725955294857 },\n { x: -2.7999999999993204e-7, y: -0.022072865557930022 },\n { x: -2.78999999999932e-7, y: -0.015087482287251614 },\n { x: -2.77999999999932e-7, y: 0.021930827610196182 },\n { x: -2.76999999999932e-7, y: 0.036114252942463614 },\n { x: -2.7599999999993196e-7, y: 0.013480463361941978 },\n { x: -2.7499999999993193e-7, y: 0.036119136218706195 },\n { x: -2.739999999999319e-7, y: -0.03737441500639726 },\n { x: -2.729999999999319e-7, y: -0.020643728344049487 },\n { x: -2.7199999999993187e-7, y: -0.011789293940388348 },\n { x: -2.7099999999993184e-7, y: -0.008195787899156506 },\n { x: -2.699999999999318e-7, y: 0.03285209369418967 },\n { x: -2.689999999999318e-7, y: 0.0317778992871913 },\n { x: -2.679999999999318e-7, y: -0.006464683270472996 },\n { x: -2.6699999999993176e-7, y: 0.01824154316645744 },\n { x: -2.6599999999993173e-7, y: -0.015422912801715951 },\n { x: -2.649999999999317e-7, y: -0.025806199554868035 },\n { x: -2.639999999999317e-7, y: 0.035238314439241906 },\n { x: -2.6299999999993167e-7, y: -0.01958904955047636 },\n { x: -2.6199999999993165e-7, y: 0.016304345038460073 },\n { x: -2.609999999999316e-7, y: -0.016831681665570593 },\n { x: -2.599999999999316e-7, y: -0.0006191874808557794 },\n { x: -2.589999999999316e-7, y: -0.036482341947945425 },\n { x: -2.5799999999993156e-7, y: 0.011924383438017048 },\n { x: -2.5699999999993153e-7, y: 0.0034860023883373473 },\n { x: -2.559999999999315e-7, y: 0.01625724854429595 },\n { x: -2.549999999999315e-7, y: -0.0045323255757287965 },\n { x: -2.5399999999993147e-7, y: -0.017418846636385606 },\n { x: -2.5299999999993145e-7, y: -0.008758278674948437 },\n { x: -2.519999999999314e-7, y: 0.028420364197662754 },\n { x: -2.509999999999314e-7, y: 0.006157549009896937 },\n { x: -2.499999999999314e-7, y: 0.03405373137579483 },\n { x: -2.4899999999993136e-7, y: -0.0066285083976237716 },\n { x: -2.4799999999993133e-7, y: 0.011483246916349134 },\n { x: -2.469999999999313e-7, y: -0.001205122467282206 },\n { x: -2.459999999999313e-7, y: 0.03370991547225574 },\n { x: -2.4499999999993127e-7, y: 0.010582462966692649 },\n { x: -2.4399999999993125e-7, y: 0.024981266958621934 },\n { x: -2.429999999999312e-7, y: 0.03202715319183665 },\n { x: -2.419999999999312e-7, y: 0.02166321966569135 },\n { x: -2.409999999999312e-7, y: 0.031510064756146046 },\n { x: -2.3999999999993116e-7, y: -0.02391154825710596 },\n { x: -2.3899999999993113e-7, y: -0.02561748337235069 },\n { x: -2.3799999999993114e-7, y: 0.014928391463372132 },\n { x: -2.3699999999993114e-7, y: 0.023968334923967858 },\n { x: -2.3599999999993115e-7, y: -0.03454698509176921 },\n { x: -2.3499999999993115e-7, y: -0.023742378008478487 },\n { x: -2.3399999999993116e-7, y: 0.034357258293760226 },\n { x: -2.3299999999993116e-7, y: 0.03374519470424609 },\n { x: -2.3199999999993116e-7, y: -0.006905003053431417 },\n { x: -2.3099999999993117e-7, y: 0.024423612260077332 },\n { x: -2.2999999999993117e-7, y: -0.025970144401944215 },\n { x: -2.2899999999993118e-7, y: -0.01585621414527635 },\n { x: -2.2799999999993118e-7, y: 0.03509216437727518 },\n { x: -2.2699999999993119e-7, y: 0.03712317356062595 },\n { x: -2.259999999999312e-7, y: -0.009358822552676121 },\n { x: -2.249999999999312e-7, y: 0.010032357882639687 },\n { x: -2.239999999999312e-7, y: -0.013969217201878607 },\n { x: -2.229999999999312e-7, y: -0.015918118855267355 },\n { x: -2.219999999999312e-7, y: -0.028274321387790412 },\n { x: -2.209999999999312e-7, y: -0.008679952774400862 },\n { x: -2.1999999999993122e-7, y: -0.02564963975030458 },\n { x: -2.1899999999993122e-7, y: 0.017650334243266022 },\n { x: -2.1799999999993122e-7, y: 0.03530758531792346 },\n { x: -2.1699999999993123e-7, y: -0.035911236547750434 },\n { x: -2.1599999999993123e-7, y: 0.0013507887723224893 },\n { x: -2.1499999999993124e-7, y: -0.015565648369075752 },\n { x: -2.1399999999993124e-7, y: -0.016685393487460874 },\n { x: -2.1299999999993125e-7, y: 0.015871369742837826 },\n { x: -2.1199999999993125e-7, y: 0.006046204205466943 },\n { x: -2.1099999999993125e-7, y: -0.0030431216017367565 },\n { x: -2.0999999999993126e-7, y: -0.01044507942983039 },\n { x: -2.0899999999993126e-7, y: 0.03573833959618011 },\n { x: -2.0799999999993127e-7, y: -0.008992997756426781 },\n { x: -2.0699999999993127e-7, y: 0.03696604719411287 },\n { x: -2.0599999999993128e-7, y: -0.015073568321485027 },\n { x: -2.0499999999993128e-7, y: -0.010086736856374245 },\n { x: -2.0399999999993128e-7, y: 0.01410181977929076 },\n { x: -2.029999999999313e-7, y: -0.0058330353626653095 },\n { x: -2.019999999999313e-7, y: 0.015457357583510503 },\n { x: -2.009999999999313e-7, y: -0.017534530556566702 },\n { x: -1.999999999999313e-7, y: -0.035601992619162304 },\n { x: -1.989999999999313e-7, y: 0.007904988832166492 },\n { x: -1.979999999999313e-7, y: 0.02569858165953012 },\n { x: -1.9699999999993131e-7, y: -0.01268522374900902 },\n { x: -1.9599999999993132e-7, y: -0.018121155957264667 },\n { x: -1.9499999999993132e-7, y: 0.02061041143055766 },\n { x: -1.9399999999993133e-7, y: -0.008840215099175694 },\n { x: -1.9299999999993133e-7, y: -0.03652112925199514 },\n { x: -1.9199999999993134e-7, y: 0.008174779623938448 },\n { x: -1.9099999999993134e-7, y: 0.03529952154612975 },\n { x: -1.8999999999993134e-7, y: 0.030368375593192113 },\n { x: -1.8899999999993135e-7, y: -0.02123428780928653 },\n { x: -1.8799999999993135e-7, y: -0.003718508242115864 },\n { x: -1.8699999999993136e-7, y: -0.03468025752054715 },\n { x: -1.8599999999993136e-7, y: 0.026036616409071837 },\n { x: -1.8499999999993137e-7, y: 0.0016423104189708143 },\n { x: -1.8399999999993137e-7, y: 0.03171428469100279 },\n { x: -1.8299999999993137e-7, y: -0.016478522450779937 },\n { x: -1.8199999999993138e-7, y: -0.05789074385915425 },\n { x: -1.8099999999993138e-7, y: -0.0013360377763962552 },\n { x: -1.799999999999314e-7, y: 0.028311933648685825 },\n { x: -1.789999999999314e-7, y: -0.0058701852382468155 },\n { x: -1.779999999999314e-7, y: -0.029190174689918993 },\n { x: -1.769999999999314e-7, y: 0.023188948448225954 },\n { x: -1.759999999999314e-7, y: 0.021815855809314097 },\n { x: -1.749999999999314e-7, y: -0.018607974271348544 },\n { x: -1.739999999999314e-7, y: 0.02214004297327952 },\n { x: -1.7299999999993142e-7, y: -0.023827175966968095 },\n { x: -1.7199999999993142e-7, y: 0.03094264608713723 },\n { x: -1.7099999999993143e-7, y: -0.026174971744903165 },\n { x: -1.6999999999993143e-7, y: -0.025051348319339358 },\n { x: -1.6899999999993143e-7, y: -0.004768120114201645 },\n { x: -1.6799999999993144e-7, y: 0.014081549002571461 },\n { x: -1.6699999999993144e-7, y: 0.03180882132651888 },\n { x: -1.6599999999993145e-7, y: 0.002173689560844717 },\n { x: -1.6499999999993145e-7, y: -0.018737405976084285 },\n { x: -1.6399999999993146e-7, y: -0.014585301650330921 },\n { x: -1.6299999999993146e-7, y: 0.015602049999032364 },\n { x: -1.6199999999993146e-7, y: -0.005610621161915424 },\n { x: -1.6099999999993147e-7, y: 0.02108857916150817 },\n { x: -1.5999999999993147e-7, y: 0.033522554651299344 },\n { x: -1.5899999999993148e-7, y: -0.010920379919065323 },\n { x: -1.5799999999993148e-7, y: 0.033474036356441875 },\n { x: -1.5699999999993149e-7, y: 0.01717633656792932 },\n { x: -1.559999999999315e-7, y: 0.022830139011231158 },\n { x: -1.549999999999315e-7, y: -0.017148088912630352 },\n { x: -1.539999999999315e-7, y: 0.03829531639159738 },\n { x: -1.529999999999315e-7, y: 0.02810785137351485 },\n { x: -1.519999999999315e-7, y: -0.025030886157620027 },\n { x: -1.509999999999315e-7, y: -0.0213331455598955 },\n { x: -1.4999999999993152e-7, y: -0.020643267095945356 },\n { x: -1.4899999999993152e-7, y: -0.003781962323834834 },\n { x: -1.4799999999993152e-7, y: -0.026162796302254283 },\n { x: -1.4699999999993153e-7, y: 0.019724970582389686 },\n { x: -1.4599999999993153e-7, y: -0.0329234572410268 },\n { x: -1.4499999999993154e-7, y: 0.03775546980293661 },\n { x: -1.4399999999993154e-7, y: 0.021949333584469356 },\n { x: -1.4299999999993155e-7, y: 0.009438960886899462 },\n { x: -1.4199999999993155e-7, y: 0.03057407723189284 },\n { x: -1.4099999999993155e-7, y: -0.02842148326974319 },\n { x: -1.3999999999993156e-7, y: -0.007090221090106025 },\n { x: -1.3899999999993156e-7, y: 0.025399609643791343 },\n { x: -1.3799999999993157e-7, y: -0.0006261656652823926 },\n { x: -1.3699999999993157e-7, y: -0.007803680692520011 },\n { x: -1.3599999999993158e-7, y: -0.04110827863463731 },\n { x: -1.3499999999993158e-7, y: -0.011652926734824228 },\n { x: -1.3399999999993158e-7, y: 0.023820436088801238 },\n { x: -1.329999999999316e-7, y: 0.02747139092627198 },\n { x: -1.319999999999316e-7, y: -0.011828710152233303 },\n { x: -1.309999999999316e-7, y: 0.005724307255565378 },\n { x: -1.299999999999316e-7, y: 0.02862619109093727 },\n { x: -1.289999999999316e-7, y: -0.01763804545071117 },\n { x: -1.279999999999316e-7, y: -0.019805710036850794 },\n { x: -1.2699999999993161e-7, y: -0.01812581522641391 },\n { x: -1.2599999999993162e-7, y: -0.021096575063561857 },\n { x: -1.2499999999993162e-7, y: -0.027593275461981093 },\n { x: -1.2399999999993163e-7, y: -0.033034066193210705 },\n { x: -1.2299999999993163e-7, y: -0.012518718767353441 },\n { x: -1.2199999999993164e-7, y: 0.011012397330959425 },\n { x: -1.2099999999993164e-7, y: 0.011997956155848555 },\n { x: -1.1999999999993164e-7, y: -0.030361769753763264 },\n { x: -1.1899999999993165e-7, y: 0.021154731927001322 },\n { x: -1.1799999999993165e-7, y: -0.033016626390005445 },\n { x: -1.1699999999993166e-7, y: 0.007023761187189891 },\n { x: -1.1599999999993166e-7, y: -0.015657603659062783 },\n { x: -1.1499999999993167e-7, y: -0.037535162530381194 },\n { x: -1.1399999999993167e-7, y: 0.005816603778038893 },\n { x: -1.1299999999993167e-7, y: -0.0318834856995062 },\n { x: -1.1199999999993168e-7, y: 0.004925105638142008 },\n { x: -1.1099999999993168e-7, y: 0.02074974287381789 },\n { x: -1.0999999999993169e-7, y: -0.016944896010134457 },\n { x: -1.0899999999993169e-7, y: -0.008617973767884124 },\n { x: -1.079999999999317e-7, y: -0.018525156681826603 },\n { x: -1.069999999999317e-7, y: 0.007908411955996222 },\n { x: -1.059999999999317e-7, y: 0.03729322793984474 },\n { x: -1.0499999999993171e-7, y: -0.01346242076499064 },\n { x: -1.0399999999993171e-7, y: 0.006947684777811931 },\n { x: -1.0299999999993172e-7, y: 0.008749554301109953 },\n { x: -1.0199999999993172e-7, y: 0.017559706810042038 },\n { x: -1.0099999999993173e-7, y: 0.013201622720842262 },\n { x: -9.999999999993173e-8, y: 0.007939822487957665 },\n { x: -9.899999999993173e-8, y: 0.020645714036264678 },\n { x: -9.799999999993174e-8, y: 0.030429070581637557 },\n { x: -9.699999999993174e-8, y: 0.03376194431178459 },\n { x: -9.599999999993175e-8, y: 0.0232257086733735 },\n { x: -9.499999999993175e-8, y: -0.03139777375041945 },\n { x: -9.399999999993176e-8, y: 0.02033376722589085 },\n { x: -9.299999999993176e-8, y: -0.012684972635188892 },\n { x: -9.199999999993176e-8, y: -0.03588213688497629 },\n { x: -9.099999999993177e-8, y: -0.012792930557675138 },\n { x: -8.999999999993177e-8, y: 0.015615604456984228 },\n { x: -8.899999999993178e-8, y: 0.0015307169341800284 },\n { x: -8.799999999993178e-8, y: -0.02452090851465648 },\n { x: -8.699999999993179e-8, y: -0.03773641795367768 },\n { x: -8.599999999993179e-8, y: 0.009388755814108864 },\n { x: -8.49999999999318e-8, y: 0.0016201154022474277 },\n { x: -8.39999999999318e-8, y: 0.010165783731247937 },\n { x: -8.29999999999318e-8, y: -0.028809041808999857 },\n { x: -8.199999999993181e-8, y: -0.003391666369490668 },\n { x: -8.099999999993181e-8, y: 0.02016547688372482 },\n { x: -7.999999999993182e-8, y: 0.002560789204738185 },\n { x: -7.899999999993182e-8, y: 0.022667494756726025 },\n { x: -7.799999999993182e-8, y: -0.01729434894963864 },\n { x: -7.699999999993183e-8, y: 0.028777562098739305 },\n { x: -7.599999999993183e-8, y: 0.020257948289324333 },\n { x: -7.499999999993184e-8, y: -0.018642515354927593 },\n { x: -7.399999999993184e-8, y: -0.03126405831135507 },\n { x: -7.299999999993185e-8, y: -0.026329298740948335 },\n { x: -7.199999999993185e-8, y: 0.03460164939196195 },\n { x: -7.099999999993185e-8, y: 0.02878533358994842 },\n { x: -6.999999999993186e-8, y: 0.014592186664435796 },\n { x: -6.899999999993186e-8, y: -0.0013858611920607236 },\n { x: -6.799999999993187e-8, y: -0.020120241255477653 },\n { x: -6.699999999993187e-8, y: -0.01003516551571638 },\n { x: -6.599999999993188e-8, y: -0.009058619050661975 },\n { x: -6.499999999993188e-8, y: -0.004035245246231536 },\n { x: -6.399999999993188e-8, y: -0.014408928178812366 },\n { x: -6.299999999993189e-8, y: -0.03560678758186685 },\n { x: -6.199999999993189e-8, y: 0.02067392336292016 },\n { x: -6.09999999999319e-8, y: 0.037428992761616674 },\n { x: -5.99999999999319e-8, y: 0.007892352658770075 },\n { x: -5.89999999999319e-8, y: 0.02480034325562441 },\n { x: -5.7999999999931896e-8, y: -0.02561903890440075 },\n { x: -5.6999999999931894e-8, y: 0.007284029639539098 },\n { x: -5.599999999993189e-8, y: -0.006864914235189989 },\n { x: -5.499999999993189e-8, y: -0.017201528539497104 },\n { x: -5.399999999993189e-8, y: -0.03524246528429231 },\n { x: -5.2999999999931885e-8, y: 0.009212736585220583 },\n { x: -5.199999999993188e-8, y: 0.009936157695429387 },\n { x: -5.099999999993188e-8, y: -0.007880647660088674 },\n { x: -4.999999999993188e-8, y: -0.025925770229924334 },\n { x: -4.8999999999931875e-8, y: -0.016957676607607546 },\n { x: -4.799999999993187e-8, y: 0.010393739727449123 },\n { x: -4.699999999993187e-8, y: 0.01956307915249106 },\n { x: -4.599999999993187e-8, y: -0.04220906710971705 },\n { x: -4.4999999999931866e-8, y: -0.027667116945156348 },\n { x: -4.3999999999931864e-8, y: 0.014351862013379695 },\n { x: -4.299999999993186e-8, y: -0.01688050788669551 },\n { x: -4.199999999993186e-8, y: -0.021630213879493904 },\n { x: -4.099999999993186e-8, y: -0.03200662645269142 },\n { x: -3.9999999999931854e-8, y: 0.023918160189289488 },\n { x: -3.899999999993185e-8, y: 0.005884799273377132 },\n { x: -3.799999999993185e-8, y: 0.016028694625617252 },\n { x: -3.699999999993185e-8, y: 0.0074307327352187745 },\n { x: -3.5999999999931845e-8, y: 0.03290753689617773 },\n { x: -3.499999999993184e-8, y: -0.03783530876787333 },\n { x: -3.399999999993184e-8, y: -0.006709617522464693 },\n { x: -3.299999999993184e-8, y: -0.022905817596163565 },\n { x: -3.1999999999931836e-8, y: 0.0017145074007711698 },\n { x: -3.0999999999931833e-8, y: 0.012569166818043574 },\n { x: -2.999999999993183e-8, y: -0.03705526937061218 },\n { x: -2.8999999999931832e-8, y: -0.02869520746628896 },\n { x: -2.7999999999931833e-8, y: 0.025051957716505462 },\n { x: -2.6999999999931834e-8, y: 0.03271439109663386 },\n { x: -2.5999999999931835e-8, y: -0.008136759742715093 },\n { x: -2.4999999999931836e-8, y: -0.029999686307618574 },\n { x: -2.3999999999931837e-8, y: -0.009457858210204485 },\n { x: -2.2999999999931838e-8, y: -0.0235020022911492 },\n { x: -2.199999999993184e-8, y: 0.03545363699212244 },\n { x: -2.099999999993184e-8, y: -0.006624506349505804 },\n { x: -1.999999999993184e-8, y: 0.01972195983930522 },\n { x: -1.8999999999931842e-8, y: -0.018019588446823876 },\n { x: -1.7999999999931843e-8, y: 0.0279022326001525 },\n { x: -1.6999999999931844e-8, y: -0.037293869406612314 },\n { x: -1.5999999999931845e-8, y: 0.009912776034081342 },\n { x: -1.4999999999931846e-8, y: 0.03815086120980311 },\n { x: -1.3999999999931845e-8, y: 0.008300979552872052 },\n { x: -1.2999999999931844e-8, y: -0.006407387111170447 },\n { x: -1.1999999999931844e-8, y: -0.017236049532798867 },\n { x: -1.0999999999931843e-8, y: 0.004689459841539606 },\n { x: -9.999999999931842e-9, y: -0.00749374198766731 },\n { x: -8.999999999931841e-9, y: 0.02315467385521088 },\n { x: -7.99999999993184e-9, y: 0.017589298190448827 },\n { x: -6.999999999931841e-9, y: 0.03694156690958018 },\n { x: -5.999999999931841e-9, y: -0.00829628567179409 },\n { x: -4.999999999931841e-9, y: 0.020706206748506047 },\n { x: -3.999999999931841e-9, y: 0.010400605441179715 },\n { x: -2.9999999999318415e-9, y: 0.03244565863444435 },\n { x: -1.9999999999318417e-9, y: 0.0012047810277106509 },\n { x: -9.999999999318416e-10, y: -0.009529131808379759 },\n { x: 6.815844170345065e-20, y: 0.01733527160847571 },\n { x: 1.0000000000681585e-9, y: 0.04559779598351585 },\n { x: 2.0000000000681586e-9, y: 0.07160349371878574 },\n { x: 3.0000000000681584e-9, y: 0.08783108046973723 },\n { x: 4.000000000068158e-9, y: 0.12773950891731287 },\n { x: 5.000000000068158e-9, y: 0.10750473966362442 },\n { x: 6.000000000068158e-9, y: 0.1722172973853457 },\n { x: 7.000000000068158e-9, y: 0.2135957587464344 },\n { x: 8.000000000068159e-9, y: 0.2103006601275897 },\n { x: 9.00000000006816e-9, y: 0.24630267195398617 },\n { x: 1.000000000006816e-8, y: 0.25065479028254706 },\n { x: 1.100000000006816e-8, y: 0.32035371641487903 },\n { x: 1.2000000000068161e-8, y: 0.3144781070037487 },\n { x: 1.3000000000068162e-8, y: 0.36139572474206805 },\n { x: 1.4000000000068163e-8, y: 0.3579372088176165 },\n { x: 1.500000000006816e-8, y: 0.45230220028344786 },\n { x: 1.600000000006816e-8, y: 0.43409103373716157 },\n { x: 1.700000000006816e-8, y: 0.4693962636422275 },\n { x: 1.800000000006816e-8, y: 0.5051756485755463 },\n { x: 1.9000000000068158e-8, y: 0.5015876821813501 },\n { x: 2.0000000000068157e-8, y: 0.5773399887160102 },\n { x: 2.1000000000068156e-8, y: 0.5505828032595532 },\n { x: 2.2000000000068155e-8, y: 0.6178273493035895 },\n { x: 2.3000000000068154e-8, y: 0.6063375438950314 },\n { x: 2.4000000000068153e-8, y: 0.6836732895519223 },\n { x: 2.5000000000068152e-8, y: 0.71682672975598 },\n { x: 2.600000000006815e-8, y: 0.7418943000641285 },\n { x: 2.700000000006815e-8, y: 0.766764121927301 },\n { x: 2.800000000006815e-8, y: 0.748865600751028 },\n { x: 2.9000000000068148e-8, y: 0.8251459140947702 },\n { x: 3.000000000006815e-8, y: 0.8514758165924826 },\n { x: 3.100000000006815e-8, y: 0.8187773980832613 },\n { x: 3.2000000000068155e-8, y: 0.8678758840682784 },\n { x: 3.300000000006816e-8, y: 0.8833530966585573 },\n { x: 3.400000000006816e-8, y: 0.9132849864999247 },\n { x: 3.500000000006816e-8, y: 0.937231636904131 },\n { x: 3.6000000000068164e-8, y: 0.9819798072620206 },\n { x: 3.700000000006817e-8, y: 0.9816061146525373 },\n { x: 3.800000000006817e-8, y: 1.02431354480628 },\n { x: 3.900000000006817e-8, y: 1.1044911279668201 },\n { x: 4.0000000000068174e-8, y: 1.0902850601756604 },\n { x: 4.1000000000068176e-8, y: 1.1188857310355398 },\n { x: 4.200000000006818e-8, y: 1.1415582396103667 },\n { x: 4.300000000006818e-8, y: 1.1379388093453044 },\n { x: 4.400000000006818e-8, y: 1.1837722641169446 },\n { x: 4.5000000000068185e-8, y: 1.2283087278238718 },\n { x: 4.600000000006819e-8, y: 1.26508414596951 },\n { x: 4.700000000006819e-8, y: 1.295395440120118 },\n { x: 4.800000000006819e-8, y: 1.2696579825237537 },\n { x: 4.9000000000068195e-8, y: 1.3015144149145235 },\n { x: 5.00000000000682e-8, y: 1.3560999715462076 },\n { x: 5.10000000000682e-8, y: 1.364164677490993 },\n { x: 5.20000000000682e-8, y: 1.3696749179165426 },\n { x: 5.3000000000068204e-8, y: 1.4089949774653385 },\n { x: 5.4000000000068206e-8, y: 1.4440924489317122 },\n { x: 5.500000000006821e-8, y: 1.4584075769806717 },\n { x: 5.600000000006821e-8, y: 1.4930348030829683 },\n { x: 5.7000000000068213e-8, y: 1.4985596149910585 },\n { x: 5.8000000000068216e-8, y: 1.591644532032781 },\n { x: 5.900000000006822e-8, y: 1.6160661196984427 },\n { x: 6.000000000006822e-8, y: 1.6106429345108517 },\n { x: 6.100000000006822e-8, y: 1.6637378369996971 },\n { x: 6.200000000006821e-8, y: 1.6672039097753912 },\n { x: 6.300000000006821e-8, y: 1.6470164020386875 },\n { x: 6.40000000000682e-8, y: 1.72132886315127 },\n { x: 6.50000000000682e-8, y: 1.7175402711043017 },\n { x: 6.60000000000682e-8, y: 1.7396728078334815 },\n { x: 6.700000000006819e-8, y: 1.7672959364169838 },\n { x: 6.800000000006819e-8, y: 1.7713485346857474 },\n { x: 6.900000000006818e-8, y: 1.8057475417541893 },\n { x: 7.000000000006818e-8, y: 1.829469247402354 },\n { x: 7.100000000006817e-8, y: 1.8948911634912913 },\n { x: 7.200000000006817e-8, y: 1.8758493486494703 },\n { x: 7.300000000006816e-8, y: 1.9107897405746515 },\n { x: 7.400000000006816e-8, y: 1.950558126840004 },\n { x: 7.500000000006816e-8, y: 1.9775282740936975 },\n { x: 7.600000000006815e-8, y: 1.977213291981942 },\n { x: 7.700000000006815e-8, y: 2.023886490405293 },\n { x: 7.800000000006814e-8, y: 2.02239293082928 },\n { x: 7.900000000006814e-8, y: 2.0568489989045116 },\n { x: 8.000000000006813e-8, y: 2.0594832900906193 },\n { x: 8.100000000006813e-8, y: 2.12995351765209 },\n { x: 8.200000000006813e-8, y: 2.110904136924468 },\n { x: 8.300000000006812e-8, y: 2.1435001039992634 },\n { x: 8.400000000006812e-8, y: 2.1778976676693125 },\n { x: 8.500000000006811e-8, y: 2.185303937256203 },\n { x: 8.600000000006811e-8, y: 2.242847130351982 },\n { x: 8.70000000000681e-8, y: 2.268605430543055 },\n { x: 8.80000000000681e-8, y: 2.2643002847738183 },\n { x: 8.90000000000681e-8, y: 2.3221929151728995 },\n { x: 9.000000000006809e-8, y: 2.2995425440227586 },\n { x: 9.100000000006809e-8, y: 2.32819446156372 },\n { x: 9.200000000006808e-8, y: 2.3452879585157373 },\n { x: 9.300000000006808e-8, y: 2.3610164356770995 },\n { x: 9.400000000006807e-8, y: 2.413197406158945 },\n { x: 9.500000000006807e-8, y: 2.393253590720542 },\n { x: 9.600000000006807e-8, y: 2.447849826529251 },\n { x: 9.700000000006806e-8, y: 2.4767496840634893 },\n { x: 9.800000000006806e-8, y: 2.4742261324523263 },\n { x: 9.900000000006805e-8, y: 2.536938591755043 },\n { x: 1.0000000000006805e-7, y: 2.5200833348640637 },\n { x: 1.0100000000006804e-7, y: 2.5770250763161555 },\n { x: 1.0200000000006804e-7, y: 2.584950731375103 },\n { x: 1.0300000000006804e-7, y: 2.5838073872358875 },\n { x: 1.0400000000006803e-7, y: 2.631667929575248 },\n { x: 1.0500000000006803e-7, y: 2.6596649401494776 },\n { x: 1.0600000000006802e-7, y: 2.6329103424297156 },\n { x: 1.0700000000006802e-7, y: 2.7037087518923246 },\n { x: 1.0800000000006802e-7, y: 2.6670775070358506 },\n { x: 1.0900000000006801e-7, y: 2.6978313303605006 },\n { x: 1.10000000000068e-7, y: 2.755059710709874 },\n { x: 1.11000000000068e-7, y: 2.749202262835823 },\n { x: 1.12000000000068e-7, y: 2.79299475047997 },\n { x: 1.13000000000068e-7, y: 2.810230530294098 },\n { x: 1.1400000000006799e-7, y: 2.78880922503226 },\n { x: 1.1500000000006799e-7, y: 2.869807109944928 },\n { x: 1.1600000000006798e-7, y: 2.8777572803802594 },\n { x: 1.1700000000006798e-7, y: 2.8815018452559027 },\n { x: 1.1800000000006797e-7, y: 2.8755325151686555 },\n { x: 1.1900000000006797e-7, y: 2.905830323739118 },\n { x: 1.2000000000006796e-7, y: 2.9464738357158993 },\n { x: 1.2100000000006796e-7, y: 2.991581446645457 },\n { x: 1.2200000000006796e-7, y: 2.997052562083296 },\n { x: 1.2300000000006795e-7, y: 2.990961315281238 },\n { x: 1.2400000000006795e-7, y: 2.9845821077934853 },\n { x: 1.2500000000006794e-7, y: 3.013058560956058 },\n { x: 1.2600000000006794e-7, y: 3.0622430283652866 },\n { x: 1.2700000000006793e-7, y: 3.087426605521453 },\n { x: 1.2800000000006793e-7, y: 3.1095111383396206 },\n { x: 1.2900000000006793e-7, y: 3.084199975107459 },\n { x: 1.3000000000006792e-7, y: 3.127488116008965 },\n { x: 1.3100000000006792e-7, y: 3.150094382413969 },\n { x: 1.320000000000679e-7, y: 3.200017873088237 },\n { x: 1.330000000000679e-7, y: 3.2002378626863903 },\n { x: 1.340000000000679e-7, y: 3.221058355750686 },\n { x: 1.350000000000679e-7, y: 3.227614462711025 },\n { x: 1.360000000000679e-7, y: 3.2076376102360236 },\n { x: 1.370000000000679e-7, y: 3.269517899136106 },\n { x: 1.3800000000006789e-7, y: 3.277164485394785 },\n { x: 1.3900000000006788e-7, y: 3.32826518878089 },\n { x: 1.4000000000006788e-7, y: 3.3361230887439772 },\n { x: 1.4100000000006787e-7, y: 3.313932217343184 },\n { x: 1.4200000000006787e-7, y: 3.3379642854568816 },\n { x: 1.4300000000006787e-7, y: 3.3498041292968948 },\n { x: 1.4400000000006786e-7, y: 3.357219369672882 },\n { x: 1.4500000000006786e-7, y: 3.366706851551192 },\n { x: 1.4600000000006785e-7, y: 3.4199459421136247 },\n { x: 1.4700000000006785e-7, y: 3.416238405816887 },\n { x: 1.4800000000006784e-7, y: 3.407013009385149 },\n { x: 1.4900000000006784e-7, y: 3.4838754265193366 },\n { x: 1.5000000000006784e-7, y: 3.462493910181964 },\n { x: 1.5100000000006783e-7, y: 3.483945611319306 },\n { x: 1.5200000000006783e-7, y: 3.499965621261913 },\n { x: 1.5300000000006782e-7, y: 3.4942477146424538 },\n { x: 1.5400000000006782e-7, y: 3.564038317450229 },\n { x: 1.5500000000006781e-7, y: 3.527672795149435 },\n { x: 1.560000000000678e-7, y: 3.555876692335328 },\n { x: 1.570000000000678e-7, y: 3.6155525405815965 },\n { x: 1.580000000000678e-7, y: 3.601332369892053 },\n { x: 1.590000000000678e-7, y: 3.609442316303733 },\n { x: 1.600000000000678e-7, y: 3.6623500322214233 },\n { x: 1.610000000000678e-7, y: 3.684711964642669 },\n { x: 1.6200000000006778e-7, y: 3.6576976052199712 },\n { x: 1.6300000000006778e-7, y: 3.701532475303213 },\n { x: 1.6400000000006778e-7, y: 3.7109676530026414 },\n { x: 1.6500000000006777e-7, y: 3.725759508917418 },\n { x: 1.6600000000006777e-7, y: 3.7382593186558357 },\n { x: 1.6700000000006776e-7, y: 3.748891416720497 },\n { x: 1.6800000000006776e-7, y: 3.7423834296591307 },\n { x: 1.6900000000006775e-7, y: 3.784364177583826 },\n { x: 1.7000000000006775e-7, y: 3.7616413400291258 },\n { x: 1.7100000000006775e-7, y: 3.793011270865848 },\n { x: 1.7200000000006774e-7, y: 3.838271565864922 },\n { x: 1.7300000000006774e-7, y: 3.851660110036995 },\n { x: 1.7400000000006773e-7, y: 3.815896300368144 },\n { x: 1.7500000000006773e-7, y: 3.8712332263154465 },\n { x: 1.7600000000006772e-7, y: 3.8486642851532094 },\n { x: 1.7700000000006772e-7, y: 3.8622944630539453 },\n { x: 1.7800000000006772e-7, y: 3.9097680939520854 },\n { x: 1.790000000000677e-7, y: 3.9220439981314525 },\n { x: 1.800000000000677e-7, y: 3.945422097301458 },\n { x: 1.810000000000677e-7, y: 3.933796332138385 },\n { x: 1.820000000000677e-7, y: 3.970555841381823 },\n { x: 1.830000000000677e-7, y: 3.977434457774043 },\n { x: 1.840000000000677e-7, y: 3.9658959198982853 },\n { x: 1.8500000000006769e-7, y: 3.960452556347271 },\n { x: 1.8600000000006768e-7, y: 3.9984282659377 },\n { x: 1.8700000000006768e-7, y: 3.98660350661974 },\n { x: 1.8800000000006767e-7, y: 3.990519773055625 },\n { x: 1.8900000000006767e-7, y: 4.052249465615307 },\n { x: 1.9000000000006766e-7, y: 4.059364855404962 },\n { x: 1.9100000000006766e-7, y: 4.043962297468011 },\n { x: 1.9200000000006766e-7, y: 4.049092079453735 },\n { x: 1.9300000000006765e-7, y: 4.055881644700879 },\n { x: 1.9400000000006765e-7, y: 4.072328771627681 },\n { x: 1.9500000000006764e-7, y: 4.080507278351291 },\n { x: 1.9600000000006764e-7, y: 4.084051306875356 },\n { x: 1.9700000000006763e-7, y: 4.129206282534105 },\n { x: 1.9800000000006763e-7, y: 4.096340213513475 },\n { x: 1.9900000000006763e-7, y: 4.156542968671335 },\n { x: 2.0000000000006762e-7, y: 4.119429775233858 },\n { x: 2.0100000000006762e-7, y: 4.149390260909627 },\n { x: 2.020000000000676e-7, y: 4.144120499048146 },\n { x: 2.030000000000676e-7, y: 4.139791259105984 },\n { x: 2.040000000000676e-7, y: 4.196807481401228 },\n { x: 2.050000000000676e-7, y: 4.174475109243049 },\n { x: 2.060000000000676e-7, y: 4.187160718830028 },\n { x: 2.070000000000676e-7, y: 4.179711712649196 },\n { x: 2.080000000000676e-7, y: 4.201433196022256 },\n { x: 2.0900000000006758e-7, y: 4.26586933037637 },\n { x: 2.1000000000006758e-7, y: 4.253835518428927 },\n { x: 2.1100000000006757e-7, y: 4.218429863190106 },\n { x: 2.1200000000006757e-7, y: 4.26095358447011 },\n { x: 2.1300000000006757e-7, y: 4.2590443592689855 },\n { x: 2.1400000000006756e-7, y: 4.289996517255768 },\n { x: 2.1500000000006756e-7, y: 4.313056616043523 },\n { x: 2.1600000000006755e-7, y: 4.331979158283773 },\n { x: 2.1700000000006755e-7, y: 4.313387615221893 },\n { x: 2.1800000000006754e-7, y: 4.3445667568279625 },\n { x: 2.1900000000006754e-7, y: 4.293674920656978 },\n { x: 2.2000000000006754e-7, y: 4.3363937326020405 },\n { x: 2.2100000000006753e-7, y: 4.311975176686082 },\n { x: 2.2200000000006753e-7, y: 4.309277146105408 },\n { x: 2.2300000000006752e-7, y: 4.35379944540888 },\n { x: 2.2400000000006752e-7, y: 4.3575946258253335 },\n { x: 2.2500000000006751e-7, y: 4.402927128316672 },\n { x: 2.260000000000675e-7, y: 4.393840760035625 },\n { x: 2.270000000000675e-7, y: 4.4054221787463295 },\n { x: 2.280000000000675e-7, y: 4.365009812805271 },\n { x: 2.290000000000675e-7, y: 4.408350038096867 },\n { x: 2.300000000000675e-7, y: 4.3939073030095095 },\n { x: 2.310000000000675e-7, y: 4.374668327817958 },\n { x: 2.3200000000006748e-7, y: 4.377810381545066 },\n { x: 2.3300000000006748e-7, y: 4.432589162622251 },\n { x: 2.3400000000006748e-7, y: 4.4537937245520975 },\n { x: 2.3500000000006747e-7, y: 4.434739702125108 },\n { x: 2.3600000000006747e-7, y: 4.421869611511303 },\n { x: 2.3700000000006746e-7, y: 4.395968401989458 },\n { x: 2.3800000000006746e-7, y: 4.418283482201154 },\n { x: 2.3900000000006745e-7, y: 4.429114120101884 },\n { x: 2.400000000000675e-7, y: 4.475924250691162 },\n { x: 2.410000000000675e-7, y: 4.480597405421405 },\n { x: 2.420000000000675e-7, y: 4.471725459771187 },\n { x: 2.4300000000006754e-7, y: 4.4759920662868025 },\n { x: 2.4400000000006757e-7, y: 4.457466027302085 },\n { x: 2.450000000000676e-7, y: 4.51327554148812 },\n { x: 2.460000000000676e-7, y: 4.492173663035807 },\n { x: 2.4700000000006763e-7, y: 4.46175544488327 },\n { x: 2.4800000000006765e-7, y: 4.483580913840163 },\n { x: 2.490000000000677e-7, y: 4.4818737078426265 },\n { x: 2.500000000000677e-7, y: 4.483930252722769 },\n { x: 2.510000000000677e-7, y: 4.495049555509013 },\n { x: 2.5200000000006774e-7, y: 4.500884472325458 },\n { x: 2.5300000000006776e-7, y: 4.5449816917745265 },\n { x: 2.540000000000678e-7, y: 4.541621982329801 },\n { x: 2.550000000000678e-7, y: 4.568307805363606 },\n { x: 2.5600000000006783e-7, y: 4.5204329412829845 },\n { x: 2.5700000000006785e-7, y: 4.570754147203238 },\n { x: 2.580000000000679e-7, y: 4.524549336955163 },\n { x: 2.590000000000679e-7, y: 4.540395397127683 },\n { x: 2.600000000000679e-7, y: 4.518404095772062 },\n { x: 2.6100000000006794e-7, y: 4.5558226992527 },\n { x: 2.6200000000006796e-7, y: 4.587201244489122 },\n { x: 2.63000000000068e-7, y: 4.5364775317235715 },\n { x: 2.64000000000068e-7, y: 4.537434301357686 },\n { x: 2.6500000000006803e-7, y: 4.554480991663611 },\n { x: 2.6600000000006805e-7, y: 4.551959291547926 },\n { x: 2.670000000000681e-7, y: 4.546175409404218 },\n { x: 2.680000000000681e-7, y: 4.558067767220025 },\n { x: 2.690000000000681e-7, y: 4.562903822013282 },\n { x: 2.7000000000006814e-7, y: 4.593983329432042 },\n { x: 2.7100000000006816e-7, y: 4.6052625278532275 },\n { x: 2.720000000000682e-7, y: 4.545832854247038 },\n { x: 2.730000000000682e-7, y: 4.551427689365389 },\n { x: 2.7400000000006823e-7, y: 4.6168291457039405 },\n { x: 2.7500000000006825e-7, y: 4.5748588256552525 },\n { x: 2.760000000000683e-7, y: 4.611824980830878 },\n { x: 2.770000000000683e-7, y: 4.572758838954031 },\n { x: 2.780000000000683e-7, y: 4.579156007250689 },\n { x: 2.7900000000006834e-7, y: 4.568647565172117 },\n { x: 2.8000000000006836e-7, y: 4.621257394241068 },\n { x: 2.810000000000684e-7, y: 4.593231939640312 },\n { x: 2.820000000000684e-7, y: 4.5994994415856825 },\n { x: 2.8300000000006843e-7, y: 4.637039683269703 },\n { x: 2.8400000000006845e-7, y: 4.594394597053631 },\n { x: 2.850000000000685e-7, y: 4.560818851394454 },\n { x: 2.860000000000685e-7, y: 4.60029704671781 },\n { x: 2.870000000000685e-7, y: 4.553689847030158 },\n { x: 2.8800000000006854e-7, y: 4.5925048540724625 },\n { x: 2.8900000000006856e-7, y: 4.590618080030675 },\n { x: 2.900000000000686e-7, y: 4.576541496690467 },\n { x: 2.910000000000686e-7, y: 4.555565680735937 },\n { x: 2.9200000000006863e-7, y: 4.62188315577281 },\n { x: 2.9300000000006865e-7, y: 4.556238565404815 },\n { x: 2.940000000000687e-7, y: 4.570057311239993 },\n { x: 2.950000000000687e-7, y: 4.607741729428422 },\n { x: 2.960000000000687e-7, y: 4.6240193896352215 },\n { x: 2.9700000000006874e-7, y: 4.559360181850518 },\n { x: 2.9800000000006876e-7, y: 4.603544270929363 },\n { x: 2.990000000000688e-7, y: 4.572578516232343 },\n { x: 3.000000000000688e-7, y: 4.54867999290276 },\n { x: 3.0100000000006883e-7, y: 4.553428161610771 },\n { x: 3.0200000000006885e-7, y: 4.614163167171206 },\n { x: 3.030000000000689e-7, y: 4.546188708872833 },\n { x: 3.040000000000689e-7, y: 4.60454532264954 },\n { x: 3.050000000000689e-7, y: 4.5366359764470765 },\n { x: 3.0600000000006894e-7, y: 4.5647069396754 },\n { x: 3.0700000000006896e-7, y: 4.578690013699633 },\n { x: 3.08000000000069e-7, y: 4.588222764226879 },\n { x: 3.09000000000069e-7, y: 4.579926647975305 },\n { x: 3.1000000000006903e-7, y: 4.576679529258076 },\n { x: 3.1100000000006905e-7, y: 4.525714215195552 },\n { x: 3.120000000000691e-7, y: 4.548322182573998 },\n { x: 3.130000000000691e-7, y: 4.532768010071163 },\n { x: 3.140000000000691e-7, y: 4.568846728047218 },\n { x: 3.1500000000006914e-7, y: 4.525509620709712 },\n { x: 3.1600000000006916e-7, y: 4.550931577579017 },\n { x: 3.170000000000692e-7, y: 4.540242891548967 },\n { x: 3.180000000000692e-7, y: 4.5521983862480315 },\n { x: 3.1900000000006923e-7, y: 4.497398701261551 },\n { x: 3.2000000000006925e-7, y: 4.5359335018999305 },\n { x: 3.210000000000693e-7, y: 4.537962182929126 },\n { x: 3.220000000000693e-7, y: 4.5241014561161474 },\n { x: 3.230000000000693e-7, y: 4.551489858748293 },\n { x: 3.2400000000006934e-7, y: 4.536010243465154 },\n { x: 3.2500000000006936e-7, y: 4.5386710687092195 },\n { x: 3.260000000000694e-7, y: 4.478118828533177 },\n { x: 3.270000000000694e-7, y: 4.521792084800384 },\n { x: 3.2800000000006943e-7, y: 4.501049680494854 },\n { x: 3.2900000000006945e-7, y: 4.498592547630318 },\n { x: 3.300000000000695e-7, y: 4.488482842532222 },\n { x: 3.310000000000695e-7, y: 4.441156767896616 },\n { x: 3.320000000000695e-7, y: 4.444054134394553 },\n { x: 3.3300000000006954e-7, y: 4.466584416902529 },\n { x: 3.3400000000006956e-7, y: 4.463800509045774 },\n { x: 3.350000000000696e-7, y: 4.464058505028582 },\n { x: 3.360000000000696e-7, y: 4.41443460783856 },\n { x: 3.3700000000006963e-7, y: 4.4398327174313685 },\n { x: 3.3800000000006965e-7, y: 4.468418072799661 },\n { x: 3.3900000000006967e-7, y: 4.458678231500451 },\n { x: 3.400000000000697e-7, y: 4.411121228444063 },\n { x: 3.410000000000697e-7, y: 4.454837914375734 },\n { x: 3.4200000000006974e-7, y: 4.381677695269781 },\n { x: 3.4300000000006976e-7, y: 4.389204344577293 },\n { x: 3.440000000000698e-7, y: 4.398818597503304 },\n { x: 3.450000000000698e-7, y: 4.400713260814368 },\n { x: 3.4600000000006983e-7, y: 4.352153293845595 },\n { x: 3.4700000000006985e-7, y: 4.392654280211924 },\n { x: 3.4800000000006987e-7, y: 4.3659850342792375 },\n { x: 3.490000000000699e-7, y: 4.36736284837299 },\n { x: 3.500000000000699e-7, y: 4.36500353689255 },\n { x: 3.5100000000006994e-7, y: 4.350601346933341 },\n { x: 3.5200000000006996e-7, y: 4.3552665070237815 },\n { x: 3.5300000000007e-7, y: 4.37314943151817 },\n { x: 3.5400000000007e-7, y: 4.344213285069556 },\n { x: 3.5500000000007003e-7, y: 4.357570821997053 },\n { x: 3.5600000000007005e-7, y: 4.3280910112104705 },\n { x: 3.5700000000007007e-7, y: 4.296926124294212 },\n { x: 3.580000000000701e-7, y: 4.283150978167562 },\n { x: 3.590000000000701e-7, y: 4.269804944259307 },\n { x: 3.6000000000007014e-7, y: 4.286035855681393 },\n { x: 3.6100000000007016e-7, y: 4.297874020004684 },\n { x: 3.620000000000702e-7, y: 4.235710208198241 },\n { x: 3.630000000000702e-7, y: 4.268885191015169 },\n { x: 3.6400000000007023e-7, y: 4.2224875113344105 },\n { x: 3.6500000000007025e-7, y: 4.270277524606534 },\n { x: 3.6600000000007027e-7, y: 4.239989002206763 },\n { x: 3.670000000000703e-7, y: 4.226840189057081 },\n { x: 3.680000000000703e-7, y: 4.1940128726361445 },\n { x: 3.6900000000007034e-7, y: 4.181086371816021 },\n { x: 3.7000000000007036e-7, y: 4.238774199152604 },\n { x: 3.710000000000704e-7, y: 4.1978816035202255 },\n { x: 3.720000000000704e-7, y: 4.185784719111473 },\n { x: 3.7300000000007043e-7, y: 4.197477154050938 },\n { x: 3.7400000000007045e-7, y: 4.1578642609820795 },\n { x: 3.7500000000007047e-7, y: 4.187135262137642 },\n { x: 3.760000000000705e-7, y: 4.1628653672803235 },\n { x: 3.770000000000705e-7, y: 4.146487976908809 },\n { x: 3.7800000000007054e-7, y: 4.118683294656924 },\n { x: 3.7900000000007056e-7, y: 4.080779770378712 },\n { x: 3.800000000000706e-7, y: 4.13584263344365 },\n { x: 3.810000000000706e-7, y: 4.0746549723826915 },\n { x: 3.8200000000007063e-7, y: 4.1198208873236375 },\n { x: 3.8300000000007065e-7, y: 4.110721578932751 },\n { x: 3.8400000000007067e-7, y: 4.061832412772853 },\n { x: 3.850000000000707e-7, y: 4.077033118807877 },\n { x: 3.860000000000707e-7, y: 4.021584327166643 },\n { x: 3.8700000000007074e-7, y: 4.052643137409191 },\n { x: 3.8800000000007076e-7, y: 4.053730696000853 },\n { x: 3.890000000000708e-7, y: 3.98329033004593 },\n { x: 3.900000000000708e-7, y: 3.989220939647749 },\n { x: 3.9100000000007083e-7, y: 4.011669525237745 },\n { x: 3.9200000000007085e-7, y: 3.9593185686549672 },\n { x: 3.9300000000007087e-7, y: 3.95800337748763 },\n { x: 3.940000000000709e-7, y: 3.9733521729232164 },\n { x: 3.950000000000709e-7, y: 3.9290226207454073 },\n { x: 3.9600000000007094e-7, y: 3.950804485092987 },\n { x: 3.9700000000007096e-7, y: 3.946347337740705 },\n { x: 3.98000000000071e-7, y: 3.89513188893136 },\n { x: 3.99000000000071e-7, y: 3.9041663835218716 },\n { x: 4.0000000000007103e-7, y: 3.9054122513054814 },\n { x: 4.0100000000007105e-7, y: 3.878006800142969 },\n { x: 4.0200000000007107e-7, y: 3.8422361087703996 },\n { x: 4.030000000000711e-7, y: 3.8250752024171355 },\n { x: 4.040000000000711e-7, y: 3.8076853470895156 },\n { x: 4.0500000000007114e-7, y: 3.801939608916005 },\n { x: 4.0600000000007116e-7, y: 3.8506114375860516 },\n { x: 4.070000000000712e-7, y: 3.8210576203255022 },\n { x: 4.080000000000712e-7, y: 3.7931229622809077 },\n { x: 4.0900000000007123e-7, y: 3.790331101077256 },\n { x: 4.1000000000007125e-7, y: 3.767494508124199 },\n { x: 4.1100000000007127e-7, y: 3.745255681923489 },\n { x: 4.120000000000713e-7, y: 3.7692888995718996 },\n { x: 4.130000000000713e-7, y: 3.728659757584573 },\n { x: 4.1400000000007134e-7, y: 3.705062353961188 },\n { x: 4.1500000000007136e-7, y: 3.7412144824398537 },\n { x: 4.160000000000714e-7, y: 3.7044552069575523 },\n { x: 4.170000000000714e-7, y: 3.6543403228267097 },\n { x: 4.180000000000714e-7, y: 3.681118348886848 },\n { x: 4.1900000000007145e-7, y: 3.638090164167694 },\n { x: 4.2000000000007147e-7, y: 3.6096363651985537 },\n { x: 4.210000000000715e-7, y: 3.6313689690619024 },\n { x: 4.220000000000715e-7, y: 3.589192689298439 },\n { x: 4.2300000000007154e-7, y: 3.5708728299880823 },\n { x: 4.2400000000007156e-7, y: 3.61689610554449 },\n { x: 4.250000000000716e-7, y: 3.575472827657053 },\n { x: 4.260000000000716e-7, y: 3.55766854710107 },\n { x: 4.270000000000716e-7, y: 3.5741776711902866 },\n { x: 4.2800000000007165e-7, y: 3.538132833582119 },\n { x: 4.2900000000007167e-7, y: 3.4871676961370395 },\n { x: 4.300000000000717e-7, y: 3.5452386959853306 },\n { x: 4.310000000000717e-7, y: 3.4743088019091375 },\n { x: 4.3200000000007174e-7, y: 3.453869113849182 },\n { x: 4.3300000000007176e-7, y: 3.463199173447619 },\n { x: 4.340000000000718e-7, y: 3.460409975132845 },\n { x: 4.350000000000718e-7, y: 3.405961091318614 },\n { x: 4.360000000000718e-7, y: 3.415897137420462 },\n { x: 4.3700000000007185e-7, y: 3.3720287059449463 },\n { x: 4.3800000000007187e-7, y: 3.3587167637655786 },\n { x: 4.390000000000719e-7, y: 3.3850777860967054 },\n { x: 4.400000000000719e-7, y: 3.3695773790239647 },\n { x: 4.4100000000007194e-7, y: 3.350720204294603 },\n { x: 4.4200000000007196e-7, y: 3.346654006398577 },\n { x: 4.43000000000072e-7, y: 3.3469779959293007 },\n { x: 4.44000000000072e-7, y: 3.297302666062012 },\n { x: 4.45000000000072e-7, y: 3.3120016274359982 },\n { x: 4.4600000000007205e-7, y: 3.25090454348141 },\n { x: 4.4700000000007207e-7, y: 3.2301864599922174 },\n { x: 4.480000000000721e-7, y: 3.256211785796371 },\n { x: 4.490000000000721e-7, y: 3.214903914002878 },\n { x: 4.5000000000007214e-7, y: 3.2426371661344584 },\n { x: 4.5100000000007216e-7, y: 3.2317129221506007 },\n { x: 4.520000000000722e-7, y: 3.1851992692344497 },\n { x: 4.530000000000722e-7, y: 3.1422962816825724 },\n { x: 4.540000000000722e-7, y: 3.1743721048385365 },\n { x: 4.5500000000007225e-7, y: 3.123842337997481 },\n { x: 4.5600000000007227e-7, y: 3.1153628840015464 },\n { x: 4.570000000000723e-7, y: 3.0738754084491346 },\n { x: 4.580000000000723e-7, y: 3.0889875023203968 },\n { x: 4.5900000000007234e-7, y: 3.0403022408972413 },\n { x: 4.6000000000007236e-7, y: 3.084524623874236 },\n { x: 4.610000000000724e-7, y: 3.0593402484204013 },\n { x: 4.620000000000724e-7, y: 3.0035225259672442 },\n { x: 4.630000000000724e-7, y: 3.021796815788875 },\n { x: 4.6400000000007245e-7, y: 3.017220968937486 },\n { x: 4.6500000000007247e-7, y: 3.0092150035518004 },\n { x: 4.660000000000725e-7, y: 2.9827318146842674 },\n { x: 4.670000000000725e-7, y: 2.9540128382751765 },\n { x: 4.6800000000007254e-7, y: 2.9545588348991147 },\n { x: 4.6900000000007256e-7, y: 2.9109049445043733 },\n { x: 4.700000000000726e-7, y: 2.9045013973097187 },\n { x: 4.710000000000726e-7, y: 2.9185712173653084 },\n { x: 4.720000000000726e-7, y: 2.8916238018535836 },\n { x: 4.7300000000007265e-7, y: 2.8823619788153008 },\n { x: 4.7400000000007267e-7, y: 2.8266556570333594 },\n { x: 4.750000000000727e-7, y: 2.833761091547332 },\n { x: 4.760000000000727e-7, y: 2.782888997643641 },\n { x: 4.770000000000727e-7, y: 2.7993782354906847 },\n { x: 4.780000000000727e-7, y: 2.7866835281460696 },\n { x: 4.790000000000726e-7, y: 2.72659697091339 },\n { x: 4.800000000000726e-7, y: 2.7174193433800875 },\n { x: 4.810000000000726e-7, y: 2.6800611691037917 },\n { x: 4.820000000000725e-7, y: 2.726360246619215 },\n { x: 4.830000000000725e-7, y: 2.6753912973644516 },\n { x: 4.840000000000725e-7, y: 2.664223533398994 },\n { x: 4.850000000000724e-7, y: 2.6399974723761503 },\n { x: 4.860000000000724e-7, y: 2.6499838475832704 },\n { x: 4.870000000000724e-7, y: 2.585691517154935 },\n { x: 4.880000000000723e-7, y: 2.5977791165376307 },\n { x: 4.890000000000723e-7, y: 2.573598463798158 },\n { x: 4.900000000000723e-7, y: 2.6021213916319286 },\n { x: 4.910000000000723e-7, y: 2.5413761024074377 },\n { x: 4.920000000000722e-7, y: 2.556022333034545 },\n { x: 4.930000000000722e-7, y: 2.4801506528995945 },\n { x: 4.940000000000722e-7, y: 2.5127444207031444 },\n { x: 4.950000000000721e-7, y: 2.4506561227748533 },\n { x: 4.960000000000721e-7, y: 2.4871722464600383 },\n { x: 4.970000000000721e-7, y: 2.4480153017298587 },\n { x: 4.98000000000072e-7, y: 2.390010024968104 },\n { x: 4.99000000000072e-7, y: 2.3875016166300354 },\n { x: 5.00000000000072e-7, y: 2.3974305433342855 },\n { x: 5.010000000000719e-7, y: 2.3804525797349534 },\n { x: 5.020000000000719e-7, y: 2.319847501668554 },\n { x: 5.030000000000719e-7, y: 2.354606412231442 },\n { x: 5.040000000000719e-7, y: 2.2913726624483135 },\n { x: 5.050000000000718e-7, y: 2.3331341602784237 },\n { x: 5.060000000000718e-7, y: 2.2693402371147453 },\n { x: 5.070000000000718e-7, y: 2.2723088948853416 },\n { x: 5.080000000000717e-7, y: 2.2219370098681503 },\n { x: 5.090000000000717e-7, y: 2.2335900519277834 },\n { x: 5.100000000000717e-7, y: 2.248182551707964 },\n { x: 5.110000000000716e-7, y: 2.1732525739894593 },\n { x: 5.120000000000716e-7, y: 2.1713339937460554 },\n { x: 5.130000000000716e-7, y: 2.1404041291143674 },\n { x: 5.140000000000715e-7, y: 2.1607497105837776 },\n { x: 5.150000000000715e-7, y: 2.1326878357989525 },\n { x: 5.160000000000715e-7, y: 2.111513448282211 },\n { x: 5.170000000000715e-7, y: 2.0593831863297587 },\n { x: 5.180000000000714e-7, y: 2.0375872722830493 },\n { x: 5.190000000000714e-7, y: 2.0686457446185154 },\n { x: 5.200000000000714e-7, y: 2.0223102152902546 },\n { x: 5.210000000000713e-7, y: 2.032649093071548 },\n { x: 5.220000000000713e-7, y: 2.019768464909469 },\n { x: 5.230000000000713e-7, y: 2.0095400563561614 },\n { x: 5.240000000000712e-7, y: 1.9777441852768034 },\n { x: 5.250000000000712e-7, y: 1.9197327020510637 },\n { x: 5.260000000000712e-7, y: 1.9478427678526091 },\n { x: 5.270000000000711e-7, y: 1.8643096729473774 },\n { x: 5.280000000000711e-7, y: 1.9199884602456652 },\n { x: 5.290000000000711e-7, y: 1.8614442042826362 },\n { x: 5.30000000000071e-7, y: 1.828447341067436 },\n { x: 5.31000000000071e-7, y: 1.83568283443109 },\n { x: 5.32000000000071e-7, y: 1.819083068860657 },\n { x: 5.33000000000071e-7, y: 1.76929210426416 },\n { x: 5.340000000000709e-7, y: 1.8060127684242715 },\n { x: 5.350000000000709e-7, y: 1.7644534399085456 },\n { x: 5.360000000000709e-7, y: 1.7071802357662391 },\n { x: 5.370000000000708e-7, y: 1.729182684014748 },\n { x: 5.380000000000708e-7, y: 1.707822739368085 },\n { x: 5.390000000000708e-7, y: 1.6503470105866342 },\n { x: 5.400000000000707e-7, y: 1.6790513826683995 },\n { x: 5.410000000000707e-7, y: 1.6770004914206622 },\n { x: 5.420000000000707e-7, y: 1.6446221785271975 },\n { x: 5.430000000000707e-7, y: 1.6262076843646684 },\n { x: 5.440000000000706e-7, y: 1.581388679998766 },\n { x: 5.450000000000706e-7, y: 1.572271379606089 },\n { x: 5.460000000000706e-7, y: 1.564148898597291 },\n { x: 5.470000000000705e-7, y: 1.547681152243796 },\n { x: 5.480000000000705e-7, y: 1.47384020638136 },\n { x: 5.490000000000705e-7, y: 1.504440711939198 },\n { x: 5.500000000000704e-7, y: 1.4455278717686377 },\n { x: 5.510000000000704e-7, y: 1.468981363814639 },\n { x: 5.520000000000704e-7, y: 1.4020354328610296 },\n { x: 5.530000000000703e-7, y: 1.4477540019129607 },\n { x: 5.540000000000703e-7, y: 1.4270481405880733 },\n { x: 5.550000000000703e-7, y: 1.3895567898591026 },\n { x: 5.560000000000703e-7, y: 1.3912841713839703 },\n { x: 5.570000000000702e-7, y: 1.3297641154545967 },\n { x: 5.580000000000702e-7, y: 1.3280987817611685 },\n { x: 5.590000000000702e-7, y: 1.2654478156955729 },\n { x: 5.600000000000701e-7, y: 1.2567090185435266 },\n { x: 5.610000000000701e-7, y: 1.2471258939365573 },\n { x: 5.620000000000701e-7, y: 1.2552568807593996 },\n { x: 5.6300000000007e-7, y: 1.1943193467686406 },\n { x: 5.6400000000007e-7, y: 1.2373458429755204 },\n { x: 5.6500000000007e-7, y: 1.2255213327562549 },\n { x: 5.660000000000699e-7, y: 1.1400154666484812 },\n { x: 5.670000000000699e-7, y: 1.1426882597845875 },\n { x: 5.680000000000699e-7, y: 1.1113362896104515 },\n { x: 5.690000000000699e-7, y: 1.080666080249789 },\n { x: 5.700000000000698e-7, y: 1.0568535903500327 },\n { x: 5.710000000000698e-7, y: 1.0879369877265455 },\n { x: 5.720000000000698e-7, y: 1.071060524334522 },\n { x: 5.730000000000697e-7, y: 1.0413648554555746 },\n { x: 5.740000000000697e-7, y: 1.0142338732633065 },\n { x: 5.750000000000697e-7, y: 0.9891672021444043 },\n { x: 5.760000000000696e-7, y: 0.974548560741885 },\n { x: 5.770000000000696e-7, y: 0.9326181249932587 },\n { x: 5.780000000000696e-7, y: 0.9600504528685031 },\n { x: 5.790000000000695e-7, y: 0.9490020824901222 },\n { x: 5.800000000000695e-7, y: 0.9066762958557413 },\n { x: 5.810000000000695e-7, y: 0.8608999029163629 },\n { x: 5.820000000000695e-7, y: 0.8650154914689567 },\n { x: 5.830000000000694e-7, y: 0.8425611266837111 },\n { x: 5.840000000000694e-7, y: 0.8088135816402537 },\n { x: 5.850000000000694e-7, y: 0.8386555368288905 },\n { x: 5.860000000000693e-7, y: 0.7784250875475518 },\n { x: 5.870000000000693e-7, y: 0.8019386259248096 },\n { x: 5.880000000000693e-7, y: 0.7260998002339443 },\n { x: 5.890000000000692e-7, y: 0.7473931078806977 },\n { x: 5.900000000000692e-7, y: 0.71992333530566 },\n { x: 5.910000000000692e-7, y: 0.7302826146038286 },\n { x: 5.920000000000691e-7, y: 0.6944557914381496 },\n { x: 5.930000000000691e-7, y: 0.6275880543972894 },\n { x: 5.940000000000691e-7, y: 0.6274911538691162 },\n { x: 5.950000000000691e-7, y: 0.5825310229623206 },\n { x: 5.96000000000069e-7, y: 0.6263243670700657 },\n { x: 5.97000000000069e-7, y: 0.5602519834168201 },\n { x: 5.98000000000069e-7, y: 0.5420254573767047 },\n { x: 5.990000000000689e-7, y: 0.5642410775914146 },\n { x: 6.000000000000689e-7, y: 0.5233167413466189 },\n { x: 6.010000000000689e-7, y: 0.5414136883192964 },\n { x: 6.020000000000688e-7, y: 0.45289178893868004 },\n { x: 6.030000000000688e-7, y: 0.4426813549638022 },\n { x: 6.040000000000688e-7, y: 0.4310099626745463 },\n { x: 6.050000000000687e-7, y: 0.4692582408978895 },\n { x: 6.060000000000687e-7, y: 0.3901201542415163 },\n { x: 6.070000000000687e-7, y: 0.3606987140700868 },\n { x: 6.080000000000687e-7, y: 0.38664029110287096 },\n { x: 6.090000000000686e-7, y: 0.354170505759941 },\n { x: 6.100000000000686e-7, y: 0.3474385661448188 },\n { x: 6.110000000000686e-7, y: 0.2875469324482121 },\n { x: 6.120000000000685e-7, y: 0.2812112082816194 },\n { x: 6.130000000000685e-7, y: 0.2832842675852578 },\n { x: 6.140000000000685e-7, y: 0.2824878207627931 },\n { x: 6.150000000000684e-7, y: 0.22885822810543843 },\n { x: 6.160000000000684e-7, y: 0.2153431121452024 },\n { x: 6.170000000000684e-7, y: 0.2362758548632193 },\n { x: 6.180000000000683e-7, y: 0.1999284052843285 },\n { x: 6.190000000000683e-7, y: 0.19607407417239414 },\n { x: 6.200000000000683e-7, y: 0.12373481557665877 },\n { x: 6.210000000000683e-7, y: 0.16367069560413128 },\n { x: 6.220000000000682e-7, y: 0.12725656868652202 },\n { x: 6.230000000000682e-7, y: 0.10684690202173974 },\n { x: 6.240000000000682e-7, y: 0.07068768143158324 },\n { x: 6.250000000000681e-7, y: 0.06511404415673 },\n { x: 6.260000000000681e-7, y: 0.026735221709894213 },\n { x: 6.270000000000681e-7, y: 0.024486353925565477 },\n { x: 6.28000000000068e-7, y: -0.015545959623921524 },\n { x: 6.29000000000068e-7, y: 0.000314756325871534 },\n { x: 6.30000000000068e-7, y: 0.000021923407494166963 },\n { x: 6.310000000000679e-7, y: -0.017461737481183043 },\n { x: 6.320000000000679e-7, y: -0.051157078466407366 },\n { x: 6.330000000000679e-7, y: -0.04944341243757768 },\n { x: 6.340000000000679e-7, y: -0.1046030080020188 },\n { x: 6.350000000000678e-7, y: -0.12807686328454046 },\n { x: 6.360000000000678e-7, y: -0.16248484696751042 },\n { x: 6.370000000000678e-7, y: -0.13744640242652906 },\n { x: 6.380000000000677e-7, y: -0.17703964717898313 },\n { x: 6.390000000000677e-7, y: -0.16670634202914192 },\n { x: 6.400000000000677e-7, y: -0.18660880388708884 },\n { x: 6.410000000000676e-7, y: -0.23627716610533803 },\n { x: 6.420000000000676e-7, y: -0.21056096530616258 },\n { x: 6.430000000000676e-7, y: -0.2501752670645122 },\n { x: 6.440000000000675e-7, y: -0.31951595038281894 },\n { x: 6.450000000000675e-7, y: -0.2812287199006149 },\n { x: 6.460000000000675e-7, y: -0.31788768310067755 },\n { x: 6.470000000000675e-7, y: -0.32301869887910484 },\n { x: 6.480000000000674e-7, y: -0.3826876872739434 },\n { x: 6.490000000000674e-7, y: -0.34959191521222666 },\n { x: 6.500000000000674e-7, y: -0.37131893413357375 },\n { x: 6.510000000000673e-7, y: -0.37564253594002406 },\n { x: 6.520000000000673e-7, y: -0.4313685153394282 },\n { x: 6.530000000000673e-7, y: -0.44488903050817347 },\n { x: 6.540000000000672e-7, y: -0.485258748423778 },\n { x: 6.550000000000672e-7, y: -0.4712961112986434 },\n { x: 6.560000000000672e-7, y: -0.46570857363252427 },\n { x: 6.570000000000671e-7, y: -0.4889915086639795 },\n { x: 6.580000000000671e-7, y: -0.543516887596962 },\n { x: 6.590000000000671e-7, y: -0.5497461036875846 },\n { x: 6.600000000000671e-7, y: -0.5721096585783956 },\n { x: 6.61000000000067e-7, y: -0.568278399244334 },\n { x: 6.62000000000067e-7, y: -0.6113755072534441 },\n { x: 6.63000000000067e-7, y: -0.6446515652219412 },\n { x: 6.640000000000669e-7, y: -0.6520441039141067 },\n { x: 6.650000000000669e-7, y: -0.6467486939956133 },\n { x: 6.660000000000669e-7, y: -0.632958574919273 },\n { x: 6.670000000000668e-7, y: -0.7156466009673889 },\n { x: 6.680000000000668e-7, y: -0.6736079815846527 },\n { x: 6.690000000000668e-7, y: -0.7239291866197504 },\n { x: 6.700000000000667e-7, y: -0.7260301243793009 },\n { x: 6.710000000000667e-7, y: -0.7649741962455779 },\n { x: 6.720000000000667e-7, y: -0.7876564131806228 },\n { x: 6.730000000000667e-7, y: -0.791394149235758 },\n { x: 6.740000000000666e-7, y: -0.8197469715588154 },\n { x: 6.750000000000666e-7, y: -0.8477123877921675 },\n { x: 6.760000000000666e-7, y: -0.8303858148050725 },\n { x: 6.770000000000665e-7, y: -0.8323439235252145 },\n { x: 6.780000000000665e-7, y: -0.8334321948323198 },\n { x: 6.790000000000665e-7, y: -0.9003503610127871 },\n { x: 6.800000000000664e-7, y: -0.8995780213795597 },\n { x: 6.810000000000664e-7, y: -0.8954076557687466 },\n { x: 6.820000000000664e-7, y: -0.9240675928928158 },\n { x: 6.830000000000663e-7, y: -0.931662499588955 },\n { x: 6.840000000000663e-7, y: -0.9477081686012161 },\n { x: 6.850000000000663e-7, y: -1.0070930413776746 },\n { x: 6.860000000000663e-7, y: -0.9738117518142747 },\n { x: 6.870000000000662e-7, y: -0.9944927034675656 },\n { x: 6.880000000000662e-7, y: -1.0301441996220406 },\n { x: 6.890000000000662e-7, y: -1.0543073291520935 },\n { x: 6.900000000000661e-7, y: -1.061228226149279 },\n { x: 6.910000000000661e-7, y: -1.0532320129572157 },\n { x: 6.920000000000661e-7, y: -1.1285361100406788 },\n { x: 6.93000000000066e-7, y: -1.121892254856008 },\n { x: 6.94000000000066e-7, y: -1.1254009447679563 },\n { x: 6.95000000000066e-7, y: -1.1474053143088307 },\n { x: 6.96000000000066e-7, y: -1.1819284352207882 },\n { x: 6.970000000000659e-7, y: -1.170375838791766 },\n { x: 6.980000000000659e-7, y: -1.1659376718204282 },\n { x: 6.990000000000659e-7, y: -1.1985586289333732 },\n { x: 7.000000000000658e-7, y: -1.2499434800209763 },\n { x: 7.010000000000658e-7, y: -1.2677655112804196 },\n { x: 7.020000000000658e-7, y: -1.2342547119576157 },\n { x: 7.030000000000657e-7, y: -1.2899872636301766 },\n { x: 7.040000000000657e-7, y: -1.28964351308095 },\n { x: 7.050000000000657e-7, y: -1.328726839544997 },\n { x: 7.060000000000656e-7, y: -1.2762797594448783 },\n { x: 7.070000000000656e-7, y: -1.2951674220098355 },\n { x: 7.080000000000656e-7, y: -1.3201791348232343 },\n { x: 7.090000000000655e-7, y: -1.319972918897219 },\n { x: 7.100000000000655e-7, y: -1.3598193206254197 },\n { x: 7.110000000000655e-7, y: -1.3781355841807592 },\n { x: 7.120000000000655e-7, y: -1.3972533532709528 },\n { x: 7.130000000000654e-7, y: -1.396860697375187 },\n { x: 7.140000000000654e-7, y: -1.410304619824219 },\n { x: 7.150000000000654e-7, y: -1.4141963752649322 },\n { x: 7.160000000000653e-7, y: -1.4842972321676648 },\n { x: 7.170000000000653e-7, y: -1.4494901953244637 },\n { x: 7.180000000000653e-7, y: -1.4521703528655414 },\n { x: 7.190000000000652e-7, y: -1.4850233543540792 },\n { x: 7.200000000000652e-7, y: -1.4866179839955078 },\n { x: 7.210000000000652e-7, y: -1.5353383039505737 },\n { x: 7.220000000000651e-7, y: -1.5717463464532468 },\n { x: 7.230000000000651e-7, y: -1.5362570972320952 },\n { x: 7.240000000000651e-7, y: -1.5725372396688504 },\n { x: 7.250000000000651e-7, y: -1.586537427055434 },\n { x: 7.26000000000065e-7, y: -1.6040476669460735 },\n { x: 7.27000000000065e-7, y: -1.5772373292020172 },\n { x: 7.28000000000065e-7, y: -1.6373771945858209 },\n { x: 7.290000000000649e-7, y: -1.6671523434416033 },\n { x: 7.300000000000649e-7, y: -1.6537152168496216 },\n { x: 7.310000000000649e-7, y: -1.679204260122909 },\n { x: 7.320000000000648e-7, y: -1.644631906347282 },\n { x: 7.330000000000648e-7, y: -1.6979930526048614 },\n { x: 7.340000000000648e-7, y: -1.7412339724948869 },\n { x: 7.350000000000647e-7, y: -1.721147801627306 },\n { x: 7.360000000000647e-7, y: -1.735086720584018 },\n { x: 7.370000000000647e-7, y: -1.7246350604220912 },\n { x: 7.380000000000647e-7, y: -1.787684334708181 },\n { x: 7.390000000000646e-7, y: -1.7878400578387499 },\n { x: 7.400000000000646e-7, y: -1.8011118045587209 },\n { x: 7.410000000000646e-7, y: -1.80514729127611 },\n { x: 7.420000000000645e-7, y: -1.803973588079188 },\n { x: 7.430000000000645e-7, y: -1.8140088435190584 },\n { x: 7.440000000000645e-7, y: -1.8319034814867554 },\n { x: 7.450000000000644e-7, y: -1.8263356145134895 },\n { x: 7.460000000000644e-7, y: -1.9025157358889555 },\n { x: 7.470000000000644e-7, y: -1.9027662637009124 },\n { x: 7.480000000000643e-7, y: -1.8903096975887788 },\n { x: 7.490000000000643e-7, y: -1.9368445605793223 },\n { x: 7.500000000000643e-7, y: -1.9428337523967931 },\n { x: 7.510000000000643e-7, y: -1.936346029040406 },\n { x: 7.520000000000642e-7, y: -1.9660058896932944 },\n { x: 7.530000000000642e-7, y: -1.932559936623179 },\n { x: 7.540000000000642e-7, y: -1.9297911021861553 },\n { x: 7.550000000000641e-7, y: -1.9915597854807727 },\n { x: 7.560000000000641e-7, y: -2.014818577523462 },\n { x: 7.570000000000641e-7, y: -1.9749619284730717 },\n { x: 7.58000000000064e-7, y: -2.03789763369127 },\n { x: 7.59000000000064e-7, y: -2.0606302574813284 },\n { x: 7.60000000000064e-7, y: -2.0183192949514157 },\n { x: 7.61000000000064e-7, y: -2.021015311347985 },\n { x: 7.620000000000639e-7, y: -2.064119354946641 },\n { x: 7.630000000000639e-7, y: -2.055878577480391 },\n { x: 7.640000000000639e-7, y: -2.0962559501724463 },\n { x: 7.650000000000638e-7, y: -2.074018664011004 },\n { x: 7.660000000000638e-7, y: -2.0896436420394227 },\n { x: 7.670000000000638e-7, y: -2.1262724767362506 },\n { x: 7.680000000000637e-7, y: -2.1558803423283965 },\n { x: 7.690000000000637e-7, y: -2.102909108616602 },\n { x: 7.700000000000637e-7, y: -2.1317511337743587 },\n { x: 7.710000000000636e-7, y: -2.1836563851563775 },\n { x: 7.720000000000636e-7, y: -2.1749725226646803 },\n { x: 7.730000000000636e-7, y: -2.1760729330807265 },\n { x: 7.740000000000635e-7, y: -2.190896042494086 },\n { x: 7.750000000000635e-7, y: -2.2001527517103674 },\n { x: 7.760000000000635e-7, y: -2.2130418909331486 },\n { x: 7.770000000000635e-7, y: -2.2063507638943474 },\n { x: 7.780000000000634e-7, y: -2.2138750759696055 },\n { x: 7.790000000000634e-7, y: -2.2805381931239856 },\n { x: 7.800000000000634e-7, y: -2.2475678872158387 },\n { x: 7.810000000000633e-7, y: -2.2911747672325413 },\n { x: 7.820000000000633e-7, y: -2.303093003516833 },\n { x: 7.830000000000633e-7, y: -2.265271656488227 },\n { x: 7.840000000000632e-7, y: -2.2740880148368454 },\n { x: 7.850000000000632e-7, y: -2.297455793799374 },\n { x: 7.860000000000632e-7, y: -2.3071718305399123 },\n { x: 7.870000000000631e-7, y: -2.350588418405074 },\n { x: 7.880000000000631e-7, y: -2.3423590405498755 },\n { x: 7.890000000000631e-7, y: -2.3240151080745206 },\n { x: 7.900000000000631e-7, y: -2.359705796962423 },\n { x: 7.91000000000063e-7, y: -2.354457500939004 },\n { x: 7.92000000000063e-7, y: -2.3478354092748495 },\n { x: 7.93000000000063e-7, y: -2.3639572859735862 },\n { x: 7.940000000000629e-7, y: -2.4226999792401203 },\n { x: 7.950000000000629e-7, y: -2.4340544138076408 },\n { x: 7.960000000000629e-7, y: -2.3780566517382833 },\n { x: 7.970000000000628e-7, y: -2.4401803729827876 },\n { x: 7.980000000000628e-7, y: -2.4416396490411953 },\n { x: 7.990000000000628e-7, y: -2.4150481340956165 },\n { x: 8.000000000000628e-7, y: -2.476867585977726 },\n { x: 8.010000000000627e-7, y: -2.4821380392889196 },\n { x: 8.020000000000627e-7, y: -2.478856400055757 },\n { x: 8.030000000000627e-7, y: -2.4397298613346012 },\n { x: 8.040000000000626e-7, y: -2.476987541618824 },\n { x: 8.050000000000626e-7, y: -2.5020098236123385 },\n { x: 8.060000000000626e-7, y: -2.5023309800132942 },\n { x: 8.070000000000625e-7, y: -2.4829349226243025 },\n { x: 8.080000000000625e-7, y: -2.48777266497422 },\n { x: 8.090000000000625e-7, y: -2.516780384155387 },\n { x: 8.100000000000624e-7, y: -2.5683636204006723 },\n { x: 8.110000000000624e-7, y: -2.5051484995280546 },\n { x: 8.120000000000624e-7, y: -2.536891737016058 },\n { x: 8.130000000000624e-7, y: -2.5821926133444673 },\n { x: 8.140000000000623e-7, y: -2.592726295775674 },\n { x: 8.150000000000623e-7, y: -2.5614830801409627 },\n { x: 8.160000000000623e-7, y: -2.5877184984376673 },\n { x: 8.170000000000622e-7, y: -2.624103466543629 },\n { x: 8.180000000000622e-7, y: -2.6296066009332413 },\n { x: 8.190000000000622e-7, y: -2.6324868648472384 },\n { x: 8.200000000000621e-7, y: -2.5739095207819913 },\n { x: 8.210000000000621e-7, y: -2.6201295189578064 },\n { x: 8.220000000000621e-7, y: -2.6303338441350115 },\n { x: 8.23000000000062e-7, y: -2.6599352916276495 },\n { x: 8.24000000000062e-7, y: -2.626011467845632 },\n { x: 8.25000000000062e-7, y: -2.6313979610589344 },\n { x: 8.26000000000062e-7, y: -2.6629740261037655 },\n { x: 8.270000000000619e-7, y: -2.697810825260525 },\n { x: 8.280000000000619e-7, y: -2.6658295299678554 },\n { x: 8.290000000000619e-7, y: -2.6742804279564716 },\n { x: 8.300000000000618e-7, y: -2.6807843621938443 },\n { x: 8.310000000000618e-7, y: -2.6573315432723406 },\n { x: 8.320000000000618e-7, y: -2.6921605599483027 },\n { x: 8.330000000000617e-7, y: -2.7288213113864463 },\n { x: 8.340000000000617e-7, y: -2.6960210793531414 },\n { x: 8.350000000000617e-7, y: -2.7106273801500063 },\n { x: 8.360000000000616e-7, y: -2.727510157293907 },\n { x: 8.370000000000616e-7, y: -2.7458555303542234 },\n { x: 8.380000000000616e-7, y: -2.7565592316307397 },\n { x: 8.390000000000616e-7, y: -2.7147074559968853 },\n { x: 8.400000000000615e-7, y: -2.7694876935025787 },\n { x: 8.410000000000615e-7, y: -2.7733072099226033 },\n { x: 8.420000000000615e-7, y: -2.765156863431549 },\n { x: 8.430000000000614e-7, y: -2.7935596096657003 },\n { x: 8.440000000000614e-7, y: -2.779273992870829 },\n { x: 8.450000000000614e-7, y: -2.7674261280796415 },\n { x: 8.460000000000613e-7, y: -2.7831101163645715 },\n { x: 8.470000000000613e-7, y: -2.774042874495402 },\n { x: 8.480000000000613e-7, y: -2.803463457161769 },\n { x: 8.490000000000612e-7, y: -2.8076649543308796 },\n { x: 8.500000000000612e-7, y: -2.7694404649729485 },\n { x: 8.510000000000612e-7, y: -2.8296067352378946 },\n { x: 8.520000000000612e-7, y: -2.769812341436803 },\n { x: 8.530000000000611e-7, y: -2.8146911225318347 },\n { x: 8.540000000000611e-7, y: -2.8525571084872783 },\n { x: 8.550000000000611e-7, y: -2.8256074878559265 },\n { x: 8.56000000000061e-7, y: -2.8600933507442807 },\n { x: 8.57000000000061e-7, y: -2.8340954656178448 },\n { x: 8.58000000000061e-7, y: -2.867258517846509 },\n { x: 8.590000000000609e-7, y: -2.8068575537151483 },\n { x: 8.600000000000609e-7, y: -2.844352121689173 },\n { x: 8.610000000000609e-7, y: -2.8103729411780742 },\n { x: 8.620000000000608e-7, y: -2.8303707725193674 },\n { x: 8.630000000000608e-7, y: -2.843702909731462 },\n { x: 8.640000000000608e-7, y: -2.851881329615108 },\n { x: 8.650000000000608e-7, y: -2.898358851690156 },\n { x: 8.660000000000607e-7, y: -2.8313929273326073 },\n { x: 8.670000000000607e-7, y: -2.8619568275718663 },\n { x: 8.680000000000607e-7, y: -2.861704082515166 },\n { x: 8.690000000000606e-7, y: -2.8811073334254798 },\n { x: 8.700000000000606e-7, y: -2.907265338198719 },\n { x: 8.710000000000606e-7, y: -2.917435832811323 },\n { x: 8.720000000000605e-7, y: -2.861558786748291 },\n { x: 8.730000000000605e-7, y: -2.86327001465509 },\n { x: 8.740000000000605e-7, y: -2.884817017631631 },\n { x: 8.750000000000604e-7, y: -2.9298940918946696 },\n { x: 8.760000000000604e-7, y: -2.864957838518482 },\n { x: 8.770000000000604e-7, y: -2.927110684690623 },\n { x: 8.780000000000604e-7, y: -2.8902008230791316 },\n { x: 8.790000000000603e-7, y: -2.893962756214702 },\n { x: 8.800000000000603e-7, y: -2.9198740576200324 },\n { x: 8.810000000000603e-7, y: -2.906364506827804 },\n { x: 8.820000000000602e-7, y: -2.887678919802907 },\n { x: 8.830000000000602e-7, y: -2.9121500491281687 },\n { x: 8.840000000000602e-7, y: -2.8881151683897794 },\n { x: 8.850000000000601e-7, y: -2.936203526782056 },\n { x: 8.860000000000601e-7, y: -2.9487149458330384 },\n { x: 8.870000000000601e-7, y: -2.90595447037774 },\n { x: 8.8800000000006e-7, y: -2.9511577627408454 },\n { x: 8.8900000000006e-7, y: -2.9006731485650006 },\n { x: 8.9000000000006e-7, y: -2.9623864607366417 },\n { x: 8.9100000000006e-7, y: -2.9000158219127186 },\n { x: 8.920000000000599e-7, y: -2.923000395396974 },\n { x: 8.930000000000599e-7, y: -2.902882666001241 },\n { x: 8.940000000000599e-7, y: -2.9324335574470135 },\n { x: 8.950000000000598e-7, y: -2.938467125800375 },\n { x: 8.960000000000598e-7, y: -2.9766601071544376 },\n { x: 8.970000000000598e-7, y: -2.933710734734237 },\n { x: 8.980000000000597e-7, y: -2.9145057164725117 },\n { x: 8.990000000000597e-7, y: -2.9643638343036307 },\n { x: 9.000000000000597e-7, y: -2.9164639646988295 },\n { x: 9.010000000000596e-7, y: -2.9876497192815443 },\n { x: 9.020000000000596e-7, y: -2.9295998551630897 },\n { x: 9.030000000000596e-7, y: -2.916701895305716 },\n { x: 9.040000000000596e-7, y: -2.9828925473422063 },\n { x: 9.050000000000595e-7, y: -2.9667492971059195 },\n { x: 9.060000000000595e-7, y: -2.92511642650399 },\n { x: 9.070000000000595e-7, y: -2.9289609438921507 },\n { x: 9.080000000000594e-7, y: -2.9816225525217552 },\n { x: 9.090000000000594e-7, y: -2.974001745809239 },\n { x: 9.100000000000594e-7, y: -2.9321479890932602 },\n { x: 9.110000000000593e-7, y: -2.950426444382265 },\n { x: 9.120000000000593e-7, y: -2.9634305979357882 },\n { x: 9.130000000000593e-7, y: -2.935744190311045 },\n { x: 9.140000000000592e-7, y: -2.9708324209945234 },\n { x: 9.150000000000592e-7, y: -2.9382075562801813 },\n { x: 9.160000000000592e-7, y: -2.9760690670692176 },\n { x: 9.170000000000592e-7, y: -2.934654682720297 },\n { x: 9.180000000000591e-7, y: -2.962554253049239 },\n { x: 9.190000000000591e-7, y: -2.9491330025216422 },\n { x: 9.200000000000591e-7, y: -2.977843462275971 },\n { x: 9.21000000000059e-7, y: -2.9445779172293016 },\n { x: 9.22000000000059e-7, y: -2.9234494475304182 },\n { x: 9.23000000000059e-7, y: -2.972858739228422 },\n { x: 9.240000000000589e-7, y: -2.958180479195299 },\n { x: 9.250000000000589e-7, y: -2.9779554199935525 },\n { x: 9.260000000000589e-7, y: -2.9386686729792517 },\n { x: 9.270000000000588e-7, y: -2.966382483463096 },\n { x: 9.280000000000588e-7, y: -2.938944489614598 },\n { x: 9.290000000000588e-7, y: -2.9406615434132286 },\n { x: 9.300000000000588e-7, y: -2.9741451418216505 },\n { x: 9.310000000000587e-7, y: -2.91969325268199 },\n { x: 9.320000000000587e-7, y: -2.911391584737342 },\n { x: 9.330000000000587e-7, y: -2.936817823965968 },\n { x: 9.340000000000586e-7, y: -2.9298468914021263 },\n { x: 9.350000000000586e-7, y: -2.9146484371620462 },\n { x: 9.360000000000586e-7, y: -2.9507812555385247 },\n { x: 9.370000000000585e-7, y: -2.9285328472345227 },\n { x: 9.380000000000585e-7, y: -2.936304402803806 },\n { x: 9.390000000000585e-7, y: -2.9406177668531175 },\n { x: 9.400000000000584e-7, y: -2.912230115812706 },\n { x: 9.410000000000584e-7, y: -2.9341140700680257 },\n { x: 9.420000000000584e-7, y: -2.939849444769461 },\n { x: 9.430000000000584e-7, y: -2.91905481188591 },\n { x: 9.440000000000583e-7, y: -2.890618053246819 },\n { x: 9.450000000000583e-7, y: -2.944699657107766 },\n { x: 9.460000000000583e-7, y: -2.918024307776734 },\n { x: 9.470000000000582e-7, y: -2.950891370038067 },\n { x: 9.480000000000582e-7, y: -2.8909417564949136 },\n { x: 9.490000000000582e-7, y: -2.8860180655527716 },\n { x: 9.500000000000581e-7, y: -2.921838871508459 },\n { x: 9.510000000000581e-7, y: -2.93150866038216 },\n { x: 9.520000000000581e-7, y: -2.8965571678094175 },\n { x: 9.53000000000058e-7, y: -2.88527824009263 },\n { x: 9.540000000000581e-7, y: -2.9004925579372736 },\n { x: 9.550000000000582e-7, y: -2.8619863546464517 },\n { x: 9.560000000000583e-7, y: -2.874137257214041 },\n { x: 9.570000000000583e-7, y: -2.8552102483960966 },\n { x: 9.580000000000584e-7, y: -2.8786915156360866 },\n { x: 9.590000000000585e-7, y: -2.8568495436065464 },\n { x: 9.600000000000586e-7, y: -2.8911457219041163 },\n { x: 9.610000000000586e-7, y: -2.9049199006203055 },\n { x: 9.620000000000587e-7, y: -2.870753698210861 },\n { x: 9.630000000000588e-7, y: -2.8640630016241126 },\n { x: 9.640000000000589e-7, y: -2.83726716564893 },\n { x: 9.65000000000059e-7, y: -2.8314638129994814 },\n { x: 9.66000000000059e-7, y: -2.85247264605437 },\n { x: 9.67000000000059e-7, y: -2.8673165364236834 },\n { x: 9.680000000000592e-7, y: -2.8406045706033933 },\n { x: 9.690000000000592e-7, y: -2.8219753606363853 },\n { x: 9.700000000000593e-7, y: -2.825899372369524 },\n { x: 9.710000000000594e-7, y: -2.8493359555856745 },\n { x: 9.720000000000595e-7, y: -2.862735020921013 },\n { x: 9.730000000000595e-7, y: -2.8307770007251682 },\n { x: 9.740000000000596e-7, y: -2.8221561577794527 },\n { x: 9.750000000000597e-7, y: -2.811385901066925 },\n { x: 9.760000000000598e-7, y: -2.827662881343826 },\n { x: 9.770000000000598e-7, y: -2.7965472829768863 },\n { x: 9.7800000000006e-7, y: -2.788428858190958 },\n { x: 9.7900000000006e-7, y: -2.8441734932241953 },\n { x: 9.8000000000006e-7, y: -2.781833981692926 },\n { x: 9.810000000000601e-7, y: -2.8308549346264558 },\n { x: 9.820000000000602e-7, y: -2.756527743948133 },\n { x: 9.830000000000603e-7, y: -2.785222528151875 },\n { x: 9.840000000000604e-7, y: -2.776646677900193 },\n { x: 9.850000000000604e-7, y: -2.7864867204481785 },\n { x: 9.860000000000605e-7, y: -2.761534793534902 },\n { x: 9.870000000000606e-7, y: -2.7818643010825195 },\n { x: 9.880000000000607e-7, y: -2.728761254626916 },\n { x: 9.890000000000607e-7, y: -2.7783140884864883 },\n { x: 9.900000000000608e-7, y: -2.7577191444065225 },\n { x: 9.91000000000061e-7, y: -2.7441047180763793 },\n { x: 9.92000000000061e-7, y: -2.7712962077121355 },\n { x: 9.93000000000061e-7, y: -2.7138091703923664 },\n { x: 9.940000000000611e-7, y: -2.727822159791245 },\n { x: 9.950000000000612e-7, y: -2.69583323562765 },\n { x: 9.960000000000613e-7, y: -2.689606324034795 },\n { x: 9.970000000000614e-7, y: -2.7217491913539376 },\n { x: 9.980000000000614e-7, y: -2.743696201740999 },\n { x: 9.990000000000615e-7, y: -2.729230444301794 },\n { x: 0.0000010000000000000616, y: -2.7002798704252844 },\n { x: 0.0000010010000000000617, y: -2.6964244573508234 },\n { x: 0.0000010020000000000617, y: -2.6954973390823227 },\n { x: 0.0000010030000000000618, y: -2.6742057473662912 },\n { x: 0.0000010040000000000619, y: -2.6869155896835677 },\n { x: 0.000001005000000000062, y: -2.649006202055302 },\n { x: 0.000001006000000000062, y: -2.640016436732289 },\n { x: 0.000001007000000000062, y: -2.6697346018535293 },\n { x: 0.0000010080000000000622, y: -2.6537247452612447 },\n { x: 0.0000010090000000000623, y: -2.6679345916532102 },\n { x: 0.0000010100000000000623, y: -2.653369421210141 },\n { x: 0.0000010110000000000624, y: -2.630046484330408 },\n { x: 0.0000010120000000000625, y: -2.6395439276650956 },\n { x: 0.0000010130000000000626, y: -2.5997301407613 },\n { x: 0.0000010140000000000626, y: -2.6461432860301484 },\n { x: 0.0000010150000000000627, y: -2.6005733095703407 },\n { x: 0.0000010160000000000628, y: -2.6159512628906043 },\n { x: 0.0000010170000000000629, y: -2.624265547470855 },\n { x: 0.000001018000000000063, y: -2.5571658136794873 },\n { x: 0.000001019000000000063, y: -2.5881990309651273 },\n { x: 0.000001020000000000063, y: -2.5541298055449206 },\n { x: 0.0000010210000000000632, y: -2.5377863986711326 },\n { x: 0.0000010220000000000632, y: -2.5489555611229613 },\n { x: 0.0000010230000000000633, y: -2.55538817619838 },\n { x: 0.0000010240000000000634, y: -2.5766401792970512 },\n { x: 0.0000010250000000000635, y: -2.5148417592349763 },\n { x: 0.0000010260000000000635, y: -2.5472709907113376 },\n { x: 0.0000010270000000000636, y: -2.53825638260045 },\n { x: 0.0000010280000000000637, y: -2.477190922886537 },\n { x: 0.0000010290000000000638, y: -2.514066980046247 },\n { x: 0.0000010300000000000638, y: -2.493761840639996 },\n { x: 0.000001031000000000064, y: -2.5185998181291867 },\n { x: 0.000001032000000000064, y: -2.4913912816660093 },\n { x: 0.000001033000000000064, y: -2.4796168646922 },\n { x: 0.0000010340000000000641, y: -2.4796530303501654 },\n { x: 0.0000010350000000000642, y: -2.45121270551031 },\n { x: 0.0000010360000000000643, y: -2.443976954176379 },\n { x: 0.0000010370000000000644, y: -2.4317250425826327 },\n { x: 0.0000010380000000000644, y: -2.4201043484104785 },\n { x: 0.0000010390000000000645, y: -2.433336170259666 },\n { x: 0.0000010400000000000646, y: -2.441347548251501 },\n { x: 0.0000010410000000000647, y: -2.414508312110115 },\n { x: 0.0000010420000000000647, y: -2.4232681901616275 },\n { x: 0.0000010430000000000648, y: -2.423133440182755 },\n { x: 0.0000010440000000000649, y: -2.412656817214131 },\n { x: 0.000001045000000000065, y: -2.405672474450974 },\n { x: 0.000001046000000000065, y: -2.357864832330612 },\n { x: 0.0000010470000000000651, y: -2.3617701422918778 },\n { x: 0.0000010480000000000652, y: -2.347781376983625 },\n { x: 0.0000010490000000000653, y: -2.316753906684353 },\n { x: 0.0000010500000000000653, y: -2.322605217392935 },\n { x: 0.0000010510000000000654, y: -2.3441096488564686 },\n { x: 0.0000010520000000000655, y: -2.282898132491534 },\n { x: 0.0000010530000000000656, y: -2.3069435747675358 },\n { x: 0.0000010540000000000656, y: -2.318574656384435 },\n { x: 0.0000010550000000000657, y: -2.257501230828061 },\n { x: 0.0000010560000000000658, y: -2.2976754936359938 },\n { x: 0.0000010570000000000659, y: -2.28231706183603 },\n { x: 0.000001058000000000066, y: -2.2518844643742533 },\n { x: 0.000001059000000000066, y: -2.245637829959301 },\n { x: 0.000001060000000000066, y: -2.259457696194272 },\n { x: 0.0000010610000000000662, y: -2.2674896557086104 },\n { x: 0.0000010620000000000662, y: -2.25567170796724 },\n { x: 0.0000010630000000000663, y: -2.2259857569530386 },\n { x: 0.0000010640000000000664, y: -2.2064798980754188 },\n { x: 0.0000010650000000000665, y: -2.2215357721999207 },\n { x: 0.0000010660000000000665, y: -2.191990560473061 },\n { x: 0.0000010670000000000666, y: -2.1539329033220675 },\n { x: 0.0000010680000000000667, y: -2.160942247206046 },\n { x: 0.0000010690000000000668, y: -2.143769437596853 },\n { x: 0.0000010700000000000668, y: -2.167421585790664 },\n { x: 0.000001071000000000067, y: -2.131279970759539 },\n { x: 0.000001072000000000067, y: -2.1347397373950034 },\n { x: 0.000001073000000000067, y: -2.0866999139614575 },\n { x: 0.0000010740000000000671, y: -2.1183001384603597 },\n { x: 0.0000010750000000000672, y: -2.086334409698115 },\n { x: 0.0000010760000000000673, y: -2.0593984409407717 },\n { x: 0.0000010770000000000674, y: -2.1063244124424423 },\n { x: 0.0000010780000000000674, y: -2.08836151917355 },\n { x: 0.0000010790000000000675, y: -2.1015081560595226 },\n { x: 0.0000010800000000000676, y: -2.024749987916138 },\n { x: 0.0000010810000000000677, y: -2.040732752230928 },\n { x: 0.0000010820000000000677, y: -2.046168870436642 },\n { x: 0.0000010830000000000678, y: -2.0525018649358757 },\n { x: 0.0000010840000000000679, y: -2.0375303832587295 },\n { x: 0.000001085000000000068, y: -2.0120983798446193 },\n { x: 0.000001086000000000068, y: -1.9960215496681246 },\n { x: 0.0000010870000000000681, y: -1.9739055525154958 },\n { x: 0.0000010880000000000682, y: -1.9884229978218901 },\n { x: 0.0000010890000000000683, y: -1.9959712954910505 },\n { x: 0.0000010900000000000683, y: -1.9350623037016246 },\n { x: 0.0000010910000000000684, y: -1.9279924609968988 },\n { x: 0.0000010920000000000685, y: -1.9083889185898628 },\n { x: 0.0000010930000000000686, y: -1.9107646279557768 },\n { x: 0.0000010940000000000686, y: -1.9235896904213654 },\n { x: 0.0000010950000000000687, y: -1.9077264580747624 },\n { x: 0.0000010960000000000688, y: -1.8587589590236497 },\n { x: 0.0000010970000000000689, y: -1.876597786919901 },\n { x: 0.000001098000000000069, y: -1.8700217459328776 },\n { x: 0.000001099000000000069, y: -1.847740190818427 },\n { x: 0.000001100000000000069, y: -1.835527592526767 },\n { x: 0.0000011010000000000692, y: -1.8290841453361617 },\n { x: 0.0000011020000000000692, y: -1.8089095363694432 },\n { x: 0.0000011030000000000693, y: -1.8190969867635092 },\n { x: 0.0000011040000000000694, y: -1.8092723319865567 },\n { x: 0.0000011050000000000695, y: -1.801222425563087 },\n { x: 0.0000011060000000000695, y: -1.7679683199942404 },\n { x: 0.0000011070000000000696, y: -1.7700883442195483 },\n { x: 0.0000011080000000000697, y: -1.7470404177486727 },\n { x: 0.0000011090000000000698, y: -1.7419412927283844 },\n { x: 0.0000011100000000000698, y: -1.708243658522816 },\n { x: 0.00000111100000000007, y: -1.70685823692574 },\n { x: 0.00000111200000000007, y: -1.6920185647394441 },\n { x: 0.00000111300000000007, y: -1.69210557753839 },\n { x: 0.0000011140000000000701, y: -1.724796033691692 },\n { x: 0.0000011150000000000702, y: -1.7016664205042438 },\n { x: 0.0000011160000000000703, y: -1.705493665671974 },\n { x: 0.0000011170000000000704, y: -1.6578417283905895 },\n { x: 0.0000011180000000000704, y: -1.6802684355063802 },\n { x: 0.0000011190000000000705, y: -1.606026575642993 },\n { x: 0.0000011200000000000706, y: -1.6227450046947103 },\n { x: 0.0000011210000000000707, y: -1.6136834614352478 },\n { x: 0.0000011220000000000707, y: -1.5803592168441492 },\n { x: 0.0000011230000000000708, y: -1.6110596917648399 },\n { x: 0.0000011240000000000709, y: -1.5671805813681838 },\n { x: 0.000001125000000000071, y: -1.57329435918908 },\n { x: 0.000001126000000000071, y: -1.5795922254455512 },\n { x: 0.0000011270000000000711, y: -1.5538408168409483 },\n { x: 0.0000011280000000000712, y: -1.5374636303586313 },\n { x: 0.0000011290000000000713, y: -1.5676948153395773 },\n { x: 0.0000011300000000000713, y: -1.5110600731112371 },\n { x: 0.0000011310000000000714, y: -1.470305290533936 },\n { x: 0.0000011320000000000715, y: -1.471230750920955 },\n { x: 0.0000011330000000000716, y: -1.4820692543786587 },\n { x: 0.0000011340000000000716, y: -1.4874962478150864 },\n { x: 0.0000011350000000000717, y: -1.4578597809457159 },\n { x: 0.0000011360000000000718, y: -1.4215625375059417 },\n { x: 0.0000011370000000000719, y: -1.4616946552057766 },\n { x: 0.000001138000000000072, y: -1.4345160952785518 },\n { x: 0.000001139000000000072, y: -1.4214127328720212 },\n { x: 0.000001140000000000072, y: -1.436569048731919 },\n { x: 0.0000011410000000000722, y: -1.415868722476098 },\n { x: 0.0000011420000000000722, y: -1.3726439914739348 },\n { x: 0.0000011430000000000723, y: -1.3927190972834356 },\n { x: 0.0000011440000000000724, y: -1.3572754080466038 },\n { x: 0.0000011450000000000725, y: -1.3176891264423618 },\n { x: 0.0000011460000000000725, y: -1.297536940448045 },\n { x: 0.0000011470000000000726, y: -1.3534486267580776 },\n { x: 0.0000011480000000000727, y: -1.3453498940426343 },\n { x: 0.0000011490000000000728, y: -1.2937255429648007 },\n { x: 0.0000011500000000000728, y: -1.249173294768944 },\n { x: 0.000001151000000000073, y: -1.2855758420136414 },\n { x: 0.000001152000000000073, y: -1.2878233524132527 },\n { x: 0.000001153000000000073, y: -1.2238746184687883 },\n { x: 0.0000011540000000000731, y: -1.2261625076650529 },\n { x: 0.0000011550000000000732, y: -1.2244442063236738 },\n { x: 0.0000011560000000000733, y: -1.1797882988974489 },\n { x: 0.0000011570000000000734, y: -1.1649731253785105 },\n { x: 0.0000011580000000000734, y: -1.1768275453401826 },\n { x: 0.0000011590000000000735, y: -1.1908915651711174 },\n { x: 0.0000011600000000000736, y: -1.163447905914741 },\n { x: 0.0000011610000000000737, y: -1.121123721260343 },\n { x: 0.0000011620000000000737, y: -1.143009576913168 },\n { x: 0.0000011630000000000738, y: -1.1552731558038924 },\n { x: 0.000001164000000000074, y: -1.0996497605933475 },\n { x: 0.000001165000000000074, y: -1.0931065759246417 },\n { x: 0.000001166000000000074, y: -1.0637961552040398 },\n { x: 0.0000011670000000000741, y: -1.0959283508828057 },\n { x: 0.0000011680000000000742, y: -1.0890231453497359 },\n { x: 0.0000011690000000000743, y: -1.0782191801027068 },\n { x: 0.0000011700000000000743, y: -1.0132884475994262 },\n { x: 0.0000011710000000000744, y: -1.0020973860822264 },\n { x: 0.0000011720000000000745, y: -1.0241218334285882 },\n { x: 0.0000011730000000000746, y: -1.0031357856720269 },\n { x: 0.0000011740000000000746, y: -1.005636247241965 },\n { x: 0.0000011750000000000747, y: -0.9925000750270289 },\n { x: 0.0000011760000000000748, y: -0.9610862456471924 },\n { x: 0.0000011770000000000749, y: -0.9556779325141588 },\n { x: 0.000001178000000000075, y: -0.9358322265882817 },\n { x: 0.000001179000000000075, y: -0.9042068481365282 },\n { x: 0.000001180000000000075, y: -0.9441361447165949 },\n { x: 0.0000011810000000000752, y: -0.9252952984481573 },\n { x: 0.0000011820000000000752, y: -0.9000672065787889 },\n { x: 0.0000011830000000000753, y: -0.9283057383199305 },\n { x: 0.0000011840000000000754, y: -0.8774893554451562 },\n { x: 0.0000011850000000000755, y: -0.8529084046226574 },\n { x: 0.0000011860000000000756, y: -0.8624063515743335 },\n { x: 0.0000011870000000000756, y: -0.8167009109674965 },\n { x: 0.0000011880000000000757, y: -0.8043248337208095 },\n { x: 0.0000011890000000000758, y: -0.8501223406799542 },\n { x: 0.0000011900000000000759, y: -0.798174663748855 },\n { x: 0.000001191000000000076, y: -0.809421445655857 },\n { x: 0.000001192000000000076, y: -0.7811664379641953 },\n { x: 0.000001193000000000076, y: -0.7331741766129248 },\n { x: 0.0000011940000000000762, y: -0.7678636008900854 },\n { x: 0.0000011950000000000762, y: -0.7291745382612629 },\n { x: 0.0000011960000000000763, y: -0.7064243017579349 },\n { x: 0.0000011970000000000764, y: -0.7314566866982875 },\n { x: 0.0000011980000000000765, y: -0.6736269281284476 },\n { x: 0.0000011990000000000765, y: -0.6961430607322345 },\n { x: 0.0000012000000000000766, y: -0.6760020006353963 },\n { x: 0.0000012010000000000767, y: -0.6603962886061162 },\n { x: 0.0000012020000000000768, y: -0.6216122377675556 },\n { x: 0.0000012030000000000768, y: -0.6699811922803657 },\n { x: 0.000001204000000000077, y: -0.6072391978108935 },\n { x: 0.000001205000000000077, y: -0.6471095886886495 },\n { x: 0.000001206000000000077, y: -0.6214786900756055 },\n { x: 0.0000012070000000000771, y: -0.6032581063776964 },\n { x: 0.0000012080000000000772, y: -0.5660881860970816 },\n { x: 0.0000012090000000000773, y: -0.604502355070154 },\n { x: 0.0000012100000000000774, y: -0.5349529258666671 },\n { x: 0.0000012110000000000774, y: -0.5718732660477731 },\n { x: 0.0000012120000000000775, y: -0.541292351736929 },\n { x: 0.0000012130000000000776, y: -0.553317931937487 },\n { x: 0.0000012140000000000777, y: -0.5211680273101764 },\n { x: 0.0000012150000000000777, y: -0.47399143437207375 },\n { x: 0.0000012160000000000778, y: -0.47197657428818074 },\n { x: 0.0000012170000000000779, y: -0.4536771160107145 },\n { x: 0.000001218000000000078, y: -0.43356801949054585 },\n { x: 0.000001219000000000078, y: -0.4860261910727052 },\n { x: 0.000001220000000000078, y: -0.412817153510327 },\n { x: 0.0000012210000000000782, y: -0.39299964123401604 },\n { x: 0.0000012220000000000783, y: -0.4148650599048196 },\n { x: 0.0000012230000000000783, y: -0.4402037779506115 },\n { x: 0.0000012240000000000784, y: -0.3566532499659609 },\n { x: 0.0000012250000000000785, y: -0.40529459829099734 },\n { x: 0.0000012260000000000786, y: -0.35570858729529825 },\n { x: 0.0000012270000000000786, y: -0.3563409633429071 },\n { x: 0.0000012280000000000787, y: -0.33188067469457133 },\n { x: 0.0000012290000000000788, y: -0.3499667793908304 },\n { x: 0.0000012300000000000789, y: -0.2954163264402897 },\n { x: 0.000001231000000000079, y: -0.30286059381414276 },\n { x: 0.000001232000000000079, y: -0.3151707751191381 },\n { x: 0.000001233000000000079, y: -0.29108939715095333 },\n { x: 0.0000012340000000000792, y: -0.27181700370963724 },\n { x: 0.0000012350000000000792, y: -0.27799890978536135 },\n { x: 0.0000012360000000000793, y: -0.2385474349092482 },\n { x: 0.0000012370000000000794, y: -0.2586020325902714 },\n { x: 0.0000012380000000000795, y: -0.22536500423236583 },\n { x: 0.0000012390000000000795, y: -0.20183827100993776 },\n { x: 0.0000012400000000000796, y: -0.23010071703753565 },\n { x: 0.0000012410000000000797, y: -0.16503036288459788 },\n { x: 0.0000012420000000000798, y: -0.1566256961757913 },\n { x: 0.0000012430000000000798, y: -0.18521100261754386 },\n { x: 0.00000124400000000008, y: -0.12747842038671897 },\n { x: 0.00000124500000000008, y: -0.14309280125545476 },\n { x: 0.00000124600000000008, y: -0.13100474583539598 },\n { x: 0.0000012470000000000801, y: -0.10405612830352308 },\n { x: 0.0000012480000000000802, y: -0.06832324024087069 },\n { x: 0.0000012490000000000803, y: -0.0656382549619924 },\n { x: 0.0000012500000000000804, y: -0.10622065014561533 },\n { x: 0.0000012510000000000804, y: -0.07044054202811087 },\n { x: 0.0000012520000000000805, y: -0.04262569001602948 },\n { x: 0.0000012530000000000806, y: -0.006892326022809522 },\n { x: 0.0000012540000000000807, y: -0.044470199050654004 },\n { x: 0.0000012550000000000807, y: -0.0404008740530935 },\n { x: 0.0000012560000000000808, y: 0.0222345762679733 },\n { x: 0.0000012570000000000809, y: 0.014272908557915614 },\n { x: 0.000001258000000000081, y: 0.00955292527263679 },\n { x: 0.000001259000000000081, y: 0.018943398024962442 },\n { x: 0.0000012600000000000811, y: 0.04591799795923668 },\n { x: 0.0000012610000000000812, y: 0.06177106106287698 },\n { x: 0.0000012620000000000813, y: 0.06156218253302007 },\n { x: 0.0000012630000000000813, y: 0.09901423986690978 },\n { x: 0.0000012640000000000814, y: 0.07718737983512958 },\n { x: 0.0000012650000000000815, y: 0.11499187693592912 },\n { x: 0.0000012660000000000816, y: 0.09838870921516399 },\n { x: 0.0000012670000000000816, y: 0.0840379348728896 },\n { x: 0.0000012680000000000817, y: 0.13633526308057603 },\n { x: 0.0000012690000000000818, y: 0.1505639064186107 },\n { x: 0.0000012700000000000819, y: 0.18636304009074428 },\n { x: 0.000001271000000000082, y: 0.16631802517142183 },\n { x: 0.000001272000000000082, y: 0.14394172167609634 },\n { x: 0.000001273000000000082, y: 0.1847688995852056 },\n { x: 0.0000012740000000000822, y: 0.16418411574793573 },\n { x: 0.0000012750000000000822, y: 0.23999062672305949 },\n { x: 0.0000012760000000000823, y: 0.19295812425074416 },\n { x: 0.0000012770000000000824, y: 0.21590498380700832 },\n { x: 0.0000012780000000000825, y: 0.2727873035990194 },\n { x: 0.0000012790000000000825, y: 0.28807061637346115 },\n { x: 0.0000012800000000000826, y: 0.29462033681088584 },\n { x: 0.0000012810000000000827, y: 0.25129915397047126 },\n { x: 0.0000012820000000000828, y: 0.28442262840447213 },\n { x: 0.0000012830000000000828, y: 0.2802008382995984 },\n { x: 0.000001284000000000083, y: 0.2795953427073829 },\n { x: 0.000001285000000000083, y: 0.32248646722251306 },\n { x: 0.000001286000000000083, y: 0.34498547257461015 },\n { x: 0.0000012870000000000831, y: 0.3754367286864585 },\n { x: 0.0000012880000000000832, y: 0.3549892102190534 },\n { x: 0.0000012890000000000833, y: 0.3556622432894077 },\n { x: 0.0000012900000000000834, y: 0.40761037666177297 },\n { x: 0.0000012910000000000834, y: 0.3934519898280681 },\n { x: 0.0000012920000000000835, y: 0.3993731625146763 },\n { x: 0.0000012930000000000836, y: 0.4145989997553983 },\n { x: 0.0000012940000000000837, y: 0.428242236157867 },\n { x: 0.0000012950000000000837, y: 0.4394479597005514 },\n { x: 0.0000012960000000000838, y: 0.41697021752229857 },\n { x: 0.0000012970000000000839, y: 0.4321021747935018 },\n { x: 0.000001298000000000084, y: 0.4991021558247655 },\n { x: 0.000001299000000000084, y: 0.4841753180139331 },\n { x: 0.0000013000000000000841, y: 0.5024118956639743 },\n { x: 0.0000013010000000000842, y: 0.49777540379003915 },\n { x: 0.0000013020000000000843, y: 0.4993041830210104 },\n { x: 0.0000013030000000000843, y: 0.5555349732401625 },\n { x: 0.0000013040000000000844, y: 0.5629492248583431 },\n { x: 0.0000013050000000000845, y: 0.511170676531255 },\n { x: 0.0000013060000000000846, y: 0.5296936284835054 },\n { x: 0.0000013070000000000846, y: 0.5758686488334313 },\n { x: 0.0000013080000000000847, y: 0.5944288869939841 },\n { x: 0.0000013090000000000848, y: 0.5580989997058687 },\n { x: 0.0000013100000000000849, y: 0.5729570099495459 },\n { x: 0.000001311000000000085, y: 0.5756725686316552 },\n { x: 0.000001312000000000085, y: 0.6435082364409714 },\n { x: 0.000001313000000000085, y: 0.5918370644555717 },\n { x: 0.0000013140000000000852, y: 0.6155246551318653 },\n { x: 0.0000013150000000000852, y: 0.6624536182221034 },\n { x: 0.0000013160000000000853, y: 0.67987383385797 },\n { x: 0.0000013170000000000854, y: 0.6929630847664733 },\n { x: 0.0000013180000000000855, y: 0.6660665077125373 },\n { x: 0.0000013190000000000855, y: 0.7096574334175468 },\n { x: 0.0000013200000000000856, y: 0.7267585634672878 },\n { x: 0.0000013210000000000857, y: 0.7099257982334164 },\n { x: 0.0000013220000000000858, y: 0.7349264148641211 },\n { x: 0.0000013230000000000858, y: 0.7690448908074996 },\n { x: 0.000001324000000000086, y: 0.7534382474070918 },\n { x: 0.000001325000000000086, y: 0.7644049030276735 },\n { x: 0.000001326000000000086, y: 0.7467587676806047 },\n { x: 0.0000013270000000000861, y: 0.7669818111777716 },\n { x: 0.0000013280000000000862, y: 0.7988575614807502 },\n { x: 0.0000013290000000000863, y: 0.7831882572233348 },\n { x: 0.0000013300000000000864, y: 0.8365998374971845 },\n { x: 0.0000013310000000000864, y: 0.7781463160569243 },\n { x: 0.0000013320000000000865, y: 0.7899770842862761 },\n { x: 0.0000013330000000000866, y: 0.8006550736377733 },\n { x: 0.0000013340000000000867, y: 0.9002449346568221 },\n { x: 0.0000013350000000000867, y: 0.8632371565230259 },\n { x: 0.0000013360000000000868, y: 0.8861729766886234 },\n { x: 0.000001337000000000087, y: 0.847276070381745 },\n { x: 0.000001338000000000087, y: 0.9127517184353817 },\n { x: 0.000001339000000000087, y: 0.8534266188437545 },\n { x: 0.0000013400000000000871, y: 0.8823190628769446 },\n { x: 0.0000013410000000000872, y: 0.9112271670028148 },\n { x: 0.0000013420000000000873, y: 0.8867842855047384 },\n { x: 0.0000013430000000000873, y: 0.9322336072203685 },\n { x: 0.0000013440000000000874, y: 0.9252305587856131 },\n { x: 0.0000013450000000000875, y: 0.9080531556699117 },\n { x: 0.0000013460000000000876, y: 0.9592728298584061 },\n { x: 0.0000013470000000000876, y: 0.9537044931110791 },\n { x: 0.0000013480000000000877, y: 0.9763400143931343 },\n { x: 0.0000013490000000000878, y: 0.9778785299230038 },\n { x: 0.0000013500000000000879, y: 1.02335388029879 },\n { x: 0.000001351000000000088, y: 1.0301951965852265 },\n { x: 0.000001352000000000088, y: 1.0049752184771101 },\n { x: 0.000001353000000000088, y: 1.0207330574280284 },\n { x: 0.0000013540000000000882, y: 1.0604016122403743 },\n { x: 0.0000013550000000000882, y: 1.0763512845981638 },\n { x: 0.0000013560000000000883, y: 1.0081616297784155 },\n { x: 0.0000013570000000000884, y: 1.0601639039079285 },\n { x: 0.0000013580000000000885, y: 1.037881172538787 },\n { x: 0.0000013590000000000885, y: 1.0947889707438094 },\n { x: 0.0000013600000000000886, y: 1.0638148734476056 },\n { x: 0.0000013610000000000887, y: 1.109269641128165 },\n { x: 0.0000013620000000000888, y: 1.131991477205069 },\n { x: 0.0000013630000000000888, y: 1.0809993260950888 },\n { x: 0.000001364000000000089, y: 1.1406593859177832 },\n { x: 0.000001365000000000089, y: 1.1022940906732164 },\n { x: 0.000001366000000000089, y: 1.109503884727809 },\n { x: 0.0000013670000000000891, y: 1.1530727818792175 },\n { x: 0.0000013680000000000892, y: 1.1201052726299028 },\n { x: 0.0000013690000000000893, y: 1.1848508584439053 },\n { x: 0.0000013700000000000894, y: 1.1393971861846335 },\n { x: 0.0000013710000000000894, y: 1.1868523171957746 },\n { x: 0.0000013720000000000895, y: 1.1927822129675518 },\n { x: 0.0000013730000000000896, y: 1.2262264561900362 },\n { x: 0.0000013740000000000897, y: 1.2145199307800636 },\n { x: 0.0000013750000000000897, y: 1.1865584481971507 },\n { x: 0.0000013760000000000898, y: 1.24932341609842 },\n { x: 0.00000137700000000009, y: 1.2289433580721276 },\n { x: 0.00000137800000000009, y: 1.233498062275379 },\n { x: 0.00000137900000000009, y: 1.2013012874965872 },\n { x: 0.0000013800000000000901, y: 1.2541024503936453 },\n { x: 0.0000013810000000000902, y: 1.260847737848186 },\n { x: 0.0000013820000000000903, y: 1.2540716847222866 },\n { x: 0.0000013830000000000904, y: 1.253580933646218 },\n { x: 0.0000013840000000000904, y: 1.2977099253491804 },\n { x: 0.0000013850000000000905, y: 1.3042756904890374 },\n { x: 0.0000013860000000000906, y: 1.3102778099058368 },\n { x: 0.0000013870000000000907, y: 1.3079842329637883 },\n { x: 0.0000013880000000000907, y: 1.279246923386455 },\n { x: 0.0000013890000000000908, y: 1.3240327335338125 },\n { x: 0.0000013900000000000909, y: 1.3052053262606482 },\n { x: 0.000001391000000000091, y: 1.3420997940341681 },\n { x: 0.000001392000000000091, y: 1.3175633048625737 },\n { x: 0.000001393000000000091, y: 1.3319689879743344 },\n { x: 0.0000013940000000000912, y: 1.3243179210992126 },\n { x: 0.0000013950000000000913, y: 1.3305423519846902 },\n { x: 0.0000013960000000000913, y: 1.3470543963602295 },\n { x: 0.0000013970000000000914, y: 1.3453053583704047 },\n { x: 0.0000013980000000000915, y: 1.3985414163076368 },\n { x: 0.0000013990000000000916, y: 1.3523447467162584 },\n { x: 0.0000014000000000000916, y: 1.4175969014857355 },\n { x: 0.0000014010000000000917, y: 1.422805794341122 },\n { x: 0.0000014020000000000918, y: 1.3827020373009486 },\n { x: 0.0000014030000000000919, y: 1.419026855558873 },\n { x: 0.000001404000000000092, y: 1.4474092185770062 },\n { x: 0.000001405000000000092, y: 1.4336613275978254 },\n { x: 0.000001406000000000092, y: 1.435761775780304 },\n { x: 0.0000014070000000000922, y: 1.479037987164875 },\n { x: 0.0000014080000000000922, y: 1.4204867184247094 },\n { x: 0.0000014090000000000923, y: 1.4253652526048908 },\n { x: 0.0000014100000000000924, y: 1.4825068358351217 },\n { x: 0.0000014110000000000925, y: 1.4625566089324982 },\n { x: 0.0000014120000000000925, y: 1.44479121833187 },\n { x: 0.0000014130000000000926, y: 1.490633320624915 },\n { x: 0.0000014140000000000927, y: 1.4571191809168724 },\n { x: 0.0000014150000000000928, y: 1.479070756508637 },\n { x: 0.0000014160000000000928, y: 1.47201571523662 },\n { x: 0.000001417000000000093, y: 1.5089304910268952 },\n { x: 0.000001418000000000093, y: 1.5016359101324117 },\n { x: 0.000001419000000000093, y: 1.5402289028349656 },\n { x: 0.0000014200000000000931, y: 1.4996123374523933 },\n { x: 0.0000014210000000000932, y: 1.5390983947862773 },\n { x: 0.0000014220000000000933, y: 1.573380257701024 },\n { x: 0.0000014230000000000934, y: 1.545228658728816 },\n { x: 0.0000014240000000000934, y: 1.5182315898604775 },\n { x: 0.0000014250000000000935, y: 1.5288565986743126 },\n { x: 0.0000014260000000000936, y: 1.550765932220956 },\n { x: 0.0000014270000000000937, y: 1.539844056031576 },\n { x: 0.0000014280000000000937, y: 1.6072188955842586 },\n { x: 0.0000014290000000000938, y: 1.5637666683921325 },\n { x: 0.0000014300000000000939, y: 1.5926528672933669 },\n { x: 0.000001431000000000094, y: 1.6006688884094726 },\n { x: 0.000001432000000000094, y: 1.5808575980645503 },\n { x: 0.0000014330000000000941, y: 1.5818714452269909 },\n { x: 0.0000014340000000000942, y: 1.6104324510826464 },\n { x: 0.0000014350000000000943, y: 1.6109894062563763 },\n { x: 0.0000014360000000000943, y: 1.613775566543623 },\n { x: 0.0000014370000000000944, y: 1.5879502582947922 },\n { x: 0.0000014380000000000945, y: 1.6509233363230875 },\n { x: 0.0000014390000000000946, y: 1.666832074364236 },\n { x: 0.0000014400000000000946, y: 1.617697621024788 },\n { x: 0.0000014410000000000947, y: 1.6215467511000008 },\n { x: 0.0000014420000000000948, y: 1.6350247530000641 },\n { x: 0.0000014430000000000949, y: 1.6573130899160686 },\n { x: 0.000001444000000000095, y: 1.6472290993325687 },\n { x: 0.000001445000000000095, y: 1.6528361255604989 },\n { x: 0.000001446000000000095, y: 1.6752075728222795 },\n { x: 0.0000014470000000000952, y: 1.6604596065985828 },\n { x: 0.0000014480000000000952, y: 1.7174934450483135 },\n { x: 0.0000014490000000000953, y: 1.7151268639704775 },\n { x: 0.0000014500000000000954, y: 1.6774700480466092 },\n { x: 0.0000014510000000000955, y: 1.6605459562773377 },\n { x: 0.0000014520000000000955, y: 1.6631179816046038 },\n { x: 0.0000014530000000000956, y: 1.6734516272150848 },\n { x: 0.0000014540000000000957, y: 1.7057702302492914 },\n { x: 0.0000014550000000000958, y: 1.714602100117394 },\n { x: 0.0000014560000000000958, y: 1.7032063357622889 },\n { x: 0.000001457000000000096, y: 1.6828565751266131 },\n { x: 0.000001458000000000096, y: 1.7074587889390729 },\n { x: 0.000001459000000000096, y: 1.717877649452109 },\n { x: 0.0000014600000000000961, y: 1.7574421897984218 },\n { x: 0.0000014610000000000962, y: 1.7141339602267018 },\n { x: 0.0000014620000000000963, y: 1.7666450413502615 },\n { x: 0.0000014630000000000964, y: 1.7666094454459231 },\n { x: 0.0000014640000000000964, y: 1.7846373614348021 },\n { x: 0.0000014650000000000965, y: 1.7216312395800037 },\n { x: 0.0000014660000000000966, y: 1.7478189309272825 },\n { x: 0.0000014670000000000967, y: 1.7536177757822449 },\n { x: 0.0000014680000000000967, y: 1.7635447863280753 },\n { x: 0.0000014690000000000968, y: 1.7814573045479227 },\n { x: 0.0000014700000000000969, y: 1.789039254345991 },\n { x: 0.000001471000000000097, y: 1.7697375578374506 },\n { x: 0.000001472000000000097, y: 1.7675320681639766 },\n { x: 0.0000014730000000000971, y: 1.7701851453220134 },\n { x: 0.0000014740000000000972, y: 1.78337529058658 },\n { x: 0.0000014750000000000973, y: 1.7742950488647922 },\n { x: 0.0000014760000000000973, y: 1.7653274475326501 },\n { x: 0.0000014770000000000974, y: 1.8301639684150808 },\n { x: 0.0000014780000000000975, y: 1.8068433596873197 },\n { x: 0.0000014790000000000976, y: 1.8238155093492354 },\n { x: 0.0000014800000000000976, y: 1.7951873008280588 },\n { x: 0.0000014810000000000977, y: 1.8049504352580952 },\n { x: 0.0000014820000000000978, y: 1.780118923235781 },\n { x: 0.0000014830000000000979, y: 1.8370895852672278 },\n { x: 0.000001484000000000098, y: 1.8102842649232616 },\n { x: 0.000001485000000000098, y: 1.8142034505414075 },\n { x: 0.000001486000000000098, y: 1.8550458803647334 },\n { x: 0.0000014870000000000982, y: 1.8063987736343825 },\n { x: 0.0000014880000000000982, y: 1.803316412026017 },\n { x: 0.0000014890000000000983, y: 1.8275014476617208 },\n { x: 0.0000014900000000000984, y: 1.8345056995195583 },\n { x: 0.0000014910000000000985, y: 1.8235958930130387 },\n { x: 0.0000014920000000000985, y: 1.8685153496704994 },\n { x: 0.0000014930000000000986, y: 1.8507441695712015 },\n { x: 0.0000014940000000000987, y: 1.8607858897062826 },\n { x: 0.0000014950000000000988, y: 1.812694211987892 },\n { x: 0.0000014960000000000988, y: 1.83434609025351 },\n { x: 0.000001497000000000099, y: 1.8532545374843148 },\n { x: 0.000001498000000000099, y: 1.8643854446855914 },\n { x: 0.000001499000000000099, y: 1.8243497264912738 },\n { x: 0.0000015000000000000991, y: 1.8925134014688394 },\n { x: 0.0000015010000000000992, y: 1.860953548271042 },\n { x: 0.0000015020000000000993, y: 1.8785196325281608 },\n { x: 0.0000015030000000000994, y: 1.861150942623333 },\n { x: 0.0000015040000000000994, y: 1.8797006105166452 },\n { x: 0.0000015050000000000995, y: 1.8376681034290774 },\n { x: 0.0000015060000000000996, y: 1.8644634280071186 },\n { x: 0.0000015070000000000997, y: 1.8862993891068205 },\n { x: 0.0000015080000000000997, y: 1.8334242315716305 },\n { x: 0.0000015090000000000998, y: 1.851266129348199 },\n { x: 0.0000015100000000000999, y: 1.887588938564708 },\n { x: 0.0000015110000000001, y: 1.8662547374747216 },\n { x: 0.0000015120000000001, y: 1.8816369582640442 },\n { x: 0.0000015130000000001001, y: 1.8528951303022463 },\n { x: 0.0000015140000000001002, y: 1.8713252732134174 },\n { x: 0.0000015150000000001003, y: 1.8908649227574983 },\n { x: 0.0000015160000000001003, y: 1.906689942063815 },\n { x: 0.0000015170000000001004, y: 1.8868777950272633 },\n { x: 0.0000015180000000001005, y: 1.862199690584565 },\n { x: 0.0000015190000000001006, y: 1.8789739954545102 },\n { x: 0.0000015200000000001006, y: 1.8689118798688504 },\n { x: 0.0000015210000000001007, y: 1.9119499732277851 },\n { x: 0.0000015220000000001008, y: 1.9152563937616063 },\n { x: 0.0000015230000000001009, y: 1.9220510082439022 },\n { x: 0.000001524000000000101, y: 1.8703992835651486 },\n { x: 0.000001525000000000101, y: 1.8856038884385498 },\n { x: 0.000001526000000000101, y: 1.8984454725585482 },\n { x: 0.0000015270000000001012, y: 1.8844721673166929 },\n { x: 0.0000015280000000001012, y: 1.8925789410893754 },\n { x: 0.0000015290000000001013, y: 1.8922685412659606 },\n { x: 0.0000015300000000001014, y: 1.8836883595875777 },\n { x: 0.0000015310000000001015, y: 1.9047122803007412 },\n { x: 0.0000015320000000001015, y: 1.9296797790253686 },\n { x: 0.0000015330000000001016, y: 1.9261026261678198 },\n { x: 0.0000015340000000001017, y: 1.8868162588437538 },\n { x: 0.0000015350000000001018, y: 1.8959553657375319 },\n { x: 0.0000015360000000001018, y: 1.8674549688769102 },\n { x: 0.000001537000000000102, y: 1.8902671543748741 },\n { x: 0.000001538000000000102, y: 1.8667785130986145 },\n { x: 0.000001539000000000102, y: 1.9129225960754155 },\n { x: 0.0000015400000000001021, y: 1.8977869742151219 },\n { x: 0.0000015410000000001022, y: 1.9131871359736343 },\n { x: 0.0000015420000000001023, y: 1.9047930619613263 },\n { x: 0.0000015430000000001024, y: 1.8947747207071641 },\n { x: 0.0000015440000000001024, y: 1.8964381746455443 },\n { x: 0.0000015450000000001025, y: 1.9079773570878646 },\n { x: 0.0000015460000000001026, y: 1.9384554069184756 },\n { x: 0.0000015470000000001027, y: 1.8728636196128705 },\n { x: 0.0000015480000000001027, y: 1.8812995334068285 },\n { x: 0.0000015490000000001028, y: 1.9418367521610471 },\n { x: 0.000001550000000000103, y: 1.9355705222299138 },\n { x: 0.000001551000000000103, y: 1.90894487787589 },\n { x: 0.000001552000000000103, y: 1.8818579276871013 },\n { x: 0.0000015530000000001031, y: 1.8770799847287651 },\n { x: 0.0000015540000000001032, y: 1.9044930141630907 },\n { x: 0.0000015550000000001033, y: 1.8661651693930084 },\n { x: 0.0000015560000000001033, y: 1.907791817955513 },\n { x: 0.0000015570000000001034, y: 1.8729318308052993 },\n { x: 0.0000015580000000001035, y: 1.8732953225250497 },\n { x: 0.0000015590000000001036, y: 1.8609196273032926 },\n { x: 0.0000015600000000001036, y: 1.916577448889704 },\n { x: 0.0000015610000000001037, y: 1.876224822962021 },\n { x: 0.0000015620000000001038, y: 1.8713390808416641 },\n { x: 0.0000015630000000001039, y: 1.8824630708570054 },\n { x: 0.000001564000000000104, y: 1.8873740345399652 },\n { x: 0.000001565000000000104, y: 1.863647444573023 },\n { x: 0.000001566000000000104, y: 1.875114611514498 },\n { x: 0.0000015670000000001042, y: 1.874582951543223 },\n { x: 0.0000015680000000001042, y: 1.9212647970730914 },\n { x: 0.0000015690000000001043, y: 1.8685298585342047 },\n { x: 0.0000015700000000001044, y: 1.894426012738697 },\n { x: 0.0000015710000000001045, y: 1.9170473633939735 },\n { x: 0.0000015720000000001046, y: 1.8853544704646132 },\n { x: 0.0000015730000000001046, y: 1.889809335241923 },\n { x: 0.0000015740000000001047, y: 1.9165978128993935 },\n { x: 0.0000015750000000001048, y: 1.8913963010581722 },\n { x: 0.0000015760000000001049, y: 1.8736515303059285 },\n { x: 0.000001577000000000105, y: 1.9152477730259942 },\n { x: 0.000001578000000000105, y: 1.8440540277067565 },\n { x: 0.000001579000000000105, y: 1.9122620588824573 },\n { x: 0.0000015800000000001052, y: 1.8658959039505405 },\n { x: 0.0000015810000000001052, y: 1.847270619491048 },\n { x: 0.0000015820000000001053, y: 1.8999229757027456 },\n { x: 0.0000015830000000001054, y: 1.8506686930094023 },\n { x: 0.0000015840000000001055, y: 1.8586880732445 },\n { x: 0.0000015850000000001055, y: 1.874972060371563 },\n { x: 0.0000015860000000001056, y: 1.8704564391777614 },\n { x: 0.0000015870000000001057, y: 1.8698480599377294 },\n { x: 0.0000015880000000001058, y: 1.8482757147947744 },\n { x: 0.0000015890000000001058, y: 1.8424217848865307 },\n { x: 0.000001590000000000106, y: 1.8233781582445685 },\n { x: 0.000001591000000000106, y: 1.8702386320216384 },\n { x: 0.000001592000000000106, y: 1.8859127016120325 },\n { x: 0.0000015930000000001061, y: 1.878276160473116 },\n { x: 0.0000015940000000001062, y: 1.8677504404226315 },\n { x: 0.0000015950000000001063, y: 1.8632021353360044 },\n { x: 0.0000015960000000001064, y: 1.8322785935685886 },\n { x: 0.0000015970000000001064, y: 1.8391758023953622 },\n { x: 0.0000015980000000001065, y: 1.8096176702193707 },\n { x: 0.0000015990000000001066, y: 1.855034617913229 },\n { x: 0.0000016000000000001067, y: 1.8482835294888607 },\n { x: 0.0000016010000000001067, y: 1.835833214087766 },\n { x: 0.0000016020000000001068, y: 1.8052166331553055 },\n { x: 0.0000016030000000001069, y: 1.7902894678501065 },\n { x: 0.000001604000000000107, y: 1.8369923125350067 },\n { x: 0.000001605000000000107, y: 1.7922647488696313 },\n { x: 0.000001606000000000107, y: 1.7934672190883718 },\n { x: 0.0000016070000000001072, y: 1.8048890571115532 },\n { x: 0.0000016080000000001073, y: 1.8092032577848933 },\n { x: 0.0000016090000000001073, y: 1.8399940448264334 },\n { x: 0.0000016100000000001074, y: 1.7628483295584574 },\n { x: 0.0000016110000000001075, y: 1.7700920809298333 },\n { x: 0.0000016120000000001076, y: 1.8082683127805284 },\n { x: 0.0000016130000000001076, y: 1.810419344399425 },\n { x: 0.0000016140000000001077, y: 1.7842842877871867 },\n { x: 0.0000016150000000001078, y: 1.746427787110012 },\n { x: 0.0000016160000000001079, y: 1.7681242568510784 },\n { x: 0.000001617000000000108, y: 1.771804533141493 },\n { x: 0.000001618000000000108, y: 1.7829456494665994 },\n { x: 0.000001619000000000108, y: 1.762423417301352 },\n { x: 0.0000016200000000001082, y: 1.790192252579323 },\n { x: 0.0000016210000000001082, y: 1.7701955101310594 },\n { x: 0.0000016220000000001083, y: 1.7318761053597422 },\n { x: 0.0000016230000000001084, y: 1.728154975427654 },\n { x: 0.0000016240000000001085, y: 1.7522174422126358 },\n { x: 0.0000016250000000001085, y: 1.754419511878992 },\n { x: 0.0000016260000000001086, y: 1.7658995727361002 },\n { x: 0.0000016270000000001087, y: 1.7750836025173136 },\n { x: 0.0000016280000000001088, y: 1.705238850494079 },\n { x: 0.0000016290000000001088, y: 1.7457692846988404 },\n { x: 0.000001630000000000109, y: 1.7408691923139077 },\n { x: 0.000001631000000000109, y: 1.7172516233835076 },\n { x: 0.000001632000000000109, y: 1.723647547761742 },\n { x: 0.0000016330000000001091, y: 1.7142232962221842 },\n { x: 0.0000016340000000001092, y: 1.7319837944583334 },\n { x: 0.0000016350000000001093, y: 1.6789211047699923 },\n { x: 0.0000016360000000001094, y: 1.7209111351896542 },\n { x: 0.0000016370000000001094, y: 1.6955184701179251 },\n { x: 0.0000016380000000001095, y: 1.6661664730067631 },\n { x: 0.0000016390000000001096, y: 1.6778569539380102 },\n { x: 0.0000016400000000001097, y: 1.6820457372163402 },\n { x: 0.0000016410000000001097, y: 1.6751734765509971 },\n { x: 0.0000016420000000001098, y: 1.682032300795322 },\n { x: 0.0000016430000000001099, y: 1.6845563293536863 },\n { x: 0.00000164400000000011, y: 1.661111988270595 },\n { x: 0.00000164500000000011, y: 1.6408567993814596 },\n { x: 0.0000016460000000001101, y: 1.7008158182401056 },\n { x: 0.0000016470000000001102, y: 1.655198412132026 },\n { x: 0.0000016480000000001103, y: 1.6275625281928723 },\n { x: 0.0000016490000000001103, y: 1.6218242860538887 },\n { x: 0.0000016500000000001104, y: 1.6083884732638676 },\n { x: 0.0000016510000000001105, y: 1.6673248127665845 },\n { x: 0.0000016520000000001106, y: 1.6403953293339677 },\n { x: 0.0000016530000000001106, y: 1.6608722206893922 },\n { x: 0.0000016540000000001107, y: 1.646038983934043 },\n { x: 0.0000016550000000001108, y: 1.5938910702902471 },\n { x: 0.0000016560000000001109, y: 1.6510986313855462 },\n { x: 0.000001657000000000111, y: 1.62686701385475 },\n { x: 0.000001658000000000111, y: 1.5998921901900898 },\n { x: 0.000001659000000000111, y: 1.6245876659849168 },\n { x: 0.0000016600000000001112, y: 1.5622047901252105 },\n { x: 0.0000016610000000001112, y: 1.5742038366017066 },\n { x: 0.0000016620000000001113, y: 1.5611199997048664 },\n { x: 0.0000016630000000001114, y: 1.5871588220820974 },\n { x: 0.0000016640000000001115, y: 1.6075196228608475 },\n { x: 0.0000016650000000001115, y: 1.5421904485613767 },\n { x: 0.0000016660000000001116, y: 1.59629100663841 },\n { x: 0.0000016670000000001117, y: 1.5264660518445645 },\n { x: 0.0000016680000000001118, y: 1.5769237392862725 },\n { x: 0.0000016690000000001118, y: 1.5398858098540076 },\n { x: 0.000001670000000000112, y: 1.5534801961145324 },\n { x: 0.000001671000000000112, y: 1.5666416319487044 },\n { x: 0.000001672000000000112, y: 1.55200225135598 },\n { x: 0.0000016730000000001121, y: 1.5235845706990685 },\n { x: 0.0000016740000000001122, y: 1.5395352966628106 },\n { x: 0.0000016750000000001123, y: 1.5084874648810562 },\n { x: 0.0000016760000000001124, y: 1.5337002821845365 },\n { x: 0.0000016770000000001124, y: 1.4772938546664136 },\n { x: 0.0000016780000000001125, y: 1.5076062000475374 },\n { x: 0.0000016790000000001126, y: 1.5024882602525487 },\n { x: 0.0000016800000000001127, y: 1.4965851687817378 },\n { x: 0.0000016810000000001127, y: 1.499257658518879 },\n { x: 0.0000016820000000001128, y: 1.465534360190667 },\n { x: 0.0000016830000000001129, y: 1.4565746226363188 },\n { x: 0.000001684000000000113, y: 1.4664450594174712 },\n { x: 0.000001685000000000113, y: 1.4903293473080246 },\n { x: 0.0000016860000000001131, y: 1.4598304175366217 },\n { x: 0.0000016870000000001132, y: 1.4690706555375441 },\n { x: 0.0000016880000000001133, y: 1.4253871744836082 },\n { x: 0.0000016890000000001133, y: 1.4711967656571237 },\n { x: 0.0000016900000000001134, y: 1.4258275003680279 },\n { x: 0.0000016910000000001135, y: 1.4371963096342175 },\n { x: 0.0000016920000000001136, y: 1.420695852115151 },\n { x: 0.0000016930000000001136, y: 1.4326415536863035 },\n { x: 0.0000016940000000001137, y: 1.402635761140759 },\n { x: 0.0000016950000000001138, y: 1.441298666200187 },\n { x: 0.0000016960000000001139, y: 1.41472873211655 },\n { x: 0.000001697000000000114, y: 1.373704858308324 },\n { x: 0.000001698000000000114, y: 1.4135179993972475 },\n { x: 0.000001699000000000114, y: 1.4107919200075094 },\n { x: 0.0000017000000000001142, y: 1.3726186189339955 },\n { x: 0.0000017010000000001142, y: 1.3360545434613273 },\n { x: 0.0000017020000000001143, y: 1.3527551452603812 },\n { x: 0.0000017030000000001144, y: 1.3935391815162788 },\n { x: 0.0000017040000000001145, y: 1.3786949932401669 },\n { x: 0.0000017050000000001145, y: 1.3816801916099977 },\n { x: 0.0000017060000000001146, y: 1.3009986519663972 },\n { x: 0.0000017070000000001147, y: 1.3187780210377853 },\n { x: 0.0000017080000000001148, y: 1.3412528566768211 },\n { x: 0.0000017090000000001148, y: 1.3390480833544698 },\n { x: 0.000001710000000000115, y: 1.3056216725558858 },\n { x: 0.000001711000000000115, y: 1.2935920935829797 },\n { x: 0.000001712000000000115, y: 1.2644650949751886 },\n { x: 0.0000017130000000001151, y: 1.290977611408184 },\n { x: 0.0000017140000000001152, y: 1.3224101809561863 },\n { x: 0.0000017150000000001153, y: 1.278139503493128 },\n { x: 0.0000017160000000001154, y: 1.2959032997168354 },\n { x: 0.0000017170000000001154, y: 1.2545173717646112 },\n { x: 0.0000017180000000001155, y: 1.2292701261735286 },\n { x: 0.0000017190000000001156, y: 1.2482130911721452 },\n { x: 0.0000017200000000001157, y: 1.278691111474727 },\n { x: 0.0000017210000000001157, y: 1.2792566087515185 },\n { x: 0.0000017220000000001158, y: 1.2498210816403308 },\n { x: 0.000001723000000000116, y: 1.196011818996488 },\n { x: 0.000001724000000000116, y: 1.2594618764616352 },\n { x: 0.000001725000000000116, y: 1.2115833658757438 },\n { x: 0.0000017260000000001161, y: 1.173061215344364 },\n { x: 0.0000017270000000001162, y: 1.1716987683385647 },\n { x: 0.0000017280000000001163, y: 1.1992386167463802 },\n { x: 0.0000017290000000001163, y: 1.1890475561954534 },\n { x: 0.0000017300000000001164, y: 1.2142789474410358 },\n { x: 0.0000017310000000001165, y: 1.1355387233708554 },\n { x: 0.0000017320000000001166, y: 1.1768252613616619 },\n { x: 0.0000017330000000001166, y: 1.150082304001767 },\n { x: 0.0000017340000000001167, y: 1.1497621747608626 },\n { x: 0.0000017350000000001168, y: 1.1364680632348483 },\n { x: 0.0000017360000000001169, y: 1.14291978102332 },\n { x: 0.000001737000000000117, y: 1.1060580977273025 },\n { x: 0.000001738000000000117, y: 1.146401545956996 },\n { x: 0.000001739000000000117, y: 1.1107291983398768 },\n { x: 0.0000017400000000001172, y: 1.0793723241040567 },\n { x: 0.0000017410000000001172, y: 1.0737092073504717 },\n { x: 0.0000017420000000001173, y: 1.059155293785555 },\n { x: 0.0000017430000000001174, y: 1.1212625228086368 },\n { x: 0.0000017440000000001175, y: 1.1122442815110118 },\n { x: 0.0000017450000000001175, y: 1.0463752370298995 },\n { x: 0.0000017460000000001176, y: 1.0885412605846692 },\n { x: 0.0000017470000000001177, y: 1.0751011879270187 },\n { x: 0.0000017480000000001178, y: 1.0234236732909958 },\n { x: 0.0000017490000000001178, y: 1.0511152033041122 },\n { x: 0.000001750000000000118, y: 1.0064275902604922 },\n { x: 0.000001751000000000118, y: 1.0482282985548423 },\n { x: 0.000001752000000000118, y: 1.037717181632446 },\n { x: 0.0000017530000000001181, y: 1.0057200430319189 },\n { x: 0.0000017540000000001182, y: 1.0003929114070311 },\n { x: 0.0000017550000000001183, y: 1.0060526203316948 },\n { x: 0.0000017560000000001184, y: 0.9666791231232204 },\n { x: 0.0000017570000000001184, y: 1.011481038250688 },\n { x: 0.0000017580000000001185, y: 0.9724848378508939 },\n { x: 0.0000017590000000001186, y: 0.9785496578901185 },\n { x: 0.0000017600000000001187, y: 0.9669045211641233 },\n { x: 0.0000017610000000001187, y: 0.9927616916827425 },\n { x: 0.0000017620000000001188, y: 0.931482675695195 },\n { x: 0.000001763000000000119, y: 0.979030634139376 },\n { x: 0.000001764000000000119, y: 0.9155880976629741 },\n { x: 0.000001765000000000119, y: 0.9323797357960899 },\n { x: 0.0000017660000000001191, y: 0.9554169758189069 },\n { x: 0.0000017670000000001192, y: 0.9259991684993201 },\n { x: 0.0000017680000000001193, y: 0.8710583040159814 },\n { x: 0.0000017690000000001194, y: 0.928805033109958 },\n { x: 0.0000017700000000001194, y: 0.8822771019050856 },\n { x: 0.0000017710000000001195, y: 0.8467219574160861 },\n { x: 0.0000017720000000001196, y: 0.839532495711053 },\n { x: 0.0000017730000000001197, y: 0.8430894295902366 },\n { x: 0.0000017740000000001197, y: 0.8617802958582693 },\n { x: 0.0000017750000000001198, y: 0.8890574520010209 },\n { x: 0.0000017760000000001199, y: 0.8252023196861221 },\n { x: 0.00000177700000000012, y: 0.846191166821027 },\n { x: 0.00000177800000000012, y: 0.841275853282362 },\n { x: 0.00000177900000000012, y: 0.8120198287469949 },\n { x: 0.0000017800000000001202, y: 0.845777043375414 },\n { x: 0.0000017810000000001203, y: 0.7877953547058272 },\n { x: 0.0000017820000000001203, y: 0.7721366231936568 },\n { x: 0.0000017830000000001204, y: 0.7601043619508671 },\n { x: 0.0000017840000000001205, y: 0.7687626708524489 },\n { x: 0.0000017850000000001206, y: 0.7786574016780818 },\n { x: 0.0000017860000000001206, y: 0.7963354064030586 },\n { x: 0.0000017870000000001207, y: 0.7847265245887479 },\n { x: 0.0000017880000000001208, y: 0.7205280862844804 },\n { x: 0.0000017890000000001209, y: 0.7688533021835856 },\n { x: 0.000001790000000000121, y: 0.7389379897811448 },\n { x: 0.000001791000000000121, y: 0.7050691865007874 },\n { x: 0.000001792000000000121, y: 0.7534969048243474 },\n { x: 0.0000017930000000001212, y: 0.7021183789272125 },\n { x: 0.0000017940000000001212, y: 0.6740477136297011 },\n { x: 0.0000017950000000001213, y: 0.6994710880776371 },\n { x: 0.0000017960000000001214, y: 0.706575908824655 },\n { x: 0.0000017970000000001215, y: 0.7062683225914809 },\n { x: 0.0000017980000000001215, y: 0.6774476770459507 },\n { x: 0.0000017990000000001216, y: 0.6460618263174157 },\n { x: 0.0000018000000000001217, y: 0.629092275171784 },\n { x: 0.0000018010000000001218, y: 0.6793268556847807 },\n { x: 0.0000018020000000001218, y: 0.6719283287295943 },\n { x: 0.000001803000000000122, y: 0.6444965771338297 },\n { x: 0.000001804000000000122, y: 0.630050139732022 },\n { x: 0.000001805000000000122, y: 0.639818804647739 },\n { x: 0.0000018060000000001221, y: 0.5988363361951942 },\n { x: 0.0000018070000000001222, y: 0.6357218144748128 },\n { x: 0.0000018080000000001223, y: 0.596596571869268 },\n { x: 0.0000018090000000001224, y: 0.5539127645942263 },\n { x: 0.0000018100000000001224, y: 0.5969328899378453 },\n { x: 0.0000018110000000001225, y: 0.6070207878621521 },\n { x: 0.0000018120000000001226, y: 0.5578158944719761 },\n { x: 0.0000018130000000001227, y: 0.5383347922654027 },\n { x: 0.0000018140000000001227, y: 0.5384678172646908 },\n { x: 0.0000018150000000001228, y: 0.5203470199057184 },\n { x: 0.0000018160000000001229, y: 0.5143523944008801 },\n { x: 0.000001817000000000123, y: 0.5497136380511192 },\n { x: 0.000001818000000000123, y: 0.5207715252244023 },\n { x: 0.0000018190000000001231, y: 0.533778780400845 },\n { x: 0.0000018200000000001232, y: 0.4721907228628809 },\n { x: 0.0000018210000000001233, y: 0.5083521149433681 },\n { x: 0.0000018220000000001233, y: 0.4670134659107506 },\n { x: 0.0000018230000000001234, y: 0.4667912556292909 },\n { x: 0.0000018240000000001235, y: 0.5119507212408104 },\n { x: 0.0000018250000000001236, y: 0.48461479425898735 },\n { x: 0.0000018260000000001236, y: 0.48850297873101833 },\n { x: 0.0000018270000000001237, y: 0.46630847180215085 },\n { x: 0.0000018280000000001238, y: 0.4742941857950925 },\n { x: 0.0000018290000000001239, y: 0.41759232425854625 },\n { x: 0.000001830000000000124, y: 0.45469903467898154 },\n { x: 0.000001831000000000124, y: 0.381706326626884 },\n { x: 0.000001832000000000124, y: 0.4101451045780741 },\n { x: 0.0000018330000000001242, y: 0.41192851786047635 },\n { x: 0.0000018340000000001242, y: 0.3794438058066927 },\n { x: 0.0000018350000000001243, y: 0.4223695241692824 },\n { x: 0.0000018360000000001244, y: 0.388420389959051 },\n { x: 0.0000018370000000001245, y: 0.3729004606803574 },\n { x: 0.0000018380000000001245, y: 0.32709835757397876 },\n { x: 0.0000018390000000001246, y: 0.36317929926128756 },\n { x: 0.0000018400000000001247, y: 0.3500921063811527 },\n { x: 0.0000018410000000001248, y: 0.3134417717562017 },\n { x: 0.0000018420000000001248, y: 0.34047534978995514 },\n { x: 0.000001843000000000125, y: 0.35212934913446436 },\n { x: 0.000001844000000000125, y: 0.32808289003474056 },\n { x: 0.000001845000000000125, y: 0.30247128106412186 },\n { x: 0.0000018460000000001251, y: 0.31952707294678734 },\n { x: 0.0000018470000000001252, y: 0.2958033508946068 },\n { x: 0.0000018480000000001253, y: 0.27055301451369307 },\n { x: 0.0000018490000000001254, y: 0.2878705361828219 },\n { x: 0.0000018500000000001254, y: 0.30193324682836054 },\n { x: 0.0000018510000000001255, y: 0.2669150813875294 },\n { x: 0.0000018520000000001256, y: 0.253075388812941 },\n { x: 0.0000018530000000001257, y: 0.2317633661579683 },\n { x: 0.0000018540000000001257, y: 0.2126325869905244 },\n { x: 0.0000018550000000001258, y: 0.23592295789419557 },\n { x: 0.0000018560000000001259, y: 0.20043996321052243 },\n { x: 0.000001857000000000126, y: 0.2427672005856332 },\n { x: 0.000001858000000000126, y: 0.1932373001356702 },\n { x: 0.0000018590000000001261, y: 0.2103132746601908 },\n { x: 0.0000018600000000001262, y: 0.22499910870478354 },\n { x: 0.0000018610000000001263, y: 0.1781844591542755 },\n { x: 0.0000018620000000001263, y: 0.16638747989499747 },\n { x: 0.0000018630000000001264, y: 0.133789010706234 },\n { x: 0.0000018640000000001265, y: 0.1375886595425538 },\n { x: 0.0000018650000000001266, y: 0.16769615462187587 },\n { x: 0.0000018660000000001266, y: 0.17503074430186494 },\n { x: 0.0000018670000000001267, y: 0.1667015077365376 },\n { x: 0.0000018680000000001268, y: 0.1586269597245909 },\n { x: 0.0000018690000000001269, y: 0.09258644945132447 },\n { x: 0.000001870000000000127, y: 0.09418687166919149 },\n { x: 0.000001871000000000127, y: 0.08957902890101409 },\n { x: 0.000001872000000000127, y: 0.06773552419923072 },\n { x: 0.0000018730000000001272, y: 0.06317479021103092 },\n { x: 0.0000018740000000001272, y: 0.08621135433255578 },\n { x: 0.0000018750000000001273, y: 0.05613288564580528 },\n { x: 0.0000018760000000001274, y: 0.09232407769802704 },\n { x: 0.0000018770000000001275, y: 0.07160918405927019 },\n { x: 0.0000018780000000001275, y: 0.05760749187396033 },\n { x: 0.0000018790000000001276, y: 0.04901624811734664 },\n { x: 0.0000018800000000001277, y: 0.04742764542586185 },\n { x: 0.0000018810000000001278, y: 0.04590013587805898 },\n { x: 0.0000018820000000001278, y: 0.02858992163133199 },\n { x: 0.000001883000000000128, y: 0.005423800492616123 },\n { x: 0.000001884000000000128, y: 0.02429193335637827 },\n { x: 0.000001885000000000128, y: 0.013783369487446169 },\n { x: 0.0000018860000000001281, y: -0.011016606032124964 },\n { x: 0.0000018870000000001282, y: 0.022756802400864536 },\n { x: 0.0000018880000000001283, y: -0.04641405252828169 },\n { x: 0.0000018890000000001284, y: -0.028083359283275048 },\n { x: 0.0000018900000000001284, y: -0.030084429642825695 },\n { x: 0.0000018910000000001285, y: -0.061119889770175566 },\n { x: 0.0000018920000000001286, y: -0.09014411960715357 },\n { x: 0.0000018930000000001287, y: -0.0828155241966775 },\n { x: 0.0000018940000000001287, y: -0.044630610385212245 },\n { x: 0.0000018950000000001288, y: -0.06624098809924073 },\n { x: 0.0000018960000000001289, y: -0.09324443236856593 },\n { x: 0.000001897000000000129, y: -0.09949133613352308 },\n { x: 0.000001898000000000129, y: -0.059564000091321866 },\n { x: 0.0000018990000000001291, y: -0.09114867242379796 },\n { x: 0.0000019000000000001292, y: -0.12978941188171944 },\n { x: 0.0000019010000000001293, y: -0.11641813826958265 },\n { x: 0.0000019020000000001293, y: -0.10410161092157948 },\n { x: 0.0000019030000000001294, y: -0.11103011075741599 },\n { x: 0.0000019040000000001295, y: -0.14553718791264772 },\n { x: 0.0000019050000000001296, y: -0.147572981864493 },\n { x: 0.0000019060000000001296, y: -0.13031804905691777 },\n { x: 0.0000019070000000001297, y: -0.1851688750533873 },\n { x: 0.00000190800000000013, y: -0.15143955673946294 },\n { x: 0.00000190900000000013, y: -0.17001815677985424 },\n { x: 0.00000191000000000013, y: -0.16251946193823488 },\n { x: 0.00000191100000000013, y: -0.21493036135421975 },\n { x: 0.00000191200000000013, y: -0.20434216017903817 },\n { x: 0.00000191300000000013, y: -0.17924714052967403 },\n { x: 0.0000019140000000001302, y: -0.20558806632096843 },\n { x: 0.0000019150000000001303, y: -0.18568128678497212 },\n { x: 0.0000019160000000001304, y: -0.210093567946274 },\n { x: 0.0000019170000000001305, y: -0.26819311660233314 },\n { x: 0.0000019180000000001305, y: -0.23817857411332283 },\n { x: 0.0000019190000000001306, y: -0.24398843415801152 },\n { x: 0.0000019200000000001307, y: -0.24196508315340046 },\n { x: 0.0000019210000000001308, y: -0.274304931724491 },\n { x: 0.000001922000000000131, y: -0.2609417500211901 },\n { x: 0.000001923000000000131, y: -0.27849527707493915 },\n { x: 0.000001924000000000131, y: -0.2739161338370364 },\n { x: 0.000001925000000000131, y: -0.2699482865215363 },\n { x: 0.000001926000000000131, y: -0.27780855318155223 },\n { x: 0.0000019270000000001312, y: -0.3247390573972742 },\n { x: 0.0000019280000000001313, y: -0.3164763487566581 },\n { x: 0.0000019290000000001314, y: -0.30528204879652177 },\n { x: 0.0000019300000000001314, y: -0.3281063496408248 },\n { x: 0.0000019310000000001315, y: -0.32919674676747884 },\n { x: 0.0000019320000000001316, y: -0.35498455756718605 },\n { x: 0.0000019330000000001317, y: -0.33544629591367064 },\n { x: 0.0000019340000000001317, y: -0.33608049075372937 },\n { x: 0.000001935000000000132, y: -0.34603605944204063 },\n { x: 0.000001936000000000132, y: -0.3850958417224972 },\n { x: 0.000001937000000000132, y: -0.34268614381362766 },\n { x: 0.000001938000000000132, y: -0.3916615069361548 },\n { x: 0.000001939000000000132, y: -0.3862984562585444 },\n { x: 0.000001940000000000132, y: -0.4216026394243932 },\n { x: 0.0000019410000000001323, y: -0.36928248393042035 },\n { x: 0.0000019420000000001323, y: -0.40189306404810465 },\n { x: 0.0000019430000000001324, y: -0.3934414314400235 },\n { x: 0.0000019440000000001325, y: -0.42776543227184693 },\n { x: 0.0000019450000000001326, y: -0.43440293632840626 },\n { x: 0.0000019460000000001326, y: -0.4191035501301289 },\n { x: 0.0000019470000000001327, y: -0.4433629905620163 },\n { x: 0.000001948000000000133, y: -0.46121805103042807 },\n { x: 0.000001949000000000133, y: -0.4716610659187238 },\n { x: 0.000001950000000000133, y: -0.47579920044406976 },\n { x: 0.000001951000000000133, y: -0.4313459850787053 },\n { x: 0.000001952000000000133, y: -0.5123738994824097 },\n { x: 0.000001953000000000133, y: -0.46680404977110207 },\n { x: 0.0000019540000000001332, y: -0.504416615264248 },\n { x: 0.0000019550000000001333, y: -0.4813511752515375 },\n { x: 0.0000019560000000001334, y: -0.5076667339324117 },\n { x: 0.0000019570000000001335, y: -0.5398511554097921 },\n { x: 0.0000019580000000001335, y: -0.5036475488676722 },\n { x: 0.0000019590000000001336, y: -0.4857626770104701 },\n { x: 0.0000019600000000001337, y: -0.5307612027479378 },\n { x: 0.0000019610000000001338, y: -0.5338352765635476 },\n { x: 0.000001962000000000134, y: -0.5394790091511877 },\n { x: 0.000001963000000000134, y: -0.5364157268208168 },\n { x: 0.000001964000000000134, y: -0.5261546973742287 },\n { x: 0.000001965000000000134, y: -0.5927599445580012 },\n { x: 0.000001966000000000134, y: -0.5421861366976465 },\n { x: 0.0000019670000000001342, y: -0.5921944772681971 },\n { x: 0.0000019680000000001343, y: -0.597790465523866 },\n { x: 0.0000019690000000001344, y: -0.6144523577482467 },\n { x: 0.0000019700000000001345, y: -0.5912264084655625 },\n { x: 0.0000019710000000001345, y: -0.5729827150843166 },\n { x: 0.0000019720000000001346, y: -0.57784533258804 },\n { x: 0.0000019730000000001347, y: -0.585805610239716 },\n { x: 0.0000019740000000001348, y: -0.6184214520880771 },\n { x: 0.000001975000000000135, y: -0.649203399181819 },\n { x: 0.000001976000000000135, y: -0.6202538804430577 },\n { x: 0.000001977000000000135, y: -0.6022826557909744 },\n { x: 0.000001978000000000135, y: -0.6329986164446779 },\n { x: 0.000001979000000000135, y: -0.618920588388072 },\n { x: 0.000001980000000000135, y: -0.6451001098528613 },\n { x: 0.0000019810000000001353, y: -0.6202764877817638 },\n { x: 0.0000019820000000001354, y: -0.6244265892190791 },\n { x: 0.0000019830000000001354, y: -0.6936699168444022 },\n { x: 0.0000019840000000001355, y: -0.6684643142520372 },\n { x: 0.0000019850000000001356, y: -0.6856379449776525 },\n { x: 0.0000019860000000001357, y: -0.7052326912020868 },\n { x: 0.0000019870000000001357, y: -0.6872775923771802 },\n { x: 0.000001988000000000136, y: -0.670452883412318 },\n { x: 0.000001989000000000136, y: -0.6734325196466604 },\n { x: 0.000001990000000000136, y: -0.7082276953759489 },\n { x: 0.000001991000000000136, y: -0.7382290226574425 },\n { x: 0.000001992000000000136, y: -0.6839080850872912 },\n { x: 0.000001993000000000136, y: -0.743900784847232 },\n { x: 0.0000019940000000001363, y: -0.7646719011435118 },\n { x: 0.0000019950000000001363, y: -0.717200885013258 },\n { x: 0.0000019960000000001364, y: -0.7250010129113865 },\n { x: 0.0000019970000000001365, y: -0.7523366825136548 },\n { x: 0.0000019980000000001366, y: -0.765657961253851 },\n { x: 0.0000019990000000001366, y: -0.7884255819669997 },\n { x: 0.0000020000000000001367, y: -0.7645731154095298 },\n { x: 0.0000020010000000001368, y: -0.7665298098181962 },\n { x: 0.000002002000000000137, y: -0.7949515270491656 },\n { x: 0.000002003000000000137, y: -0.7892599122083302 },\n { x: 0.000002004000000000137, y: -0.8043419108854832 },\n { x: 0.000002005000000000137, y: -0.7756148401523104 },\n { x: 0.000002006000000000137, y: -0.769416506714911 },\n { x: 0.0000020070000000001372, y: -0.7876894578703126 },\n { x: 0.0000020080000000001373, y: -0.7957297295185116 },\n { x: 0.0000020090000000001374, y: -0.7811228497061362 },\n { x: 0.0000020100000000001375, y: -0.7864072428903285 },\n { x: 0.0000020110000000001375, y: -0.8418432500737286 },\n { x: 0.0000020120000000001376, y: -0.7879182413594504 },\n { x: 0.0000020130000000001377, y: -0.7954325274132081 },\n { x: 0.0000020140000000001378, y: -0.8231165363390369 },\n { x: 0.000002015000000000138, y: -0.8674962827800862 },\n { x: 0.000002016000000000138, y: -0.8183887259231337 },\n { x: 0.000002017000000000138, y: -0.8137624436228066 },\n { x: 0.000002018000000000138, y: -0.8684586228855796 },\n { x: 0.000002019000000000138, y: -0.890947095541127 },\n { x: 0.000002020000000000138, y: -0.8913091068871473 },\n { x: 0.0000020210000000001383, y: -0.8781718339976893 },\n { x: 0.0000020220000000001384, y: -0.9046866955588501 },\n { x: 0.0000020230000000001384, y: -0.8423356805855133 },\n { x: 0.0000020240000000001385, y: -0.8466076164859948 },\n { x: 0.0000020250000000001386, y: -0.8841358206078905 },\n { x: 0.0000020260000000001387, y: -0.9172006316104219 },\n { x: 0.0000020270000000001387, y: -0.9109546931390988 },\n { x: 0.000002028000000000139, y: -0.9174968579103381 },\n { x: 0.000002029000000000139, y: -0.8716075551075205 },\n { x: 0.000002030000000000139, y: -0.8699296349311166 },\n { x: 0.000002031000000000139, y: -0.90296407722351 },\n { x: 0.000002032000000000139, y: -0.9277027898533693 },\n { x: 0.000002033000000000139, y: -0.9048135944177843 },\n { x: 0.0000020340000000001393, y: -0.9028026955581575 },\n { x: 0.0000020350000000001393, y: -0.9126183563923367 },\n { x: 0.0000020360000000001394, y: -0.9542143003347459 },\n { x: 0.0000020370000000001395, y: -0.9057740346986957 },\n { x: 0.0000020380000000001396, y: -0.9629078209445586 },\n { x: 0.0000020390000000001396, y: -0.9094026438664571 },\n { x: 0.0000020400000000001397, y: -0.9558778764001176 },\n { x: 0.0000020410000000001398, y: -0.9769666190893403 },\n { x: 0.00000204200000000014, y: -0.9359181174544778 },\n { x: 0.00000204300000000014, y: -0.981088809662785 },\n { x: 0.00000204400000000014, y: -0.9789537143919016 },\n { x: 0.00000204500000000014, y: -0.9333047536362957 },\n { x: 0.00000204600000000014, y: -0.9889485705412342 },\n { x: 0.0000020470000000001402, y: -0.977747464526857 },\n { x: 0.0000020480000000001403, y: -1.015597318795567 },\n { x: 0.0000020490000000001404, y: -0.9818532699972032 },\n { x: 0.0000020500000000001405, y: -1.0268027174143752 },\n { x: 0.0000020510000000001405, y: -0.9608747574634242 },\n { x: 0.0000020520000000001406, y: -1.0215854364802281 },\n { x: 0.0000020530000000001407, y: -0.9762352838521732 },\n { x: 0.0000020540000000001408, y: -1.0287664209675345 },\n { x: 0.000002055000000000141, y: -1.0448408144307286 },\n { x: 0.000002056000000000141, y: -1.043894847886768 },\n { x: 0.000002057000000000141, y: -1.036080075498768 },\n { x: 0.000002058000000000141, y: -1.0368753307921756 },\n { x: 0.000002059000000000141, y: -1.0264875487132825 },\n { x: 0.0000020600000000001412, y: -1.024030475113556 },\n { x: 0.0000020610000000001413, y: -1.045614729630012 },\n { x: 0.0000020620000000001414, y: -1.0209801206054478 },\n { x: 0.0000020630000000001414, y: -1.0337165417908984 },\n { x: 0.0000020640000000001415, y: -1.0080211197530593 },\n { x: 0.0000020650000000001416, y: -1.0173128292499731 },\n { x: 0.0000020660000000001417, y: -1.0740949372255375 },\n { x: 0.0000020670000000001417, y: -1.056149430721851 },\n { x: 0.000002068000000000142, y: -1.0666807984844948 },\n { x: 0.000002069000000000142, y: -1.053184947626393 },\n { x: 0.000002070000000000142, y: -1.089708422368973 },\n { x: 0.000002071000000000142, y: -1.0421730521176458 },\n { x: 0.000002072000000000142, y: -1.0645104089707633 },\n { x: 0.000002073000000000142, y: -1.1075151833002732 },\n { x: 0.0000020740000000001423, y: -1.0732942253716746 },\n { x: 0.0000020750000000001423, y: -1.0519799092753723 },\n { x: 0.0000020760000000001424, y: -1.0830883027181253 },\n { x: 0.0000020770000000001425, y: -1.0744323382748378 },\n { x: 0.0000020780000000001426, y: -1.0824061164678547 },\n { x: 0.0000020790000000001426, y: -1.1072313129783127 },\n { x: 0.0000020800000000001427, y: -1.0582448264160995 },\n { x: 0.000002081000000000143, y: -1.1289713795240328 },\n { x: 0.000002082000000000143, y: -1.0914047127398843 },\n { x: 0.000002083000000000143, y: -1.1148746567994705 },\n { x: 0.000002084000000000143, y: -1.0865528507310622 },\n { x: 0.000002085000000000143, y: -1.0724142677880109 },\n { x: 0.000002086000000000143, y: -1.1024906842074884 },\n { x: 0.0000020870000000001432, y: -1.0946637312140621 },\n { x: 0.0000020880000000001433, y: -1.1541119175527692 },\n { x: 0.0000020890000000001434, y: -1.133310661686653 },\n { x: 0.0000020900000000001435, y: -1.0983116049556387 },\n { x: 0.0000020910000000001435, y: -1.093330643016027 },\n { x: 0.0000020920000000001436, y: -1.0917736095879387 },\n { x: 0.0000020930000000001437, y: -1.1650635498914457 },\n { x: 0.0000020940000000001438, y: -1.1095407157578265 },\n { x: 0.000002095000000000144, y: -1.1656614968255092 },\n { x: 0.000002096000000000144, y: -1.1060352224021655 },\n { x: 0.000002097000000000144, y: -1.1325034867339496 },\n { x: 0.000002098000000000144, y: -1.1715055937258096 },\n { x: 0.000002099000000000144, y: -1.1344422713785771 },\n { x: 0.0000021000000000001442, y: -1.119351852076914 },\n { x: 0.0000021010000000001443, y: -1.1329027979150834 },\n { x: 0.0000021020000000001444, y: -1.1751661962178672 },\n { x: 0.0000021030000000001444, y: -1.1392390449567167 },\n { x: 0.0000021040000000001445, y: -1.14642678312887 },\n { x: 0.0000021050000000001446, y: -1.1368408341842335 },\n { x: 0.0000021060000000001447, y: -1.1307917035716262 },\n { x: 0.0000021070000000001447, y: -1.1515139044097298 },\n { x: 0.000002108000000000145, y: -1.1918767649650936 },\n { x: 0.000002109000000000145, y: -1.1499017603176236 },\n { x: 0.000002110000000000145, y: -1.1657717130624003 },\n { x: 0.000002111000000000145, y: -1.1901063025797451 },\n { x: 0.000002112000000000145, y: -1.1875406627098366 },\n { x: 0.000002113000000000145, y: -1.1462588127149231 },\n { x: 0.0000021140000000001453, y: -1.1922419553615307 },\n { x: 0.0000021150000000001453, y: -1.1682219316553129 },\n { x: 0.0000021160000000001454, y: -1.1830653479107394 },\n { x: 0.0000021170000000001455, y: -1.1753518681492223 },\n { x: 0.0000021180000000001456, y: -1.2085768654552629 },\n { x: 0.0000021190000000001456, y: -1.221780302107408 },\n { x: 0.0000021200000000001457, y: -1.1790986628657338 },\n { x: 0.000002121000000000146, y: -1.1752299314504844 },\n { x: 0.000002122000000000146, y: -1.2262975081705525 },\n { x: 0.000002123000000000146, y: -1.1547690707308786 },\n { x: 0.000002124000000000146, y: -1.155590748589819 },\n { x: 0.000002125000000000146, y: -1.2215201107619296 },\n { x: 0.000002126000000000146, y: -1.192214232298731 },\n { x: 0.0000021270000000001462, y: -1.1976036926673637 },\n { x: 0.0000021280000000001463, y: -1.2106667121191867 },\n { x: 0.0000021290000000001464, y: -1.1810961522838284 },\n { x: 0.0000021300000000001465, y: -1.2294173006177818 },\n { x: 0.0000021310000000001465, y: -1.1891311008444585 },\n { x: 0.0000021320000000001466, y: -1.2103787790498537 },\n { x: 0.0000021330000000001467, y: -1.1738459803287855 },\n { x: 0.0000021340000000001468, y: -1.1862068278047035 },\n { x: 0.000002135000000000147, y: -1.207573731508814 },\n { x: 0.000002136000000000147, y: -1.2149035948322942 },\n { x: 0.000002137000000000147, y: -1.2460034483121056 },\n { x: 0.000002138000000000147, y: -1.218073011122839 },\n { x: 0.000002139000000000147, y: -1.193477306405147 },\n { x: 0.0000021400000000001472, y: -1.2206873460940273 },\n { x: 0.0000021410000000001473, y: -1.1965849016122774 },\n { x: 0.0000021420000000001474, y: -1.1969376647950813 },\n { x: 0.0000021430000000001474, y: -1.2092138988385954 },\n { x: 0.0000021440000000001475, y: -1.2470580334403962 },\n { x: 0.0000021450000000001476, y: -1.1932307726756652 },\n { x: 0.0000021460000000001477, y: -1.2503499891913694 },\n { x: 0.0000021470000000001477, y: -1.2320580477943053 },\n { x: 0.000002148000000000148, y: -1.1976027721262665 },\n { x: 0.000002149000000000148, y: -1.2301644295325902 },\n { x: 0.000002150000000000148, y: -1.221425317048347 },\n { x: 0.000002151000000000148, y: -1.205922758276388 },\n { x: 0.000002152000000000148, y: -1.1945979059554424 },\n { x: 0.000002153000000000148, y: -1.240158317622497 },\n { x: 0.0000021540000000001483, y: -1.2116420584268912 },\n { x: 0.0000021550000000001484, y: -1.2258934364843523 },\n { x: 0.0000021560000000001484, y: -1.1967845702948345 },\n { x: 0.0000021570000000001485, y: -1.24120043270647 },\n { x: 0.0000021580000000001486, y: -1.2249432129628346 },\n { x: 0.0000021590000000001487, y: -1.2515922712458944 },\n { x: 0.0000021600000000001487, y: -1.2211069243383434 },\n { x: 0.000002161000000000149, y: -1.261260376327873 },\n { x: 0.000002162000000000149, y: -1.2597208700714275 },\n { x: 0.000002163000000000149, y: -1.262721729173913 },\n { x: 0.000002164000000000149, y: -1.1900986319284 },\n { x: 0.000002165000000000149, y: -1.2013695859844655 },\n { x: 0.000002166000000000149, y: -1.2062483818664547 },\n { x: 0.0000021670000000001493, y: -1.264180942861569 },\n { x: 0.0000021680000000001493, y: -1.2063910148407289 },\n { x: 0.0000021690000000001494, y: -1.195093747960024 },\n { x: 0.0000021700000000001495, y: -1.2540727735025274 },\n { x: 0.0000021710000000001496, y: -1.2390252263508523 },\n { x: 0.0000021720000000001496, y: -1.2087925330547704 },\n { x: 0.0000021730000000001497, y: -1.252038739103907 },\n { x: 0.0000021740000000001498, y: -1.2533975676472286 },\n { x: 0.00000217500000000015, y: -1.1902217976584448 },\n { x: 0.00000217600000000015, y: -1.2200175389814245 },\n { x: 0.00000217700000000015, y: -1.2392712135731416 },\n { x: 0.00000217800000000015, y: -1.2280501975960687 },\n { x: 0.00000217900000000015, y: -1.2475047742887264 },\n { x: 0.0000021800000000001502, y: -1.2510222695503483 },\n { x: 0.0000021810000000001503, y: -1.1876862560983892 },\n { x: 0.0000021820000000001504, y: -1.2584145645790799 },\n { x: 0.0000021830000000001505, y: -1.2220408123327722 },\n { x: 0.0000021840000000001505, y: -1.2292066542012205 },\n { x: 0.0000021850000000001506, y: -1.253557191935308 },\n { x: 0.0000021860000000001507, y: -1.1926371990935603 },\n { x: 0.0000021870000000001508, y: -1.1886819820084908 },\n { x: 0.000002188000000000151, y: -1.2521227410726932 },\n { x: 0.000002189000000000151, y: -1.1982815456594678 },\n { x: 0.000002190000000000151, y: -1.2304199849701873 },\n { x: 0.000002191000000000151, y: -1.196274980750317 },\n { x: 0.000002192000000000151, y: -1.2007756687056381 },\n { x: 0.000002193000000000151, y: -1.2155285705874976 },\n { x: 0.0000021940000000001513, y: -1.1931937974164522 },\n { x: 0.0000021950000000001514, y: -1.2121202800913422 },\n { x: 0.0000021960000000001514, y: -1.2552513308758757 },\n { x: 0.0000021970000000001515, y: -1.2488143341984481 },\n { x: 0.0000021980000000001516, y: -1.2169093023486524 },\n { x: 0.0000021990000000001517, y: -1.2340277290062873 },\n { x: 0.0000022000000000001517, y: -1.184350360653403 },\n { x: 0.000002201000000000152, y: -1.2304628952663486 },\n { x: 0.000002202000000000152, y: -1.199277070586878 },\n { x: 0.000002203000000000152, y: -1.1809330571142898 },\n { x: 0.000002204000000000152, y: -1.2214166233868717 },\n { x: 0.000002205000000000152, y: -1.180345964878448 },\n { x: 0.000002206000000000152, y: -1.239229219607888 },\n { x: 0.0000022070000000001523, y: -1.1941495961805357 },\n { x: 0.0000022080000000001523, y: -1.1798969823347527 },\n { x: 0.0000022090000000001524, y: -1.220777451785606 },\n { x: 0.0000022100000000001525, y: -1.1900870364011982 },\n { x: 0.0000022110000000001526, y: -1.185167628226522 },\n { x: 0.0000022120000000001526, y: -1.20537771589163 },\n { x: 0.0000022130000000001527, y: -1.2620121359397163 },\n { x: 0.0000022140000000001528, y: -1.2370870492852872 },\n { x: 0.000002215000000000153, y: -1.217257498349013 },\n { x: 0.000002216000000000153, y: -1.2147858898738997 },\n { x: 0.000002217000000000153, y: -1.1995495046945983 },\n { x: 0.000002218000000000153, y: -1.2311418132335596 },\n { x: 0.000002219000000000153, y: -1.1661146054435807 },\n { x: 0.0000022200000000001532, y: -1.189445358182485 },\n { x: 0.0000022210000000001533, y: -1.193723532124603 },\n { x: 0.0000022220000000001534, y: -1.2205997269585525 },\n { x: 0.0000022230000000001535, y: -1.1759438785574856 },\n { x: 0.0000022240000000001535, y: -1.1924294438045688 },\n { x: 0.0000022250000000001536, y: -1.1752307624750762 },\n { x: 0.0000022260000000001537, y: -1.2104636319322517 },\n { x: 0.0000022270000000001538, y: -1.155074548308587 },\n { x: 0.000002228000000000154, y: -1.1837161430559953 },\n { x: 0.000002229000000000154, y: -1.1923890731880866 },\n { x: 0.000002230000000000154, y: -1.1937185608674448 },\n { x: 0.000002231000000000154, y: -1.1868646120198374 },\n { x: 0.000002232000000000154, y: -1.1981177036411008 },\n { x: 0.000002233000000000154, y: -1.1372045199941465 },\n { x: 0.0000022340000000001543, y: -1.1500947858201753 },\n { x: 0.0000022350000000001544, y: -1.1612356802393617 },\n { x: 0.0000022360000000001544, y: -1.1732062417515428 },\n { x: 0.0000022370000000001545, y: -1.1992861521854046 },\n { x: 0.0000022380000000001546, y: -1.1945112082604952 },\n { x: 0.0000022390000000001547, y: -1.1760882121467615 },\n { x: 0.0000022400000000001547, y: -1.1601113252276647 },\n { x: 0.000002241000000000155, y: -1.1439224901223617 },\n { x: 0.000002242000000000155, y: -1.1547704321519372 },\n { x: 0.000002243000000000155, y: -1.170673766752924 },\n { x: 0.000002244000000000155, y: -1.126093179273305 },\n { x: 0.000002245000000000155, y: -1.165227583954706 },\n { x: 0.000002246000000000155, y: -1.1493644873470203 },\n { x: 0.0000022470000000001553, y: -1.1567661294009133 },\n { x: 0.0000022480000000001553, y: -1.107782891688032 },\n { x: 0.0000022490000000001554, y: -1.15201631887018 },\n { x: 0.0000022500000000001555, y: -1.1009009057101333 },\n { x: 0.0000022510000000001556, y: -1.1149168603313098 },\n { x: 0.0000022520000000001556, y: -1.1672744113046378 },\n { x: 0.0000022530000000001557, y: -1.1591160088368864 },\n { x: 0.0000022540000000001558, y: -1.1265483337539257 },\n { x: 0.000002255000000000156, y: -1.1292095536428317 },\n { x: 0.000002256000000000156, y: -1.1588148083431178 },\n { x: 0.000002257000000000156, y: -1.150888903458958 },\n { x: 0.000002258000000000156, y: -1.1034365029124422 },\n { x: 0.000002259000000000156, y: -1.118858677475327 },\n { x: 0.0000022600000000001562, y: -1.118025466894398 },\n { x: 0.0000022610000000001563, y: -1.1201425447339548 },\n { x: 0.0000022620000000001564, y: -1.079348766346186 },\n { x: 0.0000022630000000001565, y: -1.0818061281282823 },\n { x: 0.0000022640000000001565, y: -1.0816275613263364 },\n { x: 0.0000022650000000001566, y: -1.0855372447437086 },\n { x: 0.0000022660000000001567, y: -1.1103061208083056 },\n { x: 0.0000022670000000001568, y: -1.0678206663156318 },\n { x: 0.000002268000000000157, y: -1.0519978857739078 },\n { x: 0.000002269000000000157, y: -1.1113132445584515 },\n { x: 0.000002270000000000157, y: -1.0769208196942672 },\n { x: 0.000002271000000000157, y: -1.0670594454839735 },\n { x: 0.000002272000000000157, y: -1.0679897990303937 },\n { x: 0.0000022730000000001572, y: -1.1032504454144747 },\n { x: 0.0000022740000000001573, y: -1.0547875734564618 },\n { x: 0.0000022750000000001574, y: -1.070298090856433 },\n { x: 0.0000022760000000001574, y: -1.058545507616113 },\n { x: 0.0000022770000000001575, y: -1.032711359509102 },\n { x: 0.0000022780000000001576, y: -1.0957870643146737 },\n { x: 0.0000022790000000001577, y: -1.0648584519130846 },\n { x: 0.0000022800000000001577, y: -1.0177923712607453 },\n { x: 0.000002281000000000158, y: -1.0518369844027828 },\n { x: 0.000002282000000000158, y: -1.0662998151028957 },\n { x: 0.000002283000000000158, y: -1.0516312697026737 },\n { x: 0.000002284000000000158, y: -1.0527145248700152 },\n { x: 0.000002285000000000158, y: -1.0276906331732636 },\n { x: 0.000002286000000000158, y: -1.0517350949331168 },\n { x: 0.0000022870000000001583, y: -1.0271290852668449 },\n { x: 0.0000022880000000001583, y: -1.0408319080118253 },\n { x: 0.0000022890000000001584, y: -1.0497125809983106 },\n { x: 0.0000022900000000001585, y: -0.9904775030385523 },\n { x: 0.0000022910000000001586, y: -1.0000816901285665 },\n { x: 0.0000022920000000001586, y: -1.015584601937064 },\n { x: 0.0000022930000000001587, y: -1.007773690505279 },\n { x: 0.000002294000000000159, y: -0.9839536945625968 },\n { x: 0.000002295000000000159, y: -0.9815773762528389 },\n { x: 0.000002296000000000159, y: -1.0152624608434677 },\n { x: 0.000002297000000000159, y: -1.002600523745201 },\n { x: 0.000002298000000000159, y: -1.0264174750303148 },\n { x: 0.000002299000000000159, y: -1.0098950388254664 },\n { x: 0.0000023000000000001592, y: -0.9885558817913994 },\n { x: 0.0000023010000000001593, y: -1.0201784659098563 },\n { x: 0.0000023020000000001594, y: -0.9946775603998603 },\n { x: 0.0000023030000000001595, y: -0.9699039220306213 },\n { x: 0.0000023040000000001595, y: -1.0043708452905702 },\n { x: 0.0000023050000000001596, y: -0.9929122727817833 },\n { x: 0.0000023060000000001597, y: -0.9801997149116384 },\n { x: 0.0000023070000000001598, y: -0.9871669521845855 },\n { x: 0.00000230800000000016, y: -0.9573717698910257 },\n { x: 0.00000230900000000016, y: -0.9957282113470034 },\n { x: 0.00000231000000000016, y: -0.9393598763056146 },\n { x: 0.00000231100000000016, y: -0.9212155933346302 },\n { x: 0.00000231200000000016, y: -0.95676706694914 },\n { x: 0.0000023130000000001602, y: -0.9424792805278669 },\n { x: 0.0000023140000000001603, y: -0.9671742793017462 },\n { x: 0.0000023150000000001604, y: -0.9294478309233294 },\n { x: 0.0000023160000000001604, y: -0.9217912523481558 },\n { x: 0.0000023170000000001605, y: -0.9350809926457113 },\n { x: 0.0000023180000000001606, y: -0.9221849356251933 },\n { x: 0.0000023190000000001607, y: -0.9348296811828873 },\n { x: 0.0000023200000000001607, y: -0.9377073420135766 },\n { x: 0.000002321000000000161, y: -0.9338306966163311 },\n { x: 0.000002322000000000161, y: -0.90446236915445 },\n { x: 0.000002323000000000161, y: -0.8698346198414872 },\n { x: 0.000002324000000000161, y: -0.9211319622460409 },\n { x: 0.000002325000000000161, y: -0.9128822942885423 },\n { x: 0.000002326000000000161, y: -0.8681301727537557 },\n { x: 0.0000023270000000001613, y: -0.8723218309465678 },\n { x: 0.0000023280000000001613, y: -0.8632247422717597 },\n { x: 0.0000023290000000001614, y: -0.8628777953061457 },\n { x: 0.0000023300000000001615, y: -0.8422775633587523 },\n { x: 0.0000023310000000001616, y: -0.8617671836651793 },\n { x: 0.0000023320000000001616, y: -0.8336581392322593 },\n { x: 0.0000023330000000001617, y: -0.8391467977334258 },\n { x: 0.000002334000000000162, y: -0.878034198713163 },\n { x: 0.000002335000000000162, y: -0.8931727987222301 },\n { x: 0.000002336000000000162, y: -0.8636530864352051 },\n { x: 0.000002337000000000162, y: -0.8681278471310856 },\n { x: 0.000002338000000000162, y: -0.8195160557603954 },\n { x: 0.000002339000000000162, y: -0.8648588409173688 },\n { x: 0.0000023400000000001622, y: -0.8065159241068366 },\n { x: 0.0000023410000000001623, y: -0.8274771749548573 },\n { x: 0.0000023420000000001624, y: -0.8436961778430836 },\n { x: 0.0000023430000000001625, y: -0.8212340747694735 },\n { x: 0.0000023440000000001625, y: -0.8393787425492343 },\n { x: 0.0000023450000000001626, y: -0.8074927737470309 },\n { x: 0.0000023460000000001627, y: -0.8418699303977784 },\n { x: 0.0000023470000000001628, y: -0.8070928966541282 },\n { x: 0.000002348000000000163, y: -0.7883104331164187 },\n { x: 0.000002349000000000163, y: -0.8349963316752298 },\n { x: 0.000002350000000000163, y: -0.7853657029023338 },\n { x: 0.000002351000000000163, y: -0.8028047746162525 },\n { x: 0.000002352000000000163, y: -0.8161631240225915 },\n { x: 0.0000023530000000001632, y: -0.7799867088364262 },\n { x: 0.0000023540000000001633, y: -0.7519970201010164 },\n { x: 0.0000023550000000001634, y: -0.802521768463922 },\n { x: 0.0000023560000000001635, y: -0.7778319683787733 },\n { x: 0.0000023570000000001635, y: -0.8007778542447999 },\n { x: 0.0000023580000000001636, y: -0.790757528795572 },\n { x: 0.0000023590000000001637, y: -0.751071363495006 },\n { x: 0.0000023600000000001638, y: -0.7377765966961166 },\n { x: 0.000002361000000000164, y: -0.7129436183290365 },\n { x: 0.000002362000000000164, y: -0.7139996508740053 },\n { x: 0.000002363000000000164, y: -0.7264669566780427 },\n { x: 0.000002364000000000164, y: -0.7317054327514088 },\n { x: 0.000002365000000000164, y: -0.7488292210688796 },\n { x: 0.000002366000000000164, y: -0.6884826667943789 },\n { x: 0.0000023670000000001643, y: -0.7075832865729976 },\n { x: 0.0000023680000000001644, y: -0.6915499825415492 },\n { x: 0.0000023690000000001644, y: -0.6850849369832764 },\n { x: 0.0000023700000000001645, y: -0.7239955834260631 },\n { x: 0.0000023710000000001646, y: -0.6729359141885862 },\n { x: 0.0000023720000000001647, y: -0.677834834343801 },\n { x: 0.0000023730000000001647, y: -0.7281967299857802 },\n { x: 0.000002374000000000165, y: -0.674799073834172 },\n { x: 0.000002375000000000165, y: -0.6926508681810462 },\n { x: 0.000002376000000000165, y: -0.6925134095466664 },\n { x: 0.000002377000000000165, y: -0.6561408146936505 },\n { x: 0.000002378000000000165, y: -0.7045605904383241 },\n { x: 0.000002379000000000165, y: -0.6936969622698995 },\n { x: 0.0000023800000000001653, y: -0.6238196838440893 },\n { x: 0.0000023810000000001653, y: -0.6872495629060865 },\n { x: 0.0000023820000000001654, y: -0.6184585390211844 },\n { x: 0.0000023830000000001655, y: -0.6215494436836672 },\n { x: 0.0000023840000000001656, y: -0.6243731301575307 },\n { x: 0.0000023850000000001656, y: -0.6232058288702654 },\n { x: 0.0000023860000000001657, y: -0.6703009953677034 },\n { x: 0.0000023870000000001658, y: -0.6117805120661874 },\n { x: 0.000002388000000000166, y: -0.5917934031444606 },\n { x: 0.000002389000000000166, y: -0.6438296938824454 },\n { x: 0.000002390000000000166, y: -0.598350652587067 },\n { x: 0.000002391000000000166, y: -0.6107921196786794 },\n { x: 0.000002392000000000166, y: -0.6356405832534027 },\n { x: 0.0000023930000000001662, y: -0.5682657158033384 },\n { x: 0.0000023940000000001663, y: -0.5777583586565108 },\n { x: 0.0000023950000000001664, y: -0.5947770260036661 },\n { x: 0.0000023960000000001665, y: -0.5958471707478002 },\n { x: 0.0000023970000000001665, y: -0.5577077602540511 },\n { x: 0.0000023980000000001666, y: -0.5632594072916399 },\n { x: 0.0000023990000000001667, y: -0.5609320363309819 },\n { x: 0.0000024000000000001668, y: -0.5658335784766687 },\n { x: 0.000002401000000000167, y: -0.5929972071078811 },\n { x: 0.000002402000000000167, y: -0.5354208878810454 },\n { x: 0.000002403000000000167, y: -0.5599789084237445 },\n { x: 0.000002404000000000167, y: -0.5242449093053955 },\n { x: 0.000002405000000000167, y: -0.5162730148369371 },\n { x: 0.000002406000000000167, y: -0.5680614304312296 },\n { x: 0.0000024070000000001673, y: -0.5218515715169217 },\n { x: 0.0000024080000000001674, y: -0.5216434385688059 },\n { x: 0.0000024090000000001674, y: -0.5000522615760793 },\n { x: 0.0000024100000000001675, y: -0.49269311908697444 },\n { x: 0.0000024110000000001676, y: -0.5284569477774332 },\n { x: 0.0000024120000000001677, y: -0.5225508255167066 },\n { x: 0.0000024130000000001677, y: -0.48499096544340026 },\n { x: 0.000002414000000000168, y: -0.5071563023105641 },\n { x: 0.000002415000000000168, y: -0.5063415532993574 },\n { x: 0.000002416000000000168, y: -0.49452662679542136 },\n { x: 0.000002417000000000168, y: -0.4597341366445032 },\n { x: 0.000002418000000000168, y: -0.4945018018640034 },\n { x: 0.000002419000000000168, y: -0.4534957207717517 },\n { x: 0.0000024200000000001683, y: -0.4705131894858341 },\n { x: 0.0000024210000000001683, y: -0.431024404227471 },\n { x: 0.0000024220000000001684, y: -0.4828906664039683 },\n { x: 0.0000024230000000001685, y: -0.4754051043691047 },\n { x: 0.0000024240000000001686, y: -0.47416575816968237 },\n { x: 0.0000024250000000001686, y: -0.47753355875265197 },\n { x: 0.0000024260000000001687, y: -0.45398698381985414 },\n { x: 0.0000024270000000001688, y: -0.4180357361647906 },\n { x: 0.000002428000000000169, y: -0.4516942430630965 },\n { x: 0.000002429000000000169, y: -0.45323668107092047 },\n { x: 0.000002430000000000169, y: -0.37998947165494285 },\n { x: 0.000002431000000000169, y: -0.38324799407885485 },\n { x: 0.000002432000000000169, y: -0.4181014651824893 },\n { x: 0.0000024330000000001692, y: -0.3655611066318295 },\n { x: 0.0000024340000000001693, y: -0.3963674545224115 },\n { x: 0.0000024350000000001694, y: -0.4152501067147071 },\n { x: 0.0000024360000000001695, y: -0.3923445582246408 },\n { x: 0.0000024370000000001695, y: -0.41090017228954034 },\n { x: 0.0000024380000000001696, y: -0.3549037198766325 },\n { x: 0.0000024390000000001697, y: -0.37411426024649663 },\n { x: 0.0000024400000000001698, y: -0.3954342754390548 },\n { x: 0.00000244100000000017, y: -0.379693594703644 },\n { x: 0.00000244200000000017, y: -0.3309119560453535 },\n { x: 0.00000244300000000017, y: -0.3276068650374942 },\n { x: 0.00000244400000000017, y: -0.35458878436642977 },\n { x: 0.00000244500000000017, y: -0.34608792563202195 },\n { x: 0.0000024460000000001702, y: -0.3309771636875109 },\n { x: 0.0000024470000000001703, y: -0.3005434980746519 },\n { x: 0.0000024480000000001704, y: -0.31442668415766956 },\n { x: 0.0000024490000000001704, y: -0.2850469754508962 },\n { x: 0.0000024500000000001705, y: -0.30415110571487286 },\n { x: 0.0000024510000000001706, y: -0.3462071153358029 },\n { x: 0.0000024520000000001707, y: -0.2822959911386574 },\n { x: 0.0000024530000000001707, y: -0.3088294167067626 },\n { x: 0.000002454000000000171, y: -0.2947572094272783 },\n { x: 0.000002455000000000171, y: -0.30510576818626395 },\n { x: 0.000002456000000000171, y: -0.3030284542363821 },\n { x: 0.000002457000000000171, y: -0.30656188882895175 },\n { x: 0.000002458000000000171, y: -0.29105234358830595 },\n { x: 0.000002459000000000171, y: -0.28606941189692736 },\n { x: 0.0000024600000000001713, y: -0.2291321457041728 },\n { x: 0.0000024610000000001713, y: -0.2880722088808652 },\n { x: 0.0000024620000000001714, y: -0.28096806307754785 },\n { x: 0.0000024630000000001715, y: -0.22101289464323637 },\n { x: 0.0000024640000000001716, y: -0.26682907979495035 },\n { x: 0.0000024650000000001716, y: -0.22461804644893746 },\n { x: 0.0000024660000000001717, y: -0.26411959533601004 },\n { x: 0.000002467000000000172, y: -0.25241369359838783 },\n { x: 0.000002468000000000172, y: -0.2234563917400324 },\n { x: 0.000002469000000000172, y: -0.18999173911706954 },\n { x: 0.000002470000000000172, y: -0.18021333518928684 },\n { x: 0.000002471000000000172, y: -0.19279176065785986 },\n { x: 0.000002472000000000172, y: -0.20107063030255418 },\n { x: 0.0000024730000000001722, y: -0.17999608780213525 },\n { x: 0.0000024740000000001723, y: -0.18723650947814263 },\n { x: 0.0000024750000000001724, y: -0.16167216750868554 },\n { x: 0.0000024760000000001725, y: -0.18711127289627277 },\n { x: 0.0000024770000000001725, y: -0.16169546018579953 },\n { x: 0.0000024780000000001726, y: -0.16369478259423073 },\n { x: 0.0000024790000000001727, y: -0.18576784473988425 },\n { x: 0.0000024800000000001728, y: -0.17131565828677353 },\n { x: 0.000002481000000000173, y: -0.1546212887442107 },\n { x: 0.000002482000000000173, y: -0.13566243561309224 },\n { x: 0.000002483000000000173, y: -0.17831141609823592 },\n { x: 0.000002484000000000173, y: -0.17179442870317502 },\n { x: 0.000002485000000000173, y: -0.13206003705093278 },\n { x: 0.0000024860000000001732, y: -0.13270009294317633 },\n { x: 0.0000024870000000001733, y: -0.13437298016435997 },\n { x: 0.0000024880000000001734, y: -0.09344525529532807 },\n { x: 0.0000024890000000001734, y: -0.11248741659954725 },\n { x: 0.0000024900000000001735, y: -0.11104782529678112 },\n { x: 0.0000024910000000001736, y: -0.11290746735501864 },\n { x: 0.0000024920000000001737, y: -0.12455405493285901 },\n { x: 0.0000024930000000001737, y: -0.09663488965899512 },\n { x: 0.000002494000000000174, y: -0.07693987525036725 },\n { x: 0.000002495000000000174, y: -0.05517965015024491 },\n { x: 0.000002496000000000174, y: -0.06564972913360982 },\n { x: 0.000002497000000000174, y: -0.07415726055045603 },\n { x: 0.000002498000000000174, y: -0.10890117898470059 },\n { x: 0.000002499000000000174, y: -0.05717810655851217 },\n { x: 0.0000025000000000001743, y: -0.044507267028509295 },\n { x: 0.0000025010000000001743, y: -0.03166149444390001 },\n { x: 0.0000025020000000001744, y: -0.05946737925973119 },\n { x: 0.0000025030000000001745, y: -0.03780260574207762 },\n { x: 0.0000025040000000001746, y: -0.01929642714223637 },\n { x: 0.0000025050000000001746, y: -0.0498784148077263 },\n { x: 0.0000025060000000001747, y: -0.01218401030295406 },\n { x: 0.000002507000000000175, y: -0.017809948692081117 },\n { x: 0.000002508000000000175, y: -0.010990216664137437 },\n { x: 0.000002509000000000175, y: -0.02296580743899924 },\n { x: 0.000002510000000000175, y: -0.04053020068899563 },\n { x: 0.000002511000000000175, y: 0.02169781421810913 },\n { x: 0.000002512000000000175, y: 0.010397988522018373 },\n { x: 0.0000025130000000001752, y: 0.00227231972249545 },\n { x: 0.0000025140000000001753, y: 0.028869025336646478 },\n { x: 0.0000025150000000001754, y: 0.01902856501225133 },\n { x: 0.0000025160000000001755, y: 0.017926343530677586 },\n { x: 0.0000025170000000001755, y: 0.03885327968763129 },\n { x: 0.0000025180000000001756, y: -0.01162658912013808 },\n { x: 0.0000025190000000001757, y: -0.0031947302812319264 },\n { x: 0.0000025200000000001758, y: 0.034856364770516624 },\n { x: 0.000002521000000000176, y: 0.034841968231742154 },\n { x: 0.000002522000000000176, y: 0.021316845251639197 },\n { x: 0.000002523000000000176, y: 0.02696495647258669 },\n { x: 0.000002524000000000176, y: 0.02673217851799009 },\n { x: 0.000002525000000000176, y: 0.07175393683754153 },\n { x: 0.0000025260000000001762, y: 0.031240770974422107 },\n { x: 0.0000025270000000001763, y: 0.0660126897852671 },\n { x: 0.0000025280000000001764, y: 0.07124352645993412 },\n { x: 0.0000025290000000001764, y: 0.06286961362475643 },\n { x: 0.0000025300000000001765, y: 0.11685317728029213 },\n { x: 0.0000025310000000001766, y: 0.07920082948662328 },\n { x: 0.0000025320000000001767, y: 0.055154502035767404 },\n { x: 0.0000025330000000001767, y: 0.10585110764067374 },\n { x: 0.000002534000000000177, y: 0.06187860896225339 },\n { x: 0.000002535000000000177, y: 0.09956613044874507 },\n { x: 0.000002536000000000177, y: 0.13451941085834254 },\n { x: 0.000002537000000000177, y: 0.10075404593254048 },\n { x: 0.000002538000000000177, y: 0.10456551659403011 },\n { x: 0.000002539000000000177, y: 0.09718715020479415 },\n { x: 0.0000025400000000001773, y: 0.10105958985617373 },\n { x: 0.0000025410000000001774, y: 0.19799401508124528 },\n { x: 0.0000025420000000001774, y: 0.15730205881544382 },\n { x: 0.0000025430000000001775, y: 0.14787913165361638 },\n { x: 0.0000025440000000001776, y: 0.13064690543152924 },\n { x: 0.0000025450000000001777, y: 0.15133248739999616 },\n { x: 0.0000025460000000001777, y: 0.15171092480519321 },\n { x: 0.000002547000000000178, y: 0.1430756168127764 },\n { x: 0.000002548000000000178, y: 0.17691330353538567 },\n { x: 0.000002549000000000178, y: 0.20466579408576377 },\n { x: 0.000002550000000000178, y: 0.13802251379639136 },\n { x: 0.000002551000000000178, y: 0.18051156796859189 },\n { x: 0.000002552000000000178, y: 0.15866129045569125 },\n { x: 0.0000025530000000001783, y: 0.21630961329226683 },\n { x: 0.0000025540000000001783, y: 0.19017542432235535 },\n { x: 0.0000025550000000001784, y: 0.21392373766443332 },\n { x: 0.0000025560000000001785, y: 0.1784114243585263 },\n { x: 0.0000025570000000001786, y: 0.21270015198691658 },\n { x: 0.0000025580000000001786, y: 0.22986434961374125 },\n { x: 0.0000025590000000001787, y: 0.19892184999054646 },\n { x: 0.0000025600000000001788, y: 0.23982333589279217 },\n { x: 0.000002561000000000179, y: 0.2310991619474565 },\n { x: 0.000002562000000000179, y: 0.2328379686348432 },\n { x: 0.000002563000000000179, y: 0.22016175467841323 },\n { x: 0.000002564000000000179, y: 0.2215253263906854 },\n { x: 0.000002565000000000179, y: 0.25061875543160295 },\n { x: 0.0000025660000000001792, y: 0.2772938023288315 },\n { x: 0.0000025670000000001793, y: 0.2861226720342499 },\n { x: 0.0000025680000000001794, y: 0.24566325565750188 },\n { x: 0.0000025690000000001795, y: 0.23359821478888176 },\n { x: 0.0000025700000000001795, y: 0.24413574378488537 },\n { x: 0.0000025710000000001796, y: 0.25925409971906455 },\n { x: 0.0000025720000000001797, y: 0.2680102233695851 },\n { x: 0.0000025730000000001798, y: 0.2835187231735638 },\n { x: 0.00000257400000000018, y: 0.25896261696102213 },\n { x: 0.00000257500000000018, y: 0.27728786930336385 },\n { x: 0.00000257600000000018, y: 0.29487327411884984 },\n { x: 0.00000257700000000018, y: 0.2829869503805984 },\n { x: 0.00000257800000000018, y: 0.2785208605542552 },\n { x: 0.00000257900000000018, y: 0.2805574219877335 },\n { x: 0.0000025800000000001803, y: 0.2945417418926183 },\n { x: 0.0000025810000000001804, y: 0.3386860928803425 },\n { x: 0.0000025820000000001804, y: 0.32295701628266055 },\n { x: 0.0000025830000000001805, y: 0.30263879122037435 },\n { x: 0.0000025840000000001806, y: 0.318907693431956 },\n { x: 0.0000025850000000001807, y: 0.3323064662277334 },\n { x: 0.0000025860000000001807, y: 0.31203722079763047 },\n { x: 0.000002587000000000181, y: 0.3250750119397284 },\n { x: 0.000002588000000000181, y: 0.3424634668701344 },\n { x: 0.000002589000000000181, y: 0.344828274713252 },\n { x: 0.000002590000000000181, y: 0.3540132645116023 },\n { x: 0.000002591000000000181, y: 0.3608681390065181 },\n { x: 0.000002592000000000181, y: 0.3485198395584777 },\n { x: 0.0000025930000000001813, y: 0.3506379350663991 },\n { x: 0.0000025940000000001813, y: 0.331915516959402 },\n { x: 0.0000025950000000001814, y: 0.34527735092327994 },\n { x: 0.0000025960000000001815, y: 0.4000351811343407 },\n { x: 0.0000025970000000001816, y: 0.39388941446463327 },\n { x: 0.0000025980000000001816, y: 0.3398543087839083 },\n { x: 0.0000025990000000001817, y: 0.372305564665714 },\n { x: 0.0000026000000000001818, y: 0.3838317633621279 },\n { x: 0.000002601000000000182, y: 0.41529437014667353 },\n { x: 0.000002602000000000182, y: 0.41304834547927105 },\n { x: 0.000002603000000000182, y: 0.4041870055323724 },\n { x: 0.000002604000000000182, y: 0.43587020295938855 },\n { x: 0.000002605000000000182, y: 0.4310568971971567 },\n { x: 0.0000026060000000001822, y: 0.43714794523535655 },\n { x: 0.0000026070000000001823, y: 0.40886668072126864 },\n { x: 0.0000026080000000001824, y: 0.4433694137108774 },\n { x: 0.0000026090000000001825, y: 0.4050889122740359 },\n { x: 0.0000026100000000001825, y: 0.4310772621906473 },\n { x: 0.0000026110000000001826, y: 0.4006271206163106 },\n { x: 0.0000026120000000001827, y: 0.3962460208615274 },\n { x: 0.0000026130000000001828, y: 0.3975686990296928 },\n { x: 0.000002614000000000183, y: 0.4667753352533014 },\n { x: 0.000002615000000000183, y: 0.46286901552752735 },\n { x: 0.000002616000000000183, y: 0.4692490057551146 },\n { x: 0.000002617000000000183, y: 0.42994799435188014 },\n { x: 0.000002618000000000183, y: 0.4634064627849226 },\n { x: 0.000002619000000000183, y: 0.4301614556194292 },\n { x: 0.0000026200000000001833, y: 0.44504568636494807 },\n { x: 0.0000026210000000001834, y: 0.465746434910619 },\n { x: 0.0000026220000000001834, y: 0.43157760113541255 },\n { x: 0.0000026230000000001835, y: 0.46456271138277544 },\n { x: 0.0000026240000000001836, y: 0.4473545111102838 },\n { x: 0.0000026250000000001837, y: 0.45581795130307107 },\n { x: 0.0000026260000000001837, y: 0.5166751972213512 },\n { x: 0.000002627000000000184, y: 0.48019312519732454 },\n { x: 0.000002628000000000184, y: 0.46975464117309257 },\n { x: 0.000002629000000000184, y: 0.4926981334934373 },\n { x: 0.000002630000000000184, y: 0.47934119963743727 },\n { x: 0.000002631000000000184, y: 0.5039408718465962 },\n { x: 0.000002632000000000184, y: 0.49937969688982364 },\n { x: 0.0000026330000000001843, y: 0.49529023474703376 },\n { x: 0.0000026340000000001843, y: 0.5009090133767484 },\n { x: 0.0000026350000000001844, y: 0.5232374406992164 },\n { x: 0.0000026360000000001845, y: 0.4991756250779322 },\n { x: 0.0000026370000000001846, y: 0.5031570010570516 },\n { x: 0.0000026380000000001846, y: 0.5325824248998609 },\n { x: 0.0000026390000000001847, y: 0.5551110810471244 },\n { x: 0.0000026400000000001848, y: 0.4917482604186644 },\n { x: 0.000002641000000000185, y: 0.5244546057444699 },\n { x: 0.000002642000000000185, y: 0.5116575105128615 },\n { x: 0.000002643000000000185, y: 0.5180018668401769 },\n { x: 0.000002644000000000185, y: 0.5728935876234474 },\n { x: 0.000002645000000000185, y: 0.571021578576603 },\n { x: 0.0000026460000000001852, y: 0.5391673816733841 },\n { x: 0.0000026470000000001853, y: 0.5233207093244425 },\n { x: 0.0000026480000000001854, y: 0.5790585065793126 },\n { x: 0.0000026490000000001855, y: 0.5266473345654257 },\n { x: 0.0000026500000000001855, y: 0.5299398343837128 },\n { x: 0.0000026510000000001856, y: 0.5503727252229598 },\n { x: 0.0000026520000000001857, y: 0.5890831324182434 },\n { x: 0.0000026530000000001858, y: 0.5434410835149216 },\n { x: 0.000002654000000000186, y: 0.5381805041592544 },\n { x: 0.000002655000000000186, y: 0.5986137865748076 },\n { x: 0.000002656000000000186, y: 0.6109471619427517 },\n { x: 0.000002657000000000186, y: 0.5510079300346555 },\n { x: 0.000002658000000000186, y: 0.5516906368691389 },\n { x: 0.0000026590000000001862, y: 0.5809096403298828 },\n { x: 0.0000026600000000001863, y: 0.6157549680813351 },\n { x: 0.0000026610000000001864, y: 0.5824277458242549 },\n { x: 0.0000026620000000001864, y: 0.5807834397904956 },\n { x: 0.0000026630000000001865, y: 0.6122324203702777 },\n { x: 0.0000026640000000001866, y: 0.5682248787778075 },\n { x: 0.0000026650000000001867, y: 0.6364895547423738 },\n { x: 0.0000026660000000001867, y: 0.6367852849831123 },\n { x: 0.000002667000000000187, y: 0.6301263973616424 },\n { x: 0.000002668000000000187, y: 0.6369228813944692 },\n { x: 0.000002669000000000187, y: 0.6129163568466053 },\n { x: 0.000002670000000000187, y: 0.5803002292933409 },\n { x: 0.000002671000000000187, y: 0.5988221700276009 },\n { x: 0.000002672000000000187, y: 0.6354143321436927 },\n { x: 0.0000026730000000001873, y: 0.6581870758899424 },\n { x: 0.0000026740000000001873, y: 0.6145825823815865 },\n { x: 0.0000026750000000001874, y: 0.6036896789836707 },\n { x: 0.0000026760000000001875, y: 0.6644893156241612 },\n { x: 0.0000026770000000001876, y: 0.6211856028677928 },\n { x: 0.0000026780000000001876, y: 0.634166865042745 },\n { x: 0.0000026790000000001877, y: 0.6391570014951409 },\n { x: 0.000002680000000000188, y: 0.6235583799678183 },\n { x: 0.000002681000000000188, y: 0.661715153993567 },\n { x: 0.000002682000000000188, y: 0.6130362967431036 },\n { x: 0.000002683000000000188, y: 0.6163290608816756 },\n { x: 0.000002684000000000188, y: 0.621920638205098 },\n { x: 0.000002685000000000188, y: 0.6571183173838694 },\n { x: 0.0000026860000000001882, y: 0.6202144778072248 },\n { x: 0.0000026870000000001883, y: 0.6740649438969156 },\n { x: 0.0000026880000000001884, y: 0.6963333587536268 },\n { x: 0.0000026890000000001885, y: 0.6868713715811054 },\n { x: 0.0000026900000000001885, y: 0.6801575174287627 },\n { x: 0.0000026910000000001886, y: 0.6303386948017062 },\n { x: 0.0000026920000000001887, y: 0.681160569708664 },\n { x: 0.0000026930000000001888, y: 0.6960124695125789 },\n { x: 0.000002694000000000189, y: 0.6959992053417199 },\n { x: 0.000002695000000000189, y: 0.665865778332864 },\n { x: 0.000002696000000000189, y: 0.6776158496887771 },\n { x: 0.000002697000000000189, y: 0.7008951886731878 },\n { x: 0.000002698000000000189, y: 0.6675595996175626 },\n { x: 0.0000026990000000001892, y: 0.7117689624781781 },\n { x: 0.0000027000000000001893, y: 0.6545064997667815 },\n { x: 0.0000027010000000001894, y: 0.7230932420436397 },\n { x: 0.0000027020000000001894, y: 0.7152655516321059 },\n { x: 0.0000027030000000001895, y: 0.7001993852036024 },\n { x: 0.0000027040000000001896, y: 0.7170472339005718 },\n { x: 0.0000027050000000001897, y: 0.7342749728528719 },\n { x: 0.0000027060000000001897, y: 0.6655142590877691 },\n { x: 0.00000270700000000019, y: 0.6641503747559637 },\n { x: 0.00000270800000000019, y: 0.7267693077856443 },\n { x: 0.00000270900000000019, y: 0.7371590014488312 },\n { x: 0.00000271000000000019, y: 0.6822593061619309 },\n { x: 0.00000271100000000019, y: 0.6916652631795677 },\n { x: 0.00000271200000000019, y: 0.6794633711571757 },\n { x: 0.0000027130000000001903, y: 0.7376521218068873 },\n { x: 0.0000027140000000001903, y: 0.7220004566269178 },\n { x: 0.0000027150000000001904, y: 0.7037104569394929 },\n { x: 0.0000027160000000001905, y: 0.7356446439838722 },\n { x: 0.0000027170000000001906, y: 0.7340941761495073 },\n { x: 0.0000027180000000001906, y: 0.7124752155844226 },\n { x: 0.0000027190000000001907, y: 0.7397050665323006 },\n { x: 0.000002720000000000191, y: 0.7169108115717007 },\n { x: 0.000002721000000000191, y: 0.7336679215398737 },\n { x: 0.000002722000000000191, y: 0.7347476000524897 },\n { x: 0.000002723000000000191, y: 0.7214815051889556 },\n { x: 0.000002724000000000191, y: 0.7084638455258885 },\n { x: 0.000002725000000000191, y: 0.7024557472716381 },\n { x: 0.0000027260000000001912, y: 0.7118278674174795 },\n { x: 0.0000027270000000001913, y: 0.7697487965677479 },\n { x: 0.0000027280000000001914, y: 0.7118320029072236 },\n { x: 0.0000027290000000001915, y: 0.7340378553864686 },\n { x: 0.0000027300000000001915, y: 0.7564257793349525 },\n { x: 0.0000027310000000001916, y: 0.7443729205646559 },\n { x: 0.0000027320000000001917, y: 0.7082096243602418 },\n { x: 0.0000027330000000001918, y: 0.7347467168308663 },\n { x: 0.000002734000000000192, y: 0.7193104500238281 },\n { x: 0.000002735000000000192, y: 0.7217556796192299 },\n { x: 0.000002736000000000192, y: 0.7602814158498283 },\n { x: 0.000002737000000000192, y: 0.7237963434152892 },\n { x: 0.000002738000000000192, y: 0.7354313096162569 },\n { x: 0.0000027390000000001922, y: 0.7695296873312432 },\n { x: 0.0000027400000000001923, y: 0.7473876554680158 },\n { x: 0.0000027410000000001924, y: 0.7887672527897815 },\n { x: 0.0000027420000000001925, y: 0.7365271719313455 },\n { x: 0.0000027430000000001925, y: 0.7622104476183755 },\n { x: 0.0000027440000000001926, y: 0.759922239111059 },\n { x: 0.0000027450000000001927, y: 0.7716827285287791 },\n { x: 0.0000027460000000001928, y: 0.7760312155155824 },\n { x: 0.000002747000000000193, y: 0.7375188084834007 },\n { x: 0.000002748000000000193, y: 0.75771266711046 },\n { x: 0.000002749000000000193, y: 0.7899635933795764 },\n { x: 0.000002750000000000193, y: 0.7371939551663986 },\n { x: 0.000002751000000000193, y: 0.801014572705638 },\n { x: 0.000002752000000000193, y: 0.7346419747151698 },\n { x: 0.0000027530000000001933, y: 0.7730448978953918 },\n { x: 0.0000027540000000001934, y: 0.7878243977099655 },\n { x: 0.0000027550000000001934, y: 0.8013602086474488 },\n { x: 0.0000027560000000001935, y: 0.7376080214635072 },\n { x: 0.0000027570000000001936, y: 0.793891213850553 },\n { x: 0.0000027580000000001937, y: 0.7481157293669828 },\n { x: 0.0000027590000000001937, y: 0.7510456402610325 },\n { x: 0.000002760000000000194, y: 0.8054082490322473 },\n { x: 0.000002761000000000194, y: 0.7816317125000892 },\n { x: 0.000002762000000000194, y: 0.737728876700332 },\n { x: 0.000002763000000000194, y: 0.7739004551931284 },\n { x: 0.000002764000000000194, y: 0.7633930901102277 },\n { x: 0.000002765000000000194, y: 0.7897011603827734 },\n { x: 0.0000027660000000001943, y: 0.7560328367101616 },\n { x: 0.0000027670000000001943, y: 0.7939422073459839 },\n { x: 0.0000027680000000001944, y: 0.7827372074588763 },\n { x: 0.0000027690000000001945, y: 0.7573586343124319 },\n { x: 0.0000027700000000001946, y: 0.798323615372741 },\n { x: 0.0000027710000000001946, y: 0.7546747165305211 },\n { x: 0.0000027720000000001947, y: 0.7482248385133946 },\n { x: 0.0000027730000000001948, y: 0.7567888508853853 },\n { x: 0.000002774000000000195, y: 0.753604845528295 },\n { x: 0.000002775000000000195, y: 0.7934727902343959 },\n { x: 0.000002776000000000195, y: 0.810676252400137 },\n { x: 0.000002777000000000195, y: 0.7956199857452727 },\n { x: 0.000002778000000000195, y: 0.8230095453118499 },\n { x: 0.0000027790000000001952, y: 0.8217849927519632 },\n { x: 0.0000027800000000001953, y: 0.7631604408415177 },\n { x: 0.0000027810000000001954, y: 0.8213208187341712 },\n { x: 0.0000027820000000001955, y: 0.7734683985868821 },\n { x: 0.0000027830000000001955, y: 0.782203586554138 },\n { x: 0.0000027840000000001956, y: 0.8151991220550522 },\n { x: 0.0000027850000000001957, y: 0.8107903365350744 },\n { x: 0.0000027860000000001958, y: 0.7739831625092467 },\n { x: 0.000002787000000000196, y: 0.7688714286812638 },\n { x: 0.000002788000000000196, y: 0.7944913708372867 },\n { x: 0.000002789000000000196, y: 0.7864705280363402 },\n { x: 0.000002790000000000196, y: 0.7591993208217006 },\n { x: 0.000002791000000000196, y: 0.7895889136712934 },\n { x: 0.000002792000000000196, y: 0.8182349759965467 },\n { x: 0.0000027930000000001963, y: 0.7846041242554446 },\n { x: 0.0000027940000000001964, y: 0.7951279045333552 },\n { x: 0.0000027950000000001964, y: 0.7981406989521761 },\n { x: 0.0000027960000000001965, y: 0.7815773167617462 },\n { x: 0.0000027970000000001966, y: 0.7663759216374127 },\n { x: 0.0000027980000000001967, y: 0.7838290871940248 },\n { x: 0.0000027990000000001967, y: 0.7983593381803468 },\n { x: 0.000002800000000000197, y: 0.7525548828869657 },\n { x: 0.000002801000000000197, y: 0.8212197474672228 },\n { x: 0.000002802000000000197, y: 0.7749962002326138 },\n { x: 0.000002803000000000197, y: 0.76638181540985 },\n { x: 0.000002804000000000197, y: 0.7802293181223559 },\n { x: 0.000002805000000000197, y: 0.7769220521634627 },\n { x: 0.0000028060000000001973, y: 0.786587797159431 },\n { x: 0.0000028070000000001973, y: 0.7827700742639933 },\n { x: 0.0000028080000000001974, y: 0.7591626865548814 },\n { x: 0.0000028090000000001975, y: 0.7863620802702915 },\n { x: 0.0000028100000000001976, y: 0.7567615295701122 },\n { x: 0.0000028110000000001976, y: 0.8512174564692979 },\n { x: 0.0000028120000000001977, y: 0.7508603274861254 },\n { x: 0.0000028130000000001978, y: 0.771509410383711 },\n { x: 0.000002814000000000198, y: 0.7841360817289958 },\n { x: 0.000002815000000000198, y: 0.781330448283536 },\n { x: 0.000002816000000000198, y: 0.7668814952450571 },\n { x: 0.000002817000000000198, y: 0.7852339002863445 },\n { x: 0.000002818000000000198, y: 0.8045854330291735 },\n { x: 0.0000028190000000001982, y: 0.8117118789267445 },\n { x: 0.0000028200000000001983, y: 0.7964819608750886 },\n { x: 0.0000028210000000001984, y: 0.7642314732771622 },\n { x: 0.0000028220000000001985, y: 0.767788701575244 },\n { x: 0.0000028230000000001985, y: 0.7545896273185719 },\n { x: 0.0000028240000000001986, y: 0.7670135719361161 },\n { x: 0.0000028250000000001987, y: 0.776489768698379 },\n { x: 0.0000028260000000001988, y: 0.7707513477197501 },\n { x: 0.000002827000000000199, y: 0.7956990289629834 },\n { x: 0.000002828000000000199, y: 0.7464042723655999 },\n { x: 0.000002829000000000199, y: 0.7630537764135136 },\n { x: 0.000002830000000000199, y: 0.8112271560025841 },\n { x: 0.000002831000000000199, y: 0.7482093728408432 },\n { x: 0.0000028320000000001992, y: 0.7971430465769822 },\n { x: 0.0000028330000000001993, y: 0.7427053120890292 },\n { x: 0.0000028340000000001994, y: 0.7720169130016905 },\n { x: 0.0000028350000000001994, y: 0.7864622512674394 },\n { x: 0.0000028360000000001995, y: 0.7717803923168035 },\n { x: 0.0000028370000000001996, y: 0.7658028092752694 },\n { x: 0.0000028380000000001997, y: 0.7392771088737514 },\n { x: 0.0000028390000000001997, y: 0.7924686585526886 },\n { x: 0.0000028400000000002, y: 0.7474299100430132 },\n { x: 0.0000028410000000002, y: 0.7430508775093344 },\n { x: 0.0000028420000000002, y: 0.7637892187832406 },\n { x: 0.0000028430000000002, y: 0.7621379094589217 },\n { x: 0.0000028440000000002, y: 0.7691954236060945 },\n { x: 0.0000028450000000002, y: 0.7604740781957471 },\n { x: 0.0000028460000000002003, y: 0.7533316213397995 },\n { x: 0.0000028470000000002003, y: 0.733534496514143 },\n { x: 0.0000028480000000002004, y: 0.7406852856007478 },\n { x: 0.0000028490000000002005, y: 0.8024655695950724 },\n { x: 0.0000028500000000002006, y: 0.7765870306601449 },\n { x: 0.0000028510000000002006, y: 0.7570494947784607 },\n { x: 0.0000028520000000002007, y: 0.7772564645890533 },\n { x: 0.000002853000000000201, y: 0.7338847289490747 },\n { x: 0.000002854000000000201, y: 0.7344372554879921 },\n { x: 0.000002855000000000201, y: 0.760865899145752 },\n { x: 0.000002856000000000201, y: 0.728391935157656 },\n { x: 0.000002857000000000201, y: 0.7297036663397427 },\n { x: 0.000002858000000000201, y: 0.7595273521720526 },\n { x: 0.0000028590000000002012, y: 0.7630994243495298 },\n { x: 0.0000028600000000002013, y: 0.7768321326373545 },\n { x: 0.0000028610000000002014, y: 0.7371941853307857 },\n { x: 0.0000028620000000002015, y: 0.7718452236971518 },\n { x: 0.0000028630000000002015, y: 0.7255050772966469 },\n { x: 0.0000028640000000002016, y: 0.7595980974960304 },\n { x: 0.0000028650000000002017, y: 0.7443690761485993 },\n { x: 0.0000028660000000002018, y: 0.7763706035093906 },\n { x: 0.000002867000000000202, y: 0.765830136812253 },\n { x: 0.000002868000000000202, y: 0.7832203021729911 },\n { x: 0.000002869000000000202, y: 0.7641234591714927 },\n { x: 0.000002870000000000202, y: 0.7155313199497109 },\n { x: 0.000002871000000000202, y: 0.7688497258272269 },\n { x: 0.0000028720000000002022, y: 0.7500660338112418 },\n { x: 0.0000028730000000002023, y: 0.7125848850884627 },\n { x: 0.0000028740000000002024, y: 0.7392716584564772 },\n { x: 0.0000028750000000002024, y: 0.7485035309834968 },\n { x: 0.0000028760000000002025, y: 0.7437759238901553 },\n { x: 0.0000028770000000002026, y: 0.7250862500058989 },\n { x: 0.0000028780000000002027, y: 0.7343829198329125 },\n { x: 0.0000028790000000002027, y: 0.7348355290801867 },\n { x: 0.000002880000000000203, y: 0.6913486874814634 },\n { x: 0.000002881000000000203, y: 0.7122497839547313 },\n { x: 0.000002882000000000203, y: 0.7180340610111401 },\n { x: 0.000002883000000000203, y: 0.751442300197788 },\n { x: 0.000002884000000000203, y: 0.7064022082389504 },\n { x: 0.000002885000000000203, y: 0.6915746554626758 },\n { x: 0.0000028860000000002033, y: 0.7403966100026745 },\n { x: 0.0000028870000000002033, y: 0.7502800199449855 },\n { x: 0.0000028880000000002034, y: 0.6954108060963011 },\n { x: 0.0000028890000000002035, y: 0.7399438902519763 },\n { x: 0.0000028900000000002036, y: 0.6881611386264651 },\n { x: 0.0000028910000000002036, y: 0.6883583927942954 },\n { x: 0.0000028920000000002037, y: 0.673649669089998 },\n { x: 0.000002893000000000204, y: 0.7373819783907827 },\n { x: 0.000002894000000000204, y: 0.6775216753790888 },\n { x: 0.000002895000000000204, y: 0.6911629701200532 },\n { x: 0.000002896000000000204, y: 0.7211812124276452 },\n { x: 0.000002897000000000204, y: 0.7160704162569042 },\n { x: 0.000002898000000000204, y: 0.676371455922578 },\n { x: 0.0000028990000000002042, y: 0.7274802956547528 },\n { x: 0.0000029000000000002043, y: 0.683049828459433 },\n { x: 0.0000029010000000002044, y: 0.6900989360913905 },\n { x: 0.0000029020000000002045, y: 0.7047533973435269 },\n { x: 0.0000029030000000002045, y: 0.654995021504275 },\n { x: 0.0000029040000000002046, y: 0.6841284222377781 },\n { x: 0.0000029050000000002047, y: 0.6732941982214122 },\n { x: 0.0000029060000000002048, y: 0.7145912334252882 },\n { x: 0.000002907000000000205, y: 0.6543401172757951 },\n { x: 0.000002908000000000205, y: 0.6573577029992239 },\n { x: 0.000002909000000000205, y: 0.7159432289690105 },\n { x: 0.000002910000000000205, y: 0.6807836422776883 },\n { x: 0.000002911000000000205, y: 0.7027154560636988 },\n { x: 0.0000029120000000002052, y: 0.6370273563736593 },\n { x: 0.0000029130000000002053, y: 0.6566650252651687 },\n { x: 0.0000029140000000002054, y: 0.6856754434755157 },\n { x: 0.0000029150000000002054, y: 0.6638956828455864 },\n { x: 0.0000029160000000002055, y: 0.6710147421919256 },\n { x: 0.0000029170000000002056, y: 0.6411098021431326 },\n { x: 0.0000029180000000002057, y: 0.6337515667537542 },\n { x: 0.0000029190000000002057, y: 0.6398758362740098 },\n { x: 0.000002920000000000206, y: 0.628361373202968 },\n { x: 0.000002921000000000206, y: 0.639388149374006 },\n { x: 0.000002922000000000206, y: 0.6782883947274078 },\n { x: 0.000002923000000000206, y: 0.6662133348476065 },\n { x: 0.000002924000000000206, y: 0.6744458143446771 },\n { x: 0.000002925000000000206, y: 0.6272141899122543 },\n { x: 0.0000029260000000002063, y: 0.6767808075628621 },\n { x: 0.0000029270000000002063, y: 0.6317346435211388 },\n { x: 0.0000029280000000002064, y: 0.6142931046884369 },\n { x: 0.0000029290000000002065, y: 0.6704631244999428 },\n { x: 0.0000029300000000002066, y: 0.6454744499613985 },\n { x: 0.0000029310000000002067, y: 0.647884465580466 },\n { x: 0.0000029320000000002067, y: 0.6602338925118152 },\n { x: 0.000002933000000000207, y: 0.6570589958671212 },\n { x: 0.000002934000000000207, y: 0.6294987704334325 },\n { x: 0.000002935000000000207, y: 0.6116801020597763 },\n { x: 0.000002936000000000207, y: 0.6067150106325837 },\n { x: 0.000002937000000000207, y: 0.6547845991396 },\n { x: 0.000002938000000000207, y: 0.6035587204656251 },\n { x: 0.0000029390000000002073, y: 0.5959623011526646 },\n { x: 0.0000029400000000002073, y: 0.5833899099901261 },\n { x: 0.0000029410000000002074, y: 0.6090903670216657 },\n { x: 0.0000029420000000002075, y: 0.5814380814901917 },\n { x: 0.0000029430000000002076, y: 0.5793610114770555 },\n { x: 0.0000029440000000002076, y: 0.5789968660799116 },\n { x: 0.0000029450000000002077, y: 0.5965906954287372 },\n { x: 0.0000029460000000002078, y: 0.5670538449442795 },\n { x: 0.000002947000000000208, y: 0.6142534090183384 },\n { x: 0.000002948000000000208, y: 0.6026167411490274 },\n { x: 0.000002949000000000208, y: 0.5943573490926507 },\n { x: 0.000002950000000000208, y: 0.5498448938835222 },\n { x: 0.000002951000000000208, y: 0.6088917707690311 },\n { x: 0.0000029520000000002082, y: 0.5979286662901565 },\n { x: 0.0000029530000000002083, y: 0.5622730106011163 },\n { x: 0.0000029540000000002084, y: 0.5978847405075455 },\n { x: 0.0000029550000000002085, y: 0.5898867450354877 },\n { x: 0.0000029560000000002085, y: 0.5461274076217086 },\n { x: 0.0000029570000000002086, y: 0.5884938191684874 },\n { x: 0.0000029580000000002087, y: 0.5322519093592583 },\n { x: 0.0000029590000000002088, y: 0.5807437680860508 },\n { x: 0.000002960000000000209, y: 0.5755296480271369 },\n { x: 0.000002961000000000209, y: 0.5388641482130897 },\n { x: 0.000002962000000000209, y: 0.5752632018518571 },\n { x: 0.000002963000000000209, y: 0.5841578412925744 },\n { x: 0.000002964000000000209, y: 0.5430249955723269 },\n { x: 0.000002965000000000209, y: 0.5824291534609394 },\n { x: 0.0000029660000000002093, y: 0.5561377114144416 },\n { x: 0.0000029670000000002094, y: 0.5421408760660786 },\n { x: 0.0000029680000000002094, y: 0.516956242642722 },\n { x: 0.0000029690000000002095, y: 0.5085039910663094 },\n { x: 0.0000029700000000002096, y: 0.5432745215003134 },\n { x: 0.0000029710000000002097, y: 0.5454138528011845 },\n { x: 0.0000029720000000002097, y: 0.5444944025437624 },\n { x: 0.00000297300000000021, y: 0.5286257810686109 },\n { x: 0.00000297400000000021, y: 0.5335532863301974 },\n { x: 0.00000297500000000021, y: 0.5292786379623816 },\n { x: 0.00000297600000000021, y: 0.516595821862428 },\n { x: 0.00000297700000000021, y: 0.4859324145829592 },\n { x: 0.00000297800000000021, y: 0.477941976665393 },\n { x: 0.0000029790000000002103, y: 0.47986034219660234 },\n { x: 0.0000029800000000002103, y: 0.5060507586110323 },\n { x: 0.0000029810000000002104, y: 0.4778975077271498 },\n { x: 0.0000029820000000002105, y: 0.4691837223074389 },\n { x: 0.0000029830000000002106, y: 0.5075898545995766 },\n { x: 0.0000029840000000002106, y: 0.48040006902527277 },\n { x: 0.0000029850000000002107, y: 0.5317976252175001 },\n { x: 0.0000029860000000002108, y: 0.47680761518300735 },\n { x: 0.000002987000000000211, y: 0.5224380218575002 },\n { x: 0.000002988000000000211, y: 0.5222136614842324 },\n { x: 0.000002989000000000211, y: 0.47389238552249097 },\n { x: 0.000002990000000000211, y: 0.4759162597189827 },\n { x: 0.000002991000000000211, y: 0.47912804901123773 },\n { x: 0.0000029920000000002112, y: 0.4588463479524858 },\n { x: 0.0000029930000000002113, y: 0.46526456215875195 },\n { x: 0.0000029940000000002114, y: 0.43082664205776344 },\n { x: 0.0000029950000000002115, y: 0.4801621072398747 },\n { x: 0.0000029960000000002115, y: 0.5003611506617719 },\n { x: 0.0000029970000000002116, y: 0.4831648614513115 },\n { x: 0.0000029980000000002117, y: 0.44195977831877975 },\n { x: 0.0000029990000000002118, y: 0.47500237700587694 },\n { x: 0.000003000000000000212, y: 0.4244825155255506 },\n { x: 0.000003001000000000212, y: 0.42755284866998156 },\n { x: 0.000003002000000000212, y: 0.4265718841461743 },\n { x: 0.000003003000000000212, y: 0.41928193320163487 },\n { x: 0.000003004000000000212, y: 0.44176186732101363 },\n { x: 0.000003005000000000212, y: 0.4164076866246498 },\n { x: 0.0000030060000000002123, y: 0.425678186355341 },\n { x: 0.0000030070000000002124, y: 0.4462372169845525 },\n { x: 0.0000030080000000002124, y: 0.39675661931254375 },\n { x: 0.0000030090000000002125, y: 0.3914044780508257 },\n { x: 0.0000030100000000002126, y: 0.40984744356451946 },\n { x: 0.0000030110000000002127, y: 0.452676165162442 },\n { x: 0.0000030120000000002127, y: 0.3958842444578926 },\n { x: 0.000003013000000000213, y: 0.43114323684229805 },\n { x: 0.000003014000000000213, y: 0.3859004752949258 },\n { x: 0.000003015000000000213, y: 0.4201885559702521 },\n { x: 0.000003016000000000213, y: 0.35320206431373663 },\n { x: 0.000003017000000000213, y: 0.3981953454814002 },\n { x: 0.000003018000000000213, y: 0.41164190173657245 },\n { x: 0.0000030190000000002133, y: 0.4227552980741416 },\n { x: 0.0000030200000000002133, y: 0.406813496279932 },\n { x: 0.0000030210000000002134, y: 0.3768096416917782 },\n { x: 0.0000030220000000002135, y: 0.3844141254178605 },\n { x: 0.0000030230000000002136, y: 0.4120649435874568 },\n { x: 0.0000030240000000002136, y: 0.3549973675704156 },\n { x: 0.0000030250000000002137, y: 0.3708898309822203 },\n { x: 0.0000030260000000002138, y: 0.3969391553780458 },\n { x: 0.000003027000000000214, y: 0.382377320147376 },\n { x: 0.000003028000000000214, y: 0.3300701749194839 },\n { x: 0.000003029000000000214, y: 0.3837147712648412 },\n { x: 0.000003030000000000214, y: 0.3403755084052608 },\n { x: 0.000003031000000000214, y: 0.3568162204362457 },\n { x: 0.0000030320000000002142, y: 0.3368821910534986 },\n { x: 0.0000030330000000002143, y: 0.34056802282976156 },\n { x: 0.0000030340000000002144, y: 0.366115653732448 },\n { x: 0.0000030350000000002145, y: 0.3572496096572387 },\n { x: 0.0000030360000000002145, y: 0.3646709559649993 },\n { x: 0.0000030370000000002146, y: 0.33690657991855305 },\n { x: 0.0000030380000000002147, y: 0.3154571049118399 },\n { x: 0.0000030390000000002148, y: 0.29966414252641754 },\n { x: 0.000003040000000000215, y: 0.3362027599470729 },\n { x: 0.000003041000000000215, y: 0.31900528983251136 },\n { x: 0.000003042000000000215, y: 0.28361854565106387 },\n { x: 0.000003043000000000215, y: 0.2846837575856401 },\n { x: 0.000003044000000000215, y: 0.35317431278448663 },\n { x: 0.0000030450000000002152, y: 0.34046490327067497 },\n { x: 0.0000030460000000002153, y: 0.30641420057902785 },\n { x: 0.0000030470000000002154, y: 0.33581770419394125 },\n { x: 0.0000030480000000002154, y: 0.2797312092284034 },\n { x: 0.0000030490000000002155, y: 0.31169218424863704 },\n { x: 0.0000030500000000002156, y: 0.3038207935241333 },\n { x: 0.0000030510000000002157, y: 0.31065702776559545 },\n { x: 0.0000030520000000002157, y: 0.2653983856317658 },\n { x: 0.000003053000000000216, y: 0.3160817165427984 },\n { x: 0.000003054000000000216, y: 0.2453988156782372 },\n { x: 0.000003055000000000216, y: 0.27364301833569293 },\n { x: 0.000003056000000000216, y: 0.28978325353957424 },\n { x: 0.000003057000000000216, y: 0.289429138374783 },\n { x: 0.000003058000000000216, y: 0.23388856311114992 },\n { x: 0.0000030590000000002163, y: 0.2625998887443979 },\n { x: 0.0000030600000000002163, y: 0.2550752269456489 },\n { x: 0.0000030610000000002164, y: 0.23716040829134868 },\n { x: 0.0000030620000000002165, y: 0.29067004616959263 },\n { x: 0.0000030630000000002166, y: 0.2545833654292316 },\n { x: 0.0000030640000000002166, y: 0.2785915493959754 },\n { x: 0.0000030650000000002167, y: 0.2594440596024477 },\n { x: 0.000003066000000000217, y: 0.2344098605281155 },\n { x: 0.000003067000000000217, y: 0.278049466724588 },\n { x: 0.000003068000000000217, y: 0.24142552610205575 },\n { x: 0.000003069000000000217, y: 0.22238654980395367 },\n { x: 0.000003070000000000217, y: 0.22484840033692724 },\n { x: 0.000003071000000000217, y: 0.25421372980977963 },\n { x: 0.0000030720000000002172, y: 0.1928002931157382 },\n { x: 0.0000030730000000002173, y: 0.20258772263072228 },\n { x: 0.0000030740000000002174, y: 0.19215242906985752 },\n { x: 0.0000030750000000002175, y: 0.22943751667200368 },\n { x: 0.0000030760000000002175, y: 0.22831532027045068 },\n { x: 0.0000030770000000002176, y: 0.2247274319007439 },\n { x: 0.0000030780000000002177, y: 0.2016165212043213 },\n { x: 0.0000030790000000002178, y: 0.19032976695301407 },\n { x: 0.000003080000000000218, y: 0.2217947058632726 },\n { x: 0.000003081000000000218, y: 0.16607318625043044 },\n { x: 0.000003082000000000218, y: 0.2145097898847822 },\n { x: 0.000003083000000000218, y: 0.18801612072921656 },\n { x: 0.000003084000000000218, y: 0.15364446770212092 },\n { x: 0.0000030850000000002182, y: 0.1725105958329209 },\n { x: 0.0000030860000000002183, y: 0.202508031742956 },\n { x: 0.0000030870000000002184, y: 0.16338077907630066 },\n { x: 0.0000030880000000002184, y: 0.20201724445617755 },\n { x: 0.0000030890000000002185, y: 0.1825555719353004 },\n { x: 0.0000030900000000002186, y: 0.13946235909936458 },\n { x: 0.0000030910000000002187, y: 0.19983230002089208 },\n { x: 0.0000030920000000002187, y: 0.1652563963940007 },\n { x: 0.000003093000000000219, y: 0.18850838876568207 },\n { x: 0.000003094000000000219, y: 0.15775721975836268 },\n { x: 0.000003095000000000219, y: 0.14748094851278684 },\n { x: 0.000003096000000000219, y: 0.14613755989528324 },\n { x: 0.000003097000000000219, y: 0.16243007746773336 },\n { x: 0.000003098000000000219, y: 0.11614392897373835 },\n { x: 0.0000030990000000002193, y: 0.17391857629837398 },\n { x: 0.0000031000000000002193, y: 0.16846458721919216 },\n { x: 0.0000031010000000002194, y: 0.11098314924543644 },\n { x: 0.0000031020000000002195, y: 0.12013235672924903 },\n { x: 0.0000031030000000002196, y: 0.15592045758735146 },\n { x: 0.0000031040000000002196, y: 0.113103604715051 },\n { x: 0.0000031050000000002197, y: 0.0867237665088789 },\n { x: 0.00000310600000000022, y: 0.14164331754798234 },\n { x: 0.00000310700000000022, y: 0.1018105913832894 },\n { x: 0.00000310800000000022, y: 0.08423680859228798 },\n { x: 0.00000310900000000022, y: 0.1279367232241345 },\n { x: 0.00000311000000000022, y: 0.13631131677937594 },\n { x: 0.00000311100000000022, y: 0.07196775478411119 },\n { x: 0.0000031120000000002202, y: 0.08182340242199586 },\n { x: 0.0000031130000000002203, y: 0.12444093968135209 },\n { x: 0.0000031140000000002204, y: 0.0618410973485449 },\n { x: 0.0000031150000000002205, y: 0.048277954160244614 },\n { x: 0.0000031160000000002205, y: 0.10348031539114594 },\n { x: 0.0000031170000000002206, y: 0.0745442289465314 },\n { x: 0.0000031180000000002207, y: 0.0928040707381595 },\n { x: 0.0000031190000000002208, y: 0.046277708687501945 },\n { x: 0.000003120000000000221, y: 0.036817760413822995 },\n { x: 0.000003121000000000221, y: 0.08695253367671232 },\n { x: 0.000003122000000000221, y: 0.0537961620201841 },\n { x: 0.000003123000000000221, y: 0.024145482030201747 },\n { x: 0.000003124000000000221, y: 0.07338781921525296 },\n { x: 0.0000031250000000002212, y: 0.04330730800186565 },\n { x: 0.0000031260000000002213, y: 0.080496789266035 },\n { x: 0.0000031270000000002214, y: 0.06582864789115775 },\n { x: 0.0000031280000000002215, y: 0.07159475266312759 },\n { x: 0.0000031290000000002215, y: 0.023615505076275092 },\n { x: 0.0000031300000000002216, y: 0.016119445946327686 },\n { x: 0.0000031310000000002217, y: 0.02547184777855657 },\n { x: 0.0000031320000000002218, y: 0.008070974411649744 },\n { x: 0.000003133000000000222, y: 0.004521425242816637 },\n { x: 0.000003134000000000222, y: -0.013867774518376393 },\n { x: 0.000003135000000000222, y: -0.008258604704503274 },\n { x: 0.000003136000000000222, y: 0.019756518011564528 },\n { x: 0.000003137000000000222, y: 0.05038942016178094 },\n { x: 0.000003138000000000222, y: 0.003561422443045455 },\n { x: 0.0000031390000000002223, y: -0.01607364358614714 },\n { x: 0.0000031400000000002224, y: 0.011048160535796086 },\n { x: 0.0000031410000000002224, y: 0.036217591204177134 },\n { x: 0.0000031420000000002225, y: -0.025929114482559707 },\n { x: 0.0000031430000000002226, y: 0.012088845376476424 },\n { x: 0.0000031440000000002227, y: -0.007841197225508486 },\n { x: 0.0000031450000000002227, y: -0.04765121447935222 },\n { x: 0.000003146000000000223, y: -0.029045177792323792 },\n { x: 0.000003147000000000223, y: -0.0163386052260965 },\n { x: 0.000003148000000000223, y: -0.0178068154921195 },\n { x: 0.000003149000000000223, y: -0.007577665339170293 },\n { x: 0.000003150000000000223, y: -0.007326213493127887 },\n { x: 0.000003151000000000223, y: 0.0011282456736075239 },\n { x: 0.0000031520000000002233, y: 0.002399233538437559 },\n { x: 0.0000031530000000002233, y: -0.006291535141147612 },\n { x: 0.0000031540000000002234, y: -0.0421436779611103 },\n { x: 0.0000031550000000002235, y: -0.006046438340959581 },\n { x: 0.0000031560000000002236, y: -0.03597101074862402 },\n { x: 0.0000031570000000002236, y: -0.04776129862803823 },\n { x: 0.0000031580000000002237, y: -0.060324307299293806 },\n { x: 0.0000031590000000002238, y: -0.018506424829098006 },\n { x: 0.000003160000000000224, y: -0.032096243208094975 },\n { x: 0.000003161000000000224, y: -0.053102077048914176 },\n { x: 0.000003162000000000224, y: -0.03461389170152358 },\n { x: 0.000003163000000000224, y: -0.08464352030781938 },\n { x: 0.000003164000000000224, y: -0.08792258285212184 },\n { x: 0.0000031650000000002242, y: -0.07262222209721945 },\n { x: 0.0000031660000000002243, y: -0.07251984658163221 },\n { x: 0.0000031670000000002244, y: -0.07781332517361249 },\n { x: 0.0000031680000000002245, y: -0.061821279456793665 },\n { x: 0.0000031690000000002245, y: -0.09001150305994736 },\n { x: 0.0000031700000000002246, y: -0.09825695025331492 },\n { x: 0.0000031710000000002247, y: -0.07868441470995279 },\n { x: 0.0000031720000000002248, y: -0.069302611157724 },\n { x: 0.000003173000000000225, y: -0.09709571531145915 },\n { x: 0.000003174000000000225, y: -0.112223450186691 },\n { x: 0.000003175000000000225, y: -0.10558021348087042 },\n { x: 0.000003176000000000225, y: -0.11338631420887024 },\n { x: 0.000003177000000000225, y: -0.10723865185474873 },\n { x: 0.000003178000000000225, y: -0.1178664527555659 },\n { x: 0.0000031790000000002253, y: -0.12841569597506372 },\n { x: 0.0000031800000000002254, y: -0.10505018771706184 },\n { x: 0.0000031810000000002254, y: -0.11819145667385055 },\n { x: 0.0000031820000000002255, y: -0.10513848579865771 },\n { x: 0.0000031830000000002256, y: -0.09629801219207604 },\n { x: 0.0000031840000000002257, y: -0.11920849849795624 },\n { x: 0.0000031850000000002257, y: -0.11432382067114388 },\n { x: 0.000003186000000000226, y: -0.17158180299775455 },\n { x: 0.000003187000000000226, y: -0.14631068979621983 },\n { x: 0.000003188000000000226, y: -0.14270220554174176 },\n { x: 0.000003189000000000226, y: -0.10869801972527274 },\n { x: 0.000003190000000000226, y: -0.11965933142540354 },\n { x: 0.000003191000000000226, y: -0.14328080467863588 },\n { x: 0.0000031920000000002263, y: -0.13703113271202907 },\n { x: 0.0000031930000000002263, y: -0.14955609660598396 },\n { x: 0.0000031940000000002264, y: -0.12958856676034555 },\n { x: 0.0000031950000000002265, y: -0.17636690253678883 },\n { x: 0.0000031960000000002266, y: -0.1957297799135637 },\n { x: 0.0000031970000000002266, y: -0.1328556618146467 },\n { x: 0.0000031980000000002267, y: -0.20238190689265145 },\n { x: 0.0000031990000000002268, y: -0.19986361088632915 },\n { x: 0.000003200000000000227, y: -0.15245731354563163 },\n { x: 0.000003201000000000227, y: -0.18309185171994816 },\n { x: 0.000003202000000000227, y: -0.15592967224768 },\n { x: 0.000003203000000000227, y: -0.1833397941682141 },\n { x: 0.000003204000000000227, y: -0.14848274561176203 },\n { x: 0.0000032050000000002272, y: -0.21293252990119588 },\n { x: 0.0000032060000000002273, y: -0.20670089846435358 },\n { x: 0.0000032070000000002274, y: -0.2250640988538285 },\n { x: 0.0000032080000000002275, y: -0.18063215680097144 },\n { x: 0.0000032090000000002275, y: -0.19657189098040953 },\n { x: 0.0000032100000000002276, y: -0.1825096349941638 },\n { x: 0.0000032110000000002277, y: -0.22987309390072364 },\n { x: 0.0000032120000000002278, y: -0.1727401626466551 },\n { x: 0.000003213000000000228, y: -0.2032694780972531 },\n { x: 0.000003214000000000228, y: -0.22349687504640525 },\n { x: 0.000003215000000000228, y: -0.21559768469535429 },\n { x: 0.000003216000000000228, y: -0.20044419893195242 },\n { x: 0.000003217000000000228, y: -0.22494299668589535 },\n { x: 0.0000032180000000002282, y: -0.19810179838688674 },\n { x: 0.0000032190000000002283, y: -0.2065850147813204 },\n { x: 0.0000032200000000002284, y: -0.263883990696103 },\n { x: 0.0000032210000000002284, y: -0.19668290494141746 },\n { x: 0.0000032220000000002285, y: -0.23766348863440098 },\n { x: 0.0000032230000000002286, y: -0.23929596781323995 },\n { x: 0.0000032240000000002287, y: -0.2628584084615896 },\n { x: 0.0000032250000000002287, y: -0.23019862167073676 },\n { x: 0.000003226000000000229, y: -0.20962296928612104 },\n { x: 0.000003227000000000229, y: -0.2402771797941383 },\n { x: 0.000003228000000000229, y: -0.23453381220240455 },\n { x: 0.000003229000000000229, y: -0.21835872143803414 },\n { x: 0.000003230000000000229, y: -0.24320153679802786 },\n { x: 0.000003231000000000229, y: -0.21995426407035332 },\n { x: 0.0000032320000000002293, y: -0.23317596411649277 },\n { x: 0.0000032330000000002293, y: -0.24335524815207946 },\n { x: 0.0000032340000000002294, y: -0.2575702837710187 },\n { x: 0.0000032350000000002295, y: -0.24750473097698494 },\n { x: 0.0000032360000000002296, y: -0.26549117799091665 },\n { x: 0.0000032370000000002296, y: -0.3005802998467446 },\n { x: 0.0000032380000000002297, y: -0.2560173130055039 },\n { x: 0.00000323900000000023, y: -0.26255952415041833 },\n { x: 0.00000324000000000023, y: -0.26787977321275974 },\n { x: 0.00000324100000000023, y: -0.3128612839672932 },\n { x: 0.00000324200000000023, y: -0.25363439741186045 },\n { x: 0.00000324300000000023, y: -0.2681249756672638 },\n { x: 0.00000324400000000023, y: -0.28766066198157186 },\n { x: 0.0000032450000000002302, y: -0.31026900725854684 },\n { x: 0.0000032460000000002303, y: -0.26197857745283765 },\n { x: 0.0000032470000000002304, y: -0.28605978731504556 },\n { x: 0.0000032480000000002305, y: -0.2757398766915066 },\n { x: 0.0000032490000000002305, y: -0.2940890564747056 },\n { x: 0.0000032500000000002306, y: -0.30220323602330446 },\n { x: 0.0000032510000000002307, y: -0.31187971075659926 },\n { x: 0.0000032520000000002308, y: -0.2711151105613403 },\n { x: 0.000003253000000000231, y: -0.2819339857522497 },\n { x: 0.000003254000000000231, y: -0.320950666299713 },\n { x: 0.000003255000000000231, y: -0.3011302478983241 },\n { x: 0.000003256000000000231, y: -0.30392750928871703 },\n { x: 0.000003257000000000231, y: -0.3066540546928292 },\n { x: 0.0000032580000000002312, y: -0.28315074253011896 },\n { x: 0.0000032590000000002313, y: -0.3446284481543926 },\n { x: 0.0000032600000000002314, y: -0.33369180319692887 },\n { x: 0.0000032610000000002314, y: -0.35171585021294194 },\n { x: 0.0000032620000000002315, y: -0.35587190183813217 },\n { x: 0.0000032630000000002316, y: -0.3551912691799734 },\n { x: 0.0000032640000000002317, y: -0.3047312489526631 },\n { x: 0.0000032650000000002317, y: -0.3695141056737187 },\n { x: 0.000003266000000000232, y: -0.29773854277882816 },\n { x: 0.000003267000000000232, y: -0.3234624836000543 },\n { x: 0.000003268000000000232, y: -0.31303395251938476 },\n { x: 0.000003269000000000232, y: -0.3094279994146796 },\n { x: 0.000003270000000000232, y: -0.3078721814054921 },\n { x: 0.000003271000000000232, y: -0.3644995182120665 },\n { x: 0.0000032720000000002323, y: -0.32052497644139016 },\n { x: 0.0000032730000000002323, y: -0.3612296918116466 },\n { x: 0.0000032740000000002324, y: -0.3845514084133653 },\n { x: 0.0000032750000000002325, y: -0.3352647633035219 },\n { x: 0.0000032760000000002326, y: -0.38629194706877706 },\n { x: 0.0000032770000000002326, y: -0.33646038849190724 },\n { x: 0.0000032780000000002327, y: -0.33771439821716404 },\n { x: 0.000003279000000000233, y: -0.3625537403021551 },\n { x: 0.000003280000000000233, y: -0.3597311040206693 },\n { x: 0.000003281000000000233, y: -0.39072950317698646 },\n { x: 0.000003282000000000233, y: -0.39623566299201884 },\n { x: 0.000003283000000000233, y: -0.38215208143277896 },\n { x: 0.000003284000000000233, y: -0.3917836292581149 },\n { x: 0.0000032850000000002332, y: -0.36567290155416365 },\n { x: 0.0000032860000000002333, y: -0.3861388181125698 },\n { x: 0.0000032870000000002334, y: -0.3523647937978871 },\n { x: 0.0000032880000000002335, y: -0.3805280394428058 },\n { x: 0.0000032890000000002335, y: -0.3601980786089182 },\n { x: 0.0000032900000000002336, y: -0.4069788986463119 },\n { x: 0.0000032910000000002337, y: -0.3785712104587992 },\n { x: 0.0000032920000000002338, y: -0.39830714084951396 },\n { x: 0.000003293000000000234, y: -0.36558462711917594 },\n { x: 0.000003294000000000234, y: -0.37060109999113494 },\n { x: 0.000003295000000000234, y: -0.39075817549185976 },\n { x: 0.000003296000000000234, y: -0.4098639912715285 },\n { x: 0.000003297000000000234, y: -0.42514301238466623 },\n { x: 0.0000032980000000002342, y: -0.41381132713806307 },\n { x: 0.0000032990000000002343, y: -0.3940111248717238 },\n { x: 0.0000033000000000002344, y: -0.3656879597311707 },\n { x: 0.0000033010000000002344, y: -0.39988472434384853 },\n { x: 0.0000033020000000002345, y: -0.3843851746879992 },\n { x: 0.0000033030000000002346, y: -0.4139074208607734 },\n { x: 0.0000033040000000002347, y: -0.43210466402937187 },\n { x: 0.0000033050000000002347, y: -0.4270867612755586 },\n { x: 0.000003306000000000235, y: -0.38795782943102686 },\n { x: 0.000003307000000000235, y: -0.44407180305114 },\n { x: 0.000003308000000000235, y: -0.39236277165585937 },\n { x: 0.000003309000000000235, y: -0.40936804930321896 },\n { x: 0.000003310000000000235, y: -0.4533937391137786 },\n { x: 0.000003311000000000235, y: -0.4457371309648657 },\n { x: 0.0000033120000000002353, y: -0.4518031233377471 },\n { x: 0.0000033130000000002353, y: -0.39121414235564894 },\n { x: 0.0000033140000000002354, y: -0.41304048490929246 },\n { x: 0.0000033150000000002355, y: -0.42432168322533526 },\n { x: 0.0000033160000000002356, y: -0.4190628299984415 },\n { x: 0.0000033170000000002357, y: -0.42603303616051974 },\n { x: 0.0000033180000000002357, y: -0.40321975394738696 },\n { x: 0.000003319000000000236, y: -0.458900665567852 },\n { x: 0.000003320000000000236, y: -0.4465875197416527 },\n { x: 0.000003321000000000236, y: -0.4319538881855717 },\n { x: 0.000003322000000000236, y: -0.4012601474818814 },\n { x: 0.000003323000000000236, y: -0.46349198131654906 },\n { x: 0.000003324000000000236, y: -0.40260077434299296 },\n { x: 0.0000033250000000002363, y: -0.41759161301765846 },\n { x: 0.0000033260000000002363, y: -0.4564701345365595 },\n { x: 0.0000033270000000002364, y: -0.42929664513164184 },\n { x: 0.0000033280000000002365, y: -0.44934059186737174 },\n { x: 0.0000033290000000002366, y: -0.40992085894860364 },\n { x: 0.0000033300000000002366, y: -0.45899672179313145 },\n { x: 0.0000033310000000002367, y: -0.46187235042490177 },\n { x: 0.0000033320000000002368, y: -0.4359261883539441 },\n { x: 0.000003333000000000237, y: -0.4552694730507883 },\n { x: 0.000003334000000000237, y: -0.46914201535026984 },\n { x: 0.000003335000000000237, y: -0.4506924755248122 },\n { x: 0.000003336000000000237, y: -0.4230892515715711 },\n { x: 0.000003337000000000237, y: -0.43896077663713096 },\n { x: 0.0000033380000000002372, y: -0.44355802269292366 },\n { x: 0.0000033390000000002373, y: -0.41985931681295474 },\n { x: 0.0000033400000000002374, y: -0.42487617145748297 },\n { x: 0.0000033410000000002375, y: -0.4906351271915709 },\n { x: 0.0000033420000000002375, y: -0.4322946262621722 },\n { x: 0.0000033430000000002376, y: -0.4392522710798343 },\n { x: 0.0000033440000000002377, y: -0.48224643296253833 },\n { x: 0.0000033450000000002378, y: -0.4445783971653301 },\n { x: 0.000003346000000000238, y: -0.47998888745389084 },\n { x: 0.000003347000000000238, y: -0.48352992227983355 },\n { x: 0.000003348000000000238, y: -0.4776838334682925 },\n { x: 0.000003349000000000238, y: -0.46020099686273125 },\n { x: 0.000003350000000000238, y: -0.4889175344431014 },\n { x: 0.000003351000000000238, y: -0.5080130640643018 },\n { x: 0.0000033520000000002383, y: -0.4570187752743036 },\n { x: 0.0000033530000000002384, y: -0.44019251394662606 },\n { x: 0.0000033540000000002384, y: -0.48940086737649385 },\n { x: 0.0000033550000000002385, y: -0.5042097214121938 },\n { x: 0.0000033560000000002386, y: -0.4592499172029625 },\n { x: 0.0000033570000000002387, y: -0.48132900169488396 },\n { x: 0.0000033580000000002387, y: -0.47273307843874096 },\n { x: 0.000003359000000000239, y: -0.47338698808537516 },\n { x: 0.000003360000000000239, y: -0.47596175388950285 },\n { x: 0.000003361000000000239, y: -0.4491708936328956 },\n { x: 0.000003362000000000239, y: -0.4880457437460077 },\n { x: 0.000003363000000000239, y: -0.4699143829924888 },\n { x: 0.000003364000000000239, y: -0.48143039502553003 },\n { x: 0.0000033650000000002393, y: -0.4995556689188391 },\n { x: 0.0000033660000000002393, y: -0.5028351419291084 },\n { x: 0.0000033670000000002394, y: -0.45841223340669646 },\n { x: 0.0000033680000000002395, y: -0.4651918188206114 },\n { x: 0.0000033690000000002396, y: -0.5162724889876089 },\n { x: 0.0000033700000000002396, y: -0.5039806482194678 },\n { x: 0.0000033710000000002397, y: -0.48341429460868873 },\n { x: 0.0000033720000000002398, y: -0.4853878765314375 },\n { x: 0.00000337300000000024, y: -0.4851549312033639 },\n { x: 0.00000337400000000024, y: -0.48846185523069485 },\n { x: 0.00000337500000000024, y: -0.5265970638481733 },\n { x: 0.00000337600000000024, y: -0.4663972157548419 },\n { x: 0.00000337700000000024, y: -0.47227015825980817 },\n { x: 0.0000033780000000002402, y: -0.48303384495975865 },\n { x: 0.0000033790000000002403, y: -0.4617097551322422 },\n { x: 0.0000033800000000002404, y: -0.46327308251596017 },\n { x: 0.0000033810000000002405, y: -0.5323201871797948 },\n { x: 0.0000033820000000002405, y: -0.48123870037568717 },\n { x: 0.0000033830000000002406, y: -0.4698039281641798 },\n { x: 0.0000033840000000002407, y: -0.4678571682602047 },\n { x: 0.0000033850000000002408, y: -0.497385865650122 },\n { x: 0.000003386000000000241, y: -0.4620324985512965 },\n { x: 0.000003387000000000241, y: -0.4945356794423756 },\n { x: 0.000003388000000000241, y: -0.5046073428147386 },\n { x: 0.000003389000000000241, y: -0.5208774151540554 },\n { x: 0.000003390000000000241, y: -0.46267487501891547 },\n { x: 0.000003391000000000241, y: -0.5130503052074072 },\n { x: 0.0000033920000000002413, y: -0.46667050386247094 },\n { x: 0.0000033930000000002414, y: -0.5121424223169877 },\n { x: 0.0000033940000000002414, y: -0.5356740779090764 },\n { x: 0.0000033950000000002415, y: -0.49574614119425703 },\n { x: 0.0000033960000000002416, y: -0.5200768662370949 },\n { x: 0.0000033970000000002417, y: -0.47816794007455543 },\n { x: 0.0000033980000000002417, y: -0.48187589039332557 },\n { x: 0.000003399000000000242, y: -0.4895635602555801 },\n { x: 0.000003400000000000242, y: -0.4708707234203284 },\n { x: 0.000003401000000000242, y: -0.48662368910263176 },\n { x: 0.000003402000000000242, y: -0.4737487090341167 },\n { x: 0.000003403000000000242, y: -0.5359646637329821 },\n { x: 0.000003404000000000242, y: -0.5010467308251905 },\n { x: 0.0000034050000000002423, y: -0.5430969129956867 },\n { x: 0.0000034060000000002423, y: -0.5217820996677304 },\n { x: 0.0000034070000000002424, y: -0.46803470881806003 },\n { x: 0.0000034080000000002425, y: -0.5092035959067122 },\n { x: 0.0000034090000000002426, y: -0.5324984696629461 },\n { x: 0.0000034100000000002426, y: -0.47356140853013473 },\n { x: 0.0000034110000000002427, y: -0.4699484150184648 },\n { x: 0.0000034120000000002428, y: -0.5061056341797864 },\n { x: 0.000003413000000000243, y: -0.5220315411680886 },\n { x: 0.000003414000000000243, y: -0.5344556708890145 },\n { x: 0.000003415000000000243, y: -0.5105210568076236 },\n { x: 0.000003416000000000243, y: -0.5058322289759033 },\n { x: 0.000003417000000000243, y: -0.4749915890034718 },\n { x: 0.0000034180000000002432, y: -0.4830163408410244 },\n { x: 0.0000034190000000002433, y: -0.500120757881822 },\n { x: 0.0000034200000000002434, y: -0.5183813308321358 },\n { x: 0.0000034210000000002435, y: -0.5083635160491194 },\n { x: 0.0000034220000000002435, y: -0.5111336946392137 },\n { x: 0.0000034230000000002436, y: -0.5216465973073167 },\n { x: 0.0000034240000000002437, y: -0.4725649568070156 },\n { x: 0.0000034250000000002438, y: -0.4820619153910591 },\n { x: 0.000003426000000000244, y: -0.48346102957121456 },\n { x: 0.000003427000000000244, y: -0.4892946731753036 },\n { x: 0.000003428000000000244, y: -0.5450338605682216 },\n { x: 0.000003429000000000244, y: -0.48959027268535804 },\n { x: 0.000003430000000000244, y: -0.50472994888099 },\n { x: 0.0000034310000000002442, y: -0.5135689790534533 },\n { x: 0.0000034320000000002443, y: -0.4728151076186395 },\n { x: 0.0000034330000000002444, y: -0.5031203456151376 },\n { x: 0.0000034340000000002444, y: -0.5120911610624209 },\n { x: 0.0000034350000000002445, y: -0.51298601836823 },\n { x: 0.0000034360000000002446, y: -0.481967249319706 },\n { x: 0.0000034370000000002447, y: -0.5133655741441281 },\n { x: 0.0000034380000000002447, y: -0.49720719887826503 },\n { x: 0.000003439000000000245, y: -0.49778833678371104 },\n { x: 0.000003440000000000245, y: -0.5035301219618319 },\n { x: 0.000003441000000000245, y: -0.4857897399439753 },\n { x: 0.000003442000000000245, y: -0.5433254539273844 },\n { x: 0.000003443000000000245, y: -0.47332055408714946 },\n { x: 0.000003444000000000245, y: -0.49267424280923644 },\n { x: 0.0000034450000000002453, y: -0.48890168449127547 },\n { x: 0.0000034460000000002453, y: -0.5256139383265327 },\n { x: 0.0000034470000000002454, y: -0.49984946873105185 },\n { x: 0.0000034480000000002455, y: -0.47658034946026606 },\n { x: 0.0000034490000000002456, y: -0.4812121899614879 },\n { x: 0.0000034500000000002456, y: -0.5246701603561381 },\n { x: 0.0000034510000000002457, y: -0.48245242932259336 },\n { x: 0.000003452000000000246, y: -0.5104302529328206 },\n { x: 0.000003453000000000246, y: -0.5279744240133445 },\n { x: 0.000003454000000000246, y: -0.53868042739691 },\n { x: 0.000003455000000000246, y: -0.5124553082017602 },\n { x: 0.000003456000000000246, y: -0.5055019346625338 },\n { x: 0.000003457000000000246, y: -0.48255370881578524 },\n { x: 0.0000034580000000002462, y: -0.477159364636299 },\n { x: 0.0000034590000000002463, y: -0.5092100952193521 },\n { x: 0.0000034600000000002464, y: -0.46933562982000465 },\n { x: 0.0000034610000000002465, y: -0.48304966980503167 },\n { x: 0.0000034620000000002465, y: -0.5386474112103674 },\n { x: 0.0000034630000000002466, y: -0.47739558950233807 },\n { x: 0.0000034640000000002467, y: -0.5238820088670073 },\n { x: 0.0000034650000000002468, y: -0.5032957578884067 },\n { x: 0.000003466000000000247, y: -0.5133049718659941 },\n { x: 0.000003467000000000247, y: -0.46391888156022615 },\n { x: 0.000003468000000000247, y: -0.5260654126593264 },\n { x: 0.000003469000000000247, y: -0.47342561988462284 },\n { x: 0.000003470000000000247, y: -0.532666635371735 },\n { x: 0.0000034710000000002472, y: -0.4928412794931368 },\n { x: 0.0000034720000000002473, y: -0.4881621009023802 },\n { x: 0.0000034730000000002474, y: -0.48056713580290095 },\n { x: 0.0000034740000000002474, y: -0.5278160091834466 },\n { x: 0.0000034750000000002475, y: -0.5265244163484548 },\n { x: 0.0000034760000000002476, y: -0.5120194064018518 },\n { x: 0.0000034770000000002477, y: -0.48062304036662823 },\n { x: 0.0000034780000000002477, y: -0.4951684941951898 },\n { x: 0.000003479000000000248, y: -0.46300134956831474 },\n { x: 0.000003480000000000248, y: -0.4936239389524993 },\n { x: 0.000003481000000000248, y: -0.5282890262751992 },\n { x: 0.000003482000000000248, y: -0.4927372239091787 },\n { x: 0.000003483000000000248, y: -0.45963135150194434 },\n { x: 0.000003484000000000248, y: -0.4799386086758681 },\n { x: 0.0000034850000000002483, y: -0.4741355191067588 },\n { x: 0.0000034860000000002483, y: -0.5056293345535302 },\n { x: 0.0000034870000000002484, y: -0.46620443716361404 },\n { x: 0.0000034880000000002485, y: -0.48545971890883177 },\n { x: 0.0000034890000000002486, y: -0.46527067363364866 },\n { x: 0.0000034900000000002486, y: -0.4831903162716123 },\n { x: 0.0000034910000000002487, y: -0.44715006433764426 },\n { x: 0.000003492000000000249, y: -0.44918297891699044 },\n { x: 0.000003493000000000249, y: -0.5028049864953128 },\n { x: 0.000003494000000000249, y: -0.47481660347534466 },\n { x: 0.000003495000000000249, y: -0.4585100146196142 },\n { x: 0.000003496000000000249, y: -0.5007301933732508 },\n { x: 0.000003497000000000249, y: -0.49530624110010585 },\n { x: 0.0000034980000000002492, y: -0.4886066863321506 },\n { x: 0.0000034990000000002493, y: -0.46181468369258627 },\n { x: 0.0000035000000000002494, y: -0.4414797612982536 },\n { x: 0.0000035010000000002495, y: -0.48761326669803884 },\n { x: 0.0000035020000000002495, y: -0.45523858038352677 },\n { x: 0.0000035030000000002496, y: -0.48751556058423334 },\n { x: 0.0000035040000000002497, y: -0.47293139780081983 },\n { x: 0.0000035050000000002498, y: -0.4727365413504359 },\n { x: 0.00000350600000000025, y: -0.494384143450404 },\n { x: 0.00000350700000000025, y: -0.5020347011411954 },\n { x: 0.00000350800000000025, y: -0.4854032546445812 },\n { x: 0.00000350900000000025, y: -0.4378126710250092 },\n { x: 0.00000351000000000025, y: -0.4870794009111852 },\n { x: 0.0000035110000000002502, y: -0.4421357932399356 },\n { x: 0.0000035120000000002503, y: -0.4407106811481119 },\n { x: 0.0000035130000000002504, y: -0.43705624681269606 },\n { x: 0.0000035140000000002505, y: -0.47823457672802244 },\n { x: 0.0000035150000000002505, y: -0.44238240809045537 },\n { x: 0.0000035160000000002506, y: -0.4954458579680961 },\n { x: 0.0000035170000000002507, y: -0.48700039320880223 },\n { x: 0.0000035180000000002508, y: -0.4418755065564143 },\n { x: 0.000003519000000000251, y: -0.48374262136466056 },\n { x: 0.000003520000000000251, y: -0.42831307036376315 },\n { x: 0.000003521000000000251, y: -0.4931125632016287 },\n { x: 0.000003522000000000251, y: -0.42298332736388555 },\n { x: 0.000003523000000000251, y: -0.41921811446590773 },\n { x: 0.000003524000000000251, y: -0.4443428252129152 },\n { x: 0.0000035250000000002513, y: -0.4275281969079634 },\n { x: 0.0000035260000000002514, y: -0.4216176969865052 },\n { x: 0.0000035270000000002514, y: -0.47657910850479945 },\n { x: 0.0000035280000000002515, y: -0.48414135220180166 },\n { x: 0.0000035290000000002516, y: -0.4224316935851882 },\n { x: 0.0000035300000000002517, y: -0.4340089251878088 },\n { x: 0.0000035310000000002517, y: -0.45696771258156077 },\n { x: 0.000003532000000000252, y: -0.4723654128481427 },\n { x: 0.000003533000000000252, y: -0.4250142480003609 },\n { x: 0.000003534000000000252, y: -0.46463966171388654 },\n { x: 0.000003535000000000252, y: -0.4642531239227323 },\n { x: 0.000003536000000000252, y: -0.4227637029382053 },\n { x: 0.000003537000000000252, y: -0.41372880806107465 },\n { x: 0.0000035380000000002523, y: -0.42003325226386423 },\n { x: 0.0000035390000000002523, y: -0.43369314130179293 },\n { x: 0.0000035400000000002524, y: -0.4464395469045033 },\n { x: 0.0000035410000000002525, y: -0.43744871583252454 },\n { x: 0.0000035420000000002526, y: -0.4045531914155711 },\n { x: 0.0000035430000000002526, y: -0.417723569708116 },\n { x: 0.0000035440000000002527, y: -0.42307309466591725 },\n { x: 0.0000035450000000002528, y: -0.43096106808602325 },\n { x: 0.000003546000000000253, y: -0.4384196413078245 },\n { x: 0.000003547000000000253, y: -0.4094897236894357 },\n { x: 0.000003548000000000253, y: -0.40827562283307 },\n { x: 0.000003549000000000253, y: -0.43892307840916434 },\n { x: 0.000003550000000000253, y: -0.4495668105210173 },\n { x: 0.0000035510000000002532, y: -0.4437937572875227 },\n { x: 0.0000035520000000002533, y: -0.44101229955160387 },\n { x: 0.0000035530000000002534, y: -0.414484788430339 },\n { x: 0.0000035540000000002535, y: -0.4207343911274903 },\n { x: 0.0000035550000000002535, y: -0.41017657922288625 },\n { x: 0.0000035560000000002536, y: -0.40033580209028563 },\n { x: 0.0000035570000000002537, y: -0.43270020968328615 },\n { x: 0.0000035580000000002538, y: -0.3957656045788688 },\n { x: 0.000003559000000000254, y: -0.4086050468784142 },\n { x: 0.000003560000000000254, y: -0.38708944896985537 },\n { x: 0.000003561000000000254, y: -0.3778883059082055 },\n { x: 0.000003562000000000254, y: -0.41155123943530275 },\n { x: 0.000003563000000000254, y: -0.4201518677611237 },\n { x: 0.000003564000000000254, y: -0.411451642593377 },\n { x: 0.0000035650000000002543, y: -0.40073518374551265 },\n { x: 0.0000035660000000002544, y: -0.38463669291867275 },\n { x: 0.0000035670000000002544, y: -0.36792649443565906 },\n { x: 0.0000035680000000002545, y: -0.37121912023541276 },\n { x: 0.0000035690000000002546, y: -0.3780521088974908 },\n { x: 0.0000035700000000002547, y: -0.41922496455085995 },\n { x: 0.0000035710000000002547, y: -0.3598788971001736 },\n { x: 0.000003572000000000255, y: -0.3576593851382572 },\n { x: 0.000003573000000000255, y: -0.37838148784026215 },\n { x: 0.000003574000000000255, y: -0.39305476937277106 },\n { x: 0.000003575000000000255, y: -0.3692740279028207 },\n { x: 0.000003576000000000255, y: -0.3524498339546062 },\n { x: 0.000003577000000000255, y: -0.3607024972073173 },\n { x: 0.0000035780000000002553, y: -0.34694233262463503 },\n { x: 0.0000035790000000002553, y: -0.4030693051818707 },\n { x: 0.0000035800000000002554, y: -0.34855468096083875 },\n { x: 0.0000035810000000002555, y: -0.4111570819537663 },\n { x: 0.0000035820000000002556, y: -0.3827894007463801 },\n { x: 0.0000035830000000002556, y: -0.36248214901864145 },\n { x: 0.0000035840000000002557, y: -0.39250965308524993 },\n { x: 0.0000035850000000002558, y: -0.33866768369186984 },\n { x: 0.000003586000000000256, y: -0.36670883733409976 },\n { x: 0.000003587000000000256, y: -0.38529160309611027 },\n { x: 0.000003588000000000256, y: -0.3694312142353537 },\n { x: 0.000003589000000000256, y: -0.3588401829077657 },\n { x: 0.000003590000000000256, y: -0.37426738167768786 },\n { x: 0.0000035910000000002562, y: -0.3298212056752513 },\n { x: 0.0000035920000000002563, y: -0.3721072097648827 },\n { x: 0.0000035930000000002564, y: -0.33561113826302136 },\n { x: 0.0000035940000000002565, y: -0.3402560732496043 },\n { x: 0.0000035950000000002565, y: -0.32990161610473756 },\n { x: 0.0000035960000000002566, y: -0.3359725140646908 },\n { x: 0.0000035970000000002567, y: -0.3329339805505544 },\n { x: 0.0000035980000000002568, y: -0.35354569369080197 },\n { x: 0.000003599000000000257, y: -0.3685534624418669 },\n { x: 0.000003600000000000257, y: -0.32619655000741493 },\n { x: 0.000003601000000000257, y: -0.31579671439314805 },\n { x: 0.000003602000000000257, y: -0.3546636311581846 },\n { x: 0.000003603000000000257, y: -0.34935332915164097 },\n { x: 0.0000036040000000002572, y: -0.30638394515008566 },\n { x: 0.0000036050000000002573, y: -0.34564983882546896 },\n { x: 0.0000036060000000002574, y: -0.3075908962299332 },\n { x: 0.0000036070000000002574, y: -0.3482621030863398 },\n { x: 0.0000036080000000002575, y: -0.32401141902757324 },\n { x: 0.0000036090000000002576, y: -0.32210123078909003 },\n { x: 0.0000036100000000002577, y: -0.3601064861979281 },\n { x: 0.0000036110000000002577, y: -0.35994246540699526 },\n { x: 0.000003612000000000258, y: -0.31026024721790463 },\n { x: 0.000003613000000000258, y: -0.3468661461519508 },\n { x: 0.000003614000000000258, y: -0.34696531869246944 },\n { x: 0.000003615000000000258, y: -0.2939104035331667 },\n { x: 0.000003616000000000258, y: -0.29927713591841876 },\n { x: 0.000003617000000000258, y: -0.2978802850986503 },\n { x: 0.0000036180000000002583, y: -0.32739006619406275 },\n { x: 0.0000036190000000002583, y: -0.3432618211548486 },\n { x: 0.0000036200000000002584, y: -0.32962241289739336 },\n { x: 0.0000036210000000002585, y: -0.333000396896873 },\n { x: 0.0000036220000000002586, y: -0.27187342488646077 },\n { x: 0.0000036230000000002586, y: -0.32310677145593636 },\n { x: 0.0000036240000000002587, y: -0.31138243406721333 },\n { x: 0.000003625000000000259, y: -0.2781419232513508 },\n { x: 0.000003626000000000259, y: -0.32534764665539856 },\n { x: 0.000003627000000000259, y: -0.2887942310638763 },\n { x: 0.000003628000000000259, y: -0.3177000763587596 },\n { x: 0.000003629000000000259, y: -0.2702926364032007 },\n { x: 0.000003630000000000259, y: -0.2594343788403857 },\n { x: 0.0000036310000000002592, y: -0.29421208722767156 },\n { x: 0.0000036320000000002593, y: -0.2627682461366655 },\n { x: 0.0000036330000000002594, y: -0.2555084706475671 },\n { x: 0.0000036340000000002595, y: -0.2532145307590628 },\n { x: 0.0000036350000000002595, y: -0.28650509330706775 },\n { x: 0.0000036360000000002596, y: -0.25954227477010483 },\n { x: 0.0000036370000000002597, y: -0.26726641110326715 },\n { x: 0.0000036380000000002598, y: -0.2448949747942874 },\n { x: 0.00000363900000000026, y: -0.2541127466898014 },\n { x: 0.00000364000000000026, y: -0.23804057402761264 },\n { x: 0.00000364100000000026, y: -0.30197860546408584 },\n { x: 0.00000364200000000026, y: -0.23636164774994223 },\n { x: 0.00000364300000000026, y: -0.2825543030568763 },\n { x: 0.0000036440000000002602, y: -0.2462358330935048 },\n { x: 0.0000036450000000002603, y: -0.25298696589684283 },\n { x: 0.0000036460000000002604, y: -0.28632157433387756 },\n { x: 0.0000036470000000002604, y: -0.24189613071708943 },\n { x: 0.0000036480000000002605, y: -0.27929765100481707 },\n { x: 0.0000036490000000002606, y: -0.24538113269853357 },\n { x: 0.0000036500000000002607, y: -0.30671804232370703 },\n { x: 0.0000036510000000002607, y: -0.27011607694196776 },\n { x: 0.000003652000000000261, y: -0.2704556345261621 },\n { x: 0.000003653000000000261, y: -0.20846417085623825 },\n { x: 0.000003654000000000261, y: -0.24955499373783827 },\n { x: 0.000003655000000000261, y: -0.23966322472828874 },\n { x: 0.000003656000000000261, y: -0.20217928635807403 },\n { x: 0.000003657000000000261, y: -0.2331115638985148 },\n { x: 0.0000036580000000002613, y: -0.2518084692635158 },\n { x: 0.0000036590000000002613, y: -0.1967162632898379 },\n { x: 0.0000036600000000002614, y: -0.229230772125001 },\n { x: 0.0000036610000000002615, y: -0.24155952779605738 },\n { x: 0.0000036620000000002616, y: -0.19270218586418894 },\n { x: 0.0000036630000000002616, y: -0.20403264636119314 },\n { x: 0.0000036640000000002617, y: -0.21169111740173982 },\n { x: 0.000003665000000000262, y: -0.2065747463751475 },\n { x: 0.000003666000000000262, y: -0.19891970538654696 },\n { x: 0.000003667000000000262, y: -0.17887093561196377 },\n { x: 0.000003668000000000262, y: -0.2291886517264323 },\n { x: 0.000003669000000000262, y: -0.23654613045993622 },\n { x: 0.000003670000000000262, y: -0.20729525999690526 },\n { x: 0.0000036710000000002622, y: -0.2115888538305148 },\n { x: 0.0000036720000000002623, y: -0.1704036367750172 },\n { x: 0.0000036730000000002624, y: -0.23452835792419793 },\n { x: 0.0000036740000000002625, y: -0.17070056448078622 },\n { x: 0.0000036750000000002625, y: -0.20989690052347934 },\n { x: 0.0000036760000000002626, y: -0.19692221732919457 },\n { x: 0.0000036770000000002627, y: -0.20226596597948124 },\n { x: 0.0000036780000000002628, y: -0.20522115224395693 },\n { x: 0.000003679000000000263, y: -0.19483299544647903 },\n { x: 0.000003680000000000263, y: -0.19388613010249903 },\n { x: 0.000003681000000000263, y: -0.19639733680596577 },\n { x: 0.000003682000000000263, y: -0.1689390503621976 },\n { x: 0.000003683000000000263, y: -0.17044731403759816 },\n { x: 0.0000036840000000002632, y: -0.19374204089790645 },\n { x: 0.0000036850000000002633, y: -0.1675409975689446 },\n { x: 0.0000036860000000002634, y: -0.20660545043739661 },\n { x: 0.0000036870000000002634, y: -0.13681171288243932 },\n { x: 0.0000036880000000002635, y: -0.15826465425074074 },\n { x: 0.0000036890000000002636, y: -0.16916622588979255 },\n { x: 0.0000036900000000002637, y: -0.14023553121659668 },\n { x: 0.0000036910000000002637, y: -0.13912450403781482 },\n { x: 0.000003692000000000264, y: -0.13067589983627853 },\n { x: 0.000003693000000000264, y: -0.15337280039374465 },\n { x: 0.000003694000000000264, y: -0.15825999611915012 },\n { x: 0.000003695000000000264, y: -0.13281732910952154 },\n { x: 0.000003696000000000264, y: -0.17229501014605386 },\n { x: 0.000003697000000000264, y: -0.1806662620280943 },\n { x: 0.0000036980000000002643, y: -0.12499329559714006 },\n { x: 0.0000036990000000002643, y: -0.11543293729059019 },\n { x: 0.0000037000000000002644, y: -0.12316933529103916 },\n { x: 0.0000037010000000002645, y: -0.1701944322110603 },\n { x: 0.0000037020000000002646, y: -0.10769377268663166 },\n { x: 0.0000037030000000002646, y: -0.11406562621180977 },\n { x: 0.0000037040000000002647, y: -0.17386146748736747 },\n { x: 0.000003705000000000265, y: -0.11012940213678613 },\n { x: 0.000003706000000000265, y: -0.12978672581222384 },\n { x: 0.000003707000000000265, y: -0.13296115344051507 },\n { x: 0.000003708000000000265, y: -0.11691147963342609 },\n { x: 0.000003709000000000265, y: -0.13230472974168364 },\n { x: 0.000003710000000000265, y: -0.10915405048248283 },\n { x: 0.0000037110000000002653, y: -0.10909443635017188 },\n { x: 0.0000037120000000002653, y: -0.09826664037124794 },\n { x: 0.0000037130000000002654, y: -0.09970068231943655 },\n { x: 0.0000037140000000002655, y: -0.13809769724192994 },\n { x: 0.0000037150000000002656, y: -0.14594921961839072 },\n { x: 0.0000037160000000002656, y: -0.09675638822372708 },\n { x: 0.0000037170000000002657, y: -0.1063050068762987 },\n { x: 0.0000037180000000002658, y: -0.10376056800360725 },\n { x: 0.000003719000000000266, y: -0.1160081568326403 },\n { x: 0.000003720000000000266, y: -0.10346434330894624 },\n { x: 0.000003721000000000266, y: -0.13201970316289074 },\n { x: 0.000003722000000000266, y: -0.11913973872356406 },\n { x: 0.000003723000000000266, y: -0.06720063689900498 },\n { x: 0.0000037240000000002662, y: -0.14048725943224846 },\n { x: 0.0000037250000000002663, y: -0.1292530467843626 },\n { x: 0.0000037260000000002664, y: -0.08110569186208576 },\n { x: 0.0000037270000000002665, y: -0.0890413296838159 },\n { x: 0.0000037280000000002665, y: -0.1231985482901011 },\n { x: 0.0000037290000000002666, y: -0.11458837147206197 },\n { x: 0.0000037300000000002667, y: -0.07381400603750093 },\n { x: 0.0000037310000000002668, y: -0.053400397120431195 },\n { x: 0.000003732000000000267, y: -0.08266182157026147 },\n { x: 0.000003733000000000267, y: -0.04833001388380807 },\n { x: 0.000003734000000000267, y: -0.10066452203602488 },\n { x: 0.000003735000000000267, y: -0.08349254783591059 },\n { x: 0.000003736000000000267, y: -0.06895652785001928 },\n { x: 0.000003737000000000267, y: -0.06260617030120882 },\n { x: 0.0000037380000000002673, y: -0.042518965883061186 },\n { x: 0.0000037390000000002674, y: -0.07414478435452504 },\n { x: 0.0000037400000000002674, y: -0.02933329573022457 },\n { x: 0.0000037410000000002675, y: -0.0770531356666485 },\n { x: 0.0000037420000000002676, y: -0.043785869233870366 },\n { x: 0.0000037430000000002677, y: -0.06717708245934167 },\n { x: 0.0000037440000000002677, y: -0.08227591141091063 },\n { x: 0.000003745000000000268, y: -0.026727511228420688 },\n { x: 0.000003746000000000268, y: -0.05100667317384938 },\n { x: 0.000003747000000000268, y: -0.015177963684023923 },\n { x: 0.000003748000000000268, y: -0.07262077600333502 },\n { x: 0.000003749000000000268, y: -0.06624364896262364 },\n { x: 0.000003750000000000268, y: -0.00483025732210484 },\n { x: 0.0000037510000000002683, y: -0.05989242276732176 },\n { x: 0.0000037520000000002683, y: -0.002843924380259495 },\n { x: 0.0000037530000000002684, y: -0.03294526433995804 },\n { x: 0.0000037540000000002685, y: -0.045118598256665504 },\n { x: 0.0000037550000000002686, y: -0.06369476170307739 },\n { x: 0.0000037560000000002686, y: -0.04017565357806448 },\n { x: 0.0000037570000000002687, y: -0.015220180587088093 },\n { x: 0.0000037580000000002688, y: 0.001802477434737524 },\n { x: 0.000003759000000000269, y: -0.054372537874282846 },\n { x: 0.000003760000000000269, y: 0.010110012768363763 },\n { x: 0.000003761000000000269, y: -0.048776544057665364 },\n { x: 0.000003762000000000269, y: -0.016792919789972743 },\n { x: 0.000003763000000000269, y: -0.025340107766488127 },\n { x: 0.0000037640000000002692, y: -0.046065697723910344 },\n { x: 0.0000037650000000002693, y: 0.012686814325215911 },\n { x: 0.0000037660000000002694, y: -0.00771890781037642 },\n { x: 0.0000037670000000002695, y: -0.03206562652826235 },\n { x: 0.0000037680000000002695, y: -0.0015275663406866232 },\n { x: 0.0000037690000000002696, y: -0.03429512017916918 },\n { x: 0.0000037700000000002697, y: 0.016452602495524053 },\n { x: 0.0000037710000000002698, y: 0.031139428404530524 },\n { x: 0.00000377200000000027, y: 0.009649702869944404 },\n { x: 0.00000377300000000027, y: 0.02165727378920746 },\n { x: 0.00000377400000000027, y: -0.02294559677736318 },\n { x: 0.00000377500000000027, y: 0.0260090215557899 },\n { x: 0.00000377600000000027, y: -0.012429611934390298 },\n { x: 0.00000377700000000027, y: -0.0007193451913712484 },\n { x: 0.0000037780000000002703, y: 0.0318007177951392 },\n { x: 0.0000037790000000002704, y: -0.011244818065019896 },\n { x: 0.0000037800000000002704, y: -0.01526988306237366 },\n { x: 0.0000037810000000002705, y: -0.00821774264395219 },\n { x: 0.0000037820000000002706, y: -0.013105767542221858 },\n { x: 0.0000037830000000002707, y: 0.03754767946904605 },\n { x: 0.0000037840000000002707, y: 0.029533656322265095 },\n { x: 0.000003785000000000271, y: 0.06489156232485484 },\n { x: 0.000003786000000000271, y: -0.00387258615531557 },\n { x: 0.000003787000000000271, y: 0.06397243280059939 },\n { x: 0.000003788000000000271, y: 0.020436486124118282 },\n { x: 0.000003789000000000271, y: 0.0074974107423625945 },\n { x: 0.000003790000000000271, y: 0.07326347961668889 },\n { x: 0.0000037910000000002713, y: 0.018585166744699667 },\n { x: 0.0000037920000000002713, y: 0.0760775610069449 },\n { x: 0.0000037930000000002714, y: 0.01666436767191911 },\n { x: 0.0000037940000000002715, y: 0.06145317462612715 },\n { x: 0.0000037950000000002716, y: 0.04829386226021341 },\n { x: 0.0000037960000000002716, y: 0.04490458370568937 },\n { x: 0.0000037970000000002717, y: 0.07597543508147978 },\n { x: 0.0000037980000000002718, y: 0.07116136092475545 },\n { x: 0.000003799000000000272, y: 0.005808219499573497 },\n { x: 0.000003800000000000272, y: 0.05276224485842819 },\n { x: 0.000003801000000000272, y: 0.028874560500370405 },\n { x: 0.000003802000000000272, y: 0.04478002584097804 },\n { x: 0.000003803000000000272, y: 0.07871585412749102 },\n { x: 0.0000038040000000002722, y: 0.046958859880951935 },\n { x: 0.0000038050000000002723, y: 0.0776039256859531 },\n { x: 0.0000038060000000002724, y: 0.10532685677571765 },\n { x: 0.0000038070000000002725, y: 0.07076440364962333 },\n { x: 0.0000038080000000002725, y: 0.10230210099760137 },\n { x: 0.0000038090000000002726, y: 0.1135899831592243 },\n { x: 0.0000038100000000002727, y: 0.08391379724999577 },\n { x: 0.0000038110000000002728, y: 0.1115640950006993 },\n { x: 0.000003812000000000273, y: 0.07091348807832315 },\n { x: 0.000003813000000000273, y: 0.1086826776812232 },\n { x: 0.000003814000000000273, y: 0.11105224572607775 },\n { x: 0.000003815000000000273, y: 0.07731906479005708 },\n { x: 0.000003816000000000272, y: 0.08715848089043139 },\n { x: 0.000003817000000000272, y: 0.056640798980936505 },\n { x: 0.000003818000000000272, y: 0.10287571788139943 },\n { x: 0.000003819000000000271, y: 0.06119234123740106 },\n { x: 0.000003820000000000271, y: 0.06397675982326925 },\n { x: 0.0000038210000000002706, y: 0.09203401659943122 },\n { x: 0.00000382200000000027, y: 0.11312228500053674 },\n { x: 0.00000382300000000027, y: 0.14002531803300985 },\n { x: 0.0000038240000000002695, y: 0.08497534411378144 },\n { x: 0.000003825000000000269, y: 0.0858097096668864 },\n { x: 0.000003826000000000269, y: 0.07123891760835813 },\n { x: 0.0000038270000000002685, y: 0.049347380300456774 },\n { x: 0.000003828000000000268, y: 0.13862914417678432 },\n { x: 0.000003829000000000268, y: 0.11483591049615212 },\n { x: 0.000003830000000000267, y: 0.10705597948527867 },\n { x: 0.000003831000000000267, y: 0.1402268057406815 },\n { x: 0.000003832000000000267, y: 0.11056001501760651 },\n { x: 0.000003833000000000266, y: 0.14751743115344665 },\n { x: 0.000003834000000000266, y: 0.10029696799255243 },\n { x: 0.000003835000000000266, y: 0.09257080616606486 },\n { x: 0.000003836000000000265, y: 0.08829811528522333 },\n { x: 0.000003837000000000265, y: 0.09716784316015845 },\n { x: 0.000003838000000000265, y: 0.14736460895078715 },\n { x: 0.000003839000000000264, y: 0.11708640541053147 },\n { x: 0.000003840000000000264, y: 0.1403477066434798 },\n { x: 0.000003841000000000264, y: 0.16249826777799295 },\n { x: 0.000003842000000000263, y: 0.10725341147147689 },\n { x: 0.000003843000000000263, y: 0.1599500489651751 },\n { x: 0.0000038440000000002625, y: 0.15348589512435795 },\n { x: 0.000003845000000000262, y: 0.15616786052220136 },\n { x: 0.000003846000000000262, y: 0.11929751969112422 },\n { x: 0.0000038470000000002615, y: 0.15878084276588464 },\n { x: 0.000003848000000000261, y: 0.17105464271665977 },\n { x: 0.000003849000000000261, y: 0.1289403054900729 },\n { x: 0.0000038500000000002604, y: 0.18283198399244455 },\n { x: 0.00000385100000000026, y: 0.18097604588431326 },\n { x: 0.00000385200000000026, y: 0.12682878264972203 },\n { x: 0.000003853000000000259, y: 0.16355800125735143 },\n { x: 0.000003854000000000259, y: 0.1509092017288921 },\n { x: 0.000003855000000000259, y: 0.13808921212691533 },\n { x: 0.000003856000000000258, y: 0.13132946130058273 },\n { x: 0.000003857000000000258, y: 0.14951675067794729 },\n { x: 0.000003858000000000258, y: 0.187779399064356 },\n { x: 0.000003859000000000257, y: 0.19915737915780304 },\n { x: 0.000003860000000000257, y: 0.13190700260731733 },\n { x: 0.000003861000000000257, y: 0.164841759517776 },\n { x: 0.000003862000000000256, y: 0.176515087745802 },\n { x: 0.000003863000000000256, y: 0.16222479410417287 },\n { x: 0.0000038640000000002556, y: 0.13732543716610482 },\n { x: 0.000003865000000000255, y: 0.16678724026455302 },\n { x: 0.000003866000000000255, y: 0.18906531880529184 },\n { x: 0.0000038670000000002545, y: 0.1781885697234449 },\n { x: 0.000003868000000000254, y: 0.19683666242754405 },\n { x: 0.000003869000000000254, y: 0.2156003861530912 },\n { x: 0.0000038700000000002535, y: 0.15546713749533556 },\n { x: 0.000003871000000000253, y: 0.16426159288706357 },\n { x: 0.000003872000000000253, y: 0.16688687412384265 },\n { x: 0.0000038730000000002524, y: 0.17010253336067568 },\n { x: 0.000003874000000000252, y: 0.1811382032127123 },\n { x: 0.000003875000000000252, y: 0.18742345737547758 },\n { x: 0.000003876000000000251, y: 0.20647237237574914 },\n { x: 0.000003877000000000251, y: 0.21245489307524304 },\n { x: 0.000003878000000000251, y: 0.19999310263799502 },\n { x: 0.00000387900000000025, y: 0.23069017609041784 },\n { x: 0.00000388000000000025, y: 0.22585792893376067 },\n { x: 0.00000388100000000025, y: 0.20405585569881896 },\n { x: 0.000003882000000000249, y: 0.22571343413267697 },\n { x: 0.000003883000000000249, y: 0.1821274212266734 },\n { x: 0.000003884000000000249, y: 0.20266850259056965 },\n { x: 0.000003885000000000248, y: 0.21951932844832867 },\n { x: 0.000003886000000000248, y: 0.237354950317896 },\n { x: 0.0000038870000000002476, y: 0.23823016763106175 },\n { x: 0.000003888000000000247, y: 0.17066206490107963 },\n { x: 0.000003889000000000247, y: 0.24482465919028346 },\n { x: 0.0000038900000000002465, y: 0.22426345829299338 },\n { x: 0.000003891000000000246, y: 0.20455399033507282 },\n { x: 0.000003892000000000246, y: 0.22885939676625072 },\n { x: 0.0000038930000000002455, y: 0.19361735935302135 },\n { x: 0.000003894000000000245, y: 0.22332636310680162 },\n { x: 0.000003895000000000245, y: 0.19284531068228294 },\n { x: 0.000003896000000000244, y: 0.20365087774992216 },\n { x: 0.000003897000000000244, y: 0.24955030517911717 },\n { x: 0.000003898000000000244, y: 0.25046713806857407 },\n { x: 0.000003899000000000243, y: 0.1906027253273096 },\n { x: 0.000003900000000000243, y: 0.24095190069761946 },\n { x: 0.000003901000000000243, y: 0.25909361403634457 },\n { x: 0.000003902000000000242, y: 0.21846878615554152 },\n { x: 0.000003903000000000242, y: 0.26004066163073547 },\n { x: 0.000003904000000000242, y: 0.2365220832157309 },\n { x: 0.000003905000000000241, y: 0.25524244941855867 },\n { x: 0.000003906000000000241, y: 0.22617139638491685 },\n { x: 0.000003907000000000241, y: 0.25294493085461245 },\n { x: 0.00000390800000000024, y: 0.2356879098969712 },\n { x: 0.00000390900000000024, y: 0.2712195241889297 },\n { x: 0.0000039100000000002395, y: 0.24902038542873603 },\n { x: 0.000003911000000000239, y: 0.256834949545172 },\n { x: 0.000003912000000000239, y: 0.21593483454336798 },\n { x: 0.0000039130000000002385, y: 0.207946740672267 },\n { x: 0.000003914000000000238, y: 0.22112392424859914 },\n { x: 0.000003915000000000238, y: 0.23602298927008508 },\n { x: 0.0000039160000000002375, y: 0.24749596895126755 },\n { x: 0.000003917000000000237, y: 0.24662394406520857 },\n { x: 0.000003918000000000237, y: 0.22788109473926815 },\n { x: 0.000003919000000000236, y: 0.2315760541341182 },\n { x: 0.000003920000000000236, y: 0.22688726835610262 },\n { x: 0.000003921000000000236, y: 0.21718473617578068 },\n { x: 0.000003922000000000235, y: 0.2753480836058232 },\n { x: 0.000003923000000000235, y: 0.23022057390042344 },\n { x: 0.000003924000000000235, y: 0.22132307559394876 },\n { x: 0.000003925000000000234, y: 0.23986304778703177 },\n { x: 0.000003926000000000234, y: 0.23588125213618022 },\n { x: 0.000003927000000000234, y: 0.2381327081360886 },\n { x: 0.000003928000000000233, y: 0.2699992863971873 },\n { x: 0.000003929000000000233, y: 0.22095722644745924 },\n { x: 0.0000039300000000002326, y: 0.29691962032816877 },\n { x: 0.000003931000000000232, y: 0.2332812010583422 },\n { x: 0.000003932000000000232, y: 0.2697119646366144 },\n { x: 0.0000039330000000002315, y: 0.2836801921842508 },\n { x: 0.000003934000000000231, y: 0.257749416804988 },\n { x: 0.000003935000000000231, y: 0.235641898115553 },\n { x: 0.0000039360000000002305, y: 0.2951186014708261 },\n { x: 0.00000393700000000023, y: 0.2701076565792924 },\n { x: 0.00000393800000000023, y: 0.25372482973947696 },\n { x: 0.0000039390000000002294, y: 0.2731422399865056 },\n { x: 0.000003940000000000229, y: 0.24908123546636854 },\n { x: 0.000003941000000000229, y: 0.2827896632338716 },\n { x: 0.000003942000000000228, y: 0.27723750906049843 },\n { x: 0.000003943000000000228, y: 0.29731718904158544 },\n { x: 0.000003944000000000228, y: 0.3119657046844713 },\n { x: 0.000003945000000000227, y: 0.3077605156384501 },\n { x: 0.000003946000000000227, y: 0.24506538429052305 },\n { x: 0.000003947000000000227, y: 0.2660542241684431 },\n { x: 0.000003948000000000226, y: 0.28931788653636853 },\n { x: 0.000003949000000000226, y: 0.2829600520139954 },\n { x: 0.000003950000000000226, y: 0.24550170706886448 },\n { x: 0.000003951000000000225, y: 0.2566977406375457 },\n { x: 0.000003952000000000225, y: 0.29996800172204136 },\n { x: 0.0000039530000000002246, y: 0.2932443953012048 },\n { x: 0.000003954000000000224, y: 0.2802408129586989 },\n { x: 0.000003955000000000224, y: 0.27222080097789864 },\n { x: 0.0000039560000000002235, y: 0.2999817718696296 },\n { x: 0.000003957000000000223, y: 0.2486093044265007 },\n { x: 0.000003958000000000223, y: 0.3243828265603146 },\n { x: 0.0000039590000000002225, y: 0.2589558120162996 },\n { x: 0.000003960000000000222, y: 0.3065967261610589 },\n { x: 0.000003961000000000222, y: 0.30061194324161555 },\n { x: 0.0000039620000000002214, y: 0.2604416383131553 },\n { x: 0.000003963000000000221, y: 0.295481595872502 },\n { x: 0.000003964000000000221, y: 0.31160085443318536 },\n { x: 0.00000396500000000022, y: 0.3045149539113448 },\n { x: 0.00000396600000000022, y: 0.298803037543689 },\n { x: 0.00000396700000000022, y: 0.261506194513889 },\n { x: 0.000003968000000000219, y: 0.2766012118181859 },\n { x: 0.000003969000000000219, y: 0.33097169997672404 },\n { x: 0.000003970000000000219, y: 0.2793473685981499 },\n { x: 0.000003971000000000218, y: 0.262161497760936 },\n { x: 0.000003972000000000218, y: 0.3126806367572568 },\n { x: 0.000003973000000000218, y: 0.2814864069064685 },\n { x: 0.000003974000000000217, y: 0.32208444644381456 },\n { x: 0.000003975000000000217, y: 0.31238103864584366 },\n { x: 0.0000039760000000002166, y: 0.2927671341251896 },\n { x: 0.000003977000000000216, y: 0.2680932099612712 },\n { x: 0.000003978000000000216, y: 0.312118337698919 },\n { x: 0.0000039790000000002155, y: 0.2770845333330829 },\n { x: 0.000003980000000000215, y: 0.2849134186659972 },\n { x: 0.000003981000000000215, y: 0.2811576706237539 },\n { x: 0.0000039820000000002145, y: 0.30152808046471263 },\n { x: 0.000003983000000000214, y: 0.2749363630168921 },\n { x: 0.000003984000000000214, y: 0.32380804118333906 },\n { x: 0.000003985000000000213, y: 0.2744281771569975 },\n { x: 0.000003986000000000213, y: 0.3333489248885281 },\n { x: 0.000003987000000000213, y: 0.3199531556665767 },\n { x: 0.000003988000000000212, y: 0.30298622743647985 },\n { x: 0.000003989000000000212, y: 0.2775506071658868 },\n { x: 0.000003990000000000212, y: 0.32834200980805067 },\n { x: 0.000003991000000000211, y: 0.28061834420608794 },\n { x: 0.000003992000000000211, y: 0.32536447344878244 },\n { x: 0.000003993000000000211, y: 0.3395079551066617 },\n { x: 0.00000399400000000021, y: 0.28742308921087417 },\n { x: 0.00000399500000000021, y: 0.28734831560210633 },\n { x: 0.00000399600000000021, y: 0.29946355110392747 },\n { x: 0.000003997000000000209, y: 0.2943922872962459 },\n { x: 0.000003998000000000209, y: 0.3151724677333371 },\n { x: 0.0000039990000000002085, y: 0.29099808928701176 },\n { x: 0.000004000000000000208, y: 0.28340280595764616 },\n { x: 0.000004001000000000208, y: 0.3422715322548612 },\n { x: 0.0000040020000000002075, y: 0.30187033980900085 },\n { x: 0.000004003000000000207, y: 0.34492871377833345 },\n { x: 0.000004004000000000207, y: 0.317686638017795 },\n { x: 0.0000040050000000002064, y: 0.31162185107005064 },\n { x: 0.000004006000000000206, y: 0.3015063948557598 },\n { x: 0.000004007000000000206, y: 0.31769137936352204 },\n { x: 0.000004008000000000205, y: 0.29745675018269324 },\n { x: 0.000004009000000000205, y: 0.32967674333254005 },\n { x: 0.000004010000000000205, y: 0.30495116756365953 },\n { x: 0.000004011000000000204, y: 0.3423999663491054 },\n { x: 0.000004012000000000204, y: 0.328172835054873 },\n { x: 0.000004013000000000204, y: 0.283977614666415 },\n { x: 0.000004014000000000203, y: 0.3144810181605132 },\n { x: 0.000004015000000000203, y: 0.38328983726262034 },\n { x: 0.000004016000000000203, y: 0.34060241045676604 },\n { x: 0.000004017000000000202, y: 0.3002736565357097 },\n { x: 0.000004018000000000202, y: 0.32929999902266477 },\n { x: 0.0000040190000000002016, y: 0.2857738486662874 },\n { x: 0.000004020000000000201, y: 0.3288446902785198 },\n { x: 0.000004021000000000201, y: 0.3407966533358474 },\n { x: 0.0000040220000000002005, y: 0.2861152100268766 },\n { x: 0.0000040230000000002, y: 0.3271032701370034 },\n { x: 0.0000040240000000002, y: 0.29725590727265644 },\n { x: 0.0000040250000000001995, y: 0.2957762403506275 },\n { x: 0.000004026000000000199, y: 0.33966310713422404 },\n { x: 0.000004027000000000199, y: 0.36096201287710894 },\n { x: 0.0000040280000000001984, y: 0.35729034558791334 },\n { x: 0.000004029000000000198, y: 0.3124090652959692 },\n { x: 0.000004030000000000198, y: 0.33408174508051514 },\n { x: 0.000004031000000000197, y: 0.2950126154364728 },\n { x: 0.000004032000000000197, y: 0.3142967918930977 },\n { x: 0.000004033000000000197, y: 0.29206159333072185 },\n { x: 0.000004034000000000196, y: 0.2947008791127249 },\n { x: 0.000004035000000000196, y: 0.3398102425902416 },\n { x: 0.000004036000000000196, y: 0.3460630553593029 },\n { x: 0.000004037000000000195, y: 0.3141006873647608 },\n { x: 0.000004038000000000195, y: 0.35586167474648384 },\n { x: 0.000004039000000000195, y: 0.3485147196606129 },\n { x: 0.000004040000000000194, y: 0.3490019547840109 },\n { x: 0.000004041000000000194, y: 0.3210659656263639 },\n { x: 0.0000040420000000001936, y: 0.2931472864148488 },\n { x: 0.000004043000000000193, y: 0.3474972967907737 },\n { x: 0.000004044000000000193, y: 0.31802863199692205 },\n { x: 0.0000040450000000001925, y: 0.37709378836391627 },\n { x: 0.000004046000000000192, y: 0.2896363310600595 },\n { x: 0.000004047000000000192, y: 0.29798749838992117 },\n { x: 0.0000040480000000001915, y: 0.3552511512225615 },\n { x: 0.000004049000000000191, y: 0.3653601251154573 },\n { x: 0.000004050000000000191, y: 0.30223740393356713 },\n { x: 0.00000405100000000019, y: 0.33297814352369504 },\n { x: 0.00000405200000000019, y: 0.34314943266453635 },\n { x: 0.00000405300000000019, y: 0.3243056620796294 },\n { x: 0.000004054000000000189, y: 0.34959610945369457 },\n { x: 0.000004055000000000189, y: 0.34250077433766457 },\n { x: 0.000004056000000000189, y: 0.35505464072555626 },\n { x: 0.000004057000000000188, y: 0.32690676455837 },\n { x: 0.000004058000000000188, y: 0.3660747431632196 },\n { x: 0.000004059000000000188, y: 0.3615097254596732 },\n { x: 0.000004060000000000187, y: 0.34531676639100123 },\n { x: 0.000004061000000000187, y: 0.35682792899331395 },\n { x: 0.000004062000000000187, y: 0.31388688355642863 },\n { x: 0.000004063000000000186, y: 0.31295555883694015 },\n { x: 0.000004064000000000186, y: 0.3658041684694592 },\n { x: 0.0000040650000000001855, y: 0.3509468195438988 },\n { x: 0.000004066000000000185, y: 0.3346270001207663 },\n { x: 0.000004067000000000185, y: 0.3278174309867702 },\n { x: 0.0000040680000000001845, y: 0.3271524745190602 },\n { x: 0.000004069000000000184, y: 0.3399040303374648 },\n { x: 0.000004070000000000184, y: 0.36065816849987253 },\n { x: 0.0000040710000000001835, y: 0.2892205309483447 },\n { x: 0.000004072000000000183, y: 0.30752530118261684 },\n { x: 0.000004073000000000183, y: 0.3478386327640257 },\n { x: 0.000004074000000000182, y: 0.3019679550439449 },\n { x: 0.000004075000000000182, y: 0.3191150592098787 },\n { x: 0.000004076000000000182, y: 0.3626369938899318 },\n { x: 0.000004077000000000181, y: 0.3601093301647171 },\n { x: 0.000004078000000000181, y: 0.36246721544608235 },\n { x: 0.000004079000000000181, y: 0.3432884100260415 },\n { x: 0.00000408000000000018, y: 0.31877152700123657 },\n { x: 0.00000408100000000018, y: 0.35788771360499283 },\n { x: 0.00000408200000000018, y: 0.3093204907844644 },\n { x: 0.000004083000000000179, y: 0.29666535367393415 },\n { x: 0.000004084000000000179, y: 0.360970452148224 },\n { x: 0.0000040850000000001786, y: 0.34554986408595434 },\n { x: 0.000004086000000000178, y: 0.29454771039585925 },\n { x: 0.000004087000000000178, y: 0.35821987546650286 },\n { x: 0.0000040880000000001775, y: 0.2938160063722 },\n { x: 0.000004089000000000177, y: 0.3604864105624299 },\n { x: 0.000004090000000000177, y: 0.3124656376390679 },\n { x: 0.0000040910000000001765, y: 0.2849200104262758 },\n { x: 0.000004092000000000176, y: 0.33944348077477526 },\n { x: 0.000004093000000000176, y: 0.29174335423889747 },\n { x: 0.0000040940000000001754, y: 0.29951354609913 },\n { x: 0.000004095000000000175, y: 0.35724000082751667 },\n { x: 0.000004096000000000175, y: 0.3283230671036082 },\n { x: 0.000004097000000000174, y: 0.3522231936853684 },\n { x: 0.000004098000000000174, y: 0.29996857475406735 },\n { x: 0.000004099000000000174, y: 0.3006383368854904 },\n { x: 0.000004100000000000173, y: 0.33937777049021517 },\n { x: 0.000004101000000000173, y: 0.29586928620024366 },\n { x: 0.000004102000000000173, y: 0.30757305070060775 },\n { x: 0.000004103000000000172, y: 0.32645161200537803 },\n { x: 0.000004104000000000172, y: 0.33623725264246135 },\n { x: 0.000004105000000000172, y: 0.2815048406339397 },\n { x: 0.000004106000000000171, y: 0.3034415864677118 },\n { x: 0.000004107000000000171, y: 0.33929007613649487 },\n { x: 0.0000041080000000001706, y: 0.3188050660842236 },\n { x: 0.00000410900000000017, y: 0.3169601994501379 },\n { x: 0.00000411000000000017, y: 0.32253528090780664 },\n { x: 0.0000041110000000001695, y: 0.3062493577079485 },\n { x: 0.000004112000000000169, y: 0.3304689212384934 },\n { x: 0.000004113000000000169, y: 0.2827148071281308 },\n { x: 0.0000041140000000001685, y: 0.28784364190422307 },\n { x: 0.000004115000000000168, y: 0.314776859785628 },\n { x: 0.000004116000000000168, y: 0.27819425768339046 },\n { x: 0.0000041170000000001674, y: 0.29968243532794836 },\n { x: 0.000004118000000000167, y: 0.35079321292278703 },\n { x: 0.000004119000000000167, y: 0.3266872226749194 },\n { x: 0.000004120000000000166, y: 0.3292060806693942 },\n { x: 0.000004121000000000166, y: 0.3287372130429182 },\n { x: 0.000004122000000000166, y: 0.31366107578749985 },\n { x: 0.000004123000000000165, y: 0.30147312498007645 },\n { x: 0.000004124000000000165, y: 0.28688326200791414 },\n { x: 0.000004125000000000165, y: 0.3008962095460737 },\n { x: 0.000004126000000000164, y: 0.3454115627701336 },\n { x: 0.000004127000000000164, y: 0.2999771018349369 },\n { x: 0.000004128000000000164, y: 0.24712321707103477 },\n { x: 0.000004129000000000163, y: 0.2880825966992047 },\n { x: 0.000004130000000000163, y: 0.3418357437789369 },\n { x: 0.0000041310000000001626, y: 0.3381489157375517 },\n { x: 0.000004132000000000162, y: 0.31024847819304036 },\n { x: 0.000004133000000000162, y: 0.31519254082685777 },\n { x: 0.0000041340000000001615, y: 0.3302995497118496 },\n { x: 0.000004135000000000161, y: 0.3186009699338797 },\n { x: 0.000004136000000000161, y: 0.26606897018268044 },\n { x: 0.0000041370000000001605, y: 0.28903869403793364 },\n { x: 0.00000413800000000016, y: 0.33367298480128865 },\n { x: 0.00000413900000000016, y: 0.30204178281278937 },\n { x: 0.000004140000000000159, y: 0.3272953173021922 },\n { x: 0.000004141000000000159, y: 0.32026960550840106 },\n { x: 0.000004142000000000159, y: 0.29846181505400665 },\n { x: 0.000004143000000000158, y: 0.2710365530621206 },\n { x: 0.000004144000000000158, y: 0.2595526987001278 },\n { x: 0.000004145000000000158, y: 0.29223479234322386 },\n { x: 0.000004146000000000157, y: 0.274935221356404 },\n { x: 0.000004147000000000157, y: 0.321280217210252 },\n { x: 0.000004148000000000157, y: 0.32500978741382525 },\n { x: 0.000004149000000000156, y: 0.26133413197528554 },\n { x: 0.000004150000000000156, y: 0.30185642607768326 },\n { x: 0.000004151000000000156, y: 0.2883337123613331 },\n { x: 0.000004152000000000155, y: 0.3109934137893497 },\n { x: 0.000004153000000000155, y: 0.2768449799905698 },\n { x: 0.0000041540000000001545, y: 0.3016692803484889 },\n { x: 0.000004155000000000154, y: 0.3038029317239212 },\n { x: 0.000004156000000000154, y: 0.26779097994536893 },\n { x: 0.0000041570000000001535, y: 0.2601611567705239 },\n { x: 0.000004158000000000153, y: 0.34829336129431965 },\n { x: 0.000004159000000000153, y: 0.2748186263793167 },\n { x: 0.0000041600000000001524, y: 0.26513368619261984 },\n { x: 0.000004161000000000152, y: 0.32057708454817924 },\n { x: 0.000004162000000000152, y: 0.2606249385869175 },\n { x: 0.000004163000000000151, y: 0.2750139415711119 },\n { x: 0.000004164000000000151, y: 0.3207568452778675 },\n { x: 0.000004165000000000151, y: 0.30027014878419644 },\n { x: 0.00000416600000000015, y: 0.2734393771458872 },\n { x: 0.00000416700000000015, y: 0.314543710437143 },\n { x: 0.00000416800000000015, y: 0.2655705677714055 },\n { x: 0.000004169000000000149, y: 0.2944002222014817 },\n { x: 0.000004170000000000149, y: 0.2723351647153971 },\n { x: 0.000004171000000000149, y: 0.30883708207603056 },\n { x: 0.000004172000000000148, y: 0.2797275304124689 },\n { x: 0.000004173000000000148, y: 0.2472797856518716 },\n { x: 0.0000041740000000001476, y: 0.27953123666601287 },\n { x: 0.000004175000000000147, y: 0.28291965261150304 },\n { x: 0.000004176000000000147, y: 0.27186963503698425 },\n { x: 0.0000041770000000001465, y: 0.27456006397270294 },\n { x: 0.000004178000000000146, y: 0.2647037813966166 },\n { x: 0.000004179000000000146, y: 0.25783019403355195 },\n { x: 0.0000041800000000001455, y: 0.3058920754230025 },\n { x: 0.000004181000000000145, y: 0.25761362340127414 },\n { x: 0.000004182000000000145, y: 0.2382819755607477 },\n { x: 0.0000041830000000001444, y: 0.2778913000129344 },\n { x: 0.000004184000000000144, y: 0.30338646181174156 },\n { x: 0.000004185000000000144, y: 0.2292683099058369 },\n { x: 0.000004186000000000143, y: 0.23936823127933687 },\n { x: 0.000004187000000000143, y: 0.24354821922455636 },\n { x: 0.000004188000000000143, y: 0.30028417547403735 },\n { x: 0.000004189000000000142, y: 0.2383135215495772 },\n { x: 0.000004190000000000142, y: 0.23212826275582604 },\n { x: 0.000004191000000000142, y: 0.2546818345092802 },\n { x: 0.000004192000000000141, y: 0.2961027770875351 },\n { x: 0.000004193000000000141, y: 0.2928101899940667 },\n { x: 0.000004194000000000141, y: 0.22070527048465552 },\n { x: 0.00000419500000000014, y: 0.24429257890590503 },\n { x: 0.00000419600000000014, y: 0.2373063644096479 },\n { x: 0.0000041970000000001396, y: 0.2553542710967861 },\n { x: 0.000004198000000000139, y: 0.2582336950314104 },\n { x: 0.000004199000000000139, y: 0.24001843932770395 },\n { x: 0.0000042000000000001385, y: 0.22697619314476405 },\n { x: 0.000004201000000000138, y: 0.23767382861571706 },\n { x: 0.000004202000000000138, y: 0.28686973796591725 },\n { x: 0.0000042030000000001375, y: 0.27195732910402926 },\n { x: 0.000004204000000000137, y: 0.25156327661549976 },\n { x: 0.000004205000000000137, y: 0.24955415104548256 },\n { x: 0.000004206000000000136, y: 0.22347024930452125 },\n { x: 0.000004207000000000136, y: 0.21793680389674783 },\n { x: 0.000004208000000000136, y: 0.22372499196585466 },\n { x: 0.000004209000000000135, y: 0.24179044209520523 },\n { x: 0.000004210000000000135, y: 0.20222356243268153 },\n { x: 0.000004211000000000135, y: 0.2152411401506903 },\n { x: 0.000004212000000000134, y: 0.2270829581751008 },\n { x: 0.000004213000000000134, y: 0.18647217122326848 },\n { x: 0.000004214000000000134, y: 0.23297886740746357 },\n { x: 0.000004215000000000133, y: 0.2561343606351684 },\n { x: 0.000004216000000000133, y: 0.20090129381185096 },\n { x: 0.000004217000000000133, y: 0.2558120862659981 },\n { x: 0.000004218000000000132, y: 0.23310990254643485 },\n { x: 0.000004219000000000132, y: 0.2688110815214907 },\n { x: 0.0000042200000000001315, y: 0.24018266371518207 },\n { x: 0.000004221000000000131, y: 0.20766953665529314 },\n { x: 0.000004222000000000131, y: 0.22513938659217325 },\n { x: 0.0000042230000000001305, y: 0.23356047621965914 },\n { x: 0.00000422400000000013, y: 0.20277467702433738 },\n { x: 0.00000422500000000013, y: 0.22790260141481103 },\n { x: 0.0000042260000000001295, y: 0.19654857272764104 },\n { x: 0.000004227000000000129, y: 0.1873712435222703 },\n { x: 0.000004228000000000129, y: 0.22221579765000743 },\n { x: 0.000004229000000000128, y: 0.2193491965344589 },\n { x: 0.000004230000000000128, y: 0.25399192372856777 },\n { x: 0.000004231000000000128, y: 0.24363502736284717 },\n { x: 0.000004232000000000127, y: 0.17892048918442582 },\n { x: 0.000004233000000000127, y: 0.19671806997380567 },\n { x: 0.000004234000000000127, y: 0.1821587215137482 },\n { x: 0.000004235000000000126, y: 0.18548135354182982 },\n { x: 0.000004236000000000126, y: 0.21283920073611234 },\n { x: 0.000004237000000000126, y: 0.20236417698613043 },\n { x: 0.000004238000000000125, y: 0.18635103831189095 },\n { x: 0.000004239000000000125, y: 0.20998163028402456 },\n { x: 0.0000042400000000001246, y: 0.23419664386908426 },\n { x: 0.000004241000000000124, y: 0.2067023208668631 },\n { x: 0.000004242000000000124, y: 0.1782632116925454 },\n { x: 0.0000042430000000001235, y: 0.17907832396593507 },\n { x: 0.000004244000000000123, y: 0.19542106205048176 },\n { x: 0.000004245000000000123, y: 0.19070513269350756 },\n { x: 0.0000042460000000001225, y: 0.21461149723223688 },\n { x: 0.000004247000000000122, y: 0.21352789021977517 },\n { x: 0.000004248000000000122, y: 0.18803332531344147 },\n { x: 0.0000042490000000001214, y: 0.1616408097184573 },\n { x: 0.000004250000000000121, y: 0.18228897891741028 },\n { x: 0.000004251000000000121, y: 0.1776526683241611 },\n { x: 0.00000425200000000012, y: 0.17531842286266935 },\n { x: 0.00000425300000000012, y: 0.17650653212167858 },\n { x: 0.00000425400000000012, y: 0.2020222680810568 },\n { x: 0.000004255000000000119, y: 0.18770466365712682 },\n { x: 0.000004256000000000119, y: 0.17783037052412898 },\n { x: 0.000004257000000000119, y: 0.15536286436244168 },\n { x: 0.000004258000000000118, y: 0.21656348542041054 },\n { x: 0.000004259000000000118, y: 0.15309110442555518 },\n { x: 0.000004260000000000118, y: 0.14713620992430998 },\n { x: 0.000004261000000000117, y: 0.18769171558725903 },\n { x: 0.000004262000000000117, y: 0.19048505007538724 },\n { x: 0.0000042630000000001166, y: 0.2144122124418425 },\n { x: 0.000004264000000000116, y: 0.20105979271127863 },\n { x: 0.000004265000000000116, y: 0.19167626746805821 },\n { x: 0.0000042660000000001155, y: 0.14241100787789035 },\n { x: 0.000004267000000000115, y: 0.16857751191507228 },\n { x: 0.000004268000000000115, y: 0.205013595133306 },\n { x: 0.0000042690000000001145, y: 0.16344811066667475 },\n { x: 0.000004270000000000114, y: 0.20548807710483846 },\n { x: 0.000004271000000000114, y: 0.149987496107719 },\n { x: 0.0000042720000000001134, y: 0.15223168518747812 },\n { x: 0.000004273000000000113, y: 0.17115602753663375 },\n { x: 0.000004274000000000113, y: 0.13463487398994745 },\n { x: 0.000004275000000000112, y: 0.2015221751132012 },\n { x: 0.000004276000000000112, y: 0.18148287593247617 },\n { x: 0.000004277000000000112, y: 0.185542636601977 },\n { x: 0.000004278000000000111, y: 0.16639551597011448 },\n { x: 0.000004279000000000111, y: 0.1565987571789668 },\n { x: 0.000004280000000000111, y: 0.1650629576360599 },\n { x: 0.00000428100000000011, y: 0.15998266772151187 },\n { x: 0.00000428200000000011, y: 0.15581326547980034 },\n { x: 0.00000428300000000011, y: 0.1207875491276767 },\n { x: 0.000004284000000000109, y: 0.149673801751392 },\n { x: 0.000004285000000000109, y: 0.141257454570004 },\n { x: 0.0000042860000000001086, y: 0.13552674355602248 },\n { x: 0.000004287000000000108, y: 0.14113229102832187 },\n { x: 0.000004288000000000108, y: 0.15552660461017007 },\n { x: 0.0000042890000000001075, y: 0.1142003637643833 },\n { x: 0.000004290000000000107, y: 0.17668621246775368 },\n { x: 0.000004291000000000107, y: 0.13820176632298573 },\n { x: 0.0000042920000000001065, y: 0.1086975990560053 },\n { x: 0.000004293000000000106, y: 0.1753359432997467 },\n { x: 0.000004294000000000106, y: 0.14122852658706625 },\n { x: 0.000004295000000000105, y: 0.11020271586603601 },\n { x: 0.000004296000000000105, y: 0.15685428539564644 },\n { x: 0.000004297000000000105, y: 0.1364433370049846 },\n { x: 0.000004298000000000104, y: 0.16053036701288367 },\n { x: 0.000004299000000000104, y: 0.12610621976950012 },\n { x: 0.000004300000000000104, y: 0.16011467633194026 },\n { x: 0.000004301000000000103, y: 0.11595471557987604 },\n { x: 0.000004302000000000103, y: 0.12506918636756298 },\n { x: 0.000004303000000000103, y: 0.1348087135948512 },\n { x: 0.000004304000000000102, y: 0.12626561025503852 },\n { x: 0.000004305000000000102, y: 0.15135545902956177 },\n { x: 0.000004306000000000102, y: 0.09128700517162773 },\n { x: 0.000004307000000000101, y: 0.15245002987141595 },\n { x: 0.000004308000000000101, y: 0.06873410525652271 },\n { x: 0.0000043090000000001005, y: 0.14129092581504543 },\n { x: 0.0000043100000000001, y: 0.13470422827119907 },\n { x: 0.0000043110000000001, y: 0.11598815403264948 },\n { x: 0.0000043120000000000995, y: 0.08237576741915076 },\n { x: 0.000004313000000000099, y: 0.14399603425330929 },\n { x: 0.000004314000000000099, y: 0.0908113511131135 },\n { x: 0.0000043150000000000984, y: 0.09935390988828743 },\n { x: 0.000004316000000000098, y: 0.13180087147404893 },\n { x: 0.000004317000000000098, y: 0.1357918271303708 },\n { x: 0.000004318000000000097, y: 0.07158566215184109 },\n { x: 0.000004319000000000097, y: 0.07917374154915047 },\n { x: 0.000004320000000000097, y: 0.1063633628171095 },\n { x: 0.000004321000000000096, y: 0.1286166161043339 },\n { x: 0.000004322000000000096, y: 0.07017351129604626 },\n { x: 0.000004323000000000096, y: 0.07035148653951795 },\n { x: 0.000004324000000000095, y: 0.07852562994636646 },\n { x: 0.000004325000000000095, y: 0.11207775574627944 },\n { x: 0.000004326000000000095, y: 0.11036776922661914 },\n { x: 0.000004327000000000094, y: 0.09045549193124772 },\n { x: 0.000004328000000000094, y: 0.08449560919857263 },\n { x: 0.0000043290000000000936, y: 0.09966711067313214 },\n { x: 0.000004330000000000093, y: 0.08746110978349644 },\n { x: 0.000004331000000000093, y: 0.09971865458417072 },\n { x: 0.0000043320000000000925, y: 0.08912241748992299 },\n { x: 0.000004333000000000092, y: 0.10952864346146796 },\n { x: 0.000004334000000000092, y: 0.058999989447568194 },\n { x: 0.0000043350000000000915, y: 0.08978161643976343 },\n { x: 0.000004336000000000091, y: 0.05462358713207488 },\n { x: 0.000004337000000000091, y: 0.05309040053378791 },\n { x: 0.0000043380000000000904, y: 0.07041407137381508 },\n { x: 0.00000433900000000009, y: 0.08571514854010397 },\n { x: 0.00000434000000000009, y: 0.03987556357581434 },\n { x: 0.000004341000000000089, y: 0.06483450322360867 },\n { x: 0.000004342000000000089, y: 0.04183408434868576 },\n { x: 0.000004343000000000089, y: 0.059144956937461066 },\n { x: 0.000004344000000000088, y: 0.0743436750345493 },\n { x: 0.000004345000000000088, y: 0.04120694464393407 },\n { x: 0.000004346000000000088, y: 0.0661386635432381 },\n { x: 0.000004347000000000087, y: 0.041238553854118905 },\n { x: 0.000004348000000000087, y: 0.08401168205110598 },\n { x: 0.000004349000000000087, y: 0.09518777269379462 },\n { x: 0.000004350000000000086, y: 0.03566645403837755 },\n { x: 0.000004351000000000086, y: 0.08708444702519236 },\n { x: 0.0000043520000000000856, y: 0.047351433032996874 },\n { x: 0.000004353000000000085, y: 0.072312108750855 },\n { x: 0.000004354000000000085, y: 0.0972794303616991 },\n { x: 0.0000043550000000000845, y: 0.0347609201677046 },\n { x: 0.000004356000000000084, y: 0.027262985254025988 },\n { x: 0.000004357000000000084, y: 0.059733524345797075 },\n { x: 0.0000043580000000000835, y: 0.047264559799169006 },\n { x: 0.000004359000000000083, y: 0.03022019743754538 },\n { x: 0.000004360000000000083, y: 0.01605317823616126 },\n { x: 0.000004361000000000082, y: 0.055019131309623784 },\n { x: 0.000004362000000000082, y: 0.010761492187868774 },\n { x: 0.000004363000000000082, y: 0.06875911256771178 },\n { x: 0.000004364000000000081, y: 0.0622167294663115 },\n { x: 0.000004365000000000081, y: 0.03251503985285033 },\n { x: 0.000004366000000000081, y: 0.033563627120785894 },\n { x: 0.00000436700000000008, y: 0.037507560203690615 },\n { x: 0.00000436800000000008, y: 0.037474655218908755 },\n { x: 0.00000436900000000008, y: 0.01212101586127362 },\n { x: 0.000004370000000000079, y: 0.026031174524743676 },\n { x: 0.000004371000000000079, y: 0.06785978070774584 },\n { x: 0.000004372000000000079, y: -0.0030962602358450275 },\n { x: 0.000004373000000000078, y: 0.018932267923982792 },\n { x: 0.000004374000000000078, y: 0.04047327416141266 },\n { x: 0.0000043750000000000775, y: 0.048638800424388964 },\n { x: 0.000004376000000000077, y: 0.03418495150735163 },\n { x: 0.000004377000000000077, y: 0.02001989673478126 },\n { x: 0.0000043780000000000765, y: 0.007396412578202536 },\n { x: 0.000004379000000000076, y: 0.01028909899249882 },\n { x: 0.000004380000000000076, y: 0.05349238032107542 },\n { x: 0.0000043810000000000755, y: 0.054775652144337356 },\n { x: 0.000004382000000000075, y: 0.03349337859889623 },\n { x: 0.000004383000000000075, y: 0.022682065116819156 },\n { x: 0.000004384000000000074, y: -0.011316022304403664 },\n { x: 0.000004385000000000074, y: -0.01203778014906668 },\n { x: 0.000004386000000000074, y: 0.050247477852514294 },\n { x: 0.000004387000000000073, y: 0.0038443772434490486 },\n { x: 0.000004388000000000073, y: 0.044145533677051416 },\n { x: 0.000004389000000000073, y: 0.034649366909434196 },\n { x: 0.000004390000000000072, y: 0.04071079001590427 },\n { x: 0.000004391000000000072, y: 0.03317864136001323 },\n { x: 0.000004392000000000072, y: 0.02369913733336782 },\n { x: 0.000004393000000000071, y: 0.0409301364946526 },\n { x: 0.000004394000000000071, y: -0.025188821428706733 },\n { x: 0.0000043950000000000706, y: -0.004541859021987236 },\n { x: 0.00000439600000000007, y: -0.012278767795145439 },\n { x: 0.00000439700000000007, y: 0.009391891558085189 },\n { x: 0.0000043980000000000695, y: 0.007733494959605235 },\n { x: 0.000004399000000000069, y: 0.030439099234344687 },\n { x: 0.000004400000000000069, y: -0.016409630491783025 },\n { x: 0.0000044010000000000685, y: -0.019735463352103057 },\n { x: 0.000004402000000000068, y: -0.03460968924691703 },\n { x: 0.000004403000000000068, y: -0.03311480687500664 },\n { x: 0.0000044040000000000674, y: -0.015895008749546375 },\n { x: 0.000004405000000000067, y: 0.0061986953282571755 },\n { x: 0.000004406000000000067, y: -0.016844282998778725 },\n { x: 0.000004407000000000066, y: -0.0058568939824834585 },\n { x: 0.000004408000000000066, y: -0.03286191330271045 },\n { x: 0.000004409000000000066, y: -0.01836579402368211 },\n { x: 0.000004410000000000065, y: -0.03131416038425245 },\n { x: 0.000004411000000000065, y: -0.001036086450301895 },\n { x: 0.000004412000000000065, y: -0.051189455301565254 },\n { x: 0.000004413000000000064, y: -0.02944416604923323 },\n { x: 0.000004414000000000064, y: 0.01225529509436378 },\n { x: 0.000004415000000000064, y: -0.03694284158795072 },\n { x: 0.000004416000000000063, y: -0.028714645427504643 },\n { x: 0.000004417000000000063, y: -0.05109888134136388 },\n { x: 0.0000044180000000000626, y: -0.02278802991887542 },\n { x: 0.000004419000000000062, y: -0.03367919185147912 },\n { x: 0.000004420000000000062, y: 0.008179044941779234 },\n { x: 0.0000044210000000000615, y: -0.02283378464263354 },\n { x: 0.000004422000000000061, y: -0.022276079790017285 },\n { x: 0.000004423000000000061, y: -0.017352653199888355 },\n { x: 0.0000044240000000000605, y: -0.044770630942360626 },\n { x: 0.00000442500000000006, y: -0.022507504505039053 },\n { x: 0.00000442600000000006, y: -0.018968508059095945 },\n { x: 0.0000044270000000000594, y: -0.0324474282081161 },\n { x: 0.000004428000000000059, y: -0.03251417949414384 },\n { x: 0.000004429000000000059, y: -0.014332986370471645 },\n { x: 0.000004430000000000058, y: -0.025656736963981727 },\n { x: 0.000004431000000000058, y: -0.019651160203069826 },\n { x: 0.000004432000000000058, y: -0.014305785701883542 },\n { x: 0.000004433000000000057, y: -0.029336859094932125 },\n { x: 0.000004434000000000057, y: -0.05754251335481238 },\n { x: 0.000004435000000000057, y: -0.08406083679038032 },\n { x: 0.000004436000000000056, y: -0.0307567442405767 },\n { x: 0.000004437000000000056, y: -0.02759736236731739 },\n { x: 0.000004438000000000056, y: -0.08644623578824348 },\n { x: 0.000004439000000000055, y: -0.029646572008271435 },\n { x: 0.000004440000000000055, y: -0.08465330229926016 },\n { x: 0.0000044410000000000546, y: -0.048453858029903166 },\n { x: 0.000004442000000000054, y: -0.04039365570506378 },\n { x: 0.000004443000000000054, y: -0.03742693381950518 },\n { x: 0.0000044440000000000535, y: -0.020941428163004705 },\n { x: 0.000004445000000000053, y: -0.025597328007457863 },\n { x: 0.000004446000000000053, y: -0.05303533194151276 },\n { x: 0.0000044470000000000525, y: -0.03254856063521485 },\n { x: 0.000004448000000000052, y: -0.08091527014204297 },\n { x: 0.000004449000000000052, y: -0.059300899444425764 },\n { x: 0.000004450000000000051, y: -0.09090816154832285 },\n { x: 0.000004451000000000051, y: -0.10243622184986592 },\n { x: 0.000004452000000000051, y: -0.07780068489824843 },\n { x: 0.00000445300000000005, y: -0.07401890904842322 },\n { x: 0.00000445400000000005, y: -0.06385031213668561 },\n { x: 0.00000445500000000005, y: -0.0369395715874065 },\n { x: 0.000004456000000000049, y: -0.04624052304633135 },\n { x: 0.000004457000000000049, y: -0.07255749052518846 },\n { x: 0.000004458000000000049, y: -0.09587591733351258 },\n { x: 0.000004459000000000048, y: -0.08052941459373546 },\n { x: 0.000004460000000000048, y: -0.07546375149805919 },\n { x: 0.000004461000000000048, y: -0.038815039776899124 },\n { x: 0.000004462000000000047, y: -0.05884039964048921 },\n { x: 0.000004463000000000047, y: -0.10873194096694953 },\n { x: 0.0000044640000000000465, y: -0.06653517288369924 },\n { x: 0.000004465000000000046, y: -0.04650819733504982 },\n { x: 0.000004466000000000046, y: -0.06370411554257338 },\n { x: 0.0000044670000000000455, y: -0.07114867401224918 },\n { x: 0.000004468000000000045, y: -0.10874427269709502 },\n { x: 0.000004469000000000045, y: -0.05374449297449803 },\n { x: 0.0000044700000000000444, y: -0.09305542976064944 },\n { x: 0.000004471000000000044, y: -0.06993422555250092 },\n { x: 0.000004472000000000044, y: -0.08076155086148841 },\n { x: 0.000004473000000000043, y: -0.09375752836267148 },\n { x: 0.000004474000000000043, y: -0.06834000106706759 },\n { x: 0.000004475000000000043, y: -0.1285089957266825 },\n { x: 0.000004476000000000042, y: -0.08309467570449197 },\n { x: 0.000004477000000000042, y: -0.09681139061585507 },\n { x: 0.000004478000000000042, y: -0.08823125514299994 },\n { x: 0.000004479000000000041, y: -0.12780694782131158 },\n { x: 0.000004480000000000041, y: -0.07207408574963284 },\n { x: 0.000004481000000000041, y: -0.06830748837620107 },\n { x: 0.00000448200000000004, y: -0.0968144565147273 },\n { x: 0.00000448300000000004, y: -0.12452567659502442 },\n { x: 0.0000044840000000000396, y: -0.12244716206611114 },\n { x: 0.000004485000000000039, y: -0.10738434715904249 },\n { x: 0.000004486000000000039, y: -0.09069820014577216 },\n { x: 0.0000044870000000000385, y: -0.11274927915774811 },\n { x: 0.000004488000000000038, y: -0.10232949816068293 },\n { x: 0.000004489000000000038, y: -0.12085948320795117 },\n { x: 0.0000044900000000000375, y: -0.07693655156307819 },\n { x: 0.000004491000000000037, y: -0.13058262018517797 },\n { x: 0.000004492000000000037, y: -0.1050188254544194 },\n { x: 0.0000044930000000000364, y: -0.13542757802306188 },\n { x: 0.000004494000000000036, y: -0.13837817846426426 },\n { x: 0.000004495000000000036, y: -0.11356779333513836 },\n { x: 0.000004496000000000035, y: -0.15166387392774347 },\n { x: 0.000004497000000000035, y: -0.13577402758702942 },\n { x: 0.000004498000000000035, y: -0.14971412722281802 },\n { x: 0.000004499000000000034, y: -0.11897512139382997 },\n { x: 0.000004500000000000034, y: -0.11438381277360571 },\n { x: 0.000004501000000000034, y: -0.10070877050182117 },\n { x: 0.000004502000000000033, y: -0.10313393024443825 },\n { x: 0.000004503000000000033, y: -0.0985986833828442 },\n { x: 0.000004504000000000033, y: -0.10908010587794445 },\n { x: 0.000004505000000000032, y: -0.10613995494427787 },\n { x: 0.000004506000000000032, y: -0.10423249553572772 },\n { x: 0.0000045070000000000316, y: -0.1445428829116194 },\n { x: 0.000004508000000000031, y: -0.14846339390964555 },\n { x: 0.000004509000000000031, y: -0.09449777275172647 },\n { x: 0.0000045100000000000305, y: -0.1363310372930019 },\n { x: 0.00000451100000000003, y: -0.10780279414382662 },\n { x: 0.00000451200000000003, y: -0.10910751225579243 },\n { x: 0.0000045130000000000295, y: -0.15703960710406548 },\n { x: 0.000004514000000000029, y: -0.15237303637262323 },\n { x: 0.000004515000000000029, y: -0.13473584982307496 },\n { x: 0.000004516000000000028, y: -0.09875269569754389 },\n { x: 0.000004517000000000028, y: -0.09720188691666903 },\n { x: 0.000004518000000000028, y: -0.15006556148600886 },\n { x: 0.000004519000000000027, y: -0.1637403076487485 },\n { x: 0.000004520000000000027, y: -0.11504520626707926 },\n { x: 0.000004521000000000027, y: -0.16907052176194426 },\n { x: 0.000004522000000000026, y: -0.15707043955824332 },\n { x: 0.000004523000000000026, y: -0.11438857955664553 },\n { x: 0.000004524000000000026, y: -0.10443228489684468 },\n { x: 0.000004525000000000025, y: -0.15301717606205142 },\n { x: 0.000004526000000000025, y: -0.1408374568352197 },\n { x: 0.000004527000000000025, y: -0.11364182694460714 },\n { x: 0.000004528000000000024, y: -0.16509687484639976 },\n { x: 0.000004529000000000024, y: -0.11664731843507468 },\n { x: 0.0000045300000000000235, y: -0.13325631614190875 },\n { x: 0.000004531000000000023, y: -0.16895237877956948 },\n { x: 0.000004532000000000023, y: -0.17402953067457072 },\n { x: 0.0000045330000000000225, y: -0.1221610627346329 },\n { x: 0.000004534000000000022, y: -0.14075575900096557 },\n { x: 0.000004535000000000022, y: -0.11848020408101743 },\n { x: 0.0000045360000000000215, y: -0.1626331498834029 },\n { x: 0.000004537000000000021, y: -0.1291854949657184 },\n { x: 0.000004538000000000021, y: -0.17777330718473172 },\n { x: 0.00000453900000000002, y: -0.12648682078306261 },\n { x: 0.00000454000000000002, y: -0.16799009736051887 },\n { x: 0.00000454100000000002, y: -0.18649243971035206 },\n { x: 0.000004542000000000019, y: -0.1452926594096877 },\n { x: 0.000004543000000000019, y: -0.12632963150907559 },\n { x: 0.000004544000000000019, y: -0.14697749845087704 },\n { x: 0.000004545000000000018, y: -0.15253945073256678 },\n { x: 0.000004546000000000018, y: -0.16174596626010296 },\n { x: 0.000004547000000000018, y: -0.18792141927022998 },\n { x: 0.000004548000000000017, y: -0.15894313009867014 },\n { x: 0.000004549000000000017, y: -0.1665554686897448 },\n { x: 0.0000045500000000000166, y: -0.18333842470620065 },\n { x: 0.000004551000000000016, y: -0.18062173140549392 },\n { x: 0.000004552000000000016, y: -0.1953886797669952 },\n { x: 0.0000045530000000000155, y: -0.1964706979880324 },\n { x: 0.000004554000000000015, y: -0.16410940154159423 },\n { x: 0.000004555000000000015, y: -0.1482845584397377 },\n { x: 0.0000045560000000000145, y: -0.16046417452063638 },\n { x: 0.000004557000000000014, y: -0.19651598819232566 },\n { x: 0.000004558000000000014, y: -0.17589509568281647 },\n { x: 0.0000045590000000000134, y: -0.15164882473045274 },\n { x: 0.000004560000000000013, y: -0.14512287764436593 },\n { x: 0.000004561000000000013, y: -0.18676563242323918 },\n { x: 0.000004562000000000012, y: -0.18518869067462282 },\n { x: 0.000004563000000000012, y: -0.17250923754915956 },\n { x: 0.000004564000000000012, y: -0.1395082836362115 },\n { x: 0.000004565000000000011, y: -0.21551477969500438 },\n { x: 0.000004566000000000011, y: -0.15539114064043152 },\n { x: 0.000004567000000000011, y: -0.18557382147657966 },\n { x: 0.00000456800000000001, y: -0.16905292639288855 },\n { x: 0.00000456900000000001, y: -0.2323753585489058 },\n { x: 0.00000457000000000001, y: -0.15187947286598966 },\n { x: 0.000004571000000000009, y: -0.19513860486063878 },\n { x: 0.000004572000000000009, y: -0.14680765200251045 },\n { x: 0.0000045730000000000086, y: -0.1980141313626623 },\n { x: 0.000004574000000000008, y: -0.19972792853837637 },\n { x: 0.000004575000000000008, y: -0.2111481012489808 },\n { x: 0.0000045760000000000075, y: -0.21355738586889983 },\n { x: 0.000004577000000000007, y: -0.18102591266987136 },\n { x: 0.000004578000000000007, y: -0.20279162099000217 },\n { x: 0.0000045790000000000065, y: -0.18119097518072985 },\n { x: 0.000004580000000000006, y: -0.17000991337520813 },\n { x: 0.000004581000000000006, y: -0.1877444849524141 },\n { x: 0.0000045820000000000054, y: -0.15078192279849487 },\n { x: 0.000004583000000000005, y: -0.18002672248676055 },\n { x: 0.000004584000000000005, y: -0.15579301444151777 },\n { x: 0.000004585000000000004, y: -0.15709872042946224 },\n { x: 0.000004586000000000004, y: -0.14797105333309435 },\n { x: 0.000004587000000000004, y: -0.14907209980362615 },\n { x: 0.000004588000000000003, y: -0.1934247074612179 },\n { x: 0.000004589000000000003, y: -0.15007375095781084 },\n { x: 0.000004590000000000003, y: -0.20310956350071013 },\n { x: 0.000004591000000000002, y: -0.19673176949531415 },\n { x: 0.000004592000000000002, y: -0.15163286033003617 },\n { x: 0.000004593000000000002, y: -0.1561802522971907 },\n { x: 0.000004594000000000001, y: -0.21395528418822773 },\n { x: 0.000004595000000000001, y: -0.2144855816654977 },\n { x: 0.0000045960000000000006, y: -0.1851080266112227 },\n { x: 0.000004597, y: -0.20247365152626745 },\n { x: 0.000004598, y: -0.21112623441505923 },\n { x: 0.0000045989999999999995, y: -0.22459620193688065 },\n { x: 0.000004599999999999999, y: -0.18210168888773165 },\n { x: 0.000004600999999999999, y: -0.17286465815291074 },\n { x: 0.0000046019999999999985, y: -0.22577343441620287 },\n { x: 0.000004602999999999998, y: -0.19717568268109364 },\n { x: 0.000004603999999999998, y: -0.1647798111734493 },\n { x: 0.000004604999999999997, y: -0.2164635751119212 },\n { x: 0.000004605999999999997, y: -0.22208002964527426 },\n { x: 0.000004606999999999997, y: -0.22498637363585147 },\n { x: 0.000004607999999999996, y: -0.16136838482311364 },\n { x: 0.000004608999999999996, y: -0.18583896600093686 },\n { x: 0.000004609999999999996, y: -0.17547696915370042 },\n { x: 0.000004610999999999995, y: -0.17414147240852423 },\n { x: 0.000004611999999999995, y: -0.1637033344171779 },\n { x: 0.000004612999999999995, y: -0.20882503887351947 },\n { x: 0.000004613999999999994, y: -0.16387044625871208 },\n { x: 0.000004614999999999994, y: -0.1767390963027569 },\n { x: 0.000004615999999999994, y: -0.17119321818196312 },\n { x: 0.000004616999999999993, y: -0.21778951451483697 },\n { x: 0.000004617999999999993, y: -0.16402760231019597 },\n { x: 0.0000046189999999999925, y: -0.17438522053867123 },\n { x: 0.000004619999999999992, y: -0.200777693154057 },\n { x: 0.000004620999999999992, y: -0.22384399734445595 },\n { x: 0.0000046219999999999915, y: -0.18013211740166474 },\n { x: 0.000004622999999999991, y: -0.21702822058223198 },\n { x: 0.000004623999999999991, y: -0.221172198782941 },\n { x: 0.0000046249999999999904, y: -0.16333724254332704 },\n { x: 0.00000462599999999999, y: -0.19843099871416528 },\n { x: 0.00000462699999999999, y: -0.1842630535717723 },\n { x: 0.000004627999999999989, y: -0.2290070355901267 },\n { x: 0.000004628999999999989, y: -0.18892340796949067 },\n { x: 0.000004629999999999989, y: -0.2205316139629703 },\n { x: 0.000004630999999999988, y: -0.16710989517499117 },\n { x: 0.000004631999999999988, y: -0.19354970564096444 },\n { x: 0.000004632999999999988, y: -0.22046644715953334 },\n { x: 0.000004633999999999987, y: -0.20847319729145103 },\n { x: 0.000004634999999999987, y: -0.22115178264139743 },\n { x: 0.000004635999999999987, y: -0.23268680301232533 },\n { x: 0.000004636999999999986, y: -0.20811882544137172 },\n { x: 0.000004637999999999986, y: -0.23868111993396282 },\n { x: 0.0000046389999999999856, y: -0.1673710000387146 },\n { x: 0.000004639999999999985, y: -0.2059528755471276 },\n { x: 0.000004640999999999985, y: -0.19556014818492704 },\n { x: 0.0000046419999999999845, y: -0.20508858887643108 },\n { x: 0.000004642999999999984, y: -0.22862183103952904 },\n { x: 0.000004643999999999984, y: -0.18706619515119602 },\n { x: 0.0000046449999999999835, y: -0.20740226391163477 },\n { x: 0.000004645999999999983, y: -0.1835127727831929 },\n { x: 0.000004646999999999983, y: -0.21143964240091664 },\n { x: 0.0000046479999999999824, y: -0.23477790143332308 },\n { x: 0.000004648999999999982, y: -0.22851793807307808 },\n { x: 0.000004649999999999982, y: -0.2403823801924146 },\n { x: 0.000004650999999999981, y: -0.23267371224096148 },\n { x: 0.000004651999999999981, y: -0.24611090533177807 },\n { x: 0.000004652999999999981, y: -0.1858570390336904 },\n { x: 0.00000465399999999998, y: -0.19782970503826008 },\n { x: 0.00000465499999999998, y: -0.22587134150097352 },\n { x: 0.00000465599999999998, y: -0.18734416432482515 },\n { x: 0.000004656999999999979, y: -0.21838763635137723 },\n { x: 0.000004657999999999979, y: -0.1879952080639552 },\n { x: 0.000004658999999999979, y: -0.2396310490028291 },\n { x: 0.000004659999999999978, y: -0.22948122746832111 },\n { x: 0.000004660999999999978, y: -0.20587330716192684 },\n { x: 0.0000046619999999999776, y: -0.21499404676994655 },\n { x: 0.000004662999999999977, y: -0.2080860676222294 },\n { x: 0.000004663999999999977, y: -0.2066396966894304 },\n { x: 0.0000046649999999999765, y: -0.24398954532706382 },\n { x: 0.000004665999999999976, y: -0.2310961811036109 },\n { x: 0.000004666999999999976, y: -0.23651052503834863 },\n { x: 0.0000046679999999999755, y: -0.20107088150603003 },\n { x: 0.000004668999999999975, y: -0.2369518882361267 },\n { x: 0.000004669999999999975, y: -0.23914953145120238 },\n { x: 0.000004670999999999974, y: -0.20499357578621288 },\n { x: 0.000004671999999999974, y: -0.1822571024099909 },\n { x: 0.000004672999999999974, y: -0.23349726025447215 },\n { x: 0.000004673999999999973, y: -0.20680393168703023 },\n { x: 0.000004674999999999973, y: -0.18006358772007572 },\n { x: 0.000004675999999999973, y: -0.21775347986046428 },\n { x: 0.000004676999999999972, y: -0.2419322174551658 },\n { x: 0.000004677999999999972, y: -0.22645496834861117 },\n { x: 0.000004678999999999972, y: -0.18460841843998288 },\n { x: 0.000004679999999999971, y: -0.26928893721141506 },\n { x: 0.000004680999999999971, y: -0.1794197074711376 },\n { x: 0.000004681999999999971, y: -0.22478064423537422 },\n { x: 0.00000468299999999997, y: -0.17945713475187688 },\n { x: 0.00000468399999999997, y: -0.19387013040186674 },\n { x: 0.0000046849999999999695, y: -0.20228076460182445 },\n { x: 0.000004685999999999969, y: -0.20961354350838923 },\n { x: 0.000004686999999999969, y: -0.21570033754098786 },\n { x: 0.0000046879999999999685, y: -0.22527750784728526 },\n { x: 0.000004688999999999968, y: -0.1911870794089433 },\n { x: 0.000004689999999999968, y: -0.1768447145920783 },\n { x: 0.0000046909999999999675, y: -0.17374811880973273 },\n { x: 0.000004691999999999967, y: -0.18461715037149246 },\n { x: 0.000004692999999999967, y: -0.2164497723622435 },\n { x: 0.000004693999999999966, y: -0.21943115770511634 },\n { x: 0.000004694999999999966, y: -0.180450867294585 },\n { x: 0.000004695999999999966, y: -0.20296065473416458 },\n { x: 0.000004696999999999965, y: -0.24359773798155251 },\n { x: 0.000004697999999999965, y: -0.21363392139837156 },\n { x: 0.000004698999999999965, y: -0.22932791900878563 },\n { x: 0.000004699999999999964, y: -0.21950931367695548 },\n { x: 0.000004700999999999964, y: -0.19702472638362833 },\n { x: 0.000004701999999999964, y: -0.1907882526388136 },\n { x: 0.000004702999999999963, y: -0.23554754530174113 },\n { x: 0.000004703999999999963, y: -0.19614586001424192 },\n { x: 0.0000047049999999999626, y: -0.17548260610891864 },\n { x: 0.000004705999999999962, y: -0.1802931095853181 },\n { x: 0.000004706999999999962, y: -0.18937788191912272 },\n { x: 0.0000047079999999999615, y: -0.20506696768389945 },\n { x: 0.000004708999999999961, y: -0.24077472450497855 },\n { x: 0.000004709999999999961, y: -0.23327681340461123 },\n { x: 0.0000047109999999999605, y: -0.19855179013416105 },\n { x: 0.00000471199999999996, y: -0.24504745793025579 },\n { x: 0.00000471299999999996, y: -0.1835805058338445 },\n { x: 0.0000047139999999999594, y: -0.17117419304776266 },\n { x: 0.000004714999999999959, y: -0.1944161580900013 },\n { x: 0.000004715999999999959, y: -0.17735435602176175 },\n { x: 0.000004716999999999958, y: -0.18980986968004357 },\n { x: 0.000004717999999999958, y: -0.17675672693910716 },\n { x: 0.000004718999999999958, y: -0.20406303252394384 },\n { x: 0.000004719999999999957, y: -0.17417277517686236 },\n { x: 0.000004720999999999957, y: -0.2085135018484537 },\n { x: 0.000004721999999999957, y: -0.22291815943630947 },\n { x: 0.000004722999999999956, y: -0.20765851447295466 },\n { x: 0.000004723999999999956, y: -0.20852432996812229 },\n { x: 0.000004724999999999956, y: -0.223654229452862 },\n { x: 0.000004725999999999955, y: -0.20751794985974192 },\n { x: 0.000004726999999999955, y: -0.23001064273035512 },\n { x: 0.0000047279999999999546, y: -0.20836107867048778 },\n { x: 0.000004728999999999954, y: -0.22024976524380394 },\n { x: 0.000004729999999999954, y: -0.19775958172770985 },\n { x: 0.0000047309999999999535, y: -0.20213102539409397 },\n { x: 0.000004731999999999953, y: -0.22564439579340576 },\n { x: 0.000004732999999999953, y: -0.17679705902984255 },\n { x: 0.0000047339999999999525, y: -0.225663681406971 },\n { x: 0.000004734999999999952, y: -0.18660493624890417 },\n { x: 0.000004735999999999952, y: -0.2018646182903631 },\n { x: 0.0000047369999999999514, y: -0.1758034871227055 },\n { x: 0.000004737999999999951, y: -0.20945421851556756 },\n { x: 0.000004738999999999951, y: -0.20407375648706966 },\n { x: 0.00000473999999999995, y: -0.19335211797354876 },\n { x: 0.00000474099999999995, y: -0.22733940136735512 },\n { x: 0.00000474199999999995, y: -0.21494492051230604 },\n { x: 0.000004742999999999949, y: -0.19450113480447492 },\n { x: 0.000004743999999999949, y: -0.1684962871531534 },\n { x: 0.000004744999999999949, y: -0.236358974586646 },\n { x: 0.000004745999999999948, y: -0.18306612897940924 },\n { x: 0.000004746999999999948, y: -0.18950608498279017 },\n { x: 0.000004747999999999948, y: -0.1983439086129326 },\n { x: 0.000004748999999999947, y: -0.22521746323344227 },\n { x: 0.000004749999999999947, y: -0.20931594003229548 },\n { x: 0.0000047509999999999466, y: -0.1947776702431402 },\n { x: 0.000004751999999999946, y: -0.18490488125778162 },\n { x: 0.000004752999999999946, y: -0.22422052957169566 },\n { x: 0.0000047539999999999455, y: -0.1608664960899408 },\n { x: 0.000004754999999999945, y: -0.21314072406737158 },\n { x: 0.000004755999999999945, y: -0.22613514875516533 },\n { x: 0.0000047569999999999445, y: -0.23520427973873745 },\n { x: 0.000004757999999999944, y: -0.1959171346942928 },\n { x: 0.000004758999999999944, y: -0.167921570526336 },\n { x: 0.000004759999999999943, y: -0.21440884565974416 },\n { x: 0.000004760999999999943, y: -0.234280184017242 },\n { x: 0.000004761999999999943, y: -0.1718703321438136 },\n { x: 0.000004762999999999942, y: -0.2062218670619978 },\n { x: 0.000004763999999999942, y: -0.16177007301569504 },\n { x: 0.000004764999999999942, y: -0.2135067355583641 },\n { x: 0.000004765999999999941, y: -0.169713522487619 },\n { x: 0.000004766999999999941, y: -0.19690944541320163 },\n { x: 0.000004767999999999941, y: -0.21542435517989045 },\n { x: 0.00000476899999999994, y: -0.1599090038092127 },\n { x: 0.00000476999999999994, y: -0.18592641214348676 },\n { x: 0.00000477099999999994, y: -0.19662946753571472 },\n { x: 0.000004771999999999939, y: -0.21706635068426916 },\n { x: 0.000004772999999999939, y: -0.17526513643017064 },\n { x: 0.0000047739999999999385, y: -0.20654252549275207 },\n { x: 0.000004774999999999938, y: -0.1631517890367496 },\n { x: 0.000004775999999999938, y: -0.18673698392866397 },\n { x: 0.0000047769999999999375, y: -0.21021363404971802 },\n { x: 0.000004777999999999937, y: -0.21194458824357887 },\n { x: 0.000004778999999999937, y: -0.15963453604460792 },\n { x: 0.0000047799999999999364, y: -0.20277961851973117 },\n { x: 0.000004780999999999936, y: -0.2177409813327441 },\n { x: 0.000004781999999999936, y: -0.2091624898361344 },\n { x: 0.000004782999999999935, y: -0.19590905863790503 },\n { x: 0.000004783999999999935, y: -0.21209886282568485 },\n { x: 0.000004784999999999935, y: -0.22398077592788382 },\n { x: 0.000004785999999999934, y: -0.2203009494501902 },\n { x: 0.000004786999999999934, y: -0.1630880818377324 },\n { x: 0.000004787999999999934, y: -0.1860963990344954 },\n { x: 0.000004788999999999933, y: -0.20794310211730432 },\n { x: 0.000004789999999999933, y: -0.18378025208725715 },\n { x: 0.000004790999999999933, y: -0.17168632724802244 },\n { x: 0.000004791999999999932, y: -0.1558240130518776 },\n { x: 0.000004792999999999932, y: -0.2021555152863579 },\n { x: 0.0000047939999999999316, y: -0.20037923804218785 },\n { x: 0.000004794999999999931, y: -0.19613939082325502 },\n { x: 0.000004795999999999931, y: -0.2007319025709042 },\n { x: 0.0000047969999999999305, y: -0.19254515569478217 },\n { x: 0.00000479799999999993, y: -0.15764900670703727 },\n { x: 0.00000479899999999993, y: -0.16360389398329964 },\n { x: 0.0000047999999999999295, y: -0.19755280863356103 },\n { x: 0.000004800999999999929, y: -0.17213308136425623 },\n { x: 0.000004801999999999929, y: -0.15437152411753743 },\n { x: 0.0000048029999999999284, y: -0.19333674317331187 },\n { x: 0.000004803999999999928, y: -0.2129181764092537 },\n { x: 0.000004804999999999928, y: -0.18031639032246033 },\n { x: 0.000004805999999999927, y: -0.20860942459824838 },\n { x: 0.000004806999999999927, y: -0.17275809913291298 },\n { x: 0.000004807999999999927, y: -0.2113950047144613 },\n { x: 0.000004808999999999926, y: -0.1608856623448324 },\n { x: 0.000004809999999999926, y: -0.14289272634682348 },\n { x: 0.000004810999999999926, y: -0.17513428747592577 },\n { x: 0.000004811999999999925, y: -0.17576132309826628 },\n { x: 0.000004812999999999925, y: -0.20417843271672595 },\n { x: 0.000004813999999999925, y: -0.17501485005419407 },\n { x: 0.000004814999999999924, y: -0.2052600968613352 },\n { x: 0.000004815999999999924, y: -0.1383286747987829 },\n { x: 0.0000048169999999999236, y: -0.18845085094256564 },\n { x: 0.000004817999999999923, y: -0.1373393353637439 },\n { x: 0.000004818999999999923, y: -0.16761729840929637 },\n { x: 0.0000048199999999999225, y: -0.1371386993414808 },\n { x: 0.000004820999999999922, y: -0.17279139552556755 },\n { x: 0.000004821999999999922, y: -0.15436613305972502 },\n { x: 0.0000048229999999999215, y: -0.19928640969627978 },\n { x: 0.000004823999999999921, y: -0.17465878045807076 },\n { x: 0.000004824999999999921, y: -0.17499037100610776 },\n { x: 0.00000482599999999992, y: -0.18164039251446504 },\n { x: 0.00000482699999999992, y: -0.13809857517430163 },\n { x: 0.00000482799999999992, y: -0.19429476716545158 },\n { x: 0.000004828999999999919, y: -0.1538921953207057 },\n { x: 0.000004829999999999919, y: -0.17969911866035268 },\n { x: 0.000004830999999999919, y: -0.1729346234592151 },\n { x: 0.000004831999999999918, y: -0.1718842123427915 },\n { x: 0.000004832999999999918, y: -0.1664882176643573 },\n { x: 0.000004833999999999918, y: -0.18032920382351608 },\n { x: 0.000004834999999999917, y: -0.13780590747723948 },\n { x: 0.000004835999999999917, y: -0.15876079047465555 },\n { x: 0.000004836999999999917, y: -0.14120914648537494 },\n { x: 0.000004837999999999916, y: -0.1866227488934059 },\n { x: 0.000004838999999999916, y: -0.13176445360945166 },\n { x: 0.0000048399999999999155, y: -0.13416564037519066 },\n { x: 0.000004840999999999915, y: -0.14228552841507416 },\n { x: 0.000004841999999999915, y: -0.1574909816944331 },\n { x: 0.0000048429999999999145, y: -0.16205850619713613 },\n { x: 0.000004843999999999914, y: -0.15734418167669875 },\n { x: 0.000004844999999999914, y: -0.13535032864746668 },\n { x: 0.0000048459999999999135, y: -0.12931383706578467 },\n { x: 0.000004846999999999913, y: -0.17880634298436224 },\n { x: 0.000004847999999999913, y: -0.1496302361993294 },\n { x: 0.000004848999999999912, y: -0.13470167311909 },\n { x: 0.000004849999999999912, y: -0.11791902244194963 },\n { x: 0.000004850999999999912, y: -0.18069602286468192 },\n { x: 0.000004851999999999911, y: -0.13547852979310568 },\n { x: 0.000004852999999999911, y: -0.12489085559400731 },\n { x: 0.000004853999999999911, y: -0.12499704030930918 },\n { x: 0.00000485499999999991, y: -0.1720018234815587 },\n { x: 0.00000485599999999991, y: -0.15898138102059034 },\n { x: 0.00000485699999999991, y: -0.1259648214094295 },\n { x: 0.000004857999999999909, y: -0.15422702406169095 },\n { x: 0.000004858999999999909, y: -0.10400333640924503 },\n { x: 0.0000048599999999999086, y: -0.12772808744237163 },\n { x: 0.000004860999999999908, y: -0.17568347478216106 },\n { x: 0.000004861999999999908, y: -0.17012655821641406 },\n { x: 0.0000048629999999999075, y: -0.13248576605255455 },\n { x: 0.000004863999999999907, y: -0.10925693933163909 },\n { x: 0.000004864999999999907, y: -0.11174649933581503 },\n { x: 0.0000048659999999999065, y: -0.15217719429194307 },\n { x: 0.000004866999999999906, y: -0.16529526455950397 },\n { x: 0.000004867999999999906, y: -0.09660573875066847 },\n { x: 0.0000048689999999999054, y: -0.10993291735667422 },\n { x: 0.000004869999999999905, y: -0.09386597403459415 },\n { x: 0.000004870999999999905, y: -0.16129354479120137 },\n { x: 0.000004871999999999904, y: -0.11500147446626671 },\n { x: 0.000004872999999999904, y: -0.11984118171268719 },\n { x: 0.000004873999999999904, y: -0.1345035660099142 },\n { x: 0.000004874999999999903, y: -0.14618719086080473 },\n { x: 0.000004875999999999903, y: -0.11485445424300733 },\n { x: 0.000004876999999999903, y: -0.13436265039834844 },\n { x: 0.000004877999999999902, y: -0.10618028167215987 },\n { x: 0.000004878999999999902, y: -0.15522193103563675 },\n { x: 0.000004879999999999902, y: -0.11603179425186169 },\n { x: 0.000004880999999999901, y: -0.11267148543518876 },\n { x: 0.000004881999999999901, y: -0.14425013561411573 },\n { x: 0.0000048829999999999006, y: -0.1045795343885543 },\n { x: 0.0000048839999999999, y: -0.15728150147030912 },\n { x: 0.0000048849999999999, y: -0.12899113866698708 },\n { x: 0.0000048859999999998995, y: -0.09190574762271779 },\n { x: 0.000004886999999999899, y: -0.1455477249183041 },\n { x: 0.000004887999999999899, y: -0.13988385515254445 },\n { x: 0.0000048889999999998985, y: -0.10692291123069793 },\n { x: 0.000004889999999999898, y: -0.10306987442992198 },\n { x: 0.000004890999999999898, y: -0.11014813447393539 },\n { x: 0.0000048919999999998974, y: -0.08419457003218711 },\n { x: 0.000004892999999999897, y: -0.08379018179709047 },\n { x: 0.000004893999999999897, y: -0.1480267092320591 },\n { x: 0.000004894999999999896, y: -0.13538789770744894 },\n { x: 0.000004895999999999896, y: -0.10247299914430266 },\n { x: 0.000004896999999999896, y: -0.12559969438187232 },\n { x: 0.000004897999999999895, y: -0.08112656075683236 },\n { x: 0.000004898999999999895, y: -0.0997460859233642 },\n { x: 0.000004899999999999895, y: -0.10568721892816163 },\n { x: 0.000004900999999999894, y: -0.07086962161944485 },\n { x: 0.000004901999999999894, y: -0.1284422510140238 },\n { x: 0.000004902999999999894, y: -0.0801746347593161 },\n { x: 0.000004903999999999893, y: -0.14140496011063863 },\n { x: 0.000004904999999999893, y: -0.11131818949341507 },\n { x: 0.0000049059999999998925, y: -0.0973840599783958 },\n { x: 0.000004906999999999892, y: -0.07924227894688163 },\n { x: 0.000004907999999999892, y: -0.12190320380817203 },\n { x: 0.0000049089999999998915, y: -0.09621358489492539 },\n { x: 0.000004909999999999891, y: -0.13075900329111637 },\n { x: 0.000004910999999999891, y: -0.0661101365828696 },\n { x: 0.0000049119999999998905, y: -0.06534845898617356 },\n { x: 0.00000491299999999989, y: -0.09597344025805908 },\n { x: 0.00000491399999999989, y: -0.11872206641726424 },\n { x: 0.000004914999999999889, y: -0.08853031896239191 },\n { x: 0.000004915999999999889, y: -0.06622650754929141 },\n { x: 0.000004916999999999889, y: -0.10309024203862566 },\n { x: 0.000004917999999999888, y: -0.11661611934116448 },\n { x: 0.000004918999999999888, y: -0.05809835228344837 },\n { x: 0.000004919999999999888, y: -0.08655220835499981 },\n { x: 0.000004920999999999887, y: -0.07284919197385525 },\n { x: 0.000004921999999999887, y: -0.057951825795007884 },\n { x: 0.000004922999999999887, y: -0.12157613857581677 },\n { x: 0.000004923999999999886, y: -0.08157155191142763 },\n { x: 0.000004924999999999886, y: -0.059756634727099286 },\n { x: 0.000004925999999999886, y: -0.07213889817804878 },\n { x: 0.000004926999999999885, y: -0.09537269523287686 },\n { x: 0.000004927999999999885, y: -0.11695585184370687 },\n { x: 0.0000049289999999998845, y: -0.12243418539396558 },\n { x: 0.000004929999999999884, y: -0.07713282648976831 },\n { x: 0.000004930999999999884, y: -0.0775727622336692 },\n { x: 0.0000049319999999998835, y: -0.10458387395625092 },\n { x: 0.000004932999999999883, y: -0.08850108896150437 },\n { x: 0.000004933999999999883, y: -0.08423858424803811 },\n { x: 0.0000049349999999998824, y: -0.07445731673555146 },\n { x: 0.000004935999999999882, y: -0.10902936703826094 },\n { x: 0.000004936999999999882, y: -0.06289646778316262 },\n { x: 0.000004937999999999881, y: -0.10821073356373208 },\n { x: 0.000004938999999999881, y: -0.059026477771728675 },\n { x: 0.000004939999999999881, y: -0.09350577582955295 },\n { x: 0.00000494099999999988, y: -0.04173094732713335 },\n { x: 0.00000494199999999988, y: -0.057802373558431354 },\n { x: 0.00000494299999999988, y: -0.03587117309250226 },\n { x: 0.000004943999999999879, y: -0.07829126272716458 },\n { x: 0.000004944999999999879, y: -0.05806479699544798 },\n { x: 0.000004945999999999879, y: -0.055031783109273015 },\n { x: 0.000004946999999999878, y: -0.055795889887519504 },\n { x: 0.000004947999999999878, y: -0.044843089098240946 },\n { x: 0.0000049489999999998776, y: -0.08128360222463271 },\n { x: 0.000004949999999999877, y: -0.033838124279734254 },\n { x: 0.000004950999999999877, y: -0.09576571956912901 },\n { x: 0.0000049519999999998765, y: -0.07044183338199075 },\n { x: 0.000004952999999999876, y: -0.06775003848283538 },\n { x: 0.000004953999999999876, y: -0.08341586804696717 },\n { x: 0.0000049549999999998755, y: -0.026914812352326976 },\n { x: 0.000004955999999999875, y: -0.09911820284206022 },\n { x: 0.000004956999999999875, y: -0.09790415695470989 },\n { x: 0.0000049579999999998744, y: -0.05259349495470582 },\n { x: 0.000004958999999999874, y: -0.045609478376297787 },\n { x: 0.000004959999999999874, y: -0.06785905626139048 },\n { x: 0.000004960999999999873, y: -0.03306905282289534 },\n { x: 0.000004961999999999873, y: -0.02438447707205612 },\n { x: 0.000004962999999999873, y: -0.07199766573081698 },\n { x: 0.000004963999999999872, y: -0.05642485857993181 },\n { x: 0.000004964999999999872, y: -0.03507293642961979 },\n { x: 0.000004965999999999872, y: -0.06892039980153758 },\n { x: 0.000004966999999999871, y: -0.024371528997631384 },\n { x: 0.000004967999999999871, y: -0.057781144891837694 },\n { x: 0.000004968999999999871, y: -0.08445755391245774 },\n { x: 0.00000496999999999987, y: -0.019984754276259096 },\n { x: 0.00000497099999999987, y: -0.04489547533977136 },\n { x: 0.0000049719999999998696, y: -0.022923472714198832 },\n { x: 0.000004972999999999869, y: -0.07022689817687824 },\n { x: 0.000004973999999999869, y: -0.03571407560884077 },\n { x: 0.0000049749999999998685, y: -0.0321685900551716 },\n { x: 0.000004975999999999868, y: -0.028171186581429565 },\n { x: 0.000004976999999999868, y: -0.013141562968891747 },\n { x: 0.0000049779999999998675, y: -0.062217136700027154 },\n { x: 0.000004978999999999867, y: -0.008048890685904801 },\n { x: 0.000004979999999999867, y: -0.002861427427264314 },\n { x: 0.000004980999999999866, y: -0.07080151530840517 },\n { x: 0.000004981999999999866, y: -0.03232752906718989 },\n { x: 0.000004982999999999866, y: -0.027368309128163994 },\n { x: 0.000004983999999999865, y: -0.01483745930429672 },\n { x: 0.000004984999999999865, y: -0.012576606817376813 },\n { x: 0.000004985999999999865, y: -0.0363257857555606 },\n { x: 0.000004986999999999864, y: -0.01608651514883019 },\n { x: 0.000004987999999999864, y: -0.023901584337729195 },\n { x: 0.000004988999999999864, y: -0.06457789657819268 },\n { x: 0.000004989999999999863, y: -0.0411856083797308 },\n { x: 0.000004990999999999863, y: -0.022244764833207593 },\n { x: 0.000004991999999999863, y: -0.04695856198742204 },\n { x: 0.000004992999999999862, y: -0.026737312939246756 },\n { x: 0.000004993999999999862, y: -0.06199909039201966 },\n { x: 0.0000049949999999998615, y: -0.0254147913806117 },\n { x: 0.000004995999999999861, y: -0.04992082129608859 },\n { x: 0.000004996999999999861, y: -0.007418809966423294 },\n { x: 0.0000049979999999998605, y: -0.013678467530334748 },\n { x: 0.00000499899999999986, y: 0.004664434960145333 },\n { x: 0.00000499999999999986, y: 0.009311795051603962 },\n { x: 0.0000050009999999998595, y: -0.0042486979619729415 },\n { x: 0.000005001999999999859, y: -0.051674127876879174 },\n { x: 0.000005002999999999859, y: -0.008037008929684985 },\n { x: 0.000005003999999999858, y: -0.045848084279527024 },\n { x: 0.000005004999999999858, y: -0.0040695178685149665 },\n { x: 0.000005005999999999858, y: -0.005058554328545373 },\n { x: 0.000005006999999999857, y: -0.00835813196174382 },\n { x: 0.000005007999999999857, y: 0.012973121889614858 },\n { x: 0.000005008999999999857, y: 0.008395654434501673 },\n { x: 0.000005009999999999856, y: -0.04505598739126347 },\n { x: 0.000005010999999999856, y: -0.01553069391300424 },\n { x: 0.000005011999999999856, y: 0.006486416147778404 },\n { x: 0.000005012999999999855, y: -0.0195859621508336 },\n { x: 0.000005013999999999855, y: -0.039070141786189956 },\n { x: 0.0000050149999999998546, y: -0.023233986360678506 },\n { x: 0.000005015999999999854, y: 0.025678075043770142 },\n { x: 0.000005016999999999854, y: -0.03625904254495807 },\n { x: 0.0000050179999999998535, y: -0.032912232555061996 },\n { x: 0.000005018999999999853, y: -0.0009306114694812165 },\n { x: 0.000005019999999999853, y: -0.03675606796006399 },\n { x: 0.0000050209999999998525, y: -0.015087048918444389 },\n { x: 0.000005021999999999852, y: -0.021756564405929997 },\n { x: 0.000005022999999999852, y: 0.013326902707929474 },\n { x: 0.0000050239999999998514, y: -0.032311009629343745 },\n { x: 0.000005024999999999851, y: 0.01603544225578032 },\n { x: 0.000005025999999999851, y: -0.005747291352763567 },\n { x: 0.00000502699999999985, y: -0.016044880607822252 },\n { x: 0.00000502799999999985, y: -0.004874847938711399 },\n { x: 0.00000502899999999985, y: 0.015385456467212281 },\n { x: 0.000005029999999999849, y: 0.018514538248983903 },\n { x: 0.000005030999999999849, y: 0.02204240242151138 },\n { x: 0.000005031999999999849, y: 0.02912149766978155 },\n { x: 0.000005032999999999848, y: -0.0021647747080949225 },\n { x: 0.000005033999999999848, y: -0.00922275387973373 },\n { x: 0.000005034999999999848, y: 0.019214525790300273 },\n { x: 0.000005035999999999847, y: 0.038716207912106795 },\n { x: 0.000005036999999999847, y: 0.04369819867637072 },\n { x: 0.0000050379999999998466, y: -0.015473393049577478 },\n { x: 0.000005038999999999846, y: -0.019639489969987364 },\n { x: 0.000005039999999999846, y: 0.016142906541799264 },\n { x: 0.0000050409999999998455, y: -0.00346702658855904 },\n { x: 0.000005041999999999845, y: -0.014906744019370094 },\n { x: 0.000005042999999999845, y: 0.028030675484268117 },\n { x: 0.0000050439999999998445, y: 0.022933229818272005 },\n { x: 0.000005044999999999844, y: 0.03712510844528114 },\n { x: 0.000005045999999999844, y: 0.04115848810097254 },\n { x: 0.0000050469999999998434, y: 0.020494427453857173 },\n { x: 0.000005047999999999843, y: 0.054987634059592866 },\n { x: 0.000005048999999999843, y: -0.010005854733778529 },\n { x: 0.000005049999999999842, y: 0.007476921469571943 },\n { x: 0.000005050999999999842, y: 0.023297925529036572 },\n { x: 0.000005051999999999842, y: 0.04229944762070528 },\n { x: 0.000005052999999999841, y: -0.009948903670665851 },\n { x: 0.000005053999999999841, y: 0.007362581972701886 },\n { x: 0.000005054999999999841, y: 0.025259254816365404 },\n { x: 0.00000505599999999984, y: 0.02872700592043828 },\n { x: 0.00000505699999999984, y: 0.03609191359160033 },\n { x: 0.00000505799999999984, y: 0.029689089836923387 },\n { x: 0.000005058999999999839, y: 0.048208114339134245 },\n { x: 0.000005059999999999839, y: -0.008523067423195096 },\n { x: 0.0000050609999999998385, y: 0.048292231733407985 },\n { x: 0.000005061999999999838, y: 0.002431737869759854 },\n { x: 0.000005062999999999838, y: 0.02578493936285812 },\n { x: 0.0000050639999999998375, y: 0.06295742467028229 },\n { x: 0.000005064999999999837, y: 0.019906756150100697 },\n { x: 0.000005065999999999837, y: 0.052329339908353985 },\n { x: 0.0000050669999999998365, y: 0.07018574749278718 },\n { x: 0.000005067999999999836, y: 0.05263194561358897 },\n { x: 0.000005068999999999836, y: 0.053751372227729126 },\n { x: 0.000005069999999999835, y: 0.05277372355378042 },\n { x: 0.000005070999999999835, y: -0.0002219276410308016 },\n { x: 0.000005071999999999835, y: 0.012348918293527935 },\n { x: 0.000005072999999999834, y: 0.055259019796436756 },\n { x: 0.000005073999999999834, y: 0.06982502704088461 },\n { x: 0.000005074999999999834, y: 0.07613673498357486 },\n { x: 0.000005075999999999833, y: 0.02511433251889668 },\n { x: 0.000005076999999999833, y: 0.11063027313847137 },\n { x: 0.000005077999999999833, y: 0.07912954983301018 },\n { x: 0.000005078999999999832, y: 0.07771869256285084 },\n { x: 0.000005079999999999832, y: 0.036960454964422275 },\n { x: 0.000005080999999999832, y: 0.022026614056307705 },\n { x: 0.000005081999999999831, y: 0.06237263594572377 },\n { x: 0.000005082999999999831, y: 0.02777925946243225 },\n { x: 0.0000050839999999998305, y: 0.07964742387587326 },\n { x: 0.00000508499999999983, y: 0.014329951413496952 },\n { x: 0.00000508599999999983, y: 0.07783588310753868 },\n { x: 0.0000050869999999998295, y: 0.0622488861102068 },\n { x: 0.000005087999999999829, y: 0.045847560820092524 },\n { x: 0.000005088999999999829, y: 0.049778621420333645 },\n { x: 0.0000050899999999998284, y: 0.05355947621525368 },\n { x: 0.000005090999999999828, y: 0.07272768779571191 },\n { x: 0.000005091999999999828, y: 0.10555320918314048 },\n { x: 0.000005092999999999827, y: 0.0396495904457734 },\n { x: 0.000005093999999999827, y: 0.05003553404294465 },\n { x: 0.000005094999999999827, y: 0.047482513835271814 },\n { x: 0.000005095999999999826, y: 0.0466818805349055 },\n { x: 0.000005096999999999826, y: 0.05326596096075535 },\n { x: 0.000005097999999999826, y: 0.035446163154809765 },\n { x: 0.000005098999999999825, y: 0.02244622940723117 },\n { x: 0.000005099999999999825, y: 0.05531826308652162 },\n { x: 0.000005100999999999825, y: 0.037851901604246035 },\n { x: 0.000005101999999999824, y: 0.049331343014018425 },\n { x: 0.000005102999999999824, y: 0.09101446333899887 },\n { x: 0.0000051039999999998236, y: 0.09256805489808356 },\n { x: 0.000005104999999999823, y: 0.09806519317081278 },\n { x: 0.000005105999999999823, y: 0.0953011379164305 },\n { x: 0.0000051069999999998225, y: 0.05021215131488828 },\n { x: 0.000005107999999999822, y: 0.037122411558486466 },\n { x: 0.000005108999999999822, y: 0.07902939931076589 },\n { x: 0.0000051099999999998215, y: 0.09278036520141489 },\n { x: 0.000005110999999999821, y: 0.062259643831213914 },\n { x: 0.000005111999999999821, y: 0.08367015628070588 },\n { x: 0.0000051129999999998204, y: 0.07860438084449084 },\n { x: 0.00000511399999999982, y: 0.07135860742942574 },\n { x: 0.00000511499999999982, y: 0.039912772898280505 },\n { x: 0.000005115999999999819, y: 0.04877454829061288 },\n { x: 0.000005116999999999819, y: 0.07421556396524108 },\n { x: 0.000005117999999999819, y: 0.03403832908981421 },\n { x: 0.000005118999999999818, y: 0.037741265749125265 },\n { x: 0.000005119999999999818, y: 0.08497000270784218 },\n { x: 0.000005120999999999818, y: 0.06425217798980108 },\n { x: 0.000005121999999999817, y: 0.08407762855217268 },\n { x: 0.000005122999999999817, y: 0.03830285420650548 },\n { x: 0.000005123999999999817, y: 0.10801594378923063 },\n { x: 0.000005124999999999816, y: 0.07121389919160076 },\n { x: 0.000005125999999999816, y: 0.10697880651994408 },\n { x: 0.0000051269999999998156, y: 0.06518250871833037 },\n { x: 0.000005127999999999815, y: 0.06821800145062135 },\n { x: 0.000005128999999999815, y: 0.07261921084406753 },\n { x: 0.0000051299999999998145, y: 0.1099127353514906 },\n { x: 0.000005130999999999814, y: 0.05450141146279909 },\n { x: 0.000005131999999999814, y: 0.10520229842147627 },\n { x: 0.0000051329999999998135, y: 0.06777034691543163 },\n { x: 0.000005133999999999813, y: 0.10100012174386644 },\n { x: 0.000005134999999999813, y: 0.10507665907788341 },\n { x: 0.000005135999999999812, y: 0.05907241101024166 },\n { x: 0.000005136999999999812, y: 0.054956879881917234 },\n { x: 0.000005137999999999812, y: 0.0447907242156061 },\n { x: 0.000005138999999999811, y: 0.05456812067749722 },\n { x: 0.000005139999999999811, y: 0.06751787756041984 },\n { x: 0.000005140999999999811, y: 0.0606144573829864 },\n { x: 0.00000514199999999981, y: 0.09934729933583249 },\n { x: 0.00000514299999999981, y: 0.09402765124604553 },\n { x: 0.00000514399999999981, y: 0.07142693325362795 },\n { x: 0.000005144999999999809, y: 0.05433269905475749 },\n { x: 0.000005145999999999809, y: 0.09994568651168137 },\n { x: 0.000005146999999999809, y: 0.09890187355606968 },\n { x: 0.000005147999999999808, y: 0.11053426922339005 },\n { x: 0.000005148999999999808, y: 0.11800045755706048 },\n { x: 0.0000051499999999998075, y: 0.11807685524827202 },\n { x: 0.000005150999999999807, y: 0.06190890114209674 },\n { x: 0.000005151999999999807, y: 0.08674793649090762 },\n { x: 0.0000051529999999998065, y: 0.08834077707493128 },\n { x: 0.000005153999999999806, y: 0.12769692412352746 },\n { x: 0.000005154999999999806, y: 0.05370333792602889 },\n { x: 0.0000051559999999998055, y: 0.06361218386584885 },\n { x: 0.000005156999999999805, y: 0.09323188369342292 },\n { x: 0.000005157999999999805, y: 0.10189292498201202 },\n { x: 0.000005158999999999804, y: 0.1180087498795736 },\n { x: 0.000005159999999999804, y: 0.10999203283057399 },\n { x: 0.000005160999999999804, y: 0.0961533828201746 },\n { x: 0.000005161999999999803, y: 0.0778847597962472 },\n { x: 0.000005162999999999803, y: 0.09366215169995812 },\n { x: 0.000005163999999999803, y: 0.10156957261407087 },\n { x: 0.000005164999999999802, y: 0.08295366338188746 },\n { x: 0.000005165999999999802, y: 0.08224057500477566 },\n { x: 0.000005166999999999802, y: 0.10195143055090067 },\n { x: 0.000005167999999999801, y: 0.11665842699452506 },\n { x: 0.000005168999999999801, y: 0.09348403415969798 },\n { x: 0.0000051699999999998006, y: 0.09957685242186154 },\n { x: 0.0000051709999999998, y: 0.12274585125747074 },\n { x: 0.0000051719999999998, y: 0.10559699566859558 },\n { x: 0.0000051729999999997995, y: 0.06466748724489677 },\n { x: 0.000005173999999999799, y: 0.096323486475568 },\n { x: 0.000005174999999999799, y: 0.11236101522706754 },\n { x: 0.0000051759999999997985, y: 0.09381732092918492 },\n { x: 0.000005176999999999798, y: 0.0872311744847586 },\n { x: 0.000005177999999999798, y: 0.0852245800808161 },\n { x: 0.0000051789999999997974, y: 0.08830962799138656 },\n { x: 0.000005179999999999797, y: 0.08460790771045605 },\n { x: 0.000005180999999999797, y: 0.12720540797328467 },\n { x: 0.000005181999999999796, y: 0.07699078547094725 },\n { x: 0.000005182999999999796, y: 0.09824306248149246 },\n { x: 0.000005183999999999796, y: 0.11076507818971758 },\n { x: 0.000005184999999999795, y: 0.11779833471534458 },\n { x: 0.000005185999999999795, y: 0.07683612056418618 },\n { x: 0.000005186999999999795, y: 0.14081570731652182 },\n { x: 0.000005187999999999794, y: 0.12298077350057046 },\n { x: 0.000005188999999999794, y: 0.12531931777997332 },\n { x: 0.000005189999999999794, y: 0.12664059706265998 },\n { x: 0.000005190999999999793, y: 0.07928187092681617 },\n { x: 0.000005191999999999793, y: 0.1142035308140135 },\n { x: 0.0000051929999999997926, y: 0.12577064151821116 },\n { x: 0.000005193999999999792, y: 0.11949188873286824 },\n { x: 0.000005194999999999792, y: 0.09101084306623014 },\n { x: 0.0000051959999999997915, y: 0.07500252478446773 },\n { x: 0.000005196999999999791, y: 0.14661125252193297 },\n { x: 0.000005197999999999791, y: 0.13250934140356968 },\n { x: 0.0000051989999999997905, y: 0.08932982512663858 },\n { x: 0.00000519999999999979, y: 0.08550548082835481 },\n { x: 0.00000520099999999979, y: 0.10394532841800222 },\n { x: 0.0000052019999999997894, y: 0.08265343108013151 },\n { x: 0.000005202999999999789, y: 0.14809193673165025 },\n { x: 0.000005203999999999789, y: 0.13463090787814644 },\n { x: 0.000005204999999999788, y: 0.1294325313271355 },\n { x: 0.000005205999999999788, y: 0.09282342066156792 },\n { x: 0.000005206999999999788, y: 0.1436312786928314 },\n { x: 0.000005207999999999787, y: 0.12566020468116226 },\n { x: 0.000005208999999999787, y: 0.09078305845011876 },\n { x: 0.000005209999999999787, y: 0.13795540585649466 },\n { x: 0.000005210999999999786, y: 0.11733663514416333 },\n { x: 0.000005211999999999786, y: 0.09477740060529853 },\n { x: 0.000005212999999999786, y: 0.10041928771568914 },\n { x: 0.000005213999999999785, y: 0.10238393002534794 },\n { x: 0.000005214999999999785, y: 0.1567992318032028 },\n { x: 0.0000052159999999997845, y: 0.09563800486141057 },\n { x: 0.000005216999999999784, y: 0.08979321892744155 },\n { x: 0.000005217999999999784, y: 0.10973426506834066 },\n { x: 0.0000052189999999997835, y: 0.09223711840687873 },\n { x: 0.000005219999999999783, y: 0.1383544362026468 },\n { x: 0.000005220999999999783, y: 0.0999367725571895 },\n { x: 0.0000052219999999997825, y: 0.08446118492175768 },\n { x: 0.000005222999999999782, y: 0.12950412885256435 },\n { x: 0.000005223999999999782, y: 0.13628042682666983 },\n { x: 0.000005224999999999781, y: 0.08984945006414219 },\n { x: 0.000005225999999999781, y: 0.12237407006093978 },\n { x: 0.000005226999999999781, y: 0.08705699683887953 },\n { x: 0.00000522799999999978, y: 0.14547049589356686 },\n { x: 0.00000522899999999978, y: 0.0926629971955555 },\n { x: 0.00000522999999999978, y: 0.1608524254356898 },\n { x: 0.000005230999999999779, y: 0.12057652608288888 },\n { x: 0.000005231999999999779, y: 0.1416197905690594 },\n { x: 0.000005232999999999779, y: 0.09425682403721321 },\n { x: 0.000005233999999999778, y: 0.12141028769661823 },\n { x: 0.000005234999999999778, y: 0.15674823006218022 },\n { x: 0.000005235999999999778, y: 0.10646827407257134 },\n { x: 0.000005236999999999777, y: 0.12312708332119715 },\n { x: 0.000005237999999999777, y: 0.15120748448339894 },\n { x: 0.0000052389999999997765, y: 0.1644637004857692 },\n { x: 0.000005239999999999776, y: 0.13616017090446259 },\n { x: 0.000005240999999999776, y: 0.08974333734783863 },\n { x: 0.0000052419999999997755, y: 0.13107861329550907 },\n { x: 0.000005242999999999775, y: 0.09954767582217837 },\n { x: 0.000005243999999999775, y: 0.10953637992858052 },\n { x: 0.0000052449999999997744, y: 0.1414436435196851 },\n { x: 0.000005245999999999774, y: 0.11227329274863637 },\n { x: 0.000005246999999999774, y: 0.11773410457143 },\n { x: 0.000005247999999999773, y: 0.15775831798311404 },\n { x: 0.000005248999999999773, y: 0.09789213963863787 },\n { x: 0.000005249999999999773, y: 0.11676484046797893 },\n { x: 0.000005250999999999772, y: 0.10752997327228947 },\n { x: 0.000005251999999999772, y: 0.16309847595793353 },\n { x: 0.000005252999999999772, y: 0.1630443093645651 },\n { x: 0.000005253999999999771, y: 0.0959319627294716 },\n { x: 0.000005254999999999771, y: 0.11123955579855684 },\n { x: 0.000005255999999999771, y: 0.10683682512436833 },\n { x: 0.00000525699999999977, y: 0.13364918958393462 },\n { x: 0.00000525799999999977, y: 0.1057202770649562 },\n { x: 0.0000052589999999997696, y: 0.16391526857269595 },\n { x: 0.000005259999999999769, y: 0.15132387134865277 },\n { x: 0.000005260999999999769, y: 0.10170581745186769 },\n { x: 0.0000052619999999997685, y: 0.16643863291159045 },\n { x: 0.000005262999999999768, y: 0.1523269152752978 },\n { x: 0.000005263999999999768, y: 0.144234692117693 },\n { x: 0.0000052649999999997675, y: 0.08577841574949399 },\n { x: 0.000005265999999999767, y: 0.11892147047739499 },\n { x: 0.000005266999999999767, y: 0.12928060886489726 },\n { x: 0.0000052679999999997664, y: 0.14937165655864268 },\n { x: 0.000005268999999999766, y: 0.1600167676500758 },\n { x: 0.000005269999999999766, y: 0.12871225950869453 },\n { x: 0.000005270999999999765, y: 0.1321906561045424 },\n { x: 0.000005271999999999765, y: 0.16898963919767346 },\n { x: 0.000005272999999999765, y: 0.131445532307316 },\n { x: 0.000005273999999999764, y: 0.15223705515626373 },\n { x: 0.000005274999999999764, y: 0.10790320222895054 },\n { x: 0.000005275999999999764, y: 0.11214039556320637 },\n { x: 0.000005276999999999763, y: 0.14246074497137903 },\n { x: 0.000005277999999999763, y: 0.1288952793329502 },\n { x: 0.000005278999999999763, y: 0.11777769206547747 },\n { x: 0.000005279999999999762, y: 0.1185705478638393 },\n { x: 0.000005280999999999762, y: 0.16324990457024166 },\n { x: 0.0000052819999999997616, y: 0.1284850086467003 },\n { x: 0.000005282999999999761, y: 0.15543384409896305 },\n { x: 0.000005283999999999761, y: 0.11667377515718845 },\n { x: 0.0000052849999999997605, y: 0.13819633467004835 },\n { x: 0.00000528599999999976, y: 0.16816922058498113 },\n { x: 0.00000528699999999976, y: 0.11995830091336396 },\n { x: 0.0000052879999999997595, y: 0.10046915427625075 },\n { x: 0.000005288999999999759, y: 0.14217244793871867 },\n { x: 0.000005289999999999759, y: 0.16132734685422329 },\n { x: 0.000005290999999999758, y: 0.16887812288169746 },\n { x: 0.000005291999999999758, y: 0.11009089377254884 },\n { x: 0.000005292999999999758, y: 0.11595234125549575 },\n { x: 0.000005293999999999757, y: 0.15149132757628947 },\n { x: 0.000005294999999999757, y: 0.16989575131555568 },\n { x: 0.000005295999999999757, y: 0.1625354258383166 },\n { x: 0.000005296999999999756, y: 0.15227099850588713 },\n { x: 0.000005297999999999756, y: 0.10509311612094015 },\n { x: 0.000005298999999999756, y: 0.12353427548624234 },\n { x: 0.000005299999999999755, y: 0.13078837280660183 },\n { x: 0.000005300999999999755, y: 0.1280444872415387 },\n { x: 0.000005301999999999755, y: 0.10782367468431045 },\n { x: 0.000005302999999999754, y: 0.12300660849589021 },\n { x: 0.000005303999999999754, y: 0.12908982577505598 },\n { x: 0.0000053049999999997535, y: 0.16140202178405594 },\n { x: 0.000005305999999999753, y: 0.15777984740606843 },\n { x: 0.000005306999999999753, y: 0.17267708073856453 },\n { x: 0.0000053079999999997525, y: 0.12490706715598224 },\n { x: 0.000005308999999999752, y: 0.1604334180602598 },\n { x: 0.000005309999999999752, y: 0.14285815722884326 },\n { x: 0.0000053109999999997515, y: 0.12200335426345624 },\n { x: 0.000005311999999999751, y: 0.15528506119201516 },\n { x: 0.000005312999999999751, y: 0.12754224754133314 },\n { x: 0.00000531399999999975, y: 0.10854723407895986 },\n { x: 0.00000531499999999975, y: 0.13366213873699712 },\n { x: 0.00000531599999999975, y: 0.17291845979493653 },\n { x: 0.000005316999999999749, y: 0.10068417457858662 },\n { x: 0.000005317999999999749, y: 0.13931601345063327 },\n { x: 0.000005318999999999749, y: 0.11885753067738289 },\n { x: 0.000005319999999999748, y: 0.14152297129376254 },\n { x: 0.000005320999999999748, y: 0.1390035550649748 },\n { x: 0.000005321999999999748, y: 0.12504787238686105 },\n { x: 0.000005322999999999747, y: 0.16800654448148356 },\n { x: 0.000005323999999999747, y: 0.1336848307471853 },\n { x: 0.0000053249999999997466, y: 0.1329362167103609 },\n { x: 0.000005325999999999746, y: 0.14959935355488965 },\n { x: 0.000005326999999999746, y: 0.1309823358227884 },\n { x: 0.0000053279999999997455, y: 0.14890399669832766 },\n { x: 0.000005328999999999745, y: 0.13931591585886574 },\n { x: 0.000005329999999999745, y: 0.12667323003314426 },\n { x: 0.0000053309999999997445, y: 0.16554651081163294 },\n { x: 0.000005331999999999744, y: 0.1228158902759412 },\n { x: 0.000005332999999999744, y: 0.1573353745347053 },\n { x: 0.0000053339999999997434, y: 0.14732694134898447 },\n { x: 0.000005334999999999743, y: 0.14722464524545348 },\n { x: 0.000005335999999999743, y: 0.132551089778336 },\n { x: 0.000005336999999999742, y: 0.11981915201683922 },\n { x: 0.000005337999999999742, y: 0.11502737237630124 },\n { x: 0.000005338999999999742, y: 0.11390644628838834 },\n { x: 0.000005339999999999741, y: 0.15029617009891494 },\n { x: 0.000005340999999999741, y: 0.10548946715547333 },\n { x: 0.000005341999999999741, y: 0.13125181185906323 },\n { x: 0.00000534299999999974, y: 0.13733037347654842 },\n { x: 0.00000534399999999974, y: 0.13632081490806414 },\n { x: 0.00000534499999999974, y: 0.11700233048215822 },\n { x: 0.000005345999999999739, y: 0.15845095039516613 },\n { x: 0.000005346999999999739, y: 0.15335683559624075 },\n { x: 0.0000053479999999997386, y: 0.11493704363302802 },\n { x: 0.000005348999999999738, y: 0.1200755419055259 },\n { x: 0.000005349999999999738, y: 0.1251580191187848 },\n { x: 0.0000053509999999997375, y: 0.1230749409138043 },\n { x: 0.000005351999999999737, y: 0.11267572101351167 },\n { x: 0.000005352999999999737, y: 0.14609902529764413 },\n { x: 0.0000053539999999997365, y: 0.16409555164042855 },\n { x: 0.000005354999999999736, y: 0.16276703083145905 },\n { x: 0.000005355999999999736, y: 0.13162786801023588 },\n { x: 0.0000053569999999997354, y: 0.10450561357274661 },\n { x: 0.000005357999999999735, y: 0.16553513598851666 },\n { x: 0.000005358999999999735, y: 0.10235390117643432 },\n { x: 0.000005359999999999734, y: 0.16209048111459723 },\n { x: 0.000005360999999999734, y: 0.16862441843359494 },\n { x: 0.000005361999999999734, y: 0.15212881400710798 },\n { x: 0.000005362999999999733, y: 0.12893007654174463 },\n { x: 0.000005363999999999733, y: 0.13710620889283834 },\n { x: 0.000005364999999999733, y: 0.12216603848555517 },\n { x: 0.000005365999999999732, y: 0.14632520370853394 },\n { x: 0.000005366999999999732, y: 0.1546330936481003 },\n { x: 0.000005367999999999732, y: 0.13394085445415557 },\n { x: 0.000005368999999999731, y: 0.138108734763494 },\n { x: 0.000005369999999999731, y: 0.15681650720550006 },\n { x: 0.0000053709999999997305, y: 0.1394369487048485 },\n { x: 0.00000537199999999973, y: 0.09401743257708534 },\n { x: 0.00000537299999999973, y: 0.11422996913513755 },\n { x: 0.0000053739999999997295, y: 0.1015719835220732 },\n { x: 0.000005374999999999729, y: 0.13110380584307701 },\n { x: 0.000005375999999999729, y: 0.11783129124724499 },\n { x: 0.0000053769999999997285, y: 0.10203519682512509 },\n { x: 0.000005377999999999728, y: 0.0929668638212877 },\n { x: 0.000005378999999999728, y: 0.1006503869331531 },\n { x: 0.000005379999999999727, y: 0.14003956385097696 },\n { x: 0.000005380999999999727, y: 0.12566651942322252 },\n { x: 0.000005381999999999727, y: 0.16167597927569366 },\n { x: 0.000005382999999999726, y: 0.11587901986128309 },\n { x: 0.000005383999999999726, y: 0.15308633004638245 },\n { x: 0.000005384999999999726, y: 0.15856571149951343 },\n { x: 0.000005385999999999725, y: 0.11640267818997072 },\n { x: 0.000005386999999999725, y: 0.10963525641924257 },\n { x: 0.000005387999999999725, y: 0.09209374064047149 },\n { x: 0.000005388999999999724, y: 0.1415295732870333 },\n { x: 0.000005389999999999724, y: 0.10348962855379744 },\n { x: 0.000005390999999999724, y: 0.11255458424431092 },\n { x: 0.000005391999999999723, y: 0.15125863442125664 },\n { x: 0.000005392999999999723, y: 0.0974588307797635 },\n { x: 0.0000053939999999997225, y: 0.09359648235308661 },\n { x: 0.000005394999999999722, y: 0.11585234303612196 },\n { x: 0.000005395999999999722, y: 0.14334520027327285 },\n { x: 0.0000053969999999997215, y: 0.08730660105962522 },\n { x: 0.000005397999999999721, y: 0.09863693779340087 },\n { x: 0.000005398999999999721, y: 0.15913000657876722 },\n { x: 0.0000053999999999997204, y: 0.13756414554198437 },\n { x: 0.00000540099999999972, y: 0.09190330787434925 },\n { x: 0.00000540199999999972, y: 0.13108100562070177 },\n { x: 0.000005402999999999719, y: 0.12918575693583803 },\n { x: 0.000005403999999999719, y: 0.12617537156062916 },\n { x: 0.000005404999999999719, y: 0.1017912581369502 },\n { x: 0.000005405999999999718, y: 0.11765448133746327 },\n { x: 0.000005406999999999718, y: 0.13722868988364098 },\n { x: 0.000005407999999999718, y: 0.11120701913238926 },\n { x: 0.000005408999999999717, y: 0.07343879851164165 },\n { x: 0.000005409999999999717, y: 0.1352632819032208 },\n { x: 0.000005410999999999717, y: 0.08615712346161436 },\n { x: 0.000005411999999999716, y: 0.09061657543357547 },\n { x: 0.000005412999999999716, y: 0.10981208571643157 },\n { x: 0.0000054139999999997156, y: 0.09662242236813093 },\n { x: 0.000005414999999999715, y: 0.1352690354363802 },\n { x: 0.000005415999999999715, y: 0.09475226864800422 },\n { x: 0.0000054169999999997145, y: 0.0843851667634265 },\n { x: 0.000005417999999999714, y: 0.08886526462162103 },\n { x: 0.000005418999999999714, y: 0.12593370731249556 },\n { x: 0.0000054199999999997135, y: 0.1154404917630164 },\n { x: 0.000005420999999999713, y: 0.10748714327052497 },\n { x: 0.000005421999999999713, y: 0.09826789061166473 },\n { x: 0.0000054229999999997124, y: 0.13243197812789337 },\n { x: 0.000005423999999999712, y: 0.11814990941010105 },\n { x: 0.000005424999999999712, y: 0.10081747739357788 },\n { x: 0.000005425999999999711, y: 0.0921304633078068 },\n { x: 0.000005426999999999711, y: 0.08429829978219537 },\n { x: 0.000005427999999999711, y: 0.10669593488345674 },\n { x: 0.00000542899999999971, y: 0.08126539295340826 },\n { x: 0.00000542999999999971, y: 0.1280866818509846 },\n { x: 0.00000543099999999971, y: 0.1445546759394884 },\n { x: 0.000005431999999999709, y: 0.1414285792084123 },\n { x: 0.000005432999999999709, y: 0.1487817595959146 },\n { x: 0.000005433999999999709, y: 0.14825583684509738 },\n { x: 0.000005434999999999708, y: 0.10253319449921218 },\n { x: 0.000005435999999999708, y: 0.07517634377990132 },\n { x: 0.0000054369999999997076, y: 0.09343018198121196 },\n { x: 0.000005437999999999707, y: 0.14149505474590812 },\n { x: 0.000005438999999999707, y: 0.084913455084379 },\n { x: 0.0000054399999999997065, y: 0.11655337887956041 },\n { x: 0.000005440999999999706, y: 0.1315359102066865 },\n { x: 0.000005441999999999706, y: 0.14767347369859823 },\n { x: 0.0000054429999999997055, y: 0.082852902969632 },\n { x: 0.000005443999999999705, y: 0.07763034091883919 },\n { x: 0.000005444999999999705, y: 0.07519047017381357 },\n { x: 0.000005445999999999704, y: 0.10172715344108735 },\n { x: 0.000005446999999999704, y: 0.11898238264206978 },\n { x: 0.000005447999999999704, y: 0.08104618852456878 },\n { x: 0.000005448999999999703, y: 0.1302423237744941 },\n { x: 0.000005449999999999703, y: 0.11469014377760103 },\n { x: 0.000005450999999999703, y: 0.07004288372217889 },\n { x: 0.000005451999999999702, y: 0.14064642775777175 },\n { x: 0.000005452999999999702, y: 0.07485629518793326 },\n { x: 0.000005453999999999702, y: 0.1219847506916892 },\n { x: 0.000005454999999999701, y: 0.07807155096097693 },\n { x: 0.000005455999999999701, y: 0.10913150200743243 },\n { x: 0.000005456999999999701, y: 0.10673544715659088 },\n { x: 0.0000054579999999997, y: 0.11319379158248652 },\n { x: 0.0000054589999999997, y: 0.1293661055296817 },\n { x: 0.0000054599999999996995, y: 0.07564375880617352 },\n { x: 0.000005460999999999699, y: 0.09027321639051988 },\n { x: 0.000005461999999999699, y: 0.10387155545145581 },\n { x: 0.0000054629999999996985, y: 0.07954102078560374 },\n { x: 0.000005463999999999698, y: 0.10972751703876166 },\n { x: 0.000005464999999999698, y: 0.09219984861759932 },\n { x: 0.0000054659999999996975, y: 0.09854804023783836 },\n { x: 0.000005466999999999697, y: 0.07124658585873461 },\n { x: 0.000005467999999999697, y: 0.06830371685456571 },\n { x: 0.000005468999999999696, y: 0.1369133168084155 },\n { x: 0.000005469999999999696, y: 0.07761826942570417 },\n { x: 0.000005470999999999696, y: 0.08034152478420419 },\n { x: 0.000005471999999999695, y: 0.08437573336744544 },\n { x: 0.000005472999999999695, y: 0.13135651077630772 },\n { x: 0.000005473999999999695, y: 0.09001838550561463 },\n { x: 0.000005474999999999694, y: 0.10677766081461751 },\n { x: 0.000005475999999999694, y: 0.07380807740035203 },\n { x: 0.000005476999999999694, y: 0.12372563835179937 },\n { x: 0.000005477999999999693, y: 0.08434731752520779 },\n { x: 0.000005478999999999693, y: 0.12587588840925418 },\n { x: 0.0000054799999999996926, y: 0.1074683973704793 },\n { x: 0.000005480999999999692, y: 0.06801528056201026 },\n { x: 0.000005481999999999692, y: 0.12672715650257943 },\n { x: 0.0000054829999999996915, y: 0.07310377947558591 },\n { x: 0.000005483999999999691, y: 0.05704263791615683 },\n { x: 0.000005484999999999691, y: 0.0631163031906266 },\n { x: 0.0000054859999999996905, y: 0.127068427125634 },\n { x: 0.00000548699999999969, y: 0.10203274516125756 },\n { x: 0.00000548799999999969, y: 0.059309624612488274 },\n { x: 0.0000054889999999996894, y: 0.07275322833986349 },\n { x: 0.000005489999999999689, y: 0.09503300020681342 },\n { x: 0.000005490999999999689, y: 0.11343001378955841 },\n { x: 0.000005491999999999688, y: 0.11225275799688385 },\n { x: 0.000005492999999999688, y: 0.063676451171572 },\n { x: 0.000005493999999999688, y: 0.07493999968701812 },\n { x: 0.000005494999999999687, y: 0.09918996901301305 },\n { x: 0.000005495999999999687, y: 0.07633026050388436 },\n { x: 0.000005496999999999687, y: 0.053333163642476096 },\n { x: 0.000005497999999999686, y: 0.053280321546190695 },\n { x: 0.000005498999999999686, y: 0.11285341423057613 },\n { x: 0.000005499999999999686, y: 0.06323041714921372 },\n { x: 0.000005500999999999685, y: 0.07440423236491583 },\n { x: 0.000005501999999999685, y: 0.0892919651506561 },\n { x: 0.0000055029999999996846, y: 0.05483343163015917 },\n { x: 0.000005503999999999684, y: 0.08410782446957867 },\n { x: 0.000005504999999999684, y: 0.10943517568053497 },\n { x: 0.0000055059999999996835, y: 0.11790158832996515 },\n { x: 0.000005506999999999683, y: 0.06307143069472027 },\n { x: 0.000005507999999999683, y: 0.06139198928380584 },\n { x: 0.0000055089999999996825, y: 0.07880998566688281 },\n { x: 0.000005509999999999682, y: 0.05058159528042694 },\n { x: 0.000005510999999999682, y: 0.07233097756068851 },\n { x: 0.0000055119999999996814, y: 0.0576457147826922 },\n { x: 0.000005512999999999681, y: 0.0947256572997292 },\n { x: 0.000005513999999999681, y: 0.10280467663785933 },\n { x: 0.00000551499999999968, y: 0.050185705511921495 },\n { x: 0.00000551599999999968, y: 0.041195568346063326 },\n { x: 0.00000551699999999968, y: 0.06719837973465684 },\n { x: 0.000005517999999999679, y: 0.058078278795918176 },\n { x: 0.000005518999999999679, y: 0.08752553898924971 },\n { x: 0.000005519999999999679, y: 0.03908095948881185 },\n { x: 0.000005520999999999678, y: 0.0943499604199508 },\n { x: 0.000005521999999999678, y: 0.1052602305788135 },\n { x: 0.000005522999999999678, y: 0.054572883805252555 },\n { x: 0.000005523999999999677, y: 0.0779295336836059 },\n { x: 0.000005524999999999677, y: 0.06976635062655791 },\n { x: 0.0000055259999999996765, y: 0.091519918453971 },\n { x: 0.000005526999999999676, y: 0.10498531267663636 },\n { x: 0.000005527999999999676, y: 0.06956006391119827 },\n { x: 0.0000055289999999996755, y: 0.06352765494242416 },\n { x: 0.000005529999999999675, y: 0.10674885393399733 },\n { x: 0.000005530999999999675, y: 0.03845315376013245 },\n { x: 0.0000055319999999996745, y: 0.09395258252490958 },\n { x: 0.000005532999999999674, y: 0.09165693931205204 },\n { x: 0.000005533999999999674, y: 0.10013351043621249 },\n { x: 0.000005534999999999673, y: 0.06275850535907337 },\n { x: 0.000005535999999999673, y: 0.030101662964757935 },\n { x: 0.000005536999999999673, y: 0.05505505969313184 },\n { x: 0.000005537999999999672, y: 0.08493268286995068 },\n { x: 0.000005538999999999672, y: 0.05678889916332152 },\n { x: 0.000005539999999999672, y: 0.08877059483344836 },\n { x: 0.000005540999999999671, y: 0.0289880266496682 },\n { x: 0.000005541999999999671, y: 0.08043649181792725 },\n { x: 0.000005542999999999671, y: 0.09120298042416897 },\n { x: 0.00000554399999999967, y: 0.0345720008563637 },\n { x: 0.00000554499999999967, y: 0.03572994787368253 },\n { x: 0.00000554599999999967, y: 0.06472833872296682 },\n { x: 0.000005546999999999669, y: 0.03295586157200745 },\n { x: 0.000005547999999999669, y: 0.05475796916322858 },\n { x: 0.0000055489999999996685, y: 0.04188314826564839 },\n { x: 0.000005549999999999668, y: 0.05967081995622031 },\n { x: 0.000005550999999999668, y: 0.06831314388768701 },\n { x: 0.0000055519999999996675, y: 0.08983411770178787 },\n { x: 0.000005552999999999667, y: 0.03991504517733825 },\n { x: 0.000005553999999999667, y: 0.05925226625153502 },\n { x: 0.0000055549999999996664, y: 0.04213797468861381 },\n { x: 0.000005555999999999666, y: 0.06133667932342348 },\n { x: 0.000005556999999999666, y: 0.041887564770085095 },\n { x: 0.000005557999999999665, y: 0.08612857045103753 },\n { x: 0.000005558999999999665, y: 0.020248153390826376 },\n { x: 0.000005559999999999665, y: 0.03164169606716981 },\n { x: 0.000005560999999999664, y: 0.07439892408241605 },\n { x: 0.000005561999999999664, y: 0.08603765226763874 },\n { x: 0.000005562999999999664, y: 0.07827677519440465 },\n { x: 0.000005563999999999663, y: 0.06513240570996488 },\n { x: 0.000005564999999999663, y: 0.02448013085913827 },\n { x: 0.000005565999999999663, y: 0.03917620292257246 },\n { x: 0.000005566999999999662, y: 0.07844418400318481 },\n { x: 0.000005567999999999662, y: 0.012394745338080125 },\n { x: 0.0000055689999999996616, y: 0.030328527869683458 },\n { x: 0.000005569999999999661, y: 0.01588090917558188 },\n { x: 0.000005570999999999661, y: 0.0829305323787197 },\n { x: 0.0000055719999999996605, y: 0.03550676767462757 },\n { x: 0.00000557299999999966, y: 0.011737543384944753 },\n { x: 0.00000557399999999966, y: 0.04126140288967981 },\n { x: 0.0000055749999999996595, y: 0.05280712986026968 },\n { x: 0.000005575999999999659, y: 0.057018071381428476 },\n { x: 0.000005576999999999659, y: 0.05878194387415269 },\n { x: 0.0000055779999999996584, y: 0.06328945832781877 },\n { x: 0.000005578999999999658, y: 0.041681993739289165 },\n { x: 0.000005579999999999658, y: 0.04030560270657089 },\n { x: 0.000005580999999999657, y: 0.01663745748174005 },\n { x: 0.000005581999999999657, y: 0.008377372389003122 },\n { x: 0.000005582999999999657, y: 0.0581032421914115 },\n { x: 0.000005583999999999656, y: 0.047908410907343754 },\n { x: 0.000005584999999999656, y: 0.02878497276898038 },\n { x: 0.000005585999999999656, y: 0.008901174013913 },\n { x: 0.000005586999999999655, y: 0.06885914251102164 },\n { x: 0.000005587999999999655, y: 0.06429992249267769 },\n { x: 0.000005588999999999655, y: 0.000893097550625617 },\n { x: 0.000005589999999999654, y: 0.009171913191069532 },\n { x: 0.000005590999999999654, y: 0.042538012600782424 },\n { x: 0.0000055919999999996536, y: 0.019876336355162325 },\n { x: 0.000005592999999999653, y: 0.04644930626397727 },\n { x: 0.000005593999999999653, y: 0.024814587353290632 },\n { x: 0.0000055949999999996525, y: 0.023356932936255487 },\n { x: 0.000005595999999999652, y: 0.05667405242314277 },\n { x: 0.000005596999999999652, y: 0.05702008654319588 },\n { x: 0.0000055979999999996515, y: 0.02533705042232546 },\n { x: 0.000005598999999999651, y: 0.04476316702132985 },\n { x: 0.000005599999999999651, y: 0.05183551189811624 },\n { x: 0.00000560099999999965, y: 0.06481245288568309 },\n { x: 0.00000560199999999965, y: 0.06648602755689068 },\n { x: 0.00000560299999999965, y: 0.048773842554481 },\n { x: 0.000005603999999999649, y: 0.059011635578218376 },\n { x: 0.000005604999999999649, y: 0.00771297474421357 },\n { x: 0.000005605999999999649, y: -0.003163921360415746 },\n { x: 0.000005606999999999648, y: 0.04008631246664182 },\n { x: 0.000005607999999999648, y: -0.0069742596640481914 },\n { x: 0.000005608999999999648, y: 0.02025163971765502 },\n { x: 0.000005609999999999647, y: 0.024651007856440827 },\n { x: 0.000005610999999999647, y: 0.044386545510387884 },\n { x: 0.000005611999999999647, y: -0.013722603566318114 },\n { x: 0.000005612999999999646, y: 0.06068856556859613 },\n { x: 0.000005613999999999646, y: 0.040169789593820476 },\n { x: 0.0000056149999999996455, y: -0.01476290078877963 },\n { x: 0.000005615999999999645, y: 0.01105940223566256 },\n { x: 0.000005616999999999645, y: 0.029469720356187813 },\n { x: 0.0000056179999999996445, y: 0.005596016899092072 },\n { x: 0.000005618999999999644, y: 0.02150559823373598 },\n { x: 0.000005619999999999644, y: 0.04407202625207027 },\n { x: 0.0000056209999999996435, y: 0.03789016483067496 },\n { x: 0.000005621999999999643, y: 0.0019221746808426171 },\n { x: 0.000005622999999999643, y: 0.011138714956326418 },\n { x: 0.000005623999999999642, y: 0.020848669295159238 },\n { x: 0.000005624999999999642, y: 0.018516585930231415 },\n { x: 0.000005625999999999642, y: 0.03051620132813243 },\n { x: 0.000005626999999999641, y: -0.011585509259803254 },\n { x: 0.000005627999999999641, y: -0.022120878626000838 },\n { x: 0.000005628999999999641, y: -0.0007450149818789137 },\n { x: 0.00000562999999999964, y: 0.0380411152728801 },\n { x: 0.00000563099999999964, y: 0.01197382497145123 },\n { x: 0.00000563199999999964, y: 0.046828271907010034 },\n { x: 0.000005632999999999639, y: 0.02218981213052127 },\n { x: 0.000005633999999999639, y: 0.017025442690287405 },\n { x: 0.0000056349999999996386, y: -0.026792973179775893 },\n { x: 0.000005635999999999638, y: 0.006229005552760826 },\n { x: 0.000005636999999999638, y: -0.014025598925351625 },\n { x: 0.0000056379999999996375, y: 0.020133427649640084 },\n { x: 0.000005638999999999637, y: -0.009813053436434353 },\n { x: 0.000005639999999999637, y: 0.024055890013388023 },\n { x: 0.0000056409999999996365, y: 0.0015704902997545154 },\n { x: 0.000005641999999999636, y: -0.026148011260336345 },\n { x: 0.000005642999999999636, y: -0.024030178639016027 },\n { x: 0.0000056439999999996354, y: -0.026844628520719758 },\n { x: 0.000005644999999999635, y: 0.034111634667024014 },\n { x: 0.000005645999999999635, y: 0.026165124007766553 },\n { x: 0.000005646999999999634, y: 0.0006789787539526492 },\n { x: 0.000005647999999999634, y: -0.011217812063661143 },\n { x: 0.000005648999999999634, y: 0.0382674995511739 },\n { x: 0.000005649999999999633, y: -0.004292650252120828 },\n { x: 0.000005650999999999633, y: 0.03210363708760751 },\n { x: 0.000005651999999999633, y: 0.023190536225305574 },\n { x: 0.000005652999999999632, y: 0.020700088003767252 },\n { x: 0.000005653999999999632, y: 0.01012234136100479 },\n { x: 0.000005654999999999632, y: 0.0318527058706626 },\n { x: 0.000005655999999999631, y: 0.001701215982684314 },\n { x: 0.000005656999999999631, y: -0.006505403742632854 },\n { x: 0.0000056579999999996306, y: 0.028627052201854054 },\n { x: 0.00000565899999999963, y: 0.0333194242382491 },\n { x: 0.00000565999999999963, y: 0.019532633586378263 },\n { x: 0.0000056609999999996295, y: -0.014224921413054835 },\n { x: 0.000005661999999999629, y: 0.0028077796856473937 },\n { x: 0.000005662999999999629, y: 0.003776555928742575 },\n { x: 0.0000056639999999996285, y: -0.012064414528100555 },\n { x: 0.000005664999999999628, y: -0.022332196186054018 },\n { x: 0.000005665999999999628, y: 0.022280199895584857 },\n { x: 0.0000056669999999996274, y: -0.031229727201994593 },\n { x: 0.000005667999999999627, y: -0.001943633632733542 },\n { x: 0.000005668999999999627, y: -0.008853747046028863 },\n { x: 0.000005669999999999626, y: 0.007163590651577227 },\n { x: 0.000005670999999999626, y: -0.023900501590345243 },\n { x: 0.000005671999999999626, y: 0.027872112577264727 },\n { x: 0.000005672999999999625, y: 0.016270034846638557 },\n { x: 0.000005673999999999625, y: -0.03402160781208134 },\n { x: 0.000005674999999999625, y: -0.045153928033824814 },\n { x: 0.000005675999999999624, y: 0.005610116785369946 },\n { x: 0.000005676999999999624, y: -0.035385155411857126 },\n { x: 0.000005677999999999624, y: 0.0009839181855679432 },\n { x: 0.000005678999999999623, y: -0.04804510424331552 },\n { x: 0.000005679999999999623, y: -0.030375441649107444 },\n { x: 0.0000056809999999996225, y: -0.02013841317395565 },\n { x: 0.000005681999999999622, y: -0.006114350162281739 },\n { x: 0.000005682999999999622, y: 0.014729657642163801 },\n { x: 0.0000056839999999996215, y: -0.02097342675851997 },\n { x: 0.000005684999999999621, y: 0.006885734269905498 },\n { x: 0.000005685999999999621, y: -0.03729989834911218 },\n { x: 0.0000056869999999996205, y: -0.04183174185026434 },\n { x: 0.00000568799999999962, y: -0.0013554810021687985 },\n { x: 0.00000568899999999962, y: 0.01630753353225366 },\n { x: 0.000005689999999999619, y: 0.015104116756579227 },\n { x: 0.000005690999999999619, y: 0.012927539898602194 },\n { x: 0.000005691999999999619, y: -0.03977001044925549 },\n { x: 0.000005692999999999618, y: 0.017211162168701364 },\n { x: 0.000005693999999999618, y: 0.014307725013690865 },\n { x: 0.000005694999999999618, y: -0.018000673069227983 },\n { x: 0.000005695999999999617, y: -0.058923782321724086 },\n { x: 0.000005696999999999617, y: -0.05799732387748946 },\n { x: 0.000005697999999999617, y: -0.03218036782615146 },\n { x: 0.000005698999999999616, y: -0.033576925726694365 },\n { x: 0.000005699999999999616, y: -0.02337175629493938 },\n { x: 0.000005700999999999616, y: -0.028183839285457153 },\n { x: 0.000005701999999999615, y: -0.004655059738724345 },\n { x: 0.000005702999999999615, y: -0.0035354414088171193 },\n { x: 0.0000057039999999996145, y: -0.03877360283304894 },\n { x: 0.000005704999999999614, y: -0.017163295343060547 },\n { x: 0.000005705999999999614, y: -0.058584890888645 },\n { x: 0.0000057069999999996135, y: -0.05667109666255698 },\n { x: 0.000005707999999999613, y: -0.03025993073962001 },\n { x: 0.000005708999999999613, y: -0.0024633710923877283 },\n { x: 0.0000057099999999996124, y: 0.00857043003805133 },\n { x: 0.000005710999999999612, y: -0.035917369727011775 },\n { x: 0.000005711999999999612, y: -0.039152484702586574 },\n { x: 0.000005712999999999611, y: -0.04057079186556319 },\n { x: 0.000005713999999999611, y: -0.0330401549658487 },\n { x: 0.000005714999999999611, y: -0.023025479967120448 },\n { x: 0.00000571599999999961, y: 0.005593885495607357 },\n { x: 0.00000571699999999961, y: -0.027941103751881705 },\n { x: 0.00000571799999999961, y: 0.001835736269430531 },\n { x: 0.000005718999999999609, y: -0.019586099052532863 },\n { x: 0.000005719999999999609, y: 0.004212557041339639 },\n { x: 0.000005720999999999609, y: -0.030891088198648112 },\n { x: 0.000005721999999999608, y: -0.06606298048996752 },\n { x: 0.000005722999999999608, y: -0.03688061256835673 },\n { x: 0.0000057239999999996076, y: -0.02469465223837293 },\n { x: 0.000005724999999999607, y: -0.06398921118719145 },\n { x: 0.000005725999999999607, y: -0.07192800213483119 },\n { x: 0.0000057269999999996065, y: -0.0273409370204854 },\n { x: 0.000005727999999999606, y: -0.034001471770512236 },\n { x: 0.000005728999999999606, y: 0.0007413998196445018 },\n { x: 0.0000057299999999996055, y: -0.03232229316025801 },\n { x: 0.000005730999999999605, y: -0.025352736378456274 },\n { x: 0.000005731999999999605, y: -0.010810158447983696 },\n { x: 0.0000057329999999996044, y: -0.0742865472599629 },\n { x: 0.000005733999999999604, y: -0.0598174152222143 },\n { x: 0.000005734999999999604, y: -0.05034602665720305 },\n { x: 0.000005735999999999603, y: -0.019900323098025554 },\n { x: 0.000005736999999999603, y: -0.0351786840299238 },\n { x: 0.000005737999999999603, y: -0.008071725677343523 },\n { x: 0.000005738999999999602, y: -0.03750508446008024 },\n { x: 0.000005739999999999602, y: -0.0231612217333422 },\n { x: 0.000005740999999999602, y: -0.05857153813838402 },\n { x: 0.000005741999999999601, y: -0.07171444837134333 },\n { x: 0.000005742999999999601, y: -0.02692908700371896 },\n { x: 0.000005743999999999601, y: -0.0342765679111989 },\n { x: 0.0000057449999999996, y: -0.062147713486180325 },\n { x: 0.0000057459999999996, y: -0.019502456493431998 },\n { x: 0.0000057469999999995996, y: -0.015250449542157266 },\n { x: 0.000005747999999999599, y: -0.07235146147523647 },\n { x: 0.000005748999999999599, y: -0.030868051789735604 },\n { x: 0.0000057499999999995985, y: -0.06986747041760005 },\n { x: 0.000005750999999999598, y: -0.02296962298268029 },\n { x: 0.000005751999999999598, y: -0.036844746937660225 },\n { x: 0.0000057529999999995975, y: -0.041444924958916364 },\n { x: 0.000005753999999999597, y: -0.03635059601750078 },\n { x: 0.000005754999999999597, y: -0.017255796762393288 },\n { x: 0.000005755999999999596, y: -0.06838302329634105 },\n { x: 0.000005756999999999596, y: -0.048500918553307945 },\n { x: 0.000005757999999999596, y: -0.03221486912063589 },\n { x: 0.000005758999999999595, y: -0.056612019736647416 },\n { x: 0.000005759999999999595, y: -0.07851138654631737 },\n { x: 0.000005760999999999595, y: -0.086695244252949 },\n { x: 0.000005761999999999594, y: -0.05944565333016504 },\n { x: 0.000005762999999999594, y: -0.04626958090971851 },\n { x: 0.000005763999999999594, y: -0.07713820159389875 },\n { x: 0.000005764999999999593, y: -0.044222369540555986 },\n { x: 0.000005765999999999593, y: -0.02205590508494688 },\n { x: 0.000005766999999999593, y: -0.07423921875600382 },\n { x: 0.000005767999999999592, y: -0.028091550132308993 },\n { x: 0.000005768999999999592, y: -0.02955325839615145 },\n { x: 0.0000057699999999995915, y: -0.039716320908441884 },\n { x: 0.000005770999999999591, y: -0.08987433853928249 },\n { x: 0.000005771999999999591, y: -0.039593569056114594 },\n { x: 0.0000057729999999995905, y: -0.06544983082951397 },\n { x: 0.00000577399999999959, y: -0.054205737912335836 },\n { x: 0.00000577499999999959, y: -0.02951098325132251 },\n { x: 0.0000057759999999995895, y: -0.06733467117567192 },\n { x: 0.000005776999999999589, y: -0.028024380404148886 },\n { x: 0.000005777999999999589, y: -0.0712905588570015 },\n { x: 0.000005778999999999588, y: -0.021319793610111132 },\n { x: 0.000005779999999999588, y: -0.061936224790157035 },\n { x: 0.000005780999999999588, y: -0.03538994017350089 },\n { x: 0.000005781999999999587, y: -0.06010415874927883 },\n { x: 0.000005782999999999587, y: -0.07341780416746682 },\n { x: 0.000005783999999999587, y: -0.06952239980928439 },\n { x: 0.000005784999999999586, y: -0.09604945375391341 },\n { x: 0.000005785999999999586, y: -0.07383273485678472 },\n { x: 0.000005786999999999586, y: -0.07228634756174412 },\n { x: 0.000005787999999999585, y: -0.07188594847123486 },\n { x: 0.000005788999999999585, y: -0.09846154076742819 },\n { x: 0.0000057899999999995846, y: -0.07359710365589271 },\n { x: 0.000005790999999999584, y: -0.09585404306112505 },\n { x: 0.000005791999999999584, y: -0.042498856992923786 },\n { x: 0.0000057929999999995835, y: -0.08444487494729958 },\n { x: 0.000005793999999999583, y: -0.05122697019317219 },\n { x: 0.000005794999999999583, y: -0.08604394352224352 },\n { x: 0.0000057959999999995825, y: -0.030101249188827194 },\n { x: 0.000005796999999999582, y: -0.0667469620884695 },\n { x: 0.000005797999999999582, y: -0.043209639883141304 },\n { x: 0.0000057989999999995814, y: -0.09190380166489767 },\n { x: 0.000005799999999999581, y: -0.06737941949782927 },\n { x: 0.000005800999999999581, y: -0.04756534869627232 },\n { x: 0.00000580199999999958, y: -0.04501087846259548 },\n { x: 0.00000580299999999958, y: -0.06503399123981082 },\n { x: 0.00000580399999999958, y: -0.08934837554224814 },\n { x: 0.000005804999999999579, y: -0.03498435728830198 },\n { x: 0.000005805999999999579, y: -0.10021236069484064 },\n { x: 0.000005806999999999579, y: -0.03888367300232594 },\n { x: 0.000005807999999999578, y: -0.06990645854582117 },\n { x: 0.000005808999999999578, y: -0.09830621662067195 },\n { x: 0.000005809999999999578, y: -0.0761677701208191 },\n { x: 0.000005810999999999577, y: -0.09925095261976043 },\n { x: 0.000005811999999999577, y: -0.061494744469045876 },\n { x: 0.0000058129999999995766, y: -0.08744081456429113 },\n { x: 0.000005813999999999576, y: -0.06034985228538464 },\n { x: 0.000005814999999999576, y: -0.09890070155560016 },\n { x: 0.0000058159999999995755, y: -0.06944561456294805 },\n { x: 0.000005816999999999575, y: -0.058741832342005924 },\n { x: 0.000005817999999999575, y: -0.09623316595760983 },\n { x: 0.0000058189999999995745, y: -0.048109504614466614 },\n { x: 0.000005819999999999574, y: -0.044744918324178456 },\n { x: 0.000005820999999999574, y: -0.08139055414309444 },\n { x: 0.0000058219999999995734, y: -0.03909365340306212 },\n { x: 0.000005822999999999573, y: -0.10759857263925998 },\n { x: 0.000005823999999999573, y: -0.06127175766808743 },\n { x: 0.000005824999999999572, y: -0.070658348968339 },\n { x: 0.000005825999999999572, y: -0.09527570808349686 },\n { x: 0.000005826999999999572, y: -0.10458701157604444 },\n { x: 0.000005827999999999571, y: -0.0685408731791968 },\n { x: 0.000005828999999999571, y: -0.05345705577140911 },\n { x: 0.000005829999999999571, y: -0.10503183660279276 },\n { x: 0.00000583099999999957, y: -0.03821669277482671 },\n { x: 0.00000583199999999957, y: -0.09503935934061356 },\n { x: 0.00000583299999999957, y: -0.041760977192790316 },\n { x: 0.000005833999999999569, y: -0.09242569294401952 },\n { x: 0.000005834999999999569, y: -0.08454161908547561 },\n { x: 0.0000058359999999995685, y: -0.05612573639631745 },\n { x: 0.000005836999999999568, y: -0.08202227086407211 },\n { x: 0.000005837999999999568, y: -0.07758990562205759 },\n { x: 0.0000058389999999995675, y: -0.08075085651540101 },\n { x: 0.000005839999999999567, y: -0.06291265191062109 },\n { x: 0.000005840999999999567, y: -0.07909716490356195 },\n { x: 0.0000058419999999995665, y: -0.0959729041635939 },\n { x: 0.000005842999999999566, y: -0.10767115679036697 },\n { x: 0.000005843999999999566, y: -0.05792539181377214 },\n { x: 0.000005844999999999565, y: -0.11389971079713293 },\n { x: 0.000005845999999999565, y: -0.07854169439070142 },\n { x: 0.000005846999999999565, y: -0.07827634415689541 },\n { x: 0.000005847999999999564, y: -0.10155207383910182 },\n { x: 0.000005848999999999564, y: -0.08406951523294798 },\n { x: 0.000005849999999999564, y: -0.0699506482479303 },\n { x: 0.000005850999999999563, y: -0.06777870234520147 },\n { x: 0.000005851999999999563, y: -0.05073802522998252 },\n { x: 0.000005852999999999563, y: -0.07179442228549544 },\n { x: 0.000005853999999999562, y: -0.04295257733926645 },\n { x: 0.000005854999999999562, y: -0.10685934190128094 },\n { x: 0.000005855999999999562, y: -0.08571282539546297 },\n { x: 0.000005856999999999561, y: -0.07756092374002004 },\n { x: 0.000005857999999999561, y: -0.11143553063146022 },\n { x: 0.0000058589999999995605, y: -0.06269409753144073 },\n { x: 0.00000585999999999956, y: -0.06191712621073414 },\n { x: 0.00000586099999999956, y: -0.05296164863575473 },\n { x: 0.0000058619999999995595, y: -0.05806258741800971 },\n { x: 0.000005862999999999559, y: -0.0839779026597179 },\n { x: 0.000005863999999999559, y: -0.02956607513367944 },\n { x: 0.0000058649999999995584, y: -0.04733140876106485 },\n { x: 0.000005865999999999558, y: -0.05972090461448733 },\n { x: 0.000005866999999999558, y: -0.07941774251246225 },\n { x: 0.000005867999999999557, y: -0.10381420716458857 },\n { x: 0.000005868999999999557, y: -0.07686181733701303 },\n { x: 0.000005869999999999557, y: -0.0659154356248962 },\n { x: 0.000005870999999999556, y: -0.09342745403201996 },\n { x: 0.000005871999999999556, y: -0.05531922712482367 },\n { x: 0.000005872999999999556, y: -0.0858453340625318 },\n { x: 0.000005873999999999555, y: -0.08900667413725324 },\n { x: 0.000005874999999999555, y: -0.07964332248228838 },\n { x: 0.000005875999999999555, y: -0.06105336903909923 },\n { x: 0.000005876999999999554, y: -0.04684664695442535 },\n { x: 0.000005877999999999554, y: -0.06010652615476571 },\n { x: 0.0000058789999999995536, y: -0.11862538884058255 },\n { x: 0.000005879999999999553, y: -0.08786857629776401 },\n { x: 0.000005880999999999553, y: -0.06408928610705761 },\n { x: 0.0000058819999999995525, y: -0.08211332744981444 },\n { x: 0.000005882999999999552, y: -0.04710852824275628 },\n { x: 0.000005883999999999552, y: -0.11530689356530775 },\n { x: 0.0000058849999999995515, y: -0.10714248396784734 },\n { x: 0.000005885999999999551, y: -0.04903233093201889 },\n { x: 0.000005886999999999551, y: -0.06841522209935037 },\n { x: 0.0000058879999999995504, y: -0.0975377838889517 },\n { x: 0.00000588899999999955, y: -0.10893720536044163 },\n { x: 0.00000588999999999955, y: -0.07614668100418942 },\n { x: 0.000005890999999999549, y: -0.11792052763863067 },\n { x: 0.000005891999999999549, y: -0.08102620450522152 },\n { x: 0.000005892999999999549, y: -0.04999309195292643 },\n { x: 0.000005893999999999548, y: -0.05615823752048191 },\n { x: 0.000005894999999999548, y: -0.11101672133657967 },\n { x: 0.000005895999999999548, y: -0.06470582537956217 },\n { x: 0.000005896999999999547, y: -0.07980153328623672 },\n { x: 0.000005897999999999547, y: -0.06913510953817037 },\n { x: 0.000005898999999999547, y: -0.09508242504738557 },\n { x: 0.000005899999999999546, y: -0.07972709427153665 },\n { x: 0.000005900999999999546, y: -0.11734885941297832 },\n { x: 0.0000059019999999995456, y: -0.10392499208624882 },\n { x: 0.000005902999999999545, y: -0.06483729796600934 },\n { x: 0.000005903999999999545, y: -0.09431108480123426 },\n { x: 0.0000059049999999995445, y: -0.06989015945749583 },\n { x: 0.000005905999999999544, y: -0.054335738909329676 },\n { x: 0.000005906999999999544, y: -0.10026847250536272 },\n { x: 0.0000059079999999995435, y: -0.055882354554928806 },\n { x: 0.000005908999999999543, y: -0.0519818775919906 },\n { x: 0.000005909999999999543, y: -0.11121080162286982 },\n { x: 0.000005910999999999542, y: -0.11681847169794696 },\n { x: 0.000005911999999999542, y: -0.09268630378783238 },\n { x: 0.000005912999999999542, y: -0.09452583849045111 },\n { x: 0.000005913999999999541, y: -0.06130397024547162 },\n { x: 0.000005914999999999541, y: -0.08070615553185966 },\n { x: 0.000005915999999999541, y: -0.12395475405748313 },\n { x: 0.00000591699999999954, y: -0.10562715510100557 },\n { x: 0.00000591799999999954, y: -0.09464580929797783 },\n { x: 0.00000591899999999954, y: -0.06835399556451352 },\n { x: 0.000005919999999999539, y: -0.0904248918028055 },\n { x: 0.000005920999999999539, y: -0.0851291615682976 },\n { x: 0.000005921999999999539, y: -0.0962904531864375 },\n { x: 0.000005922999999999538, y: -0.06634897713627076 },\n { x: 0.000005923999999999538, y: -0.10524807821450383 },\n { x: 0.0000059249999999995375, y: -0.09720623615497455 },\n { x: 0.000005925999999999537, y: -0.12306326324707181 },\n { x: 0.000005926999999999537, y: -0.09414363035324143 },\n { x: 0.0000059279999999995365, y: -0.10539974097706634 },\n { x: 0.000005928999999999536, y: -0.09402820172700005 },\n { x: 0.000005929999999999536, y: -0.11363129966983088 },\n { x: 0.0000059309999999995355, y: -0.10748435559122782 },\n { x: 0.000005931999999999535, y: -0.12289354951166914 },\n { x: 0.000005932999999999535, y: -0.07524487266614625 },\n { x: 0.000005933999999999534, y: -0.10768494654670385 },\n { x: 0.000005934999999999534, y: -0.058131404847012326 },\n { x: 0.000005935999999999534, y: -0.0973274653732348 },\n { x: 0.000005936999999999533, y: -0.07131325974688427 },\n { x: 0.000005937999999999533, y: -0.12189395817163214 },\n { x: 0.000005938999999999533, y: -0.09204776659183939 },\n { x: 0.000005939999999999532, y: -0.10527294678696195 },\n { x: 0.000005940999999999532, y: -0.07086144962321585 },\n { x: 0.000005941999999999532, y: -0.10272133143303944 },\n { x: 0.000005942999999999531, y: -0.0797344633143732 },\n { x: 0.000005943999999999531, y: -0.11816574875331506 },\n { x: 0.0000059449999999995306, y: -0.07887916021605505 },\n { x: 0.00000594599999999953, y: -0.08704605197874019 },\n { x: 0.00000594699999999953, y: -0.0659776751487626 },\n { x: 0.0000059479999999995295, y: -0.06800937055616915 },\n { x: 0.000005948999999999529, y: -0.08476432781742672 },\n { x: 0.000005949999999999529, y: -0.07276212001018986 },\n { x: 0.0000059509999999995285, y: -0.11097583527217 },\n { x: 0.000005951999999999528, y: -0.09114990050346133 },\n { x: 0.000005952999999999528, y: -0.05321163115913629 },\n { x: 0.0000059539999999995274, y: -0.10014269309055097 },\n { x: 0.000005954999999999527, y: -0.09332466712184218 },\n { x: 0.000005955999999999527, y: -0.10958659355926563 },\n { x: 0.000005956999999999526, y: -0.10598461377439711 },\n { x: 0.000005957999999999526, y: -0.11832787511236788 },\n { x: 0.000005958999999999526, y: -0.08767203957483559 },\n { x: 0.000005959999999999525, y: -0.10911507089919262 },\n { x: 0.000005960999999999525, y: -0.06723931057661828 },\n { x: 0.000005961999999999525, y: -0.11132910373998792 },\n { x: 0.000005962999999999524, y: -0.08918336998757419 },\n { x: 0.000005963999999999524, y: -0.0940508203755534 },\n { x: 0.000005964999999999524, y: -0.1158160570813608 },\n { x: 0.000005965999999999523, y: -0.05695631244678885 },\n { x: 0.000005966999999999523, y: -0.08747552257005412 },\n { x: 0.0000059679999999995226, y: -0.049069820854011625 },\n { x: 0.000005968999999999522, y: -0.08611300731885935 },\n { x: 0.000005969999999999522, y: -0.07745093107225963 },\n { x: 0.0000059709999999995215, y: -0.0703077715906806 },\n { x: 0.000005971999999999521, y: -0.05065555734157756 },\n { x: 0.000005972999999999521, y: -0.06715521799087985 },\n { x: 0.0000059739999999995205, y: -0.08516127281578605 },\n { x: 0.00000597499999999952, y: -0.11216249473970795 },\n { x: 0.00000597599999999952, y: -0.06832514700258674 },\n { x: 0.0000059769999999995194, y: -0.08999450097333302 },\n { x: 0.000005977999999999519, y: -0.1014833067655432 },\n { x: 0.000005978999999999519, y: -0.1209399536318487 },\n { x: 0.000005979999999999518, y: -0.08368603118831162 },\n { x: 0.000005980999999999518, y: -0.1175953409073949 },\n { x: 0.000005981999999999518, y: -0.10910917224710695 },\n { x: 0.000005982999999999517, y: -0.08285773812355521 },\n { x: 0.000005983999999999517, y: -0.09761625529116995 },\n { x: 0.000005984999999999517, y: -0.06371983111729634 },\n { x: 0.000005985999999999516, y: -0.09894572278772236 },\n { x: 0.000005986999999999516, y: -0.061733402000615736 },\n { x: 0.000005987999999999516, y: -0.06557296426887031 },\n { x: 0.000005988999999999515, y: -0.07962959709813179 },\n { x: 0.000005989999999999515, y: -0.10108177554816068 },\n { x: 0.0000059909999999995145, y: -0.04700005491072034 },\n { x: 0.000005991999999999514, y: -0.08067027534263219 },\n { x: 0.000005992999999999514, y: -0.07513091808886702 },\n { x: 0.0000059939999999995135, y: -0.09841254198947565 },\n { x: 0.000005994999999999513, y: -0.056626240380511075 },\n { x: 0.000005995999999999513, y: -0.08745953607336093 },\n { x: 0.0000059969999999995125, y: -0.07538686897303558 },\n { x: 0.000005997999999999512, y: -0.08670448141718652 },\n { x: 0.000005998999999999512, y: -0.1073141424308152 },\n { x: 0.000005999999999999511, y: -0.10771847711884708 },\n { x: 0.000006000999999999511, y: -0.12195165876996406 },\n { x: 0.000006001999999999511, y: -0.08644102670296684 },\n { x: 0.00000600299999999951, y: -0.09563729754616583 },\n { x: 0.00000600399999999951, y: -0.08960733702434961 },\n { x: 0.00000600499999999951, y: -0.11041109453869191 },\n { x: 0.000006005999999999509, y: -0.056102866895571535 },\n { x: 0.000006006999999999509, y: -0.08364941214416051 },\n { x: 0.000006007999999999509, y: -0.05325541192381518 },\n { x: 0.000006008999999999508, y: -0.09108186690943285 },\n { x: 0.000006009999999999508, y: -0.08458580035965713 },\n { x: 0.000006010999999999508, y: -0.05507224504112952 },\n { x: 0.000006011999999999507, y: -0.10296330561322223 },\n { x: 0.000006012999999999507, y: -0.09488929278865856 },\n { x: 0.0000060139999999995065, y: -0.06013245512926522 },\n { x: 0.000006014999999999506, y: -0.08934633450284106 },\n { x: 0.000006015999999999506, y: -0.08259162631814278 },\n { x: 0.0000060169999999995055, y: -0.05357538661837122 },\n { x: 0.000006017999999999505, y: -0.05204831036386155 },\n { x: 0.000006018999999999505, y: -0.06344763781702512 },\n { x: 0.0000060199999999995044, y: -0.09482085670357751 },\n { x: 0.000006020999999999504, y: -0.1163725227165778 },\n { x: 0.000006021999999999504, y: -0.05815953680107275 },\n { x: 0.000006022999999999503, y: -0.09658067692709792 },\n { x: 0.000006023999999999503, y: -0.11752584670711022 },\n { x: 0.000006024999999999503, y: -0.08223820261654766 },\n { x: 0.000006025999999999502, y: -0.09598521850349812 },\n { x: 0.000006026999999999502, y: -0.042073398825239715 },\n { x: 0.000006027999999999502, y: -0.07048987614783778 },\n { x: 0.000006028999999999501, y: -0.09279478329200198 },\n { x: 0.000006029999999999501, y: -0.07895609564632952 },\n { x: 0.000006030999999999501, y: -0.10784860207727726 },\n { x: 0.0000060319999999995, y: -0.053028161190770064 },\n { x: 0.0000060329999999995, y: -0.0829248927180219 },\n { x: 0.0000060339999999994996, y: -0.0818058971188156 },\n { x: 0.000006034999999999499, y: -0.0664053590475456 },\n { x: 0.000006035999999999499, y: -0.08782009530975278 },\n { x: 0.0000060369999999994985, y: -0.07147853880348622 },\n { x: 0.000006037999999999498, y: -0.060472656767288614 },\n { x: 0.000006038999999999498, y: -0.10469031247704569 },\n { x: 0.0000060399999999994975, y: -0.10442521789887405 },\n { x: 0.000006040999999999497, y: -0.1054544936079513 },\n { x: 0.000006041999999999497, y: -0.06643322660601902 },\n { x: 0.0000060429999999994964, y: -0.10928909518495153 },\n { x: 0.000006043999999999496, y: -0.08416396760142379 },\n { x: 0.000006044999999999496, y: -0.07496725972070763 },\n { x: 0.000006045999999999495, y: -0.06809265692172944 },\n { x: 0.000006046999999999495, y: -0.10921065249892614 },\n { x: 0.000006047999999999495, y: -0.05430327227813113 },\n { x: 0.000006048999999999494, y: -0.07028211882368447 },\n { x: 0.000006049999999999494, y: -0.07704224796860162 },\n { x: 0.000006050999999999494, y: -0.0506767095500774 },\n { x: 0.000006051999999999493, y: -0.06114107076207647 },\n { x: 0.000006052999999999493, y: -0.04604035944602747 },\n { x: 0.000006053999999999493, y: -0.08062917041039515 },\n { x: 0.000006054999999999492, y: -0.08833735893986822 },\n { x: 0.000006055999999999492, y: -0.06978961323064778 },\n { x: 0.0000060569999999994916, y: -0.08892204483179389 },\n { x: 0.000006057999999999491, y: -0.08185808321114553 },\n { x: 0.000006058999999999491, y: -0.09922425884615114 },\n { x: 0.0000060599999999994905, y: -0.06654865516326708 },\n { x: 0.00000606099999999949, y: -0.09902557428036265 },\n { x: 0.00000606199999999949, y: -0.07919456209501505 },\n { x: 0.0000060629999999994895, y: -0.037640796437529905 },\n { x: 0.000006063999999999489, y: -0.04633714536331375 },\n { x: 0.000006064999999999489, y: -0.10412942784348213 },\n { x: 0.000006065999999999488, y: -0.08689579722150406 },\n { x: 0.000006066999999999488, y: -0.06252268310524947 },\n { x: 0.000006067999999999488, y: -0.06216046889070501 },\n { x: 0.000006068999999999487, y: -0.036914977347461485 },\n { x: 0.000006069999999999487, y: -0.048231801694563134 },\n { x: 0.000006070999999999487, y: -0.05376265197084077 },\n { x: 0.000006071999999999486, y: -0.10214662605294006 },\n { x: 0.000006072999999999486, y: -0.10076966877582873 },\n { x: 0.000006073999999999486, y: -0.09999743767546357 },\n { x: 0.000006074999999999485, y: -0.035350232451341466 },\n { x: 0.000006075999999999485, y: -0.09442745812635754 },\n { x: 0.000006076999999999485, y: -0.08258066472939925 },\n { x: 0.000006077999999999484, y: -0.10232536981876336 },\n { x: 0.000006078999999999484, y: -0.03543871468212978 },\n { x: 0.0000060799999999994835, y: -0.0759086260932181 },\n { x: 0.000006080999999999483, y: -0.043532089922470284 },\n { x: 0.000006081999999999483, y: -0.09943150345333678 },\n { x: 0.0000060829999999994825, y: -0.05249172545629008 },\n { x: 0.000006083999999999482, y: -0.0497052120447259 },\n { x: 0.000006084999999999482, y: -0.055959084079517794 },\n { x: 0.0000060859999999994815, y: -0.09319915565967628 },\n { x: 0.000006086999999999481, y: -0.07752902920304276 },\n { x: 0.000006087999999999481, y: -0.05946988747654547 },\n { x: 0.00000608899999999948, y: -0.051936078922685584 },\n { x: 0.00000608999999999948, y: -0.05051434375004746 },\n { x: 0.00000609099999999948, y: -0.09438022983296337 },\n { x: 0.000006091999999999479, y: -0.05586243002483793 },\n { x: 0.000006092999999999479, y: -0.03023407036649725 },\n { x: 0.000006093999999999479, y: -0.03258275009046126 },\n { x: 0.000006094999999999478, y: -0.1024980044093661 },\n { x: 0.000006095999999999478, y: -0.09275611915316864 },\n { x: 0.000006096999999999478, y: -0.032795237526358004 },\n { x: 0.000006097999999999477, y: -0.030310105665027724 },\n { x: 0.000006098999999999477, y: -0.04327997543941835 },\n { x: 0.0000060999999999994766, y: -0.0659210445886651 },\n { x: 0.000006100999999999476, y: -0.09146231185210932 },\n { x: 0.000006101999999999476, y: -0.037438521964976615 },\n { x: 0.0000061029999999994755, y: -0.06576506215415627 },\n { x: 0.000006103999999999475, y: -0.08739087890932841 },\n { x: 0.000006104999999999475, y: -0.06464663089288639 },\n { x: 0.0000061059999999994745, y: -0.08364440666422324 },\n { x: 0.000006106999999999474, y: -0.035357769772154185 },\n { x: 0.000006107999999999474, y: -0.06049417748147655 },\n { x: 0.0000061089999999994734, y: -0.060791295857051696 },\n { x: 0.000006109999999999473, y: -0.05212904990702236 },\n { x: 0.000006110999999999473, y: -0.06456353747402446 },\n { x: 0.000006111999999999472, y: -0.07640714343088706 },\n { x: 0.000006112999999999472, y: -0.08101522377396328 },\n { x: 0.000006113999999999472, y: -0.08368665115374006 },\n { x: 0.000006114999999999471, y: -0.05560243777778019 },\n { x: 0.000006115999999999471, y: -0.03740030383550171 },\n { x: 0.000006116999999999471, y: -0.07765490884778034 },\n { x: 0.00000611799999999947, y: -0.06269673414572502 },\n { x: 0.00000611899999999947, y: -0.039844701688237893 },\n { x: 0.00000611999999999947, y: -0.0765170312942845 },\n { x: 0.000006120999999999469, y: -0.07042859535984229 },\n { x: 0.000006121999999999469, y: -0.02187132839342848 },\n { x: 0.0000061229999999994686, y: -0.036588541096110413 },\n { x: 0.000006123999999999468, y: -0.06139969937508194 },\n { x: 0.000006124999999999468, y: -0.01829732470758478 },\n { x: 0.0000061259999999994675, y: -0.040682294409315894 },\n { x: 0.000006126999999999467, y: -0.039408999760286875 },\n { x: 0.000006127999999999467, y: -0.02279277932498827 },\n { x: 0.0000061289999999994665, y: -0.030005550988070537 },\n { x: 0.000006129999999999466, y: -0.08833548770587532 },\n { x: 0.000006130999999999466, y: -0.09032895729687224 },\n { x: 0.0000061319999999994654, y: -0.07981404934168174 },\n { x: 0.000006132999999999465, y: -0.06360981164020682 },\n { x: 0.000006133999999999465, y: -0.05635412185758906 },\n { x: 0.000006134999999999464, y: -0.019721263044769843 },\n { x: 0.000006135999999999464, y: -0.057318177733051506 },\n { x: 0.000006136999999999464, y: -0.07422415925552941 },\n { x: 0.000006137999999999463, y: -0.08831455583860398 },\n { x: 0.000006138999999999463, y: -0.07914814296113405 },\n { x: 0.000006139999999999463, y: -0.07254456063201074 },\n { x: 0.000006140999999999462, y: -0.07975292118650033 },\n { x: 0.000006141999999999462, y: -0.07703892120051815 },\n { x: 0.000006142999999999462, y: -0.03911335842578403 },\n { x: 0.000006143999999999461, y: -0.0624346534060086 },\n { x: 0.000006144999999999461, y: -0.03874617368811919 },\n { x: 0.0000061459999999994605, y: -0.0740110989151904 },\n { x: 0.00000614699999999946, y: -0.007660881498383919 },\n { x: 0.00000614799999999946, y: -0.011405687573579834 },\n { x: 0.0000061489999999994595, y: -0.012530470453577969 },\n { x: 0.000006149999999999459, y: -0.01523333144009003 },\n { x: 0.000006150999999999459, y: -0.05489184226314414 },\n { x: 0.0000061519999999994585, y: -0.039130272486857236 },\n { x: 0.000006152999999999458, y: -0.08293924945867172 },\n { x: 0.000006153999999999458, y: -0.02527022872010664 },\n { x: 0.000006154999999999457, y: -0.051431416284347095 },\n { x: 0.000006155999999999457, y: -0.016261011515250896 },\n { x: 0.000006156999999999457, y: -0.024252593090642267 },\n { x: 0.000006157999999999456, y: -0.07090916602992203 },\n { x: 0.000006158999999999456, y: -0.058718973882890366 },\n { x: 0.000006159999999999456, y: -0.02353605606787683 },\n { x: 0.000006160999999999455, y: -0.048297583921088225 },\n { x: 0.000006161999999999455, y: -0.02322525667090455 },\n { x: 0.000006162999999999455, y: -0.061420659843478775 },\n { x: 0.000006163999999999454, y: -0.014277554526177638 },\n { x: 0.000006164999999999454, y: -0.06469178475100859 },\n { x: 0.000006165999999999454, y: -0.009171104892655609 },\n { x: 0.000006166999999999453, y: -0.06653088376979778 },\n { x: 0.000006167999999999453, y: -0.07725938998366272 },\n { x: 0.0000061689999999994525, y: -0.02654697739258084 },\n { x: 0.000006169999999999452, y: -0.0413348446142956 },\n { x: 0.000006170999999999452, y: -0.009288754652388237 },\n { x: 0.0000061719999999994515, y: -0.04826226440609409 },\n { x: 0.000006172999999999451, y: -0.06136531060918308 },\n { x: 0.000006173999999999451, y: -0.028318733100411893 },\n { x: 0.0000061749999999994504, y: -0.07134938507758189 },\n { x: 0.00000617599999999945, y: -0.06191959854252564 },\n { x: 0.00000617699999999945, y: -0.04094477951194121 },\n { x: 0.000006177999999999449, y: -0.05192451345077616 },\n { x: 0.000006178999999999449, y: -0.021237624257075736 },\n { x: 0.000006179999999999449, y: -0.0536031160606531 },\n { x: 0.000006180999999999448, y: -0.0691755146665819 },\n { x: 0.000006181999999999448, y: -0.04303059259727877 },\n { x: 0.000006182999999999448, y: -0.040002811001553416 },\n { x: 0.000006183999999999447, y: -0.05349711000705129 },\n { x: 0.000006184999999999447, y: -0.05272545070529948 },\n { x: 0.000006185999999999447, y: -0.0413942349224902 },\n { x: 0.000006186999999999446, y: -0.016244124912070095 },\n { x: 0.000006187999999999446, y: -0.013549259601527443 },\n { x: 0.0000061889999999994456, y: -0.05294550999414146 },\n { x: 0.000006189999999999445, y: -0.061378110945480374 },\n { x: 0.000006190999999999445, y: -0.01495256796480194 },\n { x: 0.0000061919999999994445, y: -0.01881017581693592 },\n { x: 0.000006192999999999444, y: -0.023087577275717534 },\n { x: 0.000006193999999999444, y: -0.0062885114809384385 },\n { x: 0.0000061949999999994435, y: 0.0029734317892141926 },\n { x: 0.000006195999999999443, y: -0.018432320432132325 },\n { x: 0.000006196999999999443, y: -0.02044484339534021 },\n { x: 0.0000061979999999994424, y: -0.05524268797754462 },\n { x: 0.000006198999999999442, y: -0.01616206543846683 },\n { x: 0.000006199999999999442, y: -0.0660092748979551 },\n { x: 0.000006200999999999441, y: -0.043690714667203645 },\n { x: 0.000006201999999999441, y: 0.0005316744198725146 },\n { x: 0.000006202999999999441, y: -0.007726714545605293 },\n { x: 0.00000620399999999944, y: -0.025821057885985852 },\n { x: 0.00000620499999999944, y: -0.047793671931128115 },\n { x: 0.00000620599999999944, y: -0.036176341540212445 },\n { x: 0.000006206999999999439, y: -0.0005281434926095938 },\n { x: 0.000006207999999999439, y: 0.005280965406241886 },\n { x: 0.000006208999999999439, y: -0.03658752024839781 },\n { x: 0.000006209999999999438, y: -0.04332716128611916 },\n { x: 0.000006210999999999438, y: -0.01151454028331448 },\n { x: 0.0000062119999999994376, y: -0.018395043001853198 },\n { x: 0.000006212999999999437, y: -0.02047205895566663 },\n { x: 0.000006213999999999437, y: -0.02252945567323992 },\n { x: 0.0000062149999999994365, y: -0.06240499792806903 },\n { x: 0.000006215999999999436, y: 0.00648225610971153 },\n { x: 0.000006216999999999436, y: -0.039318949536063116 },\n { x: 0.0000062179999999994355, y: -0.03008399199088066 },\n { x: 0.000006218999999999435, y: -0.022827312865908077 },\n { x: 0.000006219999999999435, y: 0.01553383083541247 },\n { x: 0.000006220999999999434, y: -0.04772180874630108 },\n { x: 0.000006221999999999434, y: -0.0218651671967387 },\n { x: 0.000006222999999999434, y: 0.015627368398890503 },\n { x: 0.000006223999999999433, y: -0.033863501618150056 },\n { x: 0.000006224999999999433, y: -0.05142512187465838 },\n { x: 0.000006225999999999433, y: -0.024525679656994415 },\n { x: 0.000006226999999999432, y: -0.029933055501078006 },\n { x: 0.000006227999999999432, y: 0.017709236119990538 },\n { x: 0.000006228999999999432, y: 0.032830646026470234 },\n { x: 0.000006229999999999431, y: -0.006292817213284833 },\n { x: 0.000006230999999999431, y: 0.04274711680024851 },\n { x: 0.000006231999999999431, y: -0.004621319415502218 },\n { x: 0.00000623299999999943, y: -0.03529803826118595 },\n { x: 0.00000623399999999943, y: -0.05326253515735846 },\n { x: 0.0000062349999999994295, y: -0.003763221811630803 },\n { x: 0.000006235999999999429, y: -0.044672810441032704 },\n { x: 0.000006236999999999429, y: 0.019714391381036284 },\n { x: 0.0000062379999999994285, y: -0.03739961058201955 },\n { x: 0.000006238999999999428, y: 0.00957567309624037 },\n { x: 0.000006239999999999428, y: 0.04954639406154087 },\n { x: 0.0000062409999999994275, y: -0.014630374805613326 },\n { x: 0.000006241999999999427, y: -0.032937682650552684 },\n { x: 0.000006242999999999427, y: -0.04948639298080569 },\n { x: 0.000006243999999999426, y: -0.004792318799029234 },\n { x: 0.000006244999999999426, y: -0.046479392312515626 },\n { x: 0.000006245999999999426, y: -0.011264634234860854 },\n { x: 0.000006246999999999425, y: -0.014911368466185163 },\n { x: 0.000006247999999999425, y: -0.04981474697331012 },\n { x: 0.000006248999999999425, y: 0.01718150965874051 },\n { x: 0.000006249999999999424, y: 0.0037642021802506316 },\n { x: 0.000006250999999999424, y: -0.03213642386686262 },\n { x: 0.000006251999999999424, y: -0.029888384412366176 },\n { x: 0.000006252999999999423, y: 0.025331378677488605 },\n { x: 0.000006253999999999423, y: 0.010734927526340159 },\n { x: 0.0000062549999999994226, y: -0.0329527975762178 },\n { x: 0.000006255999999999422, y: -0.00944377877904363 },\n { x: 0.000006256999999999422, y: 0.011207288700537566 },\n { x: 0.0000062579999999994215, y: -0.007036597753970956 },\n { x: 0.000006258999999999421, y: -0.010211809680283892 },\n { x: 0.000006259999999999421, y: -0.0421563741401429 },\n { x: 0.0000062609999999994205, y: -0.02854895931348529 },\n { x: 0.00000626199999999942, y: -0.03452037275224883 },\n { x: 0.00000626299999999942, y: -0.021440287476734175 },\n { x: 0.0000062639999999994194, y: -0.03461588419029308 },\n { x: 0.000006264999999999419, y: -0.0024473477206832786 },\n { x: 0.000006265999999999419, y: 0.01676531067551041 },\n { x: 0.000006266999999999418, y: -0.04142183114342354 },\n { x: 0.000006267999999999418, y: 0.012906225146261406 },\n { x: 0.000006268999999999418, y: 0.00871623455383652 },\n { x: 0.000006269999999999417, y: 0.0327525113744227 },\n { x: 0.000006270999999999417, y: 0.012634596216380758 },\n { x: 0.000006271999999999417, y: -0.004471361206095677 },\n { x: 0.000006272999999999416, y: 0.022235699241061682 },\n { x: 0.000006273999999999416, y: -0.015460051710681284 },\n { x: 0.000006274999999999416, y: -0.039800856084212195 },\n { x: 0.000006275999999999415, y: 0.02039043169491328 },\n { x: 0.000006276999999999415, y: 0.012965836879122493 },\n { x: 0.0000062779999999994146, y: -0.01574741264741996 },\n { x: 0.000006278999999999414, y: 0.008013891479229642 },\n { x: 0.000006279999999999414, y: 0.03262042437051343 },\n { x: 0.0000062809999999994135, y: -0.011461677312809816 },\n { x: 0.000006281999999999413, y: -0.007769264021925711 },\n { x: 0.000006282999999999413, y: 0.012149333912136549 },\n { x: 0.0000062839999999994125, y: -0.03700208474630407 },\n { x: 0.000006284999999999412, y: 0.0007334236415029897 },\n { x: 0.000006285999999999412, y: 0.00926810142370388 },\n { x: 0.0000062869999999994114, y: 0.022648380989877325 },\n { x: 0.000006287999999999411, y: 0.010036614614791568 },\n { x: 0.000006288999999999411, y: 0.02834182316130422 },\n { x: 0.00000628999999999941, y: -0.008599540871145122 },\n { x: 0.00000629099999999941, y: -0.03115852858676202 },\n { x: 0.00000629199999999941, y: 0.038131686769695486 },\n { x: 0.000006292999999999409, y: 0.017719369456522506 },\n { x: 0.000006293999999999409, y: 0.036164584579017556 },\n { x: 0.000006294999999999409, y: -0.014620831781571971 },\n { x: 0.000006295999999999408, y: 0.004998727591320388 },\n { x: 0.000006296999999999408, y: -0.01017844762370505 },\n { x: 0.000006297999999999408, y: 0.01071381513663041 },\n { x: 0.000006298999999999407, y: 0.04278492449907748 },\n { x: 0.000006299999999999407, y: 0.03008088671584024 },\n { x: 0.0000063009999999994065, y: 0.0020033693985619036 },\n { x: 0.000006301999999999406, y: 0.0161516417511956 },\n { x: 0.000006302999999999406, y: 0.027933748220420704 },\n { x: 0.0000063039999999994055, y: 0.039118929286455724 },\n { x: 0.000006304999999999405, y: 0.03560948953988753 },\n { x: 0.000006305999999999405, y: 0.03010847957597074 },\n { x: 0.0000063069999999994045, y: 0.03625953950562536 },\n { x: 0.000006307999999999404, y: 0.02355699596041319 },\n { x: 0.000006308999999999404, y: 0.019189500489196782 },\n { x: 0.000006309999999999403, y: -0.016290889862414015 },\n { x: 0.000006310999999999403, y: -0.0040482488010917025 },\n { x: 0.000006311999999999403, y: -0.004030568391539709 },\n { x: 0.000006312999999999402, y: 0.03817525695631252 },\n { x: 0.000006313999999999402, y: 0.021862622227764552 },\n { x: 0.000006314999999999402, y: -0.026376856506003223 },\n { x: 0.000006315999999999401, y: 0.03885425263467728 },\n { x: 0.000006316999999999401, y: -0.009070015586960224 },\n { x: 0.000006317999999999401, y: -0.0162281447276042 },\n { x: 0.0000063189999999994, y: 0.049778850842657325 },\n { x: 0.0000063199999999994, y: 0.03628928349058779 },\n { x: 0.0000063209999999994, y: 0.005456333407054057 },\n { x: 0.000006321999999999399, y: -0.0030741798448190825 },\n { x: 0.000006322999999999399, y: 0.002075695179680896 },\n { x: 0.0000063239999999993985, y: 0.02969728024478644 },\n { x: 0.000006324999999999398, y: 0.0027210731525679453 },\n { x: 0.000006325999999999398, y: -0.01342455122082064 },\n { x: 0.0000063269999999993975, y: 0.03869715895703062 },\n { x: 0.000006327999999999397, y: 0.04467398883471892 },\n { x: 0.000006328999999999397, y: -0.010345809247537823 },\n { x: 0.0000063299999999993964, y: -0.016289646265897136 },\n { x: 0.000006330999999999396, y: -0.008667939794200268 },\n { x: 0.000006331999999999396, y: 0.02945874970557589 },\n { x: 0.000006332999999999395, y: 0.010308575744073002 },\n { x: 0.000006333999999999395, y: 0.027931222627961515 },\n { x: 0.000006334999999999395, y: 0.031327387226426584 },\n { x: 0.000006335999999999394, y: -0.01496415014939505 },\n { x: 0.000006336999999999394, y: -0.006543738528045833 },\n { x: 0.000006337999999999394, y: -0.0021667859050321335 },\n { x: 0.000006338999999999393, y: 0.013527827150638171 },\n { x: 0.000006339999999999393, y: -0.013649883552325867 },\n { x: 0.000006340999999999393, y: 0.0047125368075670235 },\n { x: 0.000006341999999999392, y: 0.018327620062022834 },\n { x: 0.000006342999999999392, y: 0.01006183724561431 },\n { x: 0.0000063439999999993916, y: 0.017456612562905347 },\n { x: 0.000006344999999999391, y: -0.013522434269681884 },\n { x: 0.000006345999999999391, y: 0.04479244813586061 },\n { x: 0.0000063469999999993905, y: 0.027447948313374212 },\n { x: 0.00000634799999999939, y: -0.015140239180625101 },\n { x: 0.00000634899999999939, y: -0.012150445418913226 },\n { x: 0.0000063499999999993895, y: 0.05186206185461248 },\n { x: 0.000006350999999999389, y: 0.03183216012449015 },\n { x: 0.000006351999999999389, y: 0.0332760109182465 },\n { x: 0.0000063529999999993884, y: 0.0487466867858228 },\n { x: 0.000006353999999999388, y: 0.008306739164387187 },\n { x: 0.000006354999999999388, y: 0.047476756131428016 },\n { x: 0.000006355999999999387, y: 0.021312453106249796 },\n { x: 0.000006356999999999387, y: 0.024162952247484788 },\n { x: 0.000006357999999999387, y: 0.0426354306429191 },\n { x: 0.000006358999999999386, y: -0.004766373901188177 },\n { x: 0.000006359999999999386, y: 0.00904997452147054 },\n { x: 0.000006360999999999386, y: 0.01011358777751506 },\n { x: 0.000006361999999999385, y: 0.058121108359806134 },\n { x: 0.000006362999999999385, y: 0.003551169816425368 },\n { x: 0.000006363999999999385, y: 0.05545298154996432 },\n { x: 0.000006364999999999384, y: 0.05771780639184556 },\n { x: 0.000006365999999999384, y: 0.01661106697210214 },\n { x: 0.0000063669999999993836, y: 0.014710240260772868 },\n { x: 0.000006367999999999383, y: 0.020918922991702345 },\n { x: 0.000006368999999999383, y: -0.006097685184978951 },\n { x: 0.0000063699999999993825, y: 0.061594873064644846 },\n { x: 0.000006370999999999382, y: 0.03607071739159255 },\n { x: 0.000006371999999999382, y: -0.007108082073094737 },\n { x: 0.0000063729999999993815, y: 0.03907658351584181 },\n { x: 0.000006373999999999381, y: 0.012717522769924498 },\n { x: 0.000006374999999999381, y: 0.0001813679474672522 },\n { x: 0.00000637599999999938, y: 0.041656031454756194 },\n { x: 0.00000637699999999938, y: 0.052805909789579816 },\n { x: 0.00000637799999999938, y: 0.03672561100600775 },\n { x: 0.000006378999999999379, y: 0.025426646161620676 },\n { x: 0.000006379999999999379, y: 0.004888598356866586 },\n { x: 0.000006380999999999379, y: 0.026636402772328042 },\n { x: 0.000006381999999999378, y: 0.012314934333584958 },\n { x: 0.000006382999999999378, y: 0.048075033771409384 },\n { x: 0.000006383999999999378, y: -0.002893267211374388 },\n { x: 0.000006384999999999377, y: 0.010925616580244515 },\n { x: 0.000006385999999999377, y: 0.038065937825059966 },\n { x: 0.000006386999999999377, y: 0.03950677197835536 },\n { x: 0.000006387999999999376, y: 0.041131985780472176 },\n { x: 0.000006388999999999376, y: 0.006024632580920293 },\n { x: 0.0000063899999999993755, y: 0.03501281549943028 },\n { x: 0.000006390999999999375, y: 0.05792289297258767 },\n { x: 0.000006391999999999375, y: 0.03526323152376286 },\n { x: 0.0000063929999999993745, y: 0.043037819213868775 },\n { x: 0.000006393999999999374, y: 0.030099990295969135 },\n { x: 0.000006394999999999374, y: 0.004398436578855719 },\n { x: 0.0000063959999999993735, y: 0.051071036389301494 },\n { x: 0.000006396999999999373, y: 0.04343454898694269 },\n { x: 0.000006397999999999373, y: 0.02044347068979022 },\n { x: 0.000006398999999999372, y: 0.033810450510320327 },\n { x: 0.000006399999999999372, y: 0.03252325465738688 },\n { x: 0.000006400999999999372, y: 0.028695652313051614 },\n { x: 0.000006401999999999371, y: -0.002044103682097148 },\n { x: 0.000006402999999999371, y: 0.01993094001088715 },\n { x: 0.000006403999999999371, y: 0.013681965615391374 },\n { x: 0.00000640499999999937, y: 0.06724252224929395 },\n { x: 0.00000640599999999937, y: 0.042511897265260445 },\n { x: 0.00000640699999999937, y: 0.03798808817135716 },\n { x: 0.000006407999999999369, y: 0.018216638564458286 },\n { x: 0.000006408999999999369, y: 0.021257935271128067 },\n { x: 0.0000064099999999993686, y: 0.02820020082800031 },\n { x: 0.000006410999999999368, y: 0.01688344762984088 },\n { x: 0.000006411999999999368, y: 0.03306973531724155 },\n { x: 0.0000064129999999993675, y: 0.04641983065822221 },\n { x: 0.000006413999999999367, y: 0.07475868871591632 },\n { x: 0.000006414999999999367, y: 0.07426329251613269 },\n { x: 0.0000064159999999993665, y: 0.043962503596020844 },\n { x: 0.000006416999999999366, y: 0.07571839537353463 },\n { x: 0.000006417999999999366, y: 0.017973350060461173 },\n { x: 0.0000064189999999993654, y: 0.01690186384147821 },\n { x: 0.000006419999999999365, y: 0.057118765479222414 },\n { x: 0.000006420999999999365, y: 0.05263133167303674 },\n { x: 0.000006421999999999364, y: 0.005581214091007286 },\n { x: 0.000006422999999999364, y: 0.02609731318375393 },\n { x: 0.000006423999999999364, y: 0.042939697597900464 },\n { x: 0.000006424999999999363, y: 0.005542101812976444 },\n { x: 0.000006425999999999363, y: 0.011837490370590422 },\n { x: 0.000006426999999999363, y: 0.0629309599090829 },\n { x: 0.000006427999999999362, y: 0.04257522721475675 },\n { x: 0.000006428999999999362, y: 0.07225775922170688 },\n { x: 0.000006429999999999362, y: 0.04642612825044807 },\n { x: 0.000006430999999999361, y: 0.043931850609426566 },\n { x: 0.000006431999999999361, y: 0.004367297429254423 },\n { x: 0.0000064329999999993606, y: 0.056722822136098125 },\n { x: 0.00000643399999999936, y: 0.005191215344177845 },\n { x: 0.00000643499999999936, y: 0.04614752879384501 },\n { x: 0.0000064359999999993595, y: 0.028597820859081757 },\n { x: 0.000006436999999999359, y: 0.05936524529405696 },\n { x: 0.000006437999999999359, y: 0.027490048232724166 },\n { x: 0.0000064389999999993585, y: 0.03374053222803882 },\n { x: 0.000006439999999999358, y: 0.055492541226114404 },\n { x: 0.000006440999999999358, y: 0.06483997765893532 },\n { x: 0.0000064419999999993574, y: 0.03814209677039398 },\n { x: 0.000006442999999999357, y: 0.051603366202904476 },\n { x: 0.000006443999999999357, y: 0.07797460461593173 },\n { x: 0.000006444999999999356, y: 0.05991075958900212 },\n { x: 0.000006445999999999356, y: 0.009144203536065869 },\n { x: 0.000006446999999999356, y: 0.03761598671213768 },\n { x: 0.000006447999999999355, y: 0.04400307042006278 },\n { x: 0.000006448999999999355, y: 0.054343530798096264 },\n { x: 0.000006449999999999355, y: 0.04820793455182021 },\n { x: 0.000006450999999999354, y: 0.048293677648373896 },\n { x: 0.000006451999999999354, y: 0.042585122472547976 },\n { x: 0.000006452999999999354, y: 0.017837085006395623 },\n { x: 0.000006453999999999353, y: 0.02339220972470029 },\n { x: 0.000006454999999999353, y: 0.07962588863827288 },\n { x: 0.0000064559999999993525, y: 0.06350196743297971 },\n { x: 0.000006456999999999352, y: 0.022830411206015533 },\n { x: 0.000006457999999999352, y: 0.06857160814664562 },\n { x: 0.0000064589999999993515, y: 0.08466158553510278 },\n { x: 0.000006459999999999351, y: 0.049805944064092195 },\n { x: 0.000006460999999999351, y: 0.08957688388242513 },\n { x: 0.0000064619999999993505, y: 0.0595226900692198 },\n { x: 0.00000646299999999935, y: 0.0699461360292879 },\n { x: 0.00000646399999999935, y: 0.046784319538738975 },\n { x: 0.000006464999999999349, y: 0.038014012120854146 },\n { x: 0.000006465999999999349, y: 0.05340638341992883 },\n { x: 0.000006466999999999349, y: 0.04043982395822764 },\n { x: 0.000006467999999999348, y: 0.08119226395004789 },\n { x: 0.000006468999999999348, y: 0.06877083413639104 },\n { x: 0.000006469999999999348, y: 0.015111160079450445 },\n { x: 0.000006470999999999347, y: 0.06029445773901031 },\n { x: 0.000006471999999999347, y: 0.04153305955100414 },\n { x: 0.000006472999999999347, y: 0.08087264443846903 },\n { x: 0.000006473999999999346, y: 0.017638697818553248 },\n { x: 0.000006474999999999346, y: 0.01814617742324092 },\n { x: 0.000006475999999999346, y: 0.058548952483776076 },\n { x: 0.000006476999999999345, y: 0.08672984577456241 },\n { x: 0.000006477999999999345, y: 0.017158621632537424 },\n { x: 0.0000064789999999993445, y: 0.04991058438379043 },\n { x: 0.000006479999999999344, y: 0.01912097501408188 },\n { x: 0.000006480999999999344, y: 0.034448221553927474 },\n { x: 0.0000064819999999993435, y: 0.031024618368766646 },\n { x: 0.000006482999999999343, y: 0.037922460299426995 },\n { x: 0.000006483999999999343, y: 0.02241148332962326 },\n { x: 0.0000064849999999993424, y: 0.034644909699168405 },\n { x: 0.000006485999999999342, y: 0.053251671144949705 },\n { x: 0.000006486999999999342, y: 0.08472635728861705 },\n { x: 0.000006487999999999341, y: 0.06592290887966977 },\n { x: 0.000006488999999999341, y: 0.08975219712191326 },\n { x: 0.000006489999999999341, y: 0.03711750915353171 },\n { x: 0.00000649099999999934, y: 0.08084597956526815 },\n { x: 0.00000649199999999934, y: 0.05367095367526733 },\n { x: 0.00000649299999999934, y: 0.023859798611992323 },\n { x: 0.000006493999999999339, y: 0.02445094556818196 },\n { x: 0.000006494999999999339, y: 0.058076718515805696 },\n { x: 0.000006495999999999339, y: 0.024087309043638257 },\n { x: 0.000006496999999999338, y: 0.017526350786061143 },\n { x: 0.000006497999999999338, y: 0.08816713968177811 },\n { x: 0.0000064989999999993376, y: 0.05780687646762531 },\n { x: 0.000006499999999999337, y: 0.021337911181062305 },\n { x: 0.000006500999999999337, y: 0.02666993284336484 },\n { x: 0.0000065019999999993365, y: 0.06613551085635809 },\n { x: 0.000006502999999999336, y: 0.0202143940581656 },\n { x: 0.000006503999999999336, y: 0.029377065763703823 },\n { x: 0.0000065049999999993355, y: 0.018441324592165874 },\n { x: 0.000006505999999999335, y: 0.06223105463837809 },\n { x: 0.000006506999999999335, y: 0.06157090510868055 },\n { x: 0.0000065079999999993344, y: 0.017371589196941872 },\n { x: 0.000006508999999999334, y: 0.05776934145479441 },\n { x: 0.000006509999999999334, y: 0.06657347622717026 },\n { x: 0.000006510999999999333, y: 0.061318227794359234 },\n { x: 0.000006511999999999333, y: 0.07927582001251911 },\n { x: 0.000006512999999999333, y: 0.04814067769189442 },\n { x: 0.000006513999999999332, y: 0.06302755705110645 },\n { x: 0.000006514999999999332, y: 0.06596573076238843 },\n { x: 0.000006515999999999332, y: 0.03220270087148301 },\n { x: 0.000006516999999999331, y: 0.06211336414397774 },\n { x: 0.000006517999999999331, y: 0.07394601986110182 },\n { x: 0.000006518999999999331, y: 0.046239376959757876 },\n { x: 0.00000651999999999933, y: 0.02831218393796916 },\n { x: 0.00000652099999999933, y: 0.05304531000203788 },\n { x: 0.0000065219999999993296, y: 0.08922820058026253 },\n { x: 0.000006522999999999329, y: 0.05124316427105455 },\n { x: 0.000006523999999999329, y: 0.07627591101950841 },\n { x: 0.0000065249999999993285, y: 0.08066360506042243 },\n { x: 0.000006525999999999328, y: 0.07179380147369352 },\n { x: 0.000006526999999999328, y: 0.02480687957884062 },\n { x: 0.0000065279999999993275, y: 0.021273755837011084 },\n { x: 0.000006528999999999327, y: 0.07489078778425956 },\n { x: 0.000006529999999999327, y: 0.06088030469798052 },\n { x: 0.000006530999999999326, y: 0.03577063247838755 },\n { x: 0.000006531999999999326, y: 0.05945664488266624 },\n { x: 0.000006532999999999326, y: 0.09035637680538935 },\n { x: 0.000006533999999999325, y: 0.02843309567054169 },\n { x: 0.000006534999999999325, y: 0.048816212640917386 },\n { x: 0.000006535999999999325, y: 0.07913516249179729 },\n { x: 0.000006536999999999324, y: 0.07981189797965058 },\n { x: 0.000006537999999999324, y: 0.03664013490074804 },\n { x: 0.000006538999999999324, y: 0.08159447413230068 },\n { x: 0.000006539999999999323, y: 0.06426443283240951 },\n { x: 0.000006540999999999323, y: 0.020297878311369512 },\n { x: 0.000006541999999999323, y: 0.035898410098152936 },\n { x: 0.000006542999999999322, y: 0.0831971012431946 },\n { x: 0.000006543999999999322, y: 0.05708443488769442 },\n { x: 0.0000065449999999993215, y: 0.08713593364779015 },\n { x: 0.000006545999999999321, y: 0.04202631502534762 },\n { x: 0.000006546999999999321, y: 0.05461769354692221 },\n { x: 0.0000065479999999993205, y: 0.0179019812571889 },\n { x: 0.00000654899999999932, y: 0.0875155514401971 },\n { x: 0.00000654999999999932, y: 0.06425957959897101 },\n { x: 0.0000065509999999993195, y: 0.046251172923622776 },\n { x: 0.000006551999999999319, y: 0.029980503464713173 },\n { x: 0.000006552999999999319, y: 0.02893852916696471 },\n { x: 0.000006553999999999318, y: 0.07324678748096107 },\n { x: 0.000006554999999999318, y: 0.05128337684142053 },\n { x: 0.000006555999999999318, y: 0.035600802250349686 },\n { x: 0.000006556999999999317, y: 0.03443441481874935 },\n { x: 0.000006557999999999317, y: 0.07770959676123096 },\n { x: 0.000006558999999999317, y: 0.06740239748346287 },\n { x: 0.000006559999999999316, y: 0.07194445106461768 },\n { x: 0.000006560999999999316, y: 0.04722084254496357 },\n { x: 0.000006561999999999316, y: 0.09140163212467195 },\n { x: 0.000006562999999999315, y: 0.05132117729427984 },\n { x: 0.000006563999999999315, y: 0.07033220137084278 },\n { x: 0.0000065649999999993146, y: 0.040721305381931514 },\n { x: 0.000006565999999999314, y: 0.08303297882519378 },\n { x: 0.000006566999999999314, y: 0.07719776614074321 },\n { x: 0.0000065679999999993135, y: 0.03907063497194076 },\n { x: 0.000006568999999999313, y: 0.04572476870854561 },\n { x: 0.000006569999999999313, y: 0.08706548161918992 },\n { x: 0.0000065709999999993125, y: 0.04209809238424989 },\n { x: 0.000006571999999999312, y: 0.0542282542306921 },\n { x: 0.000006572999999999312, y: 0.06573974563496592 },\n { x: 0.0000065739999999993114, y: 0.07446134294254575 },\n { x: 0.000006574999999999311, y: 0.03838098283029383 },\n { x: 0.000006575999999999311, y: 0.061309893813799095 },\n { x: 0.00000657699999999931, y: 0.020204260388163253 },\n { x: 0.00000657799999999931, y: 0.02446463378367484 },\n { x: 0.00000657899999999931, y: 0.08037963567040077 },\n { x: 0.000006579999999999309, y: 0.027176270448606276 },\n { x: 0.000006580999999999309, y: 0.031547539426840715 },\n { x: 0.000006581999999999309, y: 0.06215955811940999 },\n { x: 0.000006582999999999308, y: 0.03308332315323817 },\n { x: 0.000006583999999999308, y: 0.04132478439500193 },\n { x: 0.000006584999999999308, y: 0.019064010549246883 },\n { x: 0.000006585999999999307, y: 0.020763900921007133 },\n { x: 0.000006586999999999307, y: 0.06315736507988125 },\n { x: 0.0000065879999999993066, y: 0.058280426933191694 },\n { x: 0.000006588999999999306, y: 0.08397856946697094 },\n { x: 0.000006589999999999306, y: 0.028718799199745567 },\n { x: 0.0000065909999999993055, y: 0.025324353945128678 },\n { x: 0.000006591999999999305, y: 0.034153840975273374 },\n { x: 0.000006592999999999305, y: 0.08458276502145204 },\n { x: 0.0000065939999999993045, y: 0.03142737887232128 },\n { x: 0.000006594999999999304, y: 0.02270915920406931 },\n { x: 0.000006595999999999304, y: 0.08934022619419905 },\n { x: 0.0000065969999999993034, y: 0.059282199100881824 },\n { x: 0.000006597999999999303, y: 0.09098396719235749 },\n { x: 0.000006598999999999303, y: 0.09327598186609257 },\n { x: 0.000006599999999999302, y: 0.05000674571010387 },\n { x: 0.000006600999999999302, y: 0.09278398603928825 },\n { x: 0.000006601999999999302, y: 0.05872084558411532 },\n { x: 0.000006602999999999301, y: 0.06528783711110878 },\n { x: 0.000006603999999999301, y: 0.04678761566839875 },\n { x: 0.000006604999999999301, y: 0.018555520444162858 },\n { x: 0.0000066059999999993, y: 0.022593591084810995 },\n { x: 0.0000066069999999993, y: 0.05803950729103298 },\n { x: 0.0000066079999999993, y: 0.025626477168597714 },\n { x: 0.000006608999999999299, y: 0.08070960098879633 },\n { x: 0.000006609999999999299, y: 0.08876092346981428 },\n { x: 0.0000066109999999992985, y: 0.019714923115309153 },\n { x: 0.000006611999999999298, y: 0.03655315394470019 },\n { x: 0.000006612999999999298, y: 0.058768526726104435 },\n { x: 0.0000066139999999992975, y: 0.08300652299730556 },\n { x: 0.000006614999999999297, y: 0.0812212686994408 },\n { x: 0.000006615999999999297, y: 0.08235875837698083 },\n { x: 0.0000066169999999992965, y: 0.04228075088395904 },\n { x: 0.000006617999999999296, y: 0.03793583328953068 },\n { x: 0.000006618999999999296, y: 0.04315415158681671 },\n { x: 0.000006619999999999295, y: 0.03726565522943924 },\n { x: 0.000006620999999999295, y: 0.08070669759231866 },\n { x: 0.000006621999999999295, y: 0.07769573251050269 },\n { x: 0.000006622999999999294, y: 0.08921752241973921 },\n { x: 0.000006623999999999294, y: 0.03128238110072391 },\n { x: 0.000006624999999999294, y: 0.01721029167577493 },\n { x: 0.000006625999999999293, y: 0.05723544751758841 },\n { x: 0.000006626999999999293, y: 0.051881128344731825 },\n { x: 0.000006627999999999293, y: 0.05217879659141306 },\n { x: 0.000006628999999999292, y: 0.04549704026830262 },\n { x: 0.000006629999999999292, y: 0.02669185959900858 },\n { x: 0.000006630999999999292, y: 0.03479811617691764 },\n { x: 0.000006631999999999291, y: 0.03951184780065229 },\n { x: 0.000006632999999999291, y: 0.029993099850985402 },\n { x: 0.0000066339999999992905, y: 0.018476396861959607 },\n { x: 0.00000663499999999929, y: 0.028381656121401238 },\n { x: 0.00000663599999999929, y: 0.027331687982021808 },\n { x: 0.0000066369999999992895, y: 0.026186655466722067 },\n { x: 0.000006637999999999289, y: 0.06741028807470141 },\n { x: 0.000006638999999999289, y: 0.029068371511625574 },\n { x: 0.0000066399999999992884, y: 0.036151874573342846 },\n { x: 0.000006640999999999288, y: 0.015071383618725176 },\n { x: 0.000006641999999999288, y: 0.08487926903570259 },\n { x: 0.000006642999999999287, y: 0.06660559132040406 },\n { x: 0.000006643999999999287, y: 0.05126897759859051 },\n { x: 0.000006644999999999287, y: 0.09044476978706817 },\n { x: 0.000006645999999999286, y: 0.02828579676115864 },\n { x: 0.000006646999999999286, y: 0.047062694483223165 },\n { x: 0.000006647999999999286, y: 0.02140772230832292 },\n { x: 0.000006648999999999285, y: 0.025325084247527562 },\n { x: 0.000006649999999999285, y: 0.027481744685395403 },\n { x: 0.000006650999999999285, y: 0.06800732863448657 },\n { x: 0.000006651999999999284, y: 0.03582835183822167 },\n { x: 0.000006652999999999284, y: 0.022237280687866536 },\n { x: 0.0000066539999999992836, y: 0.05978459112406473 },\n { x: 0.000006654999999999283, y: 0.04967244341369067 },\n { x: 0.000006655999999999283, y: 0.05787677592480175 },\n { x: 0.0000066569999999992825, y: 0.03604175383411775 },\n { x: 0.000006657999999999282, y: 0.040042575886865904 },\n { x: 0.000006658999999999282, y: 0.05066170268338957 },\n { x: 0.0000066599999999992815, y: 0.01270411777358288 },\n { x: 0.000006660999999999281, y: 0.06971884054768734 },\n { x: 0.000006661999999999281, y: 0.07718505234861876 },\n { x: 0.0000066629999999992804, y: 0.05218504220622441 },\n { x: 0.00000666399999999928, y: 0.06976560288814769 },\n { x: 0.00000666499999999928, y: 0.05667453203715078 },\n { x: 0.000006665999999999279, y: 0.026637864211289546 },\n { x: 0.000006666999999999279, y: 0.07519020661049906 },\n { x: 0.000006667999999999279, y: 0.03373591851412544 },\n { x: 0.000006668999999999278, y: 0.05871875329735457 },\n { x: 0.000006669999999999278, y: 0.05249226260424004 },\n { x: 0.000006670999999999278, y: 0.03008402386118704 },\n { x: 0.000006671999999999277, y: 0.023328607461390958 },\n { x: 0.000006672999999999277, y: 0.05052351388118914 },\n { x: 0.000006673999999999277, y: 0.08731694211060591 },\n { x: 0.000006674999999999276, y: 0.08250853749163618 },\n { x: 0.000006675999999999276, y: 0.02117759276123988 },\n { x: 0.0000066769999999992756, y: 0.010891706143290658 },\n { x: 0.000006677999999999275, y: 0.0743095804781936 },\n { x: 0.000006678999999999275, y: 0.03514161377413789 },\n { x: 0.0000066799999999992745, y: 0.04290460582264214 },\n { x: 0.000006680999999999274, y: 0.0813064144386495 },\n { x: 0.000006681999999999274, y: 0.034322107441752826 },\n { x: 0.0000066829999999992735, y: 0.02911906667974212 },\n { x: 0.000006683999999999273, y: 0.026817545285668366 },\n { x: 0.000006684999999999273, y: 0.07765401239167519 },\n { x: 0.000006685999999999272, y: 0.047932422257283294 },\n { x: 0.000006686999999999272, y: 0.046723730309280315 },\n { x: 0.000006687999999999272, y: 0.04308656863496711 },\n { x: 0.000006688999999999271, y: 0.05012884966660961 },\n { x: 0.000006689999999999271, y: 0.008701059997465281 },\n { x: 0.000006690999999999271, y: 0.06565977025752676 },\n { x: 0.00000669199999999927, y: 0.02701788291748621 },\n { x: 0.00000669299999999927, y: 0.01842089123992971 },\n { x: 0.00000669399999999927, y: 0.03175556372572317 },\n { x: 0.000006694999999999269, y: 0.013144581379584859 },\n { x: 0.000006695999999999269, y: 0.010171445506706185 },\n { x: 0.000006696999999999269, y: 0.030494140203653847 },\n { x: 0.000006697999999999268, y: 0.019168412713673515 },\n { x: 0.000006698999999999268, y: 0.0588775391951756 },\n { x: 0.0000066999999999992675, y: 0.03947080348248387 },\n { x: 0.000006700999999999267, y: 0.04550236618292305 },\n { x: 0.000006701999999999267, y: 0.07513724035404296 },\n { x: 0.0000067029999999992665, y: 0.03954867149756552 },\n { x: 0.000006703999999999266, y: 0.0783492925058698 },\n { x: 0.000006704999999999266, y: 0.06201981178776182 },\n { x: 0.0000067059999999992655, y: 0.04663040394064163 },\n { x: 0.000006706999999999265, y: 0.06349328099601786 },\n { x: 0.000006707999999999265, y: 0.026975515351521415 },\n { x: 0.000006708999999999264, y: 0.06090891113693787 },\n { x: 0.000006709999999999264, y: 0.049654131230544914 },\n { x: 0.000006710999999999264, y: 0.022851119502501172 },\n { x: 0.000006711999999999263, y: 0.02088492254177188 },\n { x: 0.000006712999999999263, y: 0.055585485915697765 },\n { x: 0.000006713999999999263, y: 0.025296312557243728 },\n { x: 0.000006714999999999262, y: 0.03849650518682331 },\n { x: 0.000006715999999999262, y: 0.0077917455698893814 },\n { x: 0.000006716999999999262, y: 0.07835032188240443 },\n { x: 0.000006717999999999261, y: 0.027770170367717714 },\n { x: 0.000006718999999999261, y: 0.06066201906908342 },\n { x: 0.0000067199999999992606, y: 0.030517901043739547 },\n { x: 0.00000672099999999926, y: 0.056499144242581636 },\n { x: 0.00000672199999999926, y: 0.064113522345825 },\n { x: 0.0000067229999999992595, y: 0.016975226568704843 },\n { x: 0.000006723999999999259, y: 0.07211764817401575 },\n { x: 0.000006724999999999259, y: 0.03542128610406134 },\n { x: 0.0000067259999999992585, y: 0.012672806144716445 },\n { x: 0.000006726999999999258, y: 0.01129136696600895 },\n { x: 0.000006727999999999258, y: 0.02398171387662073 },\n { x: 0.0000067289999999992574, y: 0.035609124528916826 },\n { x: 0.000006729999999999257, y: 0.049748607478066004 },\n { x: 0.000006730999999999257, y: 0.016746402290466342 },\n { x: 0.000006731999999999256, y: 0.011479534279205578 },\n { x: 0.000006732999999999256, y: 0.06833964599564195 },\n { x: 0.000006733999999999256, y: 0.05494567726464046 },\n { x: 0.000006734999999999255, y: 0.027107804797420584 },\n { x: 0.000006735999999999255, y: 0.03646251899572257 },\n { x: 0.000006736999999999255, y: 0.025826576927660015 },\n { x: 0.000006737999999999254, y: 0.06451111298584158 },\n { x: 0.000006738999999999254, y: 0.0016097036867522008 },\n { x: 0.000006739999999999254, y: 0.07428619653831985 },\n { x: 0.000006740999999999253, y: 0.043591844627497496 },\n { x: 0.000006741999999999253, y: 0.03311659009320734 },\n { x: 0.0000067429999999992526, y: 0.06941286838123303 },\n { x: 0.000006743999999999252, y: 0.03392516106371307 },\n { x: 0.000006744999999999252, y: 0.032212252713333514 },\n { x: 0.0000067459999999992515, y: 0.06048286137249939 },\n { x: 0.000006746999999999251, y: 0.010777915386479618 },\n { x: 0.000006747999999999251, y: 0.06048817324618828 },\n { x: 0.0000067489999999992505, y: 0.06444034242208135 },\n { x: 0.00000674999999999925, y: 0.053981213931349026 },\n { x: 0.00000675099999999925, y: 0.05437619773877322 },\n { x: 0.0000067519999999992494, y: 0.06943790084777152 },\n { x: 0.000006752999999999249, y: 0.06523570785869741 },\n { x: 0.000006753999999999249, y: 0.0133220440000663 },\n { x: 0.000006754999999999248, y: 0.0022867206273653046 },\n { x: 0.000006755999999999248, y: 0.015295601262259817 },\n { x: 0.000006756999999999248, y: 0.014171319254136991 },\n { x: 0.000006757999999999247, y: 0.005827967405664533 },\n { x: 0.000006758999999999247, y: 0.052880339457167774 },\n { x: 0.000006759999999999247, y: 0.027459893341925327 },\n { x: 0.000006760999999999246, y: 0.027603399153189975 },\n { x: 0.000006761999999999246, y: 0.05125553579388497 },\n { x: 0.000006762999999999246, y: 0.04532808889035408 },\n { x: 0.000006763999999999245, y: 0.07762862013776534 },\n { x: 0.000006764999999999245, y: 0.00812835295241934 },\n { x: 0.0000067659999999992445, y: 0.05787835389487288 },\n { x: 0.000006766999999999244, y: 0.00005722166221922009 },\n { x: 0.000006767999999999244, y: 0.03574146792469127 },\n { x: 0.0000067689999999992435, y: 0.058573616765871375 },\n { x: 0.000006769999999999243, y: 0.02063964154661787 },\n { x: 0.000006770999999999243, y: 0.05624710737827152 },\n { x: 0.0000067719999999992425, y: 0.05159716825480599 },\n { x: 0.000006772999999999242, y: 0.03527082636897392 },\n { x: 0.000006773999999999242, y: 0.06259912319640658 },\n { x: 0.000006774999999999241, y: 0.03705860307566 },\n { x: 0.000006775999999999241, y: 0.06881709437562457 },\n { x: 0.000006776999999999241, y: 0.05255449916882394 },\n { x: 0.00000677799999999924, y: 0.049091532761753105 },\n { x: 0.00000677899999999924, y: 0.04330094639307208 },\n { x: 0.00000677999999999924, y: 0.06329856296844617 },\n { x: 0.000006780999999999239, y: 0.001152704587675725 },\n { x: 0.000006781999999999239, y: 0.01904415833388447 },\n { x: 0.000006782999999999239, y: 0.0004905545842852493 },\n { x: 0.000006783999999999238, y: 0.04994034461880081 },\n { x: 0.000006784999999999238, y: 0.011881267974021198 },\n { x: 0.000006785999999999238, y: -0.008485315716305689 },\n { x: 0.000006786999999999237, y: 0.03067615093788759 },\n { x: 0.000006787999999999237, y: 0.00829903377531432 },\n { x: 0.0000067889999999992365, y: 0.020878114894186305 },\n { x: 0.000006789999999999236, y: 0.03629258179828464 },\n { x: 0.000006790999999999236, y: -0.0033046148873569423 },\n { x: 0.0000067919999999992355, y: 0.05868112879294476 },\n { x: 0.000006792999999999235, y: 0.04006335820190326 },\n { x: 0.000006793999999999235, y: 0.05359167612394408 },\n { x: 0.0000067949999999992344, y: 0.03498120097746516 },\n { x: 0.000006795999999999234, y: 0.0048175227620432665 },\n { x: 0.000006796999999999234, y: -0.009611204817788231 },\n { x: 0.000006797999999999233, y: 0.008375485433662025 },\n { x: 0.000006798999999999233, y: 0.013118077844478588 },\n { x: 0.000006799999999999233, y: 0.053712378873269635 },\n { x: 0.000006800999999999232, y: 0.045323314761307194 },\n { x: 0.000006801999999999232, y: 0.022183757170687584 },\n { x: 0.000006802999999999232, y: -0.012381966518908442 },\n { x: 0.000006803999999999231, y: -0.0073737137346684516 },\n { x: 0.000006804999999999231, y: 0.049181044028927486 },\n { x: 0.000006805999999999231, y: 0.03129782905087034 },\n { x: 0.00000680699999999923, y: 0.0055740927423358275 },\n { x: 0.00000680799999999923, y: 0.034889432069875215 },\n { x: 0.0000068089999999992296, y: 0.05039001750848164 },\n { x: 0.000006809999999999229, y: 0.041198502125301746 },\n { x: 0.000006810999999999229, y: 0.01309683310600402 },\n { x: 0.0000068119999999992285, y: 0.047670306391785586 },\n { x: 0.000006812999999999228, y: 0.04036914446450037 },\n { x: 0.000006813999999999228, y: -0.0012850359263709074 },\n { x: 0.0000068149999999992275, y: 0.0009164287934609223 },\n { x: 0.000006815999999999227, y: 0.05645263510938367 },\n { x: 0.000006816999999999227, y: -0.0009033625701156192 },\n { x: 0.0000068179999999992264, y: 0.031356032643932996 },\n { x: 0.000006818999999999226, y: 0.03782320792507227 },\n { x: 0.000006819999999999226, y: 0.020966300320222977 },\n { x: 0.000006820999999999225, y: 0.020916466123777667 },\n { x: 0.000006821999999999225, y: -0.0056639066626141335 },\n { x: 0.000006822999999999225, y: 0.011657813052464057 },\n { x: 0.000006823999999999224, y: -0.009349043463165646 },\n { x: 0.000006824999999999224, y: -0.0007331412969517337 },\n { x: 0.000006825999999999224, y: 0.046444624944658466 },\n { x: 0.000006826999999999223, y: -0.014992364429491659 },\n { x: 0.000006827999999999223, y: -0.007277063460616441 },\n { x: 0.000006828999999999223, y: 0.03175469110351299 },\n { x: 0.000006829999999999222, y: 0.046744922064786726 },\n { x: 0.000006830999999999222, y: 0.05391414619852801 },\n { x: 0.0000068319999999992216, y: -0.012277591135640635 },\n { x: 0.000006832999999999221, y: 0.029332863818688173 },\n { x: 0.000006833999999999221, y: 0.02491261382771222 },\n { x: 0.0000068349999999992205, y: 0.006701204104819418 },\n { x: 0.00000683599999999922, y: -0.014269809065501952 },\n { x: 0.00000683699999999922, y: 0.024280266586300007 },\n { x: 0.0000068379999999992195, y: 0.015706307285897954 },\n { x: 0.000006838999999999219, y: 0.034984544870718115 },\n { x: 0.000006839999999999219, y: -0.0031555500339514736 },\n { x: 0.000006840999999999218, y: -0.02140291116347397 },\n { x: 0.000006841999999999218, y: 0.02295995706224775 },\n { x: 0.000006842999999999218, y: -0.014317446017972153 },\n { x: 0.000006843999999999217, y: 0.008941496815885375 },\n { x: 0.000006844999999999217, y: 0.020875252280359604 },\n { x: 0.000006845999999999217, y: 0.041313360304384 },\n { x: 0.000006846999999999216, y: 0.019969348311015107 },\n { x: 0.000006847999999999216, y: -0.0053965250253359565 },\n { x: 0.000006848999999999216, y: 0.01865547170239039 },\n { x: 0.000006849999999999215, y: 0.03462019196760992 },\n { x: 0.000006850999999999215, y: 0.049897271984463275 },\n { x: 0.000006851999999999215, y: 0.031844757559880046 },\n { x: 0.000006852999999999214, y: 0.03180402989186906 },\n { x: 0.000006853999999999214, y: 0.0028756311844385114 },\n { x: 0.0000068549999999992135, y: 0.035501389587038294 },\n { x: 0.000006855999999999213, y: 0.016499132294274445 },\n { x: 0.000006856999999999213, y: -0.02068491826440337 },\n { x: 0.0000068579999999992125, y: 0.016411326028772794 },\n { x: 0.000006858999999999212, y: 0.019035276579471204 },\n { x: 0.000006859999999999212, y: 0.027749543969452596 },\n { x: 0.0000068609999999992115, y: 0.03295777707783322 },\n { x: 0.000006861999999999211, y: 0.03513657188159025 },\n { x: 0.000006862999999999211, y: 0.048866889875744175 },\n { x: 0.00000686399999999921, y: -0.006668855860339504 },\n { x: 0.00000686499999999921, y: 0.04290454999681993 },\n { x: 0.00000686599999999921, y: -0.01959733989371077 },\n { x: 0.000006866999999999209, y: -0.020779629473176475 },\n { x: 0.000006867999999999209, y: 0.023637894392031674 },\n { x: 0.000006868999999999209, y: 0.03385386724758168 },\n { x: 0.000006869999999999208, y: 0.010396663832189 },\n { x: 0.000006870999999999208, y: 0.037656001404793124 },\n { x: 0.000006871999999999208, y: -0.011383990017886049 },\n { x: 0.000006872999999999207, y: -0.01971684570146081 },\n { x: 0.000006873999999999207, y: -0.01314083213039054 },\n { x: 0.0000068749999999992066, y: -0.0008842984672737253 },\n { x: 0.000006875999999999206, y: 0.01757666764891804 },\n { x: 0.000006876999999999206, y: -0.018682286597387722 },\n { x: 0.0000068779999999992055, y: -0.011277780786669741 },\n { x: 0.000006878999999999205, y: 0.03216914217010632 },\n { x: 0.000006879999999999205, y: 0.03994438390095344 },\n { x: 0.0000068809999999992045, y: 0.04452788155445453 },\n { x: 0.000006881999999999204, y: -0.01799272016628918 },\n { x: 0.000006882999999999204, y: 0.030513261691829153 },\n { x: 0.0000068839999999992034, y: -0.02034891539588728 },\n { x: 0.000006884999999999203, y: 0.03531840848124036 },\n { x: 0.000006885999999999203, y: -0.004137995724610643 },\n { x: 0.000006886999999999202, y: 0.02202887871276676 },\n { x: 0.000006887999999999202, y: 0.01598934242188037 },\n { x: 0.000006888999999999202, y: 0.03172862931613933 },\n { x: 0.000006889999999999201, y: -0.029085677106199727 },\n { x: 0.000006890999999999201, y: 0.004708645564812092 },\n { x: 0.000006891999999999201, y: 0.012453629007816804 },\n { x: 0.0000068929999999992, y: -0.02209286997299418 },\n { x: 0.0000068939999999992, y: 0.0021766111396465046 },\n { x: 0.0000068949999999992, y: 0.011808136546249072 },\n { x: 0.000006895999999999199, y: -0.027012926706039622 },\n { x: 0.000006896999999999199, y: 0.03071777292079832 },\n { x: 0.0000068979999999991986, y: 0.023087913514500662 },\n { x: 0.000006898999999999198, y: -0.010069489902871155 },\n { x: 0.000006899999999999198, y: 0.016150732302542655 },\n { x: 0.0000069009999999991975, y: -0.006928486441639299 },\n { x: 0.000006901999999999197, y: -0.007955503778157211 },\n { x: 0.000006902999999999197, y: -0.006818961817095659 },\n { x: 0.0000069039999999991965, y: -0.017460829758268518 },\n { x: 0.000006904999999999196, y: -0.03641038756830142 },\n { x: 0.000006905999999999196, y: 0.02368185637868401 },\n { x: 0.0000069069999999991954, y: 0.017469355197813615 },\n { x: 0.000006907999999999195, y: -0.010539293853163356 },\n { x: 0.000006908999999999195, y: 0.00295929325578596 },\n { x: 0.000006909999999999194, y: 0.010077781168484744 },\n { x: 0.000006910999999999194, y: -0.02995143317271735 },\n { x: 0.000006911999999999194, y: 0.007371694424411116 },\n { x: 0.000006912999999999193, y: 0.01483058744880288 },\n { x: 0.000006913999999999193, y: 0.002321405457363832 },\n { x: 0.000006914999999999193, y: 0.028923444459524852 },\n { x: 0.000006915999999999192, y: -0.031668502376391156 },\n { x: 0.000006916999999999192, y: -0.038433238939403314 },\n { x: 0.000006917999999999192, y: -0.009257565061804562 },\n { x: 0.000006918999999999191, y: 0.029871206483255024 },\n { x: 0.000006919999999999191, y: -0.019732121328866543 },\n { x: 0.0000069209999999991905, y: -0.004832807325529261 },\n { x: 0.00000692199999999919, y: -0.011501015698792898 },\n { x: 0.00000692299999999919, y: 0.0005716606069124815 },\n { x: 0.0000069239999999991895, y: 0.012905974926458603 },\n { x: 0.000006924999999999189, y: 0.00963045083130953 },\n { x: 0.000006925999999999189, y: -0.01903203793215653 },\n { x: 0.0000069269999999991885, y: -0.00324002622675829 },\n { x: 0.000006927999999999188, y: -0.03421098551309031 },\n { x: 0.000006928999999999188, y: 0.012672705578906544 },\n { x: 0.000006929999999999187, y: -0.028807236568848905 },\n { x: 0.000006930999999999187, y: 0.025800673346582856 },\n { x: 0.000006931999999999187, y: 0.014925093901099501 },\n { x: 0.000006932999999999186, y: -0.036405981467012745 },\n { x: 0.000006933999999999186, y: 0.02613582272330009 },\n { x: 0.000006934999999999186, y: -0.00514057684847188 },\n { x: 0.000006935999999999185, y: 0.00762542438893467 },\n { x: 0.000006936999999999185, y: 0.02006078277101487 },\n { x: 0.000006937999999999185, y: 0.0030558495060399203 },\n { x: 0.000006938999999999184, y: -0.04183830656446721 },\n { x: 0.000006939999999999184, y: -0.041141143111973255 },\n { x: 0.000006940999999999184, y: 0.00923344413621506 },\n { x: 0.000006941999999999183, y: -0.042103722017635264 },\n { x: 0.000006942999999999183, y: -0.029739557187525353 },\n { x: 0.0000069439999999991825, y: 0.0035900269794085157 },\n { x: 0.000006944999999999182, y: 0.027688334942700357 },\n { x: 0.000006945999999999182, y: -0.022283724683294065 },\n { x: 0.0000069469999999991815, y: -0.012126441675281936 },\n { x: 0.000006947999999999181, y: 0.005805539729345693 },\n { x: 0.000006948999999999181, y: 0.018823056566876058 },\n { x: 0.0000069499999999991804, y: -0.028489276858616925 },\n { x: 0.00000695099999999918, y: -0.011037253980535369 },\n { x: 0.00000695199999999918, y: -0.033909825630598564 },\n { x: 0.000006952999999999179, y: 0.01025501287552421 },\n { x: 0.000006953999999999179, y: 0.026352610874657425 },\n { x: 0.000006954999999999179, y: -0.019756511086977083 },\n { x: 0.000006955999999999178, y: 0.020110696234778815 },\n { x: 0.000006956999999999178, y: -0.0161777898994257 },\n { x: 0.000006957999999999178, y: -0.0030566560948637545 },\n { x: 0.000006958999999999177, y: -0.028509888840408053 },\n { x: 0.000006959999999999177, y: -0.03369006679058259 },\n { x: 0.000006960999999999177, y: 0.022987502033360918 },\n { x: 0.000006961999999999176, y: -0.04388200418519528 },\n { x: 0.000006962999999999176, y: -0.04692694272467074 },\n { x: 0.0000069639999999991756, y: -0.04575858091312391 },\n { x: 0.000006964999999999175, y: -0.03987819675093809 },\n { x: 0.000006965999999999175, y: -0.006893041628724601 },\n { x: 0.0000069669999999991745, y: 0.01388871898043306 },\n { x: 0.000006967999999999174, y: -0.017156627123809262 },\n { x: 0.000006968999999999174, y: -0.015748393250597435 },\n { x: 0.0000069699999999991735, y: 0.003517438113924999 },\n { x: 0.000006970999999999173, y: 0.02567508840514402 },\n { x: 0.000006971999999999173, y: 0.006139298448128588 },\n { x: 0.0000069729999999991724, y: -0.021275732732150325 },\n { x: 0.000006973999999999172, y: -0.020466984014711084 },\n { x: 0.000006974999999999172, y: -0.04058978868653216 },\n { x: 0.000006975999999999171, y: -0.010730899510500103 },\n { x: 0.000006976999999999171, y: -0.01706371574852018 },\n { x: 0.000006977999999999171, y: 0.01821669313056408 },\n { x: 0.00000697899999999917, y: -0.04949738749354579 },\n { x: 0.00000697999999999917, y: -0.012688201628329843 },\n { x: 0.00000698099999999917, y: -0.035171143188626075 },\n { x: 0.000006981999999999169, y: -0.03566320032650792 },\n { x: 0.000006982999999999169, y: -0.03138093541169656 },\n { x: 0.000006983999999999169, y: 0.021408766536759223 },\n { x: 0.000006984999999999168, y: -0.04041440967309298 },\n { x: 0.000006985999999999168, y: -0.036794306877118 },\n { x: 0.0000069869999999991676, y: -0.048250300686051434 },\n { x: 0.000006987999999999167, y: 0.003083754793470332 },\n { x: 0.000006988999999999167, y: -0.010403872018696449 },\n { x: 0.0000069899999999991665, y: -0.021988155980480508 },\n { x: 0.000006990999999999166, y: 0.02167940743788266 },\n { x: 0.000006991999999999166, y: -0.017038882750054152 },\n { x: 0.0000069929999999991655, y: -0.0474108004866033 },\n { x: 0.000006993999999999165, y: 0.01740053179550391 },\n { x: 0.000006994999999999165, y: -0.03436640131679798 },\n { x: 0.000006995999999999164, y: 0.012792781268017358 },\n { x: 0.000006996999999999164, y: 0.013652428092638166 },\n { x: 0.000006997999999999164, y: -0.006365776499710256 },\n { x: 0.000006998999999999163, y: -0.03961267373351084 },\n { x: 0.000006999999999999163, y: -0.026601004989589616 },\n { x: 0.000007000999999999163, y: -0.05331467553135384 },\n { x: 0.000007001999999999162, y: -0.00743773531028512 },\n { x: 0.000007002999999999162, y: -0.04326924535873497 },\n { x: 0.000007003999999999162, y: 0.01391462328868744 },\n { x: 0.000007004999999999161, y: -0.0507862394791191 },\n { x: 0.000007005999999999161, y: -0.024548168799130948 },\n { x: 0.000007006999999999161, y: -0.003582853539372814 },\n { x: 0.00000700799999999916, y: -0.033513554757196765 },\n { x: 0.00000700899999999916, y: 0.008490602380985611 },\n { x: 0.0000070099999999991595, y: -0.03078461854497492 },\n { x: 0.000007010999999999159, y: 0.009916014085502245 },\n { x: 0.000007011999999999159, y: -0.03635278648527554 },\n { x: 0.0000070129999999991585, y: 0.008824236028896391 },\n { x: 0.000007013999999999158, y: 0.015460015616078356 },\n { x: 0.000007014999999999158, y: -0.05721065163322382 },\n { x: 0.0000070159999999991575, y: -0.0581606085246787 },\n { x: 0.000007016999999999157, y: 0.015480725547237024 },\n { x: 0.000007017999999999157, y: -0.04367203050670106 },\n { x: 0.000007018999999999156, y: 0.015902553263801734 },\n { x: 0.000007019999999999156, y: -0.045251731760343306 },\n { x: 0.000007020999999999156, y: -0.04234792113249486 },\n { x: 0.000007021999999999155, y: -0.03276867308801413 },\n { x: 0.000007022999999999155, y: -0.0254477933235239 },\n { x: 0.000007023999999999155, y: 0.008045648621476009 },\n { x: 0.000007024999999999154, y: -0.03611514829304199 },\n { x: 0.000007025999999999154, y: 0.011123840360883357 },\n { x: 0.000007026999999999154, y: -0.0006320132312783548 },\n { x: 0.000007027999999999153, y: -0.0002468823939073897 },\n { x: 0.000007028999999999153, y: -0.051312682441643984 },\n { x: 0.0000070299999999991526, y: 0.008575796762223444 },\n { x: 0.000007030999999999152, y: -0.04342383260015169 },\n { x: 0.000007031999999999152, y: -0.05809120125806678 },\n { x: 0.0000070329999999991515, y: 0.014682252269211642 },\n { x: 0.000007033999999999151, y: -0.020987747252629464 },\n { x: 0.000007034999999999151, y: -0.04552237951952589 },\n { x: 0.0000070359999999991505, y: -0.015689050435634455 },\n { x: 0.00000703699999999915, y: -0.02332516952738477 },\n { x: 0.00000703799999999915, y: -0.04345470590702909 },\n { x: 0.0000070389999999991494, y: 0.006974110658986815 },\n { x: 0.000007039999999999149, y: -0.002917784488151682 },\n { x: 0.000007040999999999149, y: -0.00009766176657031653 },\n { x: 0.000007041999999999148, y: -0.026212820767765852 },\n { x: 0.000007042999999999148, y: -0.012395035174435359 },\n { x: 0.000007043999999999148, y: -0.007238657858546889 },\n { x: 0.000007044999999999147, y: -0.018952000814731543 },\n { x: 0.000007045999999999147, y: -0.04822182088275705 },\n { x: 0.000007046999999999147, y: -0.04202621662980888 },\n { x: 0.000007047999999999146, y: -0.01656090514022061 },\n { x: 0.000007048999999999146, y: -0.06223769142156059 },\n { x: 0.000007049999999999146, y: 0.003475351263724457 },\n { x: 0.000007050999999999145, y: 0.002682878671534158 },\n { x: 0.000007051999999999145, y: -0.022352319203935156 },\n { x: 0.0000070529999999991446, y: -0.005865090743829588 },\n { x: 0.000007053999999999144, y: -0.026633564725836983 },\n { x: 0.000007054999999999144, y: -0.008315049372085513 },\n { x: 0.0000070559999999991435, y: 0.005340325522275594 },\n { x: 0.000007056999999999143, y: -0.03998123865577514 },\n { x: 0.000007057999999999143, y: -0.005556294352026227 },\n { x: 0.0000070589999999991425, y: -0.06104015975040558 },\n { x: 0.000007059999999999142, y: -0.04612807057618702 },\n { x: 0.000007060999999999142, y: -0.0012367990699482835 },\n { x: 0.0000070619999999991414, y: -0.020644598860761858 },\n { x: 0.000007062999999999141, y: -0.004526865444441603 },\n { x: 0.000007063999999999141, y: -0.003698581528721566 },\n { x: 0.00000706499999999914, y: -0.031047049772955818 },\n { x: 0.00000706599999999914, y: -0.035238982208296014 },\n { x: 0.00000706699999999914, y: -0.06007360010738125 },\n { x: 0.000007067999999999139, y: -0.05202383585836602 },\n { x: 0.000007068999999999139, y: -0.04534992759129865 },\n { x: 0.000007069999999999139, y: -0.04849272979750008 },\n { x: 0.000007070999999999138, y: -0.024449786783531362 },\n { x: 0.000007071999999999138, y: -0.0004632707085340283 },\n { x: 0.000007072999999999138, y: -0.005181876436927493 },\n { x: 0.000007073999999999137, y: -0.0670718476719244 },\n { x: 0.000007074999999999137, y: -0.05369220933872514 },\n { x: 0.0000070759999999991365, y: -0.013634828137791391 },\n { x: 0.000007076999999999136, y: -0.01348176225979391 },\n { x: 0.000007077999999999136, y: -0.06319996109691448 },\n { x: 0.0000070789999999991355, y: -0.02446413821773794 },\n { x: 0.000007079999999999135, y: -0.005965339827361055 },\n { x: 0.000007080999999999135, y: -0.018989862158202003 },\n { x: 0.0000070819999999991345, y: -0.05442680830631971 },\n { x: 0.000007082999999999134, y: -0.06351503748726114 },\n { x: 0.000007083999999999134, y: -0.0008492969133060795 },\n { x: 0.000007084999999999133, y: -0.06286760551505376 },\n { x: 0.000007085999999999133, y: -0.007980046828568493 },\n { x: 0.000007086999999999133, y: 0.003753466491430959 },\n { x: 0.000007087999999999132, y: -0.039103338809619435 },\n { x: 0.000007088999999999132, y: -0.0061880276770066925 },\n { x: 0.000007089999999999132, y: -0.024130627517706435 },\n { x: 0.000007090999999999131, y: -0.04958449519697073 },\n { x: 0.000007091999999999131, y: -0.06581330731676943 },\n { x: 0.000007092999999999131, y: -0.047475020765145357 },\n { x: 0.00000709399999999913, y: -0.0007349720283453785 },\n { x: 0.00000709499999999913, y: -0.04724638444497802 },\n { x: 0.00000709599999999913, y: -0.04061571332667874 },\n { x: 0.000007096999999999129, y: -0.032919381520749705 },\n { x: 0.000007097999999999129, y: -0.0004117683948429707 },\n { x: 0.0000070989999999991285, y: -0.02079315428139198 },\n { x: 0.000007099999999999128, y: -0.02075116389355871 },\n { x: 0.000007100999999999128, y: -0.013136611756866992 },\n { x: 0.0000071019999999991275, y: -0.016338004061063442 },\n { x: 0.000007102999999999127, y: -0.01598244384653738 },\n { x: 0.000007103999999999127, y: -0.06845888179046361 },\n { x: 0.0000071049999999991264, y: -0.01067028796133242 },\n { x: 0.000007105999999999126, y: 0.0048124545855526835 },\n { x: 0.000007106999999999126, y: -0.0008056857815244498 },\n { x: 0.000007107999999999125, y: 0.0015245366431565627 },\n { x: 0.000007108999999999125, y: -0.05843290603192919 },\n { x: 0.000007109999999999125, y: -0.03539143001123522 },\n { x: 0.000007110999999999124, y: -0.05101381369120115 },\n { x: 0.000007111999999999124, y: -0.04115810576041735 },\n { x: 0.000007112999999999124, y: -0.036330746454371385 },\n { x: 0.000007113999999999123, y: -0.0005477097989779259 },\n { x: 0.000007114999999999123, y: -0.026664565526610444 },\n { x: 0.000007115999999999123, y: -0.00018663579523094803 },\n { x: 0.000007116999999999122, y: -0.03671092664619317 },\n { x: 0.000007117999999999122, y: -0.0319224329250281 },\n { x: 0.0000071189999999991216, y: -0.05886167992186232 },\n { x: 0.000007119999999999121, y: 0.004120090479981867 },\n { x: 0.000007120999999999121, y: -0.04349386451359364 },\n { x: 0.0000071219999999991205, y: -0.0482379118937285 },\n { x: 0.00000712299999999912, y: -0.054413065032110214 },\n { x: 0.00000712399999999912, y: -0.06600582202729796 },\n { x: 0.0000071249999999991195, y: 0.000005398710760377845 },\n { x: 0.000007125999999999119, y: -0.01866201603489335 },\n { x: 0.000007126999999999119, y: -0.06508150005568639 },\n { x: 0.0000071279999999991184, y: -0.003489956014452466 },\n { x: 0.000007128999999999118, y: -0.022338664893217865 },\n { x: 0.000007129999999999118, y: -0.020587703309191095 },\n { x: 0.000007130999999999117, y: -0.016449690572163563 },\n { x: 0.000007131999999999117, y: -0.0713999553989835 },\n { x: 0.000007132999999999117, y: -0.008067742088819795 },\n { x: 0.000007133999999999116, y: -0.020750318151229942 },\n { x: 0.000007134999999999116, y: -0.02039084411859176 },\n { x: 0.000007135999999999116, y: 0.0011776394305581667 },\n { x: 0.000007136999999999115, y: -0.0005213731933800467 },\n { x: 0.000007137999999999115, y: -0.05257128758284135 },\n { x: 0.000007138999999999115, y: -0.031156320384517707 },\n { x: 0.000007139999999999114, y: -0.02279308828177954 },\n { x: 0.000007140999999999114, y: -0.06497222071233287 },\n { x: 0.0000071419999999991136, y: -0.016090193747867132 },\n { x: 0.000007142999999999113, y: -0.04957522545152335 },\n { x: 0.000007143999999999113, y: -0.06864915927040602 },\n { x: 0.0000071449999999991125, y: -0.05730300950379588 },\n { x: 0.000007145999999999112, y: -0.02145938891639651 },\n { x: 0.000007146999999999112, y: -0.059612543116384906 },\n { x: 0.0000071479999999991115, y: -0.04070761618414434 },\n { x: 0.000007148999999999111, y: -0.01582253325543915 },\n { x: 0.000007149999999999111, y: -0.004371868851906813 },\n { x: 0.00000715099999999911, y: -0.06897563483764135 },\n { x: 0.00000715199999999911, y: -0.010558383269704319 },\n { x: 0.00000715299999999911, y: -0.0017674460819464208 },\n { x: 0.000007153999999999109, y: -0.06818276419514893 },\n { x: 0.000007154999999999109, y: -0.04002506992522192 },\n { x: 0.000007155999999999109, y: -0.039106384803784394 },\n { x: 0.000007156999999999108, y: -0.007594511850956852 },\n { x: 0.000007157999999999108, y: -0.06152931848827739 },\n { x: 0.000007158999999999108, y: -0.033681951616014144 },\n { x: 0.000007159999999999107, y: -0.026679633263420037 },\n { x: 0.000007160999999999107, y: 0.0006899107037052835 },\n { x: 0.000007161999999999107, y: -0.05656240602732718 },\n { x: 0.000007162999999999106, y: -0.020311141032968126 },\n { x: 0.000007163999999999106, y: -0.06515701791028679 },\n { x: 0.0000071649999999991055, y: -0.06895090451275362 },\n { x: 0.000007165999999999105, y: -0.008225593243135251 },\n { x: 0.000007166999999999105, y: -0.04940683091425982 },\n { x: 0.0000071679999999991045, y: 0.00232082557761798 },\n { x: 0.000007168999999999104, y: -0.0167566290260804 },\n { x: 0.000007169999999999104, y: -0.042409612443961624 },\n { x: 0.0000071709999999991035, y: -0.02622725008868715 },\n { x: 0.000007171999999999103, y: -0.023300979202358768 },\n { x: 0.000007172999999999103, y: -0.09816182033976302 },\n { x: 0.000007173999999999102, y: -0.027475975863319922 },\n { x: 0.000007174999999999102, y: -0.03201053708214151 },\n { x: 0.000007175999999999102, y: -0.007706043901475865 },\n { x: 0.000007176999999999101, y: -0.0731218120830089 },\n { x: 0.000007177999999999101, y: -0.07047043120395764 },\n { x: 0.000007178999999999101, y: -0.033543289799699894 },\n { x: 0.0000071799999999991, y: -0.03510544263893476 },\n { x: 0.0000071809999999991, y: -0.02598009951775661 },\n { x: 0.0000071819999999991, y: -0.05102729003417077 },\n { x: 0.000007182999999999099, y: -0.044220943177232484 },\n { x: 0.000007183999999999099, y: -0.05608530245906142 },\n { x: 0.0000071849999999990986, y: -0.006271533660653368 },\n { x: 0.000007185999999999098, y: -0.0005663094924309026 },\n { x: 0.000007186999999999098, y: -0.06745914451921917 },\n { x: 0.0000071879999999990975, y: 0.0018569311639203834 },\n { x: 0.000007188999999999097, y: 0.0018676048788437635 },\n { x: 0.000007189999999999097, y: -0.04559015904010526 },\n { x: 0.0000071909999999990965, y: -0.03831717386090104 },\n { x: 0.000007191999999999096, y: -0.07439777170060198 },\n { x: 0.000007192999999999096, y: -0.07043170288755213 },\n { x: 0.0000071939999999990954, y: -0.020558330935663182 },\n { x: 0.000007194999999999095, y: -0.03276958674214455 },\n { x: 0.000007195999999999095, y: -0.02030959632325691 },\n { x: 0.000007196999999999094, y: -0.03325692451992346 },\n { x: 0.000007197999999999094, y: -0.042061285644463 },\n { x: 0.000007198999999999094, y: -0.031217592884798574 },\n { x: 0.000007199999999999093, y: -0.052204385426676436 },\n { x: 0.000007200999999999093, y: -0.0731764336236671 },\n { x: 0.000007201999999999093, y: -0.04149670855601463 },\n { x: 0.000007202999999999092, y: -0.0647439686156653 },\n { x: 0.000007203999999999092, y: -0.021486267114066357 },\n { x: 0.000007204999999999092, y: -0.005138481425835291 },\n { x: 0.000007205999999999091, y: -0.07451304230237313 },\n { x: 0.000007206999999999091, y: -0.05497628421212668 },\n { x: 0.0000072079999999990906, y: -0.06433615995335952 },\n { x: 0.00000720899999999909, y: -0.030051444442295006 },\n { x: 0.00000720999999999909, y: -0.02287516496665612 },\n { x: 0.0000072109999999990895, y: -0.05527471299391242 },\n { x: 0.000007211999999999089, y: -0.0366822414755828 },\n { x: 0.000007212999999999089, y: -0.04629813516151624 },\n { x: 0.0000072139999999990885, y: -0.009873429374591972 },\n { x: 0.000007214999999999088, y: -0.05457364529072396 },\n { x: 0.000007215999999999088, y: -0.016324495543521216 },\n { x: 0.0000072169999999990874, y: -0.06788498424263945 },\n { x: 0.000007217999999999087, y: -0.04643206316024974 },\n { x: 0.000007218999999999087, y: -0.06839873383240357 },\n { x: 0.000007219999999999086, y: -0.044482676049630604 },\n { x: 0.000007220999999999086, y: -0.066599897522264 },\n { x: 0.000007221999999999086, y: -0.012602660575704364 },\n { x: 0.000007222999999999085, y: -0.01312911098588481 },\n { x: 0.000007223999999999085, y: -0.009756126175816025 },\n { x: 0.000007224999999999085, y: -0.019572539830613796 },\n { x: 0.000007225999999999084, y: -0.017282169356180477 },\n { x: 0.000007226999999999084, y: -0.05588622149709671 },\n { x: 0.000007227999999999084, y: -0.0319181223917204 },\n { x: 0.000007228999999999083, y: -0.02873308463785337 },\n { x: 0.000007229999999999083, y: -0.04711328623568554 },\n { x: 0.0000072309999999990825, y: -0.034514236708122946 },\n { x: 0.000007231999999999082, y: -0.0678602111585716 },\n { x: 0.000007232999999999082, y: -0.060309198680223185 },\n { x: 0.0000072339999999990815, y: -0.0011700067384117219 },\n { x: 0.000007234999999999081, y: -0.06157080325261845 },\n { x: 0.000007235999999999081, y: -0.035527707279226745 },\n { x: 0.0000072369999999990805, y: -0.04683480991382962 },\n { x: 0.00000723799999999908, y: -0.022069116434881842 },\n { x: 0.00000723899999999908, y: -0.048646766565729964 },\n { x: 0.000007239999999999079, y: -0.05017602241187144 },\n { x: 0.000007240999999999079, y: -0.007619300236317621 },\n { x: 0.000007241999999999079, y: -0.036026666114461765 },\n { x: 0.000007242999999999078, y: -0.007503725707290718 },\n { x: 0.000007243999999999078, y: -0.040453078589375434 },\n { x: 0.000007244999999999078, y: -0.04965943853564071 },\n { x: 0.000007245999999999077, y: -0.05183180374131115 },\n { x: 0.000007246999999999077, y: -0.0013592820216727572 },\n { x: 0.000007247999999999077, y: -0.04875086525302139 },\n { x: 0.000007248999999999076, y: -0.054776594121131436 },\n { x: 0.000007249999999999076, y: -0.001119077322421301 },\n { x: 0.000007250999999999076, y: -0.04946315121607191 },\n { x: 0.000007251999999999075, y: -0.046932301214086966 },\n { x: 0.000007252999999999075, y: -0.01844339432076955 },\n { x: 0.0000072539999999990745, y: -0.036046597201360865 },\n { x: 0.000007254999999999074, y: -0.06902305264522451 },\n { x: 0.000007255999999999074, y: -0.026575641423870998 },\n { x: 0.0000072569999999990735, y: -0.03599532803250995 },\n { x: 0.000007257999999999073, y: -0.013591971390709872 },\n { x: 0.000007258999999999073, y: -0.06557800945540092 },\n { x: 0.0000072599999999990724, y: -0.023609748791354426 },\n { x: 0.000007260999999999072, y: -0.02942454342789766 },\n { x: 0.000007261999999999072, y: -0.01285937942318674 },\n { x: 0.000007262999999999071, y: -0.030046031692851798 },\n { x: 0.000007263999999999071, y: -0.06377838719377696 },\n { x: 0.000007264999999999071, y: -0.07008301761452412 },\n { x: 0.00000726599999999907, y: -0.07184571001308271 },\n { x: 0.00000726699999999907, y: -0.00040319922835850563 },\n { x: 0.00000726799999999907, y: -0.06152685383348469 },\n { x: 0.000007268999999999069, y: -0.010046148492922131 },\n { x: 0.000007269999999999069, y: -0.020702638895373417 },\n { x: 0.000007270999999999069, y: -0.06781904873621691 },\n { x: 0.000007271999999999068, y: -0.028856109284528152 },\n { x: 0.000007272999999999068, y: 0.020051532148233048 },\n { x: 0.0000072739999999990676, y: -0.03294089443315309 },\n { x: 0.000007274999999999067, y: -0.06823420159741694 },\n { x: 0.000007275999999999067, y: -0.04715872046977922 },\n { x: 0.0000072769999999990665, y: -0.06182693551878753 },\n { x: 0.000007277999999999066, y: -0.02654279892887053 },\n { x: 0.000007278999999999066, y: -0.06450231029418176 },\n { x: 0.0000072799999999990655, y: 0.00018730673619885702 },\n { x: 0.000007280999999999065, y: 0.004437491259555969 },\n { x: 0.000007281999999999065, y: -0.033379181773633845 },\n { x: 0.0000072829999999990644, y: -0.00811025074228109 },\n { x: 0.000007283999999999064, y: -0.01932299440413382 },\n { x: 0.000007284999999999064, y: -0.062476493711495454 },\n { x: 0.000007285999999999063, y: -0.05633967496859482 },\n { x: 0.000007286999999999063, y: -0.05095558460029348 },\n { x: 0.000007287999999999063, y: -0.06169270358277662 },\n { x: 0.000007288999999999062, y: 0.004214057487375293 },\n { x: 0.000007289999999999062, y: -0.0314403193856731 },\n { x: 0.000007290999999999062, y: -0.04223928826216301 },\n { x: 0.000007291999999999061, y: -0.05218579916662878 },\n { x: 0.000007292999999999061, y: -0.06512995352023862 },\n { x: 0.000007293999999999061, y: -0.019280289348598385 },\n { x: 0.00000729499999999906, y: -0.010529166464689457 },\n { x: 0.00000729599999999906, y: -0.054191793012279596 },\n { x: 0.0000072969999999990596, y: 0.00341447104670501 },\n { x: 0.000007297999999999059, y: -0.061300984046850165 },\n { x: 0.000007298999999999059, y: -0.04801915952008483 },\n { x: 0.0000072999999999990585, y: -0.06163207442390853 },\n { x: 0.000007300999999999058, y: -0.026517169751005168 },\n { x: 0.000007301999999999058, y: -0.06827283557175418 },\n { x: 0.0000073029999999990575, y: -0.04333225738387995 },\n { x: 0.000007303999999999057, y: -0.019014867900510497 },\n { x: 0.000007304999999999057, y: -0.042787800777474995 },\n { x: 0.000007305999999999056, y: -0.05732084602202324 },\n { x: 0.000007306999999999056, y: -0.04722413410779244 },\n { x: 0.000007307999999999056, y: -0.05331884910020737 },\n { x: 0.000007308999999999055, y: -0.05369028352225893 },\n { x: 0.000007309999999999055, y: -0.014000733323174832 },\n { x: 0.000007310999999999055, y: -0.05651339213965757 },\n { x: 0.000007311999999999054, y: -0.05021771504216399 },\n { x: 0.000007312999999999054, y: -0.0674576824298019 },\n { x: 0.000007313999999999054, y: -0.00488150647327024 },\n { x: 0.000007314999999999053, y: -0.010434417514471415 },\n { x: 0.000007315999999999053, y: -0.0455467163632845 },\n { x: 0.000007316999999999053, y: -0.031997417874886316 },\n { x: 0.000007317999999999052, y: -0.002358351795812879 },\n { x: 0.000007318999999999052, y: -0.032794687231140894 },\n { x: 0.0000073199999999990515, y: 0.00498036922848083 },\n { x: 0.000007320999999999051, y: -0.059205743811512376 },\n { x: 0.000007321999999999051, y: 0.0031731552685313295 },\n { x: 0.0000073229999999990505, y: -0.06553022081679348 },\n { x: 0.00000732399999999905, y: -0.02630821224675649 },\n { x: 0.00000732499999999905, y: -0.06534531492579687 },\n { x: 0.0000073259999999990495, y: -0.06667356340977203 },\n { x: 0.000007326999999999049, y: -0.021080033149824675 },\n { x: 0.000007327999999999049, y: -0.021370518108956724 },\n { x: 0.000007328999999999048, y: -0.04579013271796882 },\n { x: 0.000007329999999999048, y: -0.01963070941772526 },\n { x: 0.000007330999999999048, y: -0.0017769243910953011 },\n { x: 0.000007331999999999047, y: -0.006390163308243206 },\n { x: 0.000007332999999999047, y: -0.014104190811848735 },\n { x: 0.000007333999999999047, y: -0.06104934852093748 },\n { x: 0.000007334999999999046, y: -0.024981775233572343 },\n { x: 0.000007335999999999046, y: -0.046500948214187154 },\n { x: 0.000007336999999999046, y: -0.038717687467909725 },\n { x: 0.000007337999999999045, y: -0.0062598823117806755 },\n { x: 0.000007338999999999045, y: -0.057163411645864054 },\n { x: 0.0000073399999999990446, y: -0.02316902345009852 },\n { x: 0.000007340999999999044, y: -0.03535388430589754 },\n { x: 0.000007341999999999044, y: -0.033194787939132483 },\n { x: 0.0000073429999999990435, y: -0.019869171345822282 },\n { x: 0.000007343999999999043, y: -0.017360930959795434 },\n { x: 0.000007344999999999043, y: -0.024607250401901627 },\n { x: 0.0000073459999999990425, y: -0.06327128041740664 },\n { x: 0.000007346999999999042, y: -0.06417892246293419 },\n { x: 0.000007347999999999042, y: -0.01785455424974962 },\n { x: 0.0000073489999999990414, y: 0.0030668403248644387 },\n { x: 0.000007349999999999041, y: -0.0032439513025625463 },\n { x: 0.000007350999999999041, y: -0.02058964230128615 },\n { x: 0.00000735199999999904, y: 0.0019649579833306598 },\n { x: 0.00000735299999999904, y: 0.0006424734532389405 },\n { x: 0.00000735399999999904, y: -0.042439142652943754 },\n { x: 0.000007354999999999039, y: -0.04806973094324732 },\n { x: 0.000007355999999999039, y: -0.03358593840910293 },\n { x: 0.000007356999999999039, y: -0.054136250512298936 },\n { x: 0.000007357999999999038, y: 0.002383695138218317 },\n { x: 0.000007358999999999038, y: -0.04287475697673759 },\n { x: 0.000007359999999999038, y: -0.016259981813938087 },\n { x: 0.000007360999999999037, y: 0.0024011171539192362 },\n { x: 0.000007361999999999037, y: -0.05720901087074616 },\n { x: 0.0000073629999999990366, y: 0.009931332279144355 },\n { x: 0.000007363999999999036, y: -0.001562856473653583 },\n { x: 0.000007364999999999036, y: -0.05241085908556514 },\n { x: 0.0000073659999999990355, y: -0.005895993464573628 },\n { x: 0.000007366999999999035, y: 0.01271480067304305 },\n { x: 0.000007367999999999035, y: -0.06059263713890752 },\n { x: 0.0000073689999999990345, y: -0.060055463644846256 },\n { x: 0.000007369999999999034, y: -0.02800740671090325 },\n { x: 0.000007370999999999034, y: -0.04924317423133233 },\n { x: 0.0000073719999999990334, y: -0.0617881403186811 },\n { x: 0.000007372999999999033, y: -0.0443199504506797 },\n { x: 0.000007373999999999033, y: 0.014030723300833811 },\n { x: 0.000007374999999999032, y: -0.05508856199787092 },\n { x: 0.000007375999999999032, y: 0.012688963124687445 },\n { x: 0.000007376999999999032, y: 0.004616942799878093 },\n { x: 0.000007377999999999031, y: -0.04175586614978387 },\n { x: 0.000007378999999999031, y: -0.013834914322985777 },\n { x: 0.000007379999999999031, y: -0.017223789589072433 },\n { x: 0.00000738099999999903, y: -0.009704489953258516 },\n { x: 0.00000738199999999903, y: -0.045797037612904434 },\n { x: 0.00000738299999999903, y: 0.004374736647417558 },\n { x: 0.000007383999999999029, y: 0.002699311262830021 },\n { x: 0.000007384999999999029, y: -0.011401949068785184 },\n { x: 0.0000073859999999990285, y: 0.011576793847585733 },\n { x: 0.000007386999999999028, y: 0.006822848264636281 },\n { x: 0.000007387999999999028, y: -0.04901639045102549 },\n { x: 0.0000073889999999990275, y: -0.006432331565351215 },\n { x: 0.000007389999999999027, y: -0.02934371453295898 },\n { x: 0.000007390999999999027, y: -0.018211033723946536 },\n { x: 0.0000073919999999990265, y: -0.026498710569875662 },\n { x: 0.000007392999999999026, y: -0.009706340944602156 },\n { x: 0.000007393999999999026, y: -0.014460503528586695 },\n { x: 0.000007394999999999025, y: -0.030389165750515854 },\n { x: 0.000007395999999999025, y: -0.04356653462251102 },\n { x: 0.000007396999999999025, y: 0.003292043599791135 },\n { x: 0.000007397999999999024, y: 0.016438158410479933 },\n { x: 0.000007398999999999024, y: -0.05687362787878322 },\n { x: 0.000007399999999999024, y: -0.0380985931069639 },\n { x: 0.000007400999999999023, y: 0.013965210059873664 },\n { x: 0.000007401999999999023, y: -0.03106620633414059 },\n { x: 0.000007402999999999023, y: -0.010542402449718116 },\n { x: 0.000007403999999999022, y: 0.014110691609459422 },\n { x: 0.000007404999999999022, y: -0.037852784459650075 },\n { x: 0.000007405999999999022, y: -0.023544119725373496 },\n { x: 0.000007406999999999021, y: 0.011490737773633197 },\n { x: 0.000007407999999999021, y: -0.014383899648944572 },\n { x: 0.0000074089999999990205, y: 0.010805690528233148 },\n { x: 0.00000740999999999902, y: 0.002869263427525283 },\n { x: 0.00000741099999999902, y: -0.018796968702294914 },\n { x: 0.0000074119999999990195, y: -0.05238256396814518 },\n { x: 0.000007412999999999019, y: -0.024113942804738442 },\n { x: 0.000007413999999999019, y: -0.03711348939954087 },\n { x: 0.0000074149999999990184, y: -0.03513189885138193 },\n { x: 0.000007415999999999018, y: -0.03094726632534426 },\n { x: 0.000007416999999999018, y: -0.046917484989736274 },\n { x: 0.000007417999999999017, y: -0.012055521211049618 },\n { x: 0.000007418999999999017, y: -0.005974042629585613 },\n { x: 0.000007419999999999017, y: -0.020695969397863254 },\n { x: 0.000007420999999999016, y: 0.0038074726994657554 },\n { x: 0.000007421999999999016, y: -0.009692356250001088 },\n { x: 0.000007422999999999016, y: 0.0032112933339301514 },\n { x: 0.000007423999999999015, y: -0.030543868427856828 },\n { x: 0.000007424999999999015, y: -0.033905980881533376 },\n { x: 0.000007425999999999015, y: 0.0028753468623225267 },\n { x: 0.000007426999999999014, y: -0.0032526842934471854 },\n { x: 0.000007427999999999014, y: -0.00251685038520184 },\n { x: 0.0000074289999999990136, y: -0.051886343585057254 },\n { x: 0.000007429999999999013, y: -0.02242221624925851 },\n { x: 0.000007430999999999013, y: 0.014810252834930239 },\n { x: 0.0000074319999999990125, y: -0.012795042673153354 },\n { x: 0.000007432999999999012, y: -0.034156727851912524 },\n { x: 0.000007433999999999012, y: 0.015542784896558103 },\n { x: 0.0000074349999999990115, y: 0.007799663182830971 },\n { x: 0.000007435999999999011, y: -0.027506886852384713 },\n { x: 0.000007436999999999011, y: -0.026278178011856765 },\n { x: 0.0000074379999999990104, y: -0.05327981105840306 },\n { x: 0.00000743899999999901, y: -0.009614204591109076 },\n { x: 0.00000743999999999901, y: -0.04685461688986286 },\n { x: 0.000007440999999999009, y: -0.04613772016630074 },\n { x: 0.000007441999999999009, y: -0.023813484103610606 },\n { x: 0.000007442999999999009, y: 0.019503401323730424 },\n { x: 0.000007443999999999008, y: -0.016178943271441756 },\n { x: 0.000007444999999999008, y: -0.04221617451891515 },\n { x: 0.000007445999999999008, y: -0.008322244472053857 },\n { x: 0.000007446999999999007, y: -0.016784004675501486 },\n { x: 0.000007447999999999007, y: 0.0206280093854243 },\n { x: 0.000007448999999999007, y: -0.0366815961304643 },\n { x: 0.000007449999999999006, y: -0.027226401899355025 },\n { x: 0.000007450999999999006, y: 0.024143156458077783 },\n { x: 0.0000074519999999990056, y: -0.011202393941574814 },\n { x: 0.000007452999999999005, y: -0.027791251024402663 },\n { x: 0.000007453999999999005, y: -0.022042573030777838 },\n { x: 0.0000074549999999990045, y: -0.03890564316841142 },\n { x: 0.000007455999999999004, y: -0.03315762378403287 },\n { x: 0.000007456999999999004, y: -0.047032878333595325 },\n { x: 0.0000074579999999990035, y: 0.008490278709715068 },\n { x: 0.000007458999999999003, y: -0.05026383719050988 },\n { x: 0.000007459999999999003, y: 0.011755637314889813 },\n { x: 0.000007460999999999002, y: 0.012063228527811021 },\n { x: 0.000007461999999999002, y: 0.01760047666943055 },\n { x: 0.000007462999999999002, y: 0.004782423488207331 },\n { x: 0.000007463999999999001, y: -0.013220204778171363 },\n { x: 0.000007464999999999001, y: -0.012474467972078369 },\n { x: 0.000007465999999999001, y: -0.00010112941245736355 },\n { x: 0.000007466999999999, y: 0.019849957090585825 },\n { x: 0.000007467999999999, y: -0.028526674274911422 },\n { x: 0.000007468999999999, y: -0.0367800334247735 },\n { x: 0.000007469999999998999, y: -0.04772225902819775 },\n { x: 0.000007470999999998999, y: 0.023846912362795056 },\n { x: 0.000007471999999998999, y: -0.037314787356605136 },\n { x: 0.000007472999999998998, y: -0.04558715473869202 },\n { x: 0.000007473999999998998, y: 0.026508529307455175 },\n { x: 0.0000074749999999989975, y: -0.012872266463990981 },\n { x: 0.000007475999999998997, y: -0.018841512370495396 },\n { x: 0.000007476999999998997, y: -0.0024487998777189875 },\n { x: 0.0000074779999999989965, y: -0.018101179289549765 },\n { x: 0.000007478999999998996, y: 0.015044287679104505 },\n { x: 0.000007479999999998996, y: 0.0011038575802550191 },\n { x: 0.0000074809999999989955, y: -0.013647247998661193 },\n { x: 0.000007481999999998995, y: 0.014640754584732319 },\n { x: 0.000007482999999998995, y: -0.03806331479103022 },\n { x: 0.000007483999999998994, y: 0.014846101806114804 },\n { x: 0.000007484999999998994, y: -0.01926068662190827 },\n { x: 0.000007485999999998994, y: 0.0015913629028468518 },\n { x: 0.000007486999999998993, y: -0.014693312571803202 },\n { x: 0.000007487999999998993, y: 0.0122955695094787 },\n { x: 0.000007488999999998993, y: -0.02207191822747178 },\n { x: 0.000007489999999998992, y: -0.03921729422865224 },\n { x: 0.000007490999999998992, y: 0.012055261852238486 },\n { x: 0.000007491999999998992, y: -0.03354121074099931 },\n { x: 0.000007492999999998991, y: -0.021733193782794664 },\n { x: 0.000007493999999998991, y: 0.01422146979248136 },\n { x: 0.0000074949999999989906, y: -0.024322521978045526 },\n { x: 0.00000749599999999899, y: 0.01516836216012753 },\n { x: 0.00000749699999999899, y: 0.031712033041274894 },\n { x: 0.0000074979999999989895, y: 0.02373926308637362 },\n { x: 0.000007498999999998989, y: -0.04333450440251446 },\n { x: 0.000007499999999998989, y: -0.00432981503589794 },\n { x: 0.0000075009999999989885, y: -0.013161511096584224 },\n { x: 0.000007501999999998988, y: 0.026990585809848762 },\n { x: 0.000007502999999998988, y: -0.02955103873849134 },\n { x: 0.0000075039999999989874, y: 0.02297200661656664 },\n { x: 0.000007504999999998987, y: -0.03426265593756837 },\n { x: 0.000007505999999998987, y: 0.030867566385499062 },\n { x: 0.000007506999999998986, y: 0.011164551199046094 },\n { x: 0.000007507999999998986, y: -0.0354970835544735 },\n { x: 0.000007508999999998986, y: -0.008877616834295568 },\n { x: 0.000007509999999998985, y: 0.016362353054111985 },\n { x: 0.000007510999999998985, y: -0.01955606488125417 },\n { x: 0.000007511999999998985, y: 0.01777636467476429 },\n { x: 0.000007512999999998984, y: 0.012551204087390865 },\n { x: 0.000007513999999998984, y: 0.023974925168885608 },\n { x: 0.000007514999999998984, y: 0.010787144363156274 },\n { x: 0.000007515999999998983, y: -0.0224715238087419 },\n { x: 0.000007516999999998983, y: 0.02666368644044954 },\n { x: 0.0000075179999999989826, y: 0.0027069205580705358 },\n { x: 0.000007518999999998982, y: -0.02106567874260163 },\n { x: 0.000007519999999998982, y: -0.03866795049489245 },\n { x: 0.0000075209999999989815, y: 0.02438285208966404 },\n { x: 0.000007521999999998981, y: 0.02109652000908158 },\n { x: 0.000007522999999998981, y: 0.025346655104203333 },\n { x: 0.0000075239999999989805, y: -0.03734569446928815 },\n { x: 0.00000752499999999898, y: 0.02095433238898075 },\n { x: 0.00000752599999999898, y: 0.03544585238026281 },\n { x: 0.0000075269999999989794, y: -0.034792246561947515 },\n { x: 0.000007527999999998979, y: -0.015283662297831499 },\n { x: 0.000007528999999998979, y: -0.03314493750194377 },\n { x: 0.000007529999999998978, y: -0.026262624278731085 },\n { x: 0.000007530999999998978, y: -0.025628948669453325 },\n { x: 0.000007531999999998978, y: -0.016870724346038788 },\n { x: 0.000007532999999998977, y: -0.01630860415249793 },\n { x: 0.000007533999999998977, y: -0.03877309487735412 },\n { x: 0.000007534999999998977, y: -0.014458705854968588 },\n { x: 0.000007535999999998976, y: -0.004380236181917542 },\n { x: 0.000007536999999998976, y: -0.03499118488611446 },\n { x: 0.000007537999999998976, y: 0.02449090105524733 },\n { x: 0.000007538999999998975, y: 0.003282918889215191 },\n { x: 0.000007539999999998975, y: 0.05045696812558543 },\n { x: 0.0000075409999999989745, y: -0.03368129503509705 },\n { x: 0.000007541999999998974, y: 0.03591621386706343 },\n { x: 0.000007542999999998974, y: 0.03233171436130313 },\n { x: 0.0000075439999999989735, y: 0.02854159511395619 },\n { x: 0.000007544999999998973, y: 0.007452164102296521 },\n { x: 0.000007545999999998973, y: 0.026424106338118713 },\n { x: 0.0000075469999999989725, y: 0.02579015979367145 },\n { x: 0.000007547999999998972, y: -0.007994499684184376 },\n { x: 0.000007548999999998972, y: 0.005277501410294967 },\n { x: 0.000007549999999998971, y: 0.01569678719187802 },\n { x: 0.000007550999999998971, y: 0.031068673303270934 },\n { x: 0.000007551999999998971, y: 0.035321374763753334 },\n { x: 0.00000755299999999897, y: -0.030803174012017643 },\n { x: 0.00000755399999999897, y: -0.013411724611616698 },\n { x: 0.00000755499999999897, y: 0.004404635733234577 },\n { x: 0.000007555999999998969, y: -0.03291455494326488 },\n { x: 0.000007556999999998969, y: -0.01697052445817402 },\n { x: 0.000007557999999998969, y: -0.01194490823610042 },\n { x: 0.000007558999999998968, y: -0.004597368497743597 },\n { x: 0.000007559999999998968, y: 0.0015126267726125104 },\n { x: 0.000007560999999998968, y: -0.02579499150911735 },\n { x: 0.000007561999999998967, y: 0.03721085587804962 },\n { x: 0.000007562999999998967, y: -0.016809178152901567 },\n { x: 0.0000075639999999989665, y: -0.01539740359864833 },\n { x: 0.000007564999999998966, y: 0.002038429423671922 },\n { x: 0.000007565999999998966, y: 0.005204954726066064 },\n { x: 0.0000075669999999989655, y: 0.04198668751811494 },\n { x: 0.000007567999999998965, y: 0.012864884541321269 },\n { x: 0.000007568999999998965, y: 0.0364630682898983 },\n { x: 0.0000075699999999989644, y: 0.008356222136393372 },\n { x: 0.000007570999999998964, y: -0.03290623074254493 },\n { x: 0.000007571999999998964, y: -0.009913686924330138 },\n { x: 0.000007572999999998963, y: -0.03289334433949133 },\n { x: 0.000007573999999998963, y: -0.019077924400711852 },\n { x: 0.000007574999999998963, y: -0.029565512613616667 },\n { x: 0.000007575999999998962, y: 0.034160674854791025 },\n { x: 0.000007576999999998962, y: 0.02142962950636111 },\n { x: 0.000007577999999998962, y: 0.05143712770089505 },\n { x: 0.000007578999999998961, y: -0.009584524436073699 },\n { x: 0.000007579999999998961, y: 0.0032343133707201884 },\n { x: 0.000007580999999998961, y: -0.020962860600391355 },\n { x: 0.00000758199999999896, y: 0.0070203490026829055 },\n { x: 0.00000758299999999896, y: -0.021497278792991327 },\n { x: 0.0000075839999999989596, y: -0.002922441062924031 },\n { x: 0.000007584999999998959, y: 0.009262999694934262 },\n { x: 0.000007585999999998959, y: 0.01500860245135369 },\n { x: 0.0000075869999999989585, y: -0.00961979415109349 },\n { x: 0.000007587999999998958, y: 0.042562307472870375 },\n { x: 0.000007588999999998958, y: 0.03642840757380023 },\n { x: 0.0000075899999999989575, y: 0.03823126307874945 },\n { x: 0.000007590999999998957, y: 0.028377175403870736 },\n { x: 0.000007591999999998957, y: 0.04493090307456646 },\n { x: 0.0000075929999999989564, y: 0.042443489411100085 },\n { x: 0.000007593999999998956, y: 0.022158768532757746 },\n { x: 0.000007594999999998956, y: -0.028387724183935748 },\n { x: 0.000007595999999998955, y: 0.02937125657833063 },\n { x: 0.000007596999999998955, y: -0.014528051568962745 },\n { x: 0.000007597999999998955, y: -0.019585544647909143 },\n { x: 0.000007598999999998954, y: 0.017416150975529378 },\n { x: 0.000007599999999998954, y: -0.02617746484828591 },\n { x: 0.000007600999999998954, y: -0.009730854872071953 },\n { x: 0.000007601999999998953, y: -0.001462162978598424 },\n { x: 0.000007602999999998953, y: 0.03897227447851271 },\n { x: 0.000007603999999998953, y: -0.00805184053178228 },\n { x: 0.000007604999999998952, y: -0.022128208800918613 },\n { x: 0.000007605999999998952, y: 0.014957295478214954 },\n { x: 0.0000076069999999989516, y: 0.00023436006724148438 },\n { x: 0.000007607999999998951, y: -0.0018134446823015737 },\n { x: 0.000007608999999998951, y: 0.03526274005507467 },\n { x: 0.0000076099999999989505, y: 0.03410482905249744 },\n { x: 0.00000761099999999895, y: 0.029072906356520867 },\n { x: 0.00000761199999999895, y: -0.021051780698912732 },\n { x: 0.0000076129999999989495, y: 0.029051296058945554 },\n { x: 0.000007613999999998949, y: -0.002960097650801281 },\n { x: 0.000007614999999998949, y: -0.022063092662033996 },\n { x: 0.000007615999999998948, y: 0.03592708122692177 },\n { x: 0.000007616999999998948, y: 0.025292641537510444 },\n { x: 0.000007617999999998948, y: -0.011840778527306311 },\n { x: 0.000007618999999998947, y: -0.023986228442120842 },\n { x: 0.000007619999999998947, y: -0.012683697843507804 },\n { x: 0.000007620999999998947, y: -0.01196524864526457 },\n { x: 0.000007621999999998946, y: 0.02752333541683069 },\n { x: 0.000007622999999998946, y: 0.04299391611587114 },\n { x: 0.000007623999999998946, y: 0.036308488367850555 },\n { x: 0.000007624999999998945, y: 0.03911561245356373 },\n { x: 0.000007625999999998945, y: -0.011818107863260542 },\n { x: 0.000007626999999998945, y: -0.01921216299571429 },\n { x: 0.000007627999999998944, y: -0.01454998076562428 },\n { x: 0.000007628999999998944, y: 0.012927259519001694 },\n { x: 0.000007629999999998944, y: -0.024562009876564588 },\n { x: 0.000007630999999998945, y: 0.009896508349904165 },\n { x: 0.000007631999999998945, y: -0.01618539706613077 },\n { x: 0.000007632999999998946, y: -0.014800790102505979 },\n { x: 0.000007633999999998946, y: 0.02447504220629354 },\n { x: 0.000007634999999998947, y: 0.004056376996161574 },\n { x: 0.000007635999999998947, y: 0.010958593992927083 },\n { x: 0.000007636999999998948, y: 0.023732863792113885 },\n { x: 0.000007637999999998948, y: 0.011696420088332432 },\n { x: 0.000007638999999998949, y: -0.018330710942847356 },\n { x: 0.00000763999999999895, y: 0.018141207690429744 },\n { x: 0.00000764099999999895, y: 0.04016213142883144 },\n { x: 0.00000764199999999895, y: -0.010796136535958734 },\n { x: 0.000007642999999998951, y: 0.039972437778972664 },\n { x: 0.000007643999999998951, y: -0.009421163380471876 },\n { x: 0.000007644999999998952, y: -0.01612936914685939 },\n { x: 0.000007645999999998952, y: -0.00017625205542366566 },\n { x: 0.000007646999999998953, y: 0.005491790013955621 },\n { x: 0.000007647999999998953, y: 0.033663732781375036 },\n { x: 0.000007648999999998954, y: 0.020685031282515462 },\n { x: 0.000007649999999998954, y: 0.010113591904799487 },\n { x: 0.000007650999999998955, y: -0.010165489344933065 },\n { x: 0.000007651999999998955, y: 0.026057292939187376 },\n { x: 0.000007652999999998956, y: 0.017384662074457387 },\n { x: 0.000007653999999998956, y: -0.007590810428950672 },\n { x: 0.000007654999999998957, y: 0.031458194176884086 },\n { x: 0.000007655999999998957, y: -0.020630593811190673 },\n { x: 0.000007656999999998958, y: 0.019014821534339907 },\n { x: 0.000007657999999998958, y: 0.011743937697930562 },\n { x: 0.000007658999999998959, y: 0.00007031287137651207 },\n { x: 0.00000765999999999896, y: 0.02303909944341818 },\n { x: 0.00000766099999999896, y: 0.006995922923644005 },\n { x: 0.00000766199999999896, y: -0.017085098575874716 },\n { x: 0.00000766299999999896, y: 0.0024778228586560154 },\n { x: 0.000007663999999998961, y: 0.01669216614428899 },\n { x: 0.000007664999999998962, y: 0.02960072769232535 },\n { x: 0.000007665999999998962, y: 0.016507543912620406 },\n { x: 0.000007666999999998963, y: 0.0010951361706479142 },\n { x: 0.000007667999999998963, y: 0.0442289600007922 },\n { x: 0.000007668999999998964, y: 0.039799982327582126 },\n { x: 0.000007669999999998964, y: 0.051568161711428445 },\n { x: 0.000007670999999998965, y: 0.016110453617722443 },\n { x: 0.000007671999999998965, y: 0.04010307109694563 },\n { x: 0.000007672999999998966, y: 0.042413509986628364 },\n { x: 0.000007673999999998966, y: -0.0017353305800867844 },\n { x: 0.000007674999999998967, y: 0.0031100488747114532 },\n { x: 0.000007675999999998967, y: 0.04758293813736568 },\n { x: 0.000007676999999998968, y: 0.024826948820876632 },\n { x: 0.000007677999999998968, y: -0.01066632664993435 },\n { x: 0.000007678999999998969, y: -0.018992853867057128 },\n { x: 0.00000767999999999897, y: 0.019219533773053337 },\n { x: 0.00000768099999999897, y: 0.04147738284632212 },\n { x: 0.00000768199999999897, y: 0.0020314928236688217 },\n { x: 0.00000768299999999897, y: 0.01835181358908086 },\n { x: 0.000007683999999998971, y: 0.0030591714963266944 },\n { x: 0.000007684999999998972, y: 0.018681697479479734 },\n { x: 0.000007685999999998972, y: 0.04999125248055506 },\n { x: 0.000007686999999998973, y: -0.010898018786641987 },\n { x: 0.000007687999999998973, y: 0.0059386370077591875 },\n { x: 0.000007688999999998974, y: -0.007419026099136347 },\n { x: 0.000007689999999998974, y: 0.036887778361636606 },\n { x: 0.000007690999999998975, y: 0.05261245909478904 },\n { x: 0.000007691999999998975, y: 0.043685703905142814 },\n { x: 0.000007692999999998976, y: 0.042904681328542 },\n { x: 0.000007693999999998976, y: -0.000833875149596517 },\n { x: 0.000007694999999998977, y: 0.01889166734862338 },\n { x: 0.000007695999999998977, y: 0.04468714198644731 },\n { x: 0.000007696999999998978, y: -0.008537668615090279 },\n { x: 0.000007697999999998978, y: 0.02512113820589359 },\n { x: 0.000007698999999998979, y: 0.04728383163303347 },\n { x: 0.00000769999999999898, y: 0.05032094690383092 },\n { x: 0.00000770099999999898, y: 0.0559866408783624 },\n { x: 0.00000770199999999898, y: 0.019395711944496637 },\n { x: 0.00000770299999999898, y: 0.016632591897018753 },\n { x: 0.000007703999999998981, y: 0.007924696645969405 },\n { x: 0.000007704999999998982, y: 0.04174617014399477 },\n { x: 0.000007705999999998982, y: 0.012036490384969293 },\n { x: 0.000007706999999998983, y: 0.03852745479281464 },\n { x: 0.000007707999999998983, y: -0.0014372534157544269 },\n { x: 0.000007708999999998984, y: 0.026181174619044744 },\n { x: 0.000007709999999998984, y: -0.01760225469367355 },\n { x: 0.000007710999999998985, y: 0.011413126994314975 },\n { x: 0.000007711999999998985, y: -0.014502699989748288 },\n { x: 0.000007712999999998986, y: -0.0017108503129400418 },\n { x: 0.000007713999999998986, y: 0.0445193429181658 },\n { x: 0.000007714999999998987, y: -0.012619364314126563 },\n { x: 0.000007715999999998987, y: 0.028376642518647098 },\n { x: 0.000007716999999998988, y: 0.035849345538410175 },\n { x: 0.000007717999999998988, y: 0.023629270732180258 },\n { x: 0.000007718999999998989, y: -0.012284780744528115 },\n { x: 0.00000771999999999899, y: 0.020828097089611333 },\n { x: 0.00000772099999999899, y: 0.04557571923451602 },\n { x: 0.00000772199999999899, y: 0.0425780433370441 },\n { x: 0.00000772299999999899, y: -0.007011633087120165 },\n { x: 0.000007723999999998991, y: 0.02788105907510139 },\n { x: 0.000007724999999998992, y: 0.057409955148969356 },\n { x: 0.000007725999999998992, y: 0.03858877117710563 },\n { x: 0.000007726999999998993, y: 0.054476967022339735 },\n { x: 0.000007727999999998993, y: 0.005778750610229295 },\n { x: 0.000007728999999998994, y: 0.05268105153052148 },\n { x: 0.000007729999999998994, y: 0.05636900577757886 },\n { x: 0.000007730999999998995, y: 0.04508946213480923 },\n { x: 0.000007731999999998995, y: 0.02480106274804994 },\n { x: 0.000007732999999998996, y: 0.0279322807714678 },\n { x: 0.000007733999999998996, y: 0.05045198267856109 },\n { x: 0.000007734999999998997, y: 0.01548853735363388 },\n { x: 0.000007735999999998997, y: 0.042582548333932546 },\n { x: 0.000007736999999998998, y: 0.0381994780432959 },\n { x: 0.000007737999999998998, y: -0.015444508336462933 },\n { x: 0.000007738999999998999, y: 0.0558933507230641 },\n { x: 0.000007739999999999, y: -0.0008775844249095145 },\n { x: 0.000007740999999999, y: 0.05859153378138359 },\n { x: 0.000007741999999999, y: 0.045375737791050946 },\n { x: 0.000007742999999999, y: 0.03675973078634645 },\n { x: 0.000007743999999999001, y: 0.02547984382966473 },\n { x: 0.000007744999999999002, y: 0.04435092675313653 },\n { x: 0.000007745999999999002, y: -0.012938892968024234 },\n { x: 0.000007746999999999003, y: 0.010184716686544242 },\n { x: 0.000007747999999999003, y: 0.03879746076217398 },\n { x: 0.000007748999999999004, y: 0.017701820635475186 },\n { x: 0.000007749999999999004, y: 0.04656749345894277 },\n { x: 0.000007750999999999005, y: 0.03136289959237096 },\n { x: 0.000007751999999999005, y: 0.031112004252844695 },\n { x: 0.000007752999999999006, y: 0.028046216631737727 },\n { x: 0.000007753999999999006, y: 0.02210375364385562 },\n { x: 0.000007754999999999007, y: -0.005203922641432282 },\n { x: 0.000007755999999999007, y: 0.02475813174325188 },\n { x: 0.000007756999999999008, y: -0.010332988976684408 },\n { x: 0.000007757999999999008, y: -0.007491358019963458 },\n { x: 0.000007758999999999009, y: 0.037208682834586324 },\n { x: 0.00000775999999999901, y: 0.006282013864344023 },\n { x: 0.00000776099999999901, y: 0.03753684339186861 },\n { x: 0.00000776199999999901, y: 0.03045152075241148 },\n { x: 0.00000776299999999901, y: 0.011530639911663377 },\n { x: 0.000007763999999999011, y: 0.024311025331901152 },\n { x: 0.000007764999999999012, y: 0.002215046336795652 },\n { x: 0.000007765999999999012, y: 0.03802840991482098 },\n { x: 0.000007766999999999013, y: 0.01007749563498892 },\n { x: 0.000007767999999999013, y: 0.004688473023074728 },\n { x: 0.000007768999999999014, y: -0.013099934734618016 },\n { x: 0.000007769999999999014, y: 0.027827802352301884 },\n { x: 0.000007770999999999015, y: 0.009426777943462174 },\n { x: 0.000007771999999999015, y: 0.021110600853828817 },\n { x: 0.000007772999999999016, y: 0.031218882406842556 },\n { x: 0.000007773999999999016, y: 0.031411969185098886 },\n { x: 0.000007774999999999017, y: 0.05129289786532706 },\n { x: 0.000007775999999999017, y: 0.04063580840095517 },\n { x: 0.000007776999999999018, y: 0.024419811186231967 },\n { x: 0.000007777999999999018, y: 0.055769883039295656 },\n { x: 0.000007778999999999019, y: 0.03175411328558628 },\n { x: 0.00000777999999999902, y: 0.05184407607598709 },\n { x: 0.00000778099999999902, y: 0.048874249361466705 },\n { x: 0.00000778199999999902, y: 0.04883436208297441 },\n { x: 0.00000778299999999902, y: -0.012539527222049655 },\n { x: 0.000007783999999999021, y: 0.03913945653469793 },\n { x: 0.000007784999999999022, y: 0.05019826558092637 },\n { x: 0.000007785999999999022, y: 0.006752722659745917 },\n { x: 0.000007786999999999023, y: 0.045161348783275476 },\n { x: 0.000007787999999999023, y: 0.0409106911546238 },\n { x: 0.000007788999999999024, y: -0.004457631635826964 },\n { x: 0.000007789999999999024, y: 0.051363065750822015 },\n { x: 0.000007790999999999025, y: 0.0072704525128081746 },\n { x: 0.000007791999999999025, y: 0.03599420204123263 },\n { x: 0.000007792999999999026, y: -0.009904198581136607 },\n { x: 0.000007793999999999026, y: 0.05086274757800156 },\n { x: 0.000007794999999999027, y: 0.0476131453135 },\n { x: 0.000007795999999999027, y: 0.0037769072025102407 },\n { x: 0.000007796999999999028, y: 0.029802713056474722 },\n { x: 0.000007797999999999028, y: 0.0417024074756982 },\n { x: 0.000007798999999999029, y: 0.05540923174404717 },\n { x: 0.00000779999999999903, y: 0.05202366045281162 },\n { x: 0.00000780099999999903, y: 0.01130822852809163 },\n { x: 0.00000780199999999903, y: -0.013233837063023893 },\n { x: 0.00000780299999999903, y: 0.05086178414384361 },\n { x: 0.000007803999999999031, y: 0.007362279469459287 },\n { x: 0.000007804999999999032, y: 0.048319179140476856 },\n { x: 0.000007805999999999032, y: -0.00822210383778441 },\n { x: 0.000007806999999999033, y: 0.025670399599903814 },\n { x: 0.000007807999999999033, y: 0.001203379975189836 },\n { x: 0.000007808999999999034, y: 0.060469449985909 },\n { x: 0.000007809999999999034, y: 0.031268240329472875 },\n { x: 0.000007810999999999035, y: 0.03578571754426271 },\n { x: 0.000007811999999999035, y: 0.005189839651818642 },\n { x: 0.000007812999999999036, y: 0.013976523106403611 },\n { x: 0.000007813999999999036, y: 0.03159522292271111 },\n { x: 0.000007814999999999037, y: -0.009812905457127607 },\n { x: 0.000007815999999999037, y: 0.013376218328183078 },\n { x: 0.000007816999999999038, y: 0.004157880715999707 },\n { x: 0.000007817999999999038, y: 0.035815647141656894 },\n { x: 0.000007818999999999039, y: 0.05873553634626 },\n { x: 0.000007819999999999039, y: 0.0022676561863314883 },\n { x: 0.00000782099999999904, y: 0.020510670694557677 },\n { x: 0.00000782199999999904, y: 0.024508532011373284 },\n { x: 0.00000782299999999904, y: 0.045025773671920996 },\n { x: 0.000007823999999999041, y: 0.029951701582998633 },\n { x: 0.000007824999999999042, y: 0.03397588706260915 },\n { x: 0.000007825999999999042, y: 0.05618288672796291 },\n { x: 0.000007826999999999043, y: 0.00936978530659504 },\n { x: 0.000007827999999999043, y: 0.029439010786099114 },\n { x: 0.000007828999999999044, y: 0.02374952405800666 },\n { x: 0.000007829999999999044, y: -0.010207023202618452 },\n { x: 0.000007830999999999045, y: 0.0008811106276202102 },\n { x: 0.000007831999999999045, y: 0.05177504426499105 },\n { x: 0.000007832999999999046, y: 0.021697625329325457 },\n { x: 0.000007833999999999046, y: -0.0019407255688146559 },\n { x: 0.000007834999999999047, y: 0.05151867456724748 },\n { x: 0.000007835999999999047, y: -0.0036660133149483305 },\n { x: 0.000007836999999999048, y: 0.018607507507157266 },\n { x: 0.000007837999999999048, y: 0.0372279393384259 },\n { x: 0.000007838999999999049, y: 0.03748309089185409 },\n { x: 0.000007839999999999049, y: 0.05452296644040515 },\n { x: 0.00000784099999999905, y: 0.03969168675630745 },\n { x: 0.00000784199999999905, y: 0.05511777929415575 },\n { x: 0.00000784299999999905, y: 0.06131000386865333 },\n { x: 0.000007843999999999051, y: 0.0008756484931444243 },\n { x: 0.000007844999999999052, y: 0.01445727818493984 },\n { x: 0.000007845999999999052, y: 0.041360827320049504 },\n { x: 0.000007846999999999053, y: 0.005959631337519481 },\n { x: 0.000007847999999999053, y: 0.04074289921088947 },\n { x: 0.000007848999999999054, y: 0.061418744341436696 },\n { x: 0.000007849999999999054, y: -0.0010903634977960479 },\n { x: 0.000007850999999999055, y: -0.010081540029769857 },\n { x: 0.000007851999999999055, y: -0.010914217715337377 },\n { x: 0.000007852999999999056, y: 0.0010120627226539794 },\n { x: 0.000007853999999999056, y: 0.018722247032854158 },\n { x: 0.000007854999999999057, y: 0.00906280646278798 },\n { x: 0.000007855999999999057, y: 0.017077871742720623 },\n { x: 0.000007856999999999058, y: 0.03558183728968866 },\n { x: 0.000007857999999999058, y: 0.014210897125441276 },\n { x: 0.000007858999999999059, y: 0.05495359216495571 },\n { x: 0.000007859999999999059, y: 0.0018870619423871325 },\n { x: 0.00000786099999999906, y: 0.05736083411579576 },\n { x: 0.00000786199999999906, y: 0.03590821512713628 },\n { x: 0.00000786299999999906, y: 0.03450245061322651 },\n { x: 0.000007863999999999061, y: -0.00814463049788602 },\n { x: 0.000007864999999999062, y: 0.022473123382872953 },\n { x: 0.000007865999999999062, y: -0.003248763086752357 },\n { x: 0.000007866999999999063, y: 0.013835411450095206 },\n { x: 0.000007867999999999063, y: 0.06002764997563929 },\n { x: 0.000007868999999999064, y: 0.05820367389921274 },\n { x: 0.000007869999999999064, y: 0.0377107232983148 },\n { x: 0.000007870999999999065, y: 0.001080100461624784 },\n { x: 0.000007871999999999065, y: 0.02269997811561928 },\n { x: 0.000007872999999999066, y: -0.008949483380953145 },\n { x: 0.000007873999999999066, y: -0.007254745378965154 },\n { x: 0.000007874999999999067, y: -0.008721772415156082 },\n { x: 0.000007875999999999067, y: 0.04103177633082947 },\n { x: 0.000007876999999999068, y: 0.05048931037349442 },\n { x: 0.000007877999999999068, y: 0.058958010346682244 },\n { x: 0.000007878999999999069, y: -0.0115174370675173 },\n { x: 0.000007879999999999069, y: -0.0027931515839453303 },\n { x: 0.00000788099999999907, y: 0.03312929463196517 },\n { x: 0.00000788199999999907, y: 0.04331367491296444 },\n { x: 0.00000788299999999907, y: 0.022830339622249177 },\n { x: 0.000007883999999999071, y: 0.00977155855452738 },\n { x: 0.000007884999999999072, y: -0.0010471104747204578 },\n { x: 0.000007885999999999072, y: -0.0041364148772614975 },\n { x: 0.000007886999999999073, y: 0.012677395112630649 },\n { x: 0.000007887999999999073, y: 0.04330700174525166 },\n { x: 0.000007888999999999074, y: -0.004625019110908991 },\n { x: 0.000007889999999999074, y: 0.05766676431510688 },\n { x: 0.000007890999999999075, y: 0.027243821376849643 },\n { x: 0.000007891999999999075, y: 0.031299601613999396 },\n { x: 0.000007892999999999076, y: 0.03779368310848319 },\n { x: 0.000007893999999999076, y: 0.012969531847962608 },\n { x: 0.000007894999999999077, y: 0.005545400182819873 },\n { x: 0.000007895999999999077, y: 0.04874776257086391 },\n { x: 0.000007896999999999078, y: -0.0073332341360738545 },\n { x: 0.000007897999999999078, y: 0.024210154552340327 },\n { x: 0.000007898999999999079, y: 0.01799733573125864 },\n { x: 0.000007899999999999079, y: -0.007543973671310669 },\n { x: 0.00000790099999999908, y: 0.026921935233092532 },\n { x: 0.00000790199999999908, y: 0.05021230345670767 },\n { x: 0.00000790299999999908, y: 0.05463573667112673 },\n { x: 0.000007903999999999081, y: 0.00953585836873683 },\n { x: 0.000007904999999999082, y: 0.05287629394823225 },\n { x: 0.000007905999999999082, y: 0.0009692759758983087 },\n { x: 0.000007906999999999083, y: 0.011357120029424893 },\n { x: 0.000007907999999999083, y: 0.005085014891919797 },\n { x: 0.000007908999999999084, y: 0.051770801739135675 },\n { x: 0.000007909999999999084, y: 0.012314550038175808 },\n { x: 0.000007910999999999085, y: 0.05607228620256005 },\n { x: 0.000007911999999999085, y: 0.014274322095509974 },\n { x: 0.000007912999999999086, y: 0.02026228050542361 },\n { x: 0.000007913999999999086, y: 0.006623927401461248 },\n { x: 0.000007914999999999087, y: 0.004023098577084459 },\n { x: 0.000007915999999999087, y: 0.023657776545005123 },\n { x: 0.000007916999999999088, y: 0.02641928242407151 },\n { x: 0.000007917999999999088, y: 0.014311615245716058 },\n { x: 0.000007918999999999088, y: 0.032271971321202485 },\n { x: 0.000007919999999999089, y: 0.03525585207965565 },\n { x: 0.00000792099999999909, y: 0.016018419516724655 },\n { x: 0.00000792199999999909, y: 0.03282530104177738 },\n { x: 0.00000792299999999909, y: 0.05681693447647093 },\n { x: 0.000007923999999999091, y: -0.0032993832898068516 },\n { x: 0.000007924999999999091, y: -0.013710217354184047 },\n { x: 0.000007925999999999092, y: -0.017386206323801223 },\n { x: 0.000007926999999999092, y: -0.016078173977449976 },\n { x: 0.000007927999999999093, y: 0.04044817079314449 },\n { x: 0.000007928999999999093, y: 0.015769346966996937 },\n { x: 0.000007929999999999094, y: 0.005834023923001967 },\n { x: 0.000007930999999999094, y: 0.024876498211160235 },\n { x: 0.000007931999999999095, y: 0.0001635946419980376 },\n { x: 0.000007932999999999095, y: -0.016449592222643028 },\n { x: 0.000007933999999999096, y: 0.0515092338916977 },\n { x: 0.000007934999999999096, y: 0.04848429344123602 },\n { x: 0.000007935999999999097, y: 0.04426017462735836 },\n { x: 0.000007936999999999097, y: -0.017023788603873883 },\n { x: 0.000007937999999999098, y: 0.04365549657593282 },\n { x: 0.000007938999999999098, y: 0.04002754833209317 },\n { x: 0.000007939999999999099, y: -0.01286436096612836 },\n { x: 0.0000079409999999991, y: 0.04276388978712044 },\n { x: 0.0000079419999999991, y: 0.027021217515152095 },\n { x: 0.0000079429999999991, y: 0.043786971344992986 },\n { x: 0.000007943999999999101, y: -0.012981778346742162 },\n { x: 0.000007944999999999101, y: 0.011770894364588454 },\n { x: 0.000007945999999999102, y: -0.0168482036233206 },\n { x: 0.000007946999999999102, y: -0.014984294860894778 },\n { x: 0.000007947999999999103, y: 0.03502531805514158 },\n { x: 0.000007948999999999103, y: 0.053076451917723144 },\n { x: 0.000007949999999999104, y: -0.004273155917371329 },\n { x: 0.000007950999999999104, y: 0.02446885539358464 },\n { x: 0.000007951999999999105, y: -0.01513073224237239 },\n { x: 0.000007952999999999105, y: -0.006394293499375203 },\n { x: 0.000007953999999999106, y: 0.007505311441084744 },\n { x: 0.000007954999999999106, y: -0.004892769924894121 },\n { x: 0.000007955999999999107, y: 0.003496511197928145 },\n { x: 0.000007956999999999107, y: 0.03203163074655121 },\n { x: 0.000007957999999999108, y: 0.000367262681439981 },\n { x: 0.000007958999999999108, y: -0.010262676311403554 },\n { x: 0.000007959999999999109, y: 0.02949507047575882 },\n { x: 0.00000796099999999911, y: -0.018137670088596073 },\n { x: 0.00000796199999999911, y: 0.020305544970873272 },\n { x: 0.00000796299999999911, y: 0.01619478593461053 },\n { x: 0.000007963999999999111, y: 0.002928196333172199 },\n { x: 0.000007964999999999111, y: 0.04674053821092112 },\n { x: 0.000007965999999999112, y: -0.011372329609377358 },\n { x: 0.000007966999999999112, y: 0.04612851816173901 },\n { x: 0.000007967999999999113, y: 0.05550999132552603 },\n { x: 0.000007968999999999113, y: 0.007698701301413112 },\n { x: 0.000007969999999999114, y: -0.01383957658287643 },\n { x: 0.000007970999999999114, y: 0.0329642004009498 },\n { x: 0.000007971999999999115, y: -0.000021489993732966978 },\n { x: 0.000007972999999999115, y: 0.020946453746142814 },\n { x: 0.000007973999999999116, y: -0.00477284417362369 },\n { x: 0.000007974999999999116, y: 0.04851129585001675 },\n { x: 0.000007975999999999117, y: 0.048625884607778155 },\n { x: 0.000007976999999999117, y: -0.01338099880397528 },\n { x: 0.000007977999999999118, y: 0.005940875110559175 },\n { x: 0.000007978999999999118, y: 0.03447464530500075 },\n { x: 0.000007979999999999119, y: 0.02207546143978787 },\n { x: 0.00000798099999999912, y: 0.0504179601999862 },\n { x: 0.00000798199999999912, y: 0.023104428080570664 },\n { x: 0.00000798299999999912, y: 0.030354992572024144 },\n { x: 0.000007983999999999121, y: 0.0023324452475153457 },\n { x: 0.000007984999999999121, y: 0.0029322408535889886 },\n { x: 0.000007985999999999122, y: 0.006766617209502232 },\n { x: 0.000007986999999999122, y: 0.02500720118399022 },\n { x: 0.000007987999999999123, y: 0.009414604832344017 },\n { x: 0.000007988999999999123, y: -0.015264915093247358 },\n { x: 0.000007989999999999124, y: -0.010696550061412832 },\n { x: 0.000007990999999999124, y: 0.006208991669481198 },\n { x: 0.000007991999999999125, y: -0.019506698888068875 },\n { x: 0.000007992999999999125, y: 0.012066969489951392 },\n { x: 0.000007993999999999126, y: 0.049434006499191725 },\n { x: 0.000007994999999999126, y: 0.009422370828351928 },\n { x: 0.000007995999999999127, y: 0.04350923500164221 },\n { x: 0.000007996999999999127, y: 0.032772823526568795 },\n { x: 0.000007997999999999128, y: 0.04697816781838182 },\n { x: 0.000007998999999999128, y: -0.011329641578143219 },\n { x: 0.000007999999999999129, y: -0.016427746917131558 },\n ]\n)\n","url":null,"readme":"This example shows how to display high-resolution data - for example, measurements in microseconds precision.\n\nWhen displaying high-resolution data there is a need to do some scaling to the data before adding it to a series.\nLightningChart JS Axis is limited by floating point precision so when using really small or really large values there is a need to scale the values to be closer to 0.\n\n```js\nconst dataScaleX = 1 * Math.pow( 1000, 3 ) // 1 us\nconst renderData = ( data ) => {\n // Add data.\n lineSeries.add( data.map( p => ({ x: p.x * dataScaleX, y: p.y }) ) )\n}\n```\n\nWhen the data is scaled closer to 0 then the LightningChart JS Axis is able to function properly but the values shown in the auto-cursor would be incorrect as it would show the scaled value, not the original. This can be fixed by setting a formatting function to the axis tick strategy.\n\n```js\nlineSeries.axisX\n .setTickStrategy( AxisTickStrategies.Numeric, ( strategy ) => strategy\n // Format ticks with units.\n .setFormattingFunction( timeScaled =>\n Math.round( timeScaled ) + ' μs'\n )\n )\n```\n\nAlternatively if the original value would be preferred then the scaling could be undone.\n\n```js\nlineSeries.axisX\n .setTickStrategy( AxisTickStrategies.Numeric, ( strategy ) => strategy\n .setFormattingFunction( timeScaled =>\n timeScaled/dataScaleX\n )\n )\n```\n","image":"lineSeriesMicroseconds.png"},{"id":"lcjs-example-0009-severalAxisXY","title":"Several AxesXY","tags":["line","xy"],"description":"Several AxesXY chart can be used to compare or see several graphs.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example for several AxisXY\n */\n\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n// Import Random Generator \nconst { createProgressiveRandomGenerator } = require('@arction/xydata')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n SolidLine,\n ColorRGBA,\n Themes,\n} = lcjs\n\nconst ls = lightningChart()\n\nconst chart = ls.ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Several Axis')\n\n// Cache colors used in the example\nconst blueFill = new SolidFill( { color: ColorRGBA(0, 0, 255) } )\nconst greenFill = new SolidFill( { color: ColorRGBA(0, 255, 0) } )\nconst redFill = new SolidFill( { color: ColorRGBA( 255, 0, 0 ) } )\n\n// Cache StrokeStyles used in the example\nconst blueLine = new SolidLine( { fillStyle: blueFill } )\nconst greenLine = new SolidLine( { fillStyle: greenFill } )\nconst redLine = new SolidLine( {fillStyle: redFill } )\n\n// First Axes (default)\nconst axisX1 = chart.getDefaultAxisX()\n // Set title of Axis\n .setTitle('Axis X1')\n // Set interval of X axis \n .setInterval(-10, 1300, false, true)\n .setStrokeStyle( blueLine )\n\nconst axisY1 = chart.getDefaultAxisY()\n // Set title of Axis\n .setTitle('Axis Y1')\n // Set interval of Y axis \n .setInterval(-150, 100, false, true)\n .setStrokeStyle( blueLine )\n\n// Second Axes (extra)\nconst axisX2 = chart.addAxisX({\n opposite: true\n})\n .setTitle('Axis X2')\n .setInterval(-60, 500, false, true)\n .setStrokeStyle( greenLine )\n\nconst axisY2 = chart.addAxisY({\n opposite: true\n})\n .setTitle('Axis Y2')\n .setInterval(-20, 200, false, true)\n .setStrokeStyle( greenLine )\n\n// Create series with explicit axes.\n// Axes 1\nconst splineSeries1 = chart.addSplineSeries({\n xAxis: axisX1,\n yAxis: axisY1\n})\n .setStrokeStyle( redLine )\n .setPointFillStyle( blueFill )\n .setName('Axis 1')\n\n// Axes 2\nconst splineSeries2 = chart.addSplineSeries({\n xAxis: axisX2,\n yAxis: axisY2\n})\n .setStrokeStyle( greenLine )\n .setName('Axis 2')\n\n// Function to add random values to given series with createProgressiveRandomGenerator\nconst setSeries = (amountOfDots, splineSeries) => {\n createProgressiveRandomGenerator()\n .setNumberOfPoints(amountOfDots)\n .generate()\n // Set stream to output X points at a time\n .setStreamBatchSize(amountOfDots)\n // Create a new stream with previously defined stream settings\n .toStream()\n .forEach((point, i) => {\n point.x = point.x * 5, // define X coordinates for point \n point.y = (20 * Math.sin(i / (10 * Math.PI)) + (Math.floor(Math.random() * 20))) // define Y coordinates for point \n splineSeries.add(point) // add to series\n })\n\n}\n\n// set Series 1\nsetSeries(250, splineSeries1)\n\n// set Series 2\nsetSeries(70, splineSeries2)\n","url":null,"readme":"*Several Axes XY chart*\n\nThis example shows creation of a Chart with 2 XY Axes. This Chart can be used to compare or see several graphs\n\nHere's the creation of a 2 XY Axes Chart.\n\n```javascript\n// Create Chart.\nconst chart = lightningChart().ChartXY()\n// Get references to default axes X and Y \nconst axisX1 = chart.getDefaultAxisX()\nconst axisX1 = chart.getDefaultAxisY()\n// Create extra axes X and Y \nconst axisX2 = chart.addAxisX({\n opposite: true\n})\nconst axisX2 = chart.addAxisY({\n opposite: true\n})\n// Create series with explicit axes.\nconst splineSeries1 = chart.addSplineSeries({\n xAxis: axisX1,\n yAxis: axisY1\n})\nconst splineSeries2 = chart.addSplineSeries({\n xAxis: axisX2,\n yAxis: axisY2\n})\n// Set values of sub-categories on categories (relative Y size).\nsplineSeries1.add({x: 0, y: 0.4})\nsplineSeries2.add({x: 2, y : 0.6})\n```\n","image":"severalAxesXY.png"},{"id":"lcjs-example-0010-multiChannelLineProgressive","title":"Multi-channel real-time data monitoring JavaScript Chart","tags":["line","xy","realtime","datapattern","datacleaning"],"description":"Lightning-fast Line Chart visualization over multiple channels that progress on the same X Axis","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example for multi-channel real-time monitoring Line Chart.\n */\n\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n// Import data Generator \nconst { createProgressiveFunctionGenerator } = require('@arction/xydata')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n SolidLine,\n AxisScrollStrategies,\n AxisTickStrategies,\n ColorRGBA,\n UIElementBuilders,\n Themes,\n} = lcjs\n\nconst DATA_FREQUENCY_HZ = 1000\nconst CHANNELS_AMOUNT = 10\nconst xIntervalMax = 30 * DATA_FREQUENCY_HZ\nconst channelIntervalY = 2 // [-1, 1]\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(`Multi-channel real-time monitoring (${CHANNELS_AMOUNT} chs, ${DATA_FREQUENCY_HZ} Hz)`)\nconst axisX = chart\n .getDefaultAxisX()\n .disableAnimations()\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(-xIntervalMax, 0)\n .setTitle('Data points per channel')\nconst axisY = chart.getDefaultAxisY()\n .setTickStrategy(AxisTickStrategies.Empty)\n .setTitle('< Channels >')\n .disableAnimations()\n .setScrollStrategy(AxisScrollStrategies.expansion)\n .setInterval(-channelIntervalY / 2, CHANNELS_AMOUNT * channelIntervalY)\n\nconst series = new Array(CHANNELS_AMOUNT).fill(0).map((_, iChannel) => {\n // Create line series optimized for regular progressive X data.\n const nSeries = chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true => The X step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n })\n .setName(`Channel ${iChannel + 1}`)\n // Default color, but thickness = 1\n .setStrokeStyle(style => style.setThickness(1))\n .setMouseInteractions(false)\n // Enable automatic data cleaning.\n .setMaxPointCount(xIntervalMax)\n\n // Add custom tick for each channel.\n chart\n .getDefaultAxisY()\n .addCustomTick(UIElementBuilders.AxisTick)\n .setValue(( CHANNELS_AMOUNT - (1 + iChannel) ) * channelIntervalY)\n .setTextFormatter(() => `Channel ${iChannel + 1}`)\n .setGridStrokeStyle(\n new SolidLine({\n thickness: 1,\n fillStyle: new SolidFill({ color: ColorRGBA(255, 255, 255, 60) }),\n }),\n )\n\n return nSeries\n})\n\n// Add LegendBox.\nchart.addLegendBox().add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Define unique signals that will be used for channels.\nconst signals = [\n { length: 100 * 2 * Math.PI, func: (x) => Math.sin(x / 100) },\n { length: 100 * 2 * Math.PI, func: (x) => Math.cos(x / 100) },\n { length: 200 * 2 * Math.PI, func: (x) => Math.cos(x / 200) + Math.sin(x / 100) },\n { length: 200 * 2 * Math.PI, func: (x) => Math.sin(x / 50) + Math.cos(x / 200) },\n { length: 200 * 2 * Math.PI, func: (x) => Math.sin(x / 100) * Math.cos(x / 200) },\n { length: 450 * 2 * Math.PI, func: (x) => Math.cos(x / 450) },\n { length: 800 * 2 * Math.PI, func: (x) => Math.sin(x / 800) },\n { length: 650 * 2 * Math.PI, func: (x) => Math.sin(x / 200) * Math.cos(x / 650) },\n]\n\n// Generate data sets for each signal.\nPromise.all(\n signals.map((signal) =>\n createProgressiveFunctionGenerator()\n .setStart(0)\n .setEnd(signal.length)\n .setStep(1)\n .setSamplingFunction(signal.func)\n .generate()\n .toPromise()\n .then((data) => data.map((xy) => xy.y)),\n ),\n).then((dataSets) => {\n // Push more data in each frame, while keeping a consistent amount of incoming points according to specified stream rate as Hz.\n let xPos = 0\n let tPrev = performance.now()\n let newDataModulus = 0\n const streamMoreData = () => {\n const tNow = performance.now()\n const tDelta = tNow - tPrev\n let newDataPointsCount = DATA_FREQUENCY_HZ * (tDelta / 1000) + newDataModulus\n newDataModulus = newDataPointsCount % 1\n newDataPointsCount = Math.floor(newDataPointsCount)\n const seriesNewDataPoints = []\n for (let iChannel = 0; iChannel < series.length; iChannel++) {\n const nDataset = dataSets[iChannel % (dataSets.length - 1)]\n const newDataPoints = []\n for (let iDp = 0; iDp < newDataPointsCount; iDp++) {\n const x = xPos + iDp\n const iData = x % (nDataset.length - 1)\n const ySignal = nDataset[iData]\n const y = ((CHANNELS_AMOUNT - 1) - iChannel) * channelIntervalY + ySignal\n const point = { x, y }\n newDataPoints.push(point)\n }\n seriesNewDataPoints[iChannel] = newDataPoints\n }\n series.forEach((nSeries, iSeries) => nSeries.add(seriesNewDataPoints[iSeries]))\n xPos += newDataPointsCount\n\n // Request next frame.\n tPrev = tNow\n requestAnimationFrame(streamMoreData)\n }\n streamMoreData()\n})\n\n\n\n// Measure FPS.\nlet tStart = window.performance.now()\nlet frames = 0\nlet fps = 0\nconst title = chart.getTitle()\nconst recordFrame = () => {\n frames++\n const tNow = window.performance.now()\n fps = 1000 / ((tNow - tStart) / frames)\n sub_recordFrame = requestAnimationFrame(recordFrame)\n\n chart.setTitle(`${title} (FPS: ${fps.toFixed(1)})`)\n}\nlet sub_recordFrame = requestAnimationFrame(recordFrame)\nsetInterval(() => {\n tStart = window.performance.now()\n frames = 0\n}, 5000)\n","url":null,"readme":"*Multi-channel real-time data monitoring Line Chart*\n\nLightning-fast Line Chart visualization over multiple channels that progress on the same X Axis\n\nWidely used in all kinds of fields for monitoring live data from many (hundreds or even thousands) of data sources at the same time.\n\nFrames rendered per second (*FPS*) is recorded live, and displayed on the Chart title. FPS of 40-60 indicates a smooth running performance.\n\n## Automatic data cleaning\n\nIn infinitely scrolling applications, cleaning old out of view data is extremely crucial;\nin this example `LineSeries.setMaxPointsCount` method is used to enable automatic data cleaning.\nFor reference, see also `LineSeries.setDataCleaningThreshold`.\n\nThe `setMaxPointsCount` method sets the *amount of data points*, that will always be retained in the *series head* (latest data).\nThe full conditions for valid *data cleaning* are:\n1. There is a considerably large chunk of data out of view (visible data is not cleaned!).\n2. If the chunk is removed, the amount of data that remains is still more than *max points count*.\n\nIn practice, this results in an application where you can even scroll back for some distance and see older data, but if you scroll far enough, you will find that the old data has been *cleaned*. This allows the application to run *forever*!\n","image":"multiChannelLineProgressive.png"},{"id":"lcjs-example-0011-customTicksScrolling","title":"Custom ticks on scrolling X Axis","tags":["line","xy","axis","realtime","customtick"],"description":"Custom tick positioning logic on a scrolling Axis.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases a simulated ECG signal.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n AxisTickStrategies,\n UIElementBuilders,\n Themes,\n} = lcjs\n\n// Import data-generators from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold \n})\n .setTitle('Custom X ticks with scrolling Axis')\n\n// Create line series optimized for regular progressive X data.\nconst series = chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true => The X step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n })\n .setMouseInteractions(false)\n\n// * Manage X Axis ticks with custom logic *\n// Disable default X ticks.\nconst xAxis = chart.getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.Empty)\n\nconst addCustomTickX = (pos, isMinor) => {\n const tick = xAxis.addCustomTick(UIElementBuilders.AxisTick)\n // Set tick text.\n .setTextFormatter(() => String(pos))\n // Set tick location.\n .setValue(pos)\n // Style tick.\n .setMarker(marker => marker\n .setTextFont(font => font\n .setSize( isMinor ? 10 : 14 )\n )\n )\n .setTickLength( isMinor ? 4 : 8 )\n .setGridStrokeStyle(style => style.setFillStyle(fill => fill.setA( isMinor ? 50 : 100 )))\n customTicks.push(tick)\n return tick\n}\n\n// Create custom ticks on X Axis on realtime scrolling application.\nlet customTicks = []\nconst createTicksInRangeX = (start, end) => {\n // Major ticks every 1000 units.\n const majorTickInterval = 1000\n for (let majorTickPos = start - (start % majorTickInterval); majorTickPos <= end; majorTickPos += majorTickInterval) {\n if (majorTickPos >= start) {\n addCustomTickX(majorTickPos, false)\n }\n }\n // Major ticks every 100 units, but not at same interval as major ticks.\n const minorTickInterval = 100\n for (let minorTickPos = start - (start % minorTickInterval); minorTickPos <= end; minorTickPos += minorTickInterval) {\n if (minorTickPos >= start && minorTickPos % majorTickInterval !== 0) {\n addCustomTickX(minorTickPos, true)\n }\n }\n}\n// X range until which custom ticks are valid.\nlet customTicksPos = 0\nxAxis.onScaleChange((start, end) => {\n // Ensure new ticks are created.\n if (end > customTicksPos) {\n createTicksInRangeX(customTicksPos, end)\n customTicksPos = end\n }\n\n // Destroy ticks that are out of scrolling range.\n customTicks = customTicks.filter(tick => {\n if (tick.getValue() < start) {\n // Tick is out of view.\n tick.dispose()\n return false\n } else {\n return true\n }\n })\n})\n\n// Setup X Axis as progressive scrolling.\nxAxis\n .setTitle('X Axis (custom ticks)')\n .setInterval(0, 1400)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n\nchart.getDefaultAxisY()\n .setTitle('Y Axis')\n\n\n// Stream data in.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(10000)\n .generate()\n .setStreamRepeat(true)\n .setStreamInterval(1000/60)\n .setStreamBatchSize(5)\n .toStream()\n .forEach(point => {\n series.add(point)\n })","url":null,"readme":"*Custom ticks on scrolling X Axis*\n\nThis example showcases custom tick positioning on a scrolling Axis.\n\nBoth major and minor ticks on X Axis are created in application code, and destroyed as the axis scrolls.\n","image":"customTicksScrolling.png"},{"id":"lcjs-example-0012-timeTickStrategy","title":"JavaScript Time Ticks Chart","tags":["xy","axis","time","line"],"description":"Example showcasing the TimeTickStrategy feature which is ideal for displaying timestamp data between couple days all the way down to microseconds level.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example showcasing the TimeTickStrategy feature which is ideal for displaying timestamp data between couple days all the way down to microseconds level.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n Themes\n} = lcjs\n\n// Import data-generators from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle('TimeTickStrategy example')\n .setPadding({ right: 40 })\n .setMouseInteractionsWhileScrolling(true)\n\nconst axisX = chart\n .getDefaultAxisX()\n // Enable TimeTickStrategy for X Axis.\n .setTickStrategy(AxisTickStrategies.Time)\n\nconst axisY = chart.getDefaultAxisY()\n\nconst series = chart.addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX',\n },\n})\n\nconst legend = chart.addLegendBox().add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Generate ~8 hours of data for line series.\nconst numberOfPoints = 100 * 1000\n// TimeTickStrategy interprets values as milliseconds (UNIX timestamp).\nconst xInterval = 8 * 60 * 60 * 1000\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(numberOfPoints)\n .generate()\n .toPromise()\n .then((data) => {\n data = data.map((p) => ({\n x: (p.x * xInterval) / numberOfPoints,\n y: p.y,\n }))\n series.add(data)\n })\n","url":null,"readme":"Example that showcases the `TimeTickStrategy` feature.\n\n`TimeTickStrategy` is one of the available options for *automatic axis tick placement and formatting*. It is designed for depicting milliseconds timestamp data with extremely high resolution and flexibility.\n\nThe effective range of `TimeTickStrategy` starts from maximum of 100 hours all the way down to individual milliseconds level.\n\nFor this entire range, the tick labels are formatted dynamically showing the currently relevant precision with all the required accuracy.\n\nAs can be seen from the simplicity of this examples source code, `TimeTickStrategy` is really straightforward to use, and does not require any gimmicks from the user.\n\n```js\n// TimeTickStrategy example usage.\n\n// (1) Enable TimeTickStrategy for Axis.\nchart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.Time)\n\n// (2) Push data where X is in milliseconds.\nseries.add([\n { x: 0, y: 0 }, // 00:00:00\n { x: 1000, y: 0 }, // 00:00:01\n { x: 2000, y: 0 }, // 00:00:02\n { x: 2001, y: 0 }, // 00:00:02.001\n { x: 2001.001, y: 0 }, // 00:00:02.001001\n])\n\n```\n\n## What is the difference between Time ticks and DateTime ticks?\n\nThe effective Axis range; `TimeTickStrategy` is used for depicting high-resolution data within some days max., while `DateTimeStrategy` is used for depicting lower resolution data over the span of long times, like some months or even tens of years.\n","image":"timeTickStrategy.png"},{"id":"lcjs-example-0013-timeTickStrategyScrolling","title":"JavaScript Scrolling Time Ticks Chart","tags":["xy","axis","time","line","realtime"],"description":"Example showcasing the TimeTickStrategy feature with scrolling data and axis","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example showcasing the TimeTickStrategy feature with scrolling data and axis.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n AxisTickStrategies,\n Themes,\n} = lcjs\n\n// Import data-generators from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Scrolling TimeTickStrategy example')\n .setPadding({ right: 40 })\n\nconst axisX = chart\n .getDefaultAxisX()\n // Enable TimeTickStrategy for X Axis.\n .setTickStrategy(AxisTickStrategies.Time)\n // Configure progressive ScrollStrategy.\n .setScrollStrategy(AxisScrollStrategies.progressive)\n // Set view to 1 minute.\n .setInterval(-1 * 60 * 1000, 0)\n .setAnimationScroll(false)\n\nconst axisY = chart.getDefaultAxisY()\n .setAnimationScroll(false)\n\n// Add 3 series for real-time signal monitoring.\nconst seriesList = new Array(3).fill(0).map((_, iSeries) =>\n chart\n .addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX',\n },\n })\n)\n\nconst legend = chart.addLegendBox().add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Stream live timestamp data into series.\n\n// Application displays timestamps as offset from when application started (starts at 00:00:00).\nconst timeOrigin = Date.now()\n\nPromise.all(\n seriesList.map((_) =>\n createProgressiveTraceGenerator()\n .setNumberOfPoints(60 * 1000)\n .generate()\n .toPromise(),\n ),\n).then((data) => {\n let dataAmount = 0\n const pushData = () => {\n const nDataPoints = 1\n seriesList.forEach((series, iSeries) => {\n const seriesData = data[iSeries]\n const seriesPoints = []\n for (let i = 0; i < nDataPoints; i += 1) {\n seriesPoints.push({\n // TimeTickStrategy interprets values as milliseconds (UNIX timestamp).\n // Exactly same as JavaScript Date APIs.\n x: Date.now() - timeOrigin,\n y: seriesData[(dataAmount + i) % seriesData.length].y,\n })\n }\n series.add(seriesPoints)\n })\n dataAmount += nDataPoints\n requestAnimationFrame(pushData)\n }\n pushData()\n})\n","url":null,"readme":"Example that showcases the `TimeTickStrategy` feature with real-time data.\n\n`TimeTickStrategy` is one of the available options for *automatic axis tick placement and formatting*. It is designed for depicting milliseconds timestamp data with extremely high resolution and flexibility.\n\nThe effective range of `TimeTickStrategy` starts from maximum of 100 hours all the way down to **individual milliseconds level**.\n\nFor this entire range, the tick labels are formatted dynamically showing the currently relevant precision with all the required accuracy.\n\n`TimeTickStrategy` is a very powerful feature for real-time data monitoring applications, since its effective range perfectly covers minute, hour and even day intervals - not to mention that you can zoom in so deep that you can even see differences between individual microseconds.\n\nSince `TimeTickStrategy` interprets axis coordinates as \"milliseconds after 0\", it doesn't make much sense to supply data directly as UNIX timestamps - instead, most applications would choose some \"time origin\" and subtract it from the UNIX timestamp. This means that the data will be displayed as \"difference from time origin\".\n\nIn this example, `timeOrigin` is set to `Date.now()` at the start, and data point X values are calculated live as `x: Date.now() - timeOrigin`.\n\n## What is the difference between Time ticks and DateTime ticks?\n\nThe effective Axis range; `TimeTickStrategy` is used for depicting high-resolution data within some days max., while `DateTimeStrategy` is used for depicting lower resolution data over the span of long times, like some months or even tens of years.\n","image":"timeTickStrategyScrolling.png"},{"id":"lcjs-example-0014-highPrecisionAxis","title":"JavaScript High Precision Axis Chart","tags":["xy","axis","line","high-precision"],"description":"Example showcasing the High Precision Axis XY feature which allows zooming of microseconds precision without any dirty data transforming","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example showcasing the High Precision Axis XY feature which allows zooming of microseconds precision without any dirty data transforming\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n Themes,\n} = lcjs\n\nconst chart = lightningChart()\n .ChartXY({\n defaultAxisX: {\n type: 'linear-highPrecision',\n },\n })\n .setTitle('High precision Axis XY (1 second high-resolution data)')\n .setPadding({ right: 40 })\n\nconst axisX = chart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.Time, (timeTicks) => timeTicks)\n\nconst axisY = chart.getDefaultAxisY()\n\nconst trace0 = chart\n .addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX',\n },\n })\n .setCursorInterpolationEnabled(true)\n\nconst trace1 = chart\n .addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX',\n },\n })\n .setCursorInterpolationEnabled(true)\n\nchart.addLegendBox().add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Fetch example data.\nfetch( document.head.baseURI + 'examples/assets/0014/data.json' )\n .then( r => r.json() )\n .then(data => {\n // Data X coordinates are in milliseconds starting from 0.\n trace0.add(data['trace0'])\n trace1.add(data['trace1'])\n axisX.fit(false)\n \n // Animate zoom in.\n setTimeout(() => {\n axisX.setInterval(\n 436.72461163324084, 436.89107794426303,\n 1000,\n true,\n )\n axisY.setInterval(\n 87.52113652316002, 89.79482263187646,\n 1000,\n true,\n )\n\n // Animate zoom out.\n setTimeout(() => {\n axisX.fit(2000)\n axisY.fit(2000)\n }, 2500)\n }, 1500)\n })\n\n","url":null,"readme":"This example showcases the `High Precision Axis XY` feature.\n\nAn XY Axis can be marked with *high precision mode* when it is created, similarly how *logarithmic axes* are created.\nThis example shows how it is done for default X Axis.\n\n```javascript\nconst chart = lightningChart()\n .ChartXY({\n // Default Axis types can only be defined when chart is created.\n defaultAxisX: {\n type: 'linear-highPrecision',\n },\n })\n```\n\n*High precision Axis* behaves just like a normal linear Axis, but with two technical differences:\n\n1. There is a performance drop for all attached series. This is mostly an increase on GPU usage, which shows on low end devices the most, for example laptops with integrated GPUs.\n\n2. The Axis zoom range is *significantly* improved (read more below).\n\n`High Precision Axis XY` currently supports all XY series types except `Heatmap Series`.\n\n## About Axis zoom range limits\n\n*LightningChart JS* is easily the market leader in zooming interactions and visualization resolution, and contrary to most chart libraries, we are open about axis zooming limits.\n\nThe fact of the matter is that every kind of chart library has some limit to how small differences it can visualize. Ultimately the limits are dictated by the used technology (for us this is `WebGL`).\n\nAll veteran chart library developers have come across the issue sooner or later, when an user collides against this limit and the question is asked - how can we get higher precision? Usually this ends in decimating the end users data with tricks and gimmicks, which can lead to a working result but with the expense of user experience.\n\n`High Precision Axis XY` feature is our reaction to a proper improvement to these limitations - it handles all the annoying stuff that users had to previously do in their *application code* and gives even better benefits;\n\nHere are reference tables to the achievable zoom range with normal Axis vs `High Precision Axis XY`\n(achievable zoom range depends on the magnitude of Axis interval start).\n \n### Normal Axis\n\n| Axis interval start | Min interval | Max interval |\n| :------------------ | :----------- | :----------- |\n| `0` | `1e-4` | `1e+16` |\n| `100` | `1e-2` | `1e+16` |\n| `10 000` | `1.00` | `1e+16` |\n| `1 000 000` | `100` | `1e+16` |\n| `Date.now()` (UNIX) | `73600000` | `1e+16` |\n\n### High Precision Axis XY\n\n| Axis interval start | Min interval | Max interval |\n| :------------------ | :----------- | :----------- |\n| `0` | `1e-12` | `1e+30` |\n| `100` | `1e-10` | `1e+30` |\n| `10 000` | `1e-8` | `1e+30` |\n| `1 000 000` | `1e-6` | `1e+30` |\n| `Date.now()` (UNIX) | `1.00` | `1e+30` |\n","image":"highPrecisionAxis.png"},{"id":"lcjs-example-0015-confidenceEllipseXY","title":"JavaScript Confidence Ellipse Chart","tags":["xy","point","polygon"],"description":"Example showcasing visualization of XY confidence ellipse widely used in statistics field","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Multiple chart examples, dynamic point coloring, Scatter Charts, Point Cluster Charts, 3D charts for JS.","src":"/*\n * LightningChartJS example that showcases visualization of XY scatter chart with confidence ellipse.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst { lightningChart, PointShape, ColorCSS, SolidLine, SolidFill, Themes } =\n lcjs;\n\n// Create chart and series.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"Scatter chart + confidence Ellipse\");\n\n// Create point series for visualizing scatter points.\nconst pointSeries = chart\n .addPointSeries({ pointShape: PointShape.Circle })\n .setPointSize(3)\n .setName(\"Scatter series\");\n\n// Visualize confidence ellipse with polygon series.\n// Note, routine for calculation of confidence ellipse coordinates from scatter data set is not currently included in LightningChart JS!\nconst polygonSeries = chart\n .addPolygonSeries()\n .setMouseInteractions(false)\n .setCursorEnabled(false);\n\n// Fetch example data from JSON asset.\nfetch(\n document.head.baseURI +\n \"examples/assets/0015/data-confidenceEllipseXY.json\"\n)\n .then((r) => r.json())\n .then((data) => {\n const { scatterPoints, confidenceEllipsePolygonCoords } = data;\n\n // Add data to series.\n pointSeries.add(scatterPoints);\n polygonSeries\n .add(confidenceEllipsePolygonCoords)\n .setFillStyle(new SolidFill({ color: ColorCSS(\"gray\").setA(30) }))\n .setStrokeStyle(\n new SolidLine({\n thickness: 1,\n fillStyle: new SolidFill({ color: ColorCSS(\"white\") }),\n })\n );\n });\n","url":null,"readme":"This example shows how a _confidence ellipse_ can be drawn inside a scatter chart with LightningChart JS.\n\nConfidence ellipses are used especially with statistic chart applications. A common usage, for example, is the 95% confidence ellipse, which visualizes the area that contains 95% of samples, which makes it easier for the user to understand which points are _outliers_.\n\nThere are various ways of defining and calculating the shape of different confidence ellipses - traditionally in 2D applications they are rotated ellipses with width and height, however in some cases they might not actually be ellipses geometrically, but more complex shapes.\n\n\n\nLightningChart JS currently does not come with any routine for calculating a confidence ellipse shape. However, just about any kind of confidence ellipse shape can be visualized using `PolygonSeries`.\n\n`PolygonSeries` can be used to draw any _non-complex_ polygon shape (_polygon that doesn't intersect with itself_) inside XY charts. It is configured by supplying a list of `{x: number, y: number}` coordinates.\n\n```js\n// Example, visualization of polygon inside ChartXY.\nconst polygonSeries = chart.addPolygonSeries();\nconst polygonFigure = polygonSeries.add([\n { x: 0, y: 0 },\n { x: 5, y: 10 },\n { x: 10, y: 15 },\n { x: 15, y: 5 },\n { x: 10, y: -5 },\n { x: 5, y: -2 },\n]);\n```\n","image":"confidenceEllipseXY.png"},{"id":"lcjs-example-0016-largeScatterChartXY","title":"JavaScript Large Scatter Chart","tags":["xy","point","polygon"],"description":"Example visualization of large scatter chart (> million data points)","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Multiple chart examples, dynamic point coloring, Scatter Charts, Point Cluster Charts, 3D charts for JS.","src":"/*\n * LightningChartJS example that showcases visualization of large XY scatter chart.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst { lightningChart, PointShape, ColorCSS, SolidLine, SolidFill, Themes } =\n lcjs;\n\n// Create chart and series.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"\");\n\n// Create point series for visualizing scatter points.\nconst pointSeries = chart\n .addPointSeries({ pointShape: PointShape.Square })\n .setPointSize(1)\n .setMouseInteractions(false)\n // NOTE: This disables data cursor from interacting with this series.\n // Data cursor does not perform well with scatter charts in millions of data points range.\n .setCursorEnabled(false)\n .setName(\"Scatter series\");\n\n// Visualize confidence ellipse with polygon series.\n// Note, routine for calculation of confidence ellipse coordinates from scatter data set is not currently included in LightningChart JS!\nconst polygonSeries = chart\n .addPolygonSeries()\n .setMouseInteractions(false)\n .setCursorEnabled(false);\n\n// Fetch example data from JSON asset.\nfetch(\n document.head.baseURI +\n \"examples/assets/0016/data-largeScatterChartXY.json\"\n)\n .then((r) => r.json())\n .then((data) => {\n console.log(data)\n const { scatterPoints, confidenceEllipsePolygonCoords } = data;\n chart.setTitle(`Scatter chart (${(data.scatterPoints.length / 10 ** 6).toFixed(\n 1,\n )} million points) + confidence Ellipse`)\n\n // Add data to series.\n pointSeries.add(scatterPoints);\n polygonSeries\n .add(confidenceEllipsePolygonCoords)\n .setFillStyle(new SolidFill({ color: ColorCSS(\"gray\").setA(30) }))\n .setStrokeStyle(\n new SolidLine({\n thickness: 1,\n fillStyle: new SolidFill({ color: ColorCSS(\"white\") }),\n })\n );\n });\n","url":null,"readme":"This example showcases visualization of a Scatter chart with relatively large data set (1 million data points).\n\nLightningChart JS has created a revolution with the possibilities of data visualization in web - previously Scatter chart visualization was realistically possible only to ranges of some hundred thousand data points and even then it required complicated developer effort to enable any zooming or panning interactions with satisfactory performance.\n\nWith LC JS a million points Scatter chart is loaded in less than a second and the result is unlike anything seen before - operations like zooming and panning are instantaneous.\n\nAdditionally, when compared to previous alternatives, the usage is ridiculously simple. With SVG/Canvas based drawing, users would have severe limitations with large data amounts as these technologies don't scale well.\n\nHere's how simple the creation of a million points scatter chart is with LC JS:\n\n```js\nconst chart = lightningChart().ChartXY()\nconst series = chart.addPointSeries()\n .add(new Array(1000000).fill().map(_ => ({\n x: Math.random(),\n y: Math.random()\n })))\n```\n\nThis takes about 100 milliseconds to load and will immediately be interactable with lightning fast reactions!\n\nThe maximum possible Scatter chart size scales well with used hardware, especially RAM (memory) and GPU (graphics card) - On average office PC, LC JS can handle more than hundred million data points.","image":"largeScatterChartXY.png"},{"id":"lcjs-example-0017-largeLineChartXY","title":"JavaScript Large Line Chart","tags":["xy","line"],"description":"Example visualization of large line chart (several million data points)","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases visualization of large XY line chart.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst { lightningChart, PointShape, ColorCSS, SolidLine, SolidFill, Themes } =\n lcjs;\n\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata');\n\nconst trendsCount = 10\nconst dataPerTrend = 500 * 1000\n\n// Create chart and series.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(`Line Chart with large data set (${((trendsCount * dataPerTrend)/10**6).toFixed(1)} million data points)`);\n\nconst seriesArray = new Array(trendsCount).fill().map(_ => chart\n .addLineSeries({ dataPattern: {\n pattern: 'ProgressiveX',\n } })\n .setStrokeStyle(stroke => stroke.setThickness(1))\n)\n\nseriesArray.forEach((series) => {\n createProgressiveTraceGenerator()\n .setNumberOfPoints(dataPerTrend)\n .generate()\n .toPromise()\n .then(data => {\n series.add(data)\n })\n})\n\nconst legend = chart.addLegendBox()\n .add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n","url":null,"readme":"This example showcases visualization of a Line chart with relatively large data set (several millions of data points).\n\nLightningChart JS has created a revolution with the possibilities of data visualization in web - previously Line chart visualization was realistically possible only to ranges of some hundred thousand data points and even then it required complicated developer effort to enable any zooming or panning interactions with satisfactory performance.\n\nWith LC JS a million points Line chart is loaded in less than a second and the result is unlike anything seen before - operations like zooming and panning are instantaneous.\n\nAdditionally, when compared to previous alternatives, the usage is ridiculously simple. With SVG/Canvas based drawing, users would have severe limitations with large data amounts as these technologies don't scale well.\n\nHere's how simple the creation of a million points line chart is with LC JS:\n\n```js\nconst chart = lightningChart().ChartXY()\nconst series = chart.addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX'\n }\n})\n .setStrokeStyle(stroke => stroke.setThickness(1))\n .addArrayY(new Array(1000000).fill().map(_ => Math.random()))\n```\n\nThis takes about 100 milliseconds to load and will immediately be interactable with lightning fast reactions!\n\nThe maximum possible Line chart size scales well with used hardware, especially RAM (memory) and GPU (graphics card) - On average office PC, LC JS can handle more than hundred million data points.","image":"largeLineChartXY.png"},{"id":"lcjs-example-0018-refreshingLineSpectrum","title":"Refreshing Spectrum Line JavaScript Chart","tags":["xy","line","realtime"],"description":"Example for Chart with 2D spectrogram + dynamic projections on mouse interaction.","metaDescription":"Example for Chart with 2D spectrogram + dynamic projections on mouse interaction.","src":"/*\n * LightningChartJS example for line chart application with rapidly changing data set\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AutoCursorModes,\n Themes\n} = lcjs;\n\nconst { createSpectrumDataGenerator } = require(\"@arction/xydata\");\n\n// Create XY Chart\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Spectrum Line Chart')\n .setAutoCursorMode(AutoCursorModes.disabled)\n\n// Set static Y axis interval.\nchart.getDefaultAxisY()\n .setScrollStrategy(undefined)\n .setInterval(0.09, .9)\n\n// Add Line series\nconst series = chart.addLineSeries()\n\n// Generate several spectrum data sets that will be displayed on after another.\ncreateSpectrumDataGenerator()\n .setSampleSize(1024)\n .setNumberOfSamples(600)\n .setFrequencyStability(2)\n .setVariation(2)\n .generate()\n .toPromise()\n .then(dataSet => {\n // dataSet contains many samples. Setup code that will change displayed sample once every frame.\n let iSample = 0\n const nextSample = () => {\n iSample = (iSample + 1) % dataSet.length\n const sample = dataSet[iSample]\n // Sample only contains Y values, use `addArrayY` to automatically generate X coordinate for each data point.\n series.clear().addArrayY(sample)\n requestAnimationFrame(nextSample)\n }\n nextSample()\n})\n","url":null,"readme":"This example showcases a common line chart application, where the displayed line data set is changed very rapidly.\n\nThis example uses spectrogram data, so the line chart displays the latest spectrum only.\n\nWhen compared to a [spectrogram](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0805-spectrogramProjection.html), this is the same but without a view of the data history.\n\n**About performance...**\n\nWhile there are numerous different Line Chart tools available in web, the wide majority (> 95%) are not designed nor suitable for applications such as this, where the data set is changed in super fast intervals.\n\nWe at LightningChart have studied various different web data visualization tools to support our mission of being the web chart with the best performance in the world.\n\nThese studies are all publicly available and can be found on our website in our definite favorite [Performance section](https://www.arction.com/high-performance-javascript-charts/).","image":"RefreshingLine.png"},{"id":"lcjs-example-0019-flowCytometryChart","title":"JavaScript Flow Cytometry Chart","tags":["xy","points","palette"],"description":"Visualization of a Flow Cytometry data set (FSC + SSC properties)","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Multiple chart examples, dynamic point coloring, Scatter Charts, Point Cluster Charts, 3D charts for JS.","src":"/*\n * LightningChartJS example that showcases visualization of a Flow Cytometry data set (FSC + SSC properties).\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\nconst {\n lightningChart,\n PalettedFill,\n LUT,\n ColorRGBA,\n PointShape,\n translatePoint,\n Themes,\n} = lcjs;\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle('Flow Cytometry Visualization')\n .setMouseInteractions(false)\n .setPadding(0)\n\nconst axisX = chart\n .getDefaultAxisX()\n .setInterval(1.3, 10, false, true)\n .setTitle('FSC-A (10⁶)')\n .setMouseInteractions(false)\n .setThickness(60)\n\nconst axisY = chart\n .getDefaultAxisY()\n .setInterval(-0.2, 1.8, false, true)\n .setTitle('SSC-A (10⁶)')\n .setMouseInteractions(false)\n .setThickness(80)\n\nconst pointSeries = chart.addPointSeries({\n pointShape: PointShape.Square\n})\n .setCursorEnabled(false)\n .setIndividualPointValueEnabled(true)\n .setPointSize(2)\n .setPointFillStyle(\n new PalettedFill({\n lookUpProperty: 'value',\n lut: new LUT({\n interpolate: true,\n steps: [\n { value: 0, color: ColorRGBA(0, 0, 0, 0) },\n { value: 1, color: ColorRGBA(0, 0, 255) },\n { value: 10, color: ColorRGBA(50, 50, 255) },\n { value: 50, color: ColorRGBA(0, 255, 0) },\n { value: 100, color: ColorRGBA(255, 255, 0) },\n { value: 150, color: ColorRGBA(255, 0, 0) },\n ],\n }),\n }),\n )\n\nfetch(\n document.head.baseURI +\n \"examples/assets/0019/flowCytometryChart-data.json\"\n )\n .then((r) => r.json())\n .then((data) => {\n // Align Chart Axis area so that each data point occupies exactly 1 pixel.\n const columns = data.data.length\n const rows = data.data[0].length\n\n const pxLocationAxisStart = translatePoint(\n { x: axisX.getInterval().start, y: axisY.getInterval().start },\n { x: axisX, y: axisY },\n chart.engine.scale,\n )\n const pxLocationAxisEnd = translatePoint(\n { x: axisX.getInterval().end, y: axisY.getInterval().end },\n { x: axisX, y: axisY },\n chart.engine.scale,\n )\n const pxAxisSize = {\n x: Math.ceil(pxLocationAxisEnd.x - pxLocationAxisStart.x),\n y: Math.ceil(pxLocationAxisEnd.y - pxLocationAxisStart.y),\n }\n\n const pointSize = 2\n // Set chart paddings so that each column/row in data set occupies exactly 1 pixel.\n const horizontalPadding = Math.max(pxAxisSize.x - columns * pointSize, 0)\n const verticalPadding = Math.max(pxAxisSize.y - rows * pointSize, 0)\n chart.setPadding({\n left: horizontalPadding / 2,\n right: horizontalPadding / 2,\n top: verticalPadding / 2,\n bottom: verticalPadding / 2,\n })\n\n // Unpack data from [[sample, sample, ...], [...], [...]] format to list of XY+Value points.\n const points = []\n data.data.forEach((column, iColumn) => {\n column.forEach((sample, iRow) => {\n if (sample === 0) return\n points.push({\n x: data.x.start + iColumn * (data.x.end - data.x.start) / data.data.length, \n y: data.y.start + iRow * (data.y.end - data.y.start) / data.data[0].length,\n value: sample, \n })\n })\n })\n pointSeries.add(points)\n })\n","url":null,"readme":"Flow cytometry is an every-day method in research and clinical practices for analyzing individual cells within heterogeneous samples (like blood sample, for example).\n\nIt is based on observing the behavior of pointed light, and can rapidly analyze multiple parameters from each cell.\n\nIn this example, all the samples are displayed in a single chart which displays the following information:\n\n- Forward scatter (FSC). This is measured based on how much light is scattered along the path of the light source.\n\n- Side scatter (SSC). This is measured based on hot much light is scattered at a ninety-degree angle relative to the light source.\n\nEach point in the chart is one sample. When multiple samples have the same SSC and FSC measurement, the point color is adjusted (red = most overlapping samples).\n\nIn practice, the data from flow cytometry is filtered through several steps that each look at the relationship between some data attributes. This example is just 1 of these steps.\n\nAs an example of this filtering, some application might select some valid range of FSC/SSC values that will be considered in later analysis steps.\n\n\n\n## Flow cytometry and LightningChart\n\nThe go-to framework for visualizing flow cytometry is definitely \"R\", a software environment for statistical computing and graphics.\n\nHere are some scenarios where we believe LightningChart is a strong alternative:\n\n1. Real-time data\n\nLightningChart excels at fast changes to data sets, if your application continuously receives data, especially with high rates like several times in second, LightningChart is what you need.\n\n2. Data interactions\n\nIn some cases users might need the ability to interact with data (panning, zooming, cursor, etc.). In many statistical tools, this kind of features do not exist since only a minority would have an use for them. Additionally, even if present they might not perform too well especially with large data sets.\n\n3. Deployment in the internet\n\nR is a desktop application. In most cases, users will install it on their own computer and directly interact with data sets to utilize a shared data visualization application.\n\nLightningChart JS, on the other hand, is a web library. LC JS projects can be conveniently embedded inside web pages, mobile and even desktop applications.\n","image":"flowCytometryChart.png"},{"id":"lcjs-example-0020-dateTimeAxis","title":"JavaScript Chart with DateTime Axis","tags":["date-time","axis","xy"],"description":"Example for creation of a DateTime Axis. DateTime axis can present time.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChart JS Example that showcases a Customer Satisfaction graph using a LineSeries and DateTime-Axis.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n DataPatterns,\n Themes\n} = lcjs\n\n// Create a XY Chart.\nconst dateOrigin = new Date(2008, 0, 1)\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\nchart.getDefaultAxisX()\n .setTickStrategy(\n // Use DateTime TickStrategy for this Axis\n AxisTickStrategies.DateTime,\n // Modify the DateOrigin of the TickStrategy\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\nchart.setTitle('Customer Satisfaction')\n\n// Add a line series.\nconst lineSeries = chart.addLineSeries()\n .setName('Customer Satisfaction')\n\n// Generate some points using for each month\nconst dataFrequency = 30 * 24 * 60 * 60 * 1000\n\n// Setup view nicely.\nchart.getDefaultAxisY()\n .setScrollStrategy(undefined)\n .setInterval(0, 100)\n .setTitle('Satisfaction %')\n\n// Data for the plotting\nconst satisfactionData = [\n { x: 0, y: 0 },\n { x: 1, y: 8 },\n { x: 2, y: 12 },\n { x: 3, y: 18 },\n { x: 4, y: 22 },\n { x: 5, y: 32 },\n { x: 6, y: 40 },\n { x: 7, y: 48 },\n { x: 8, y: 50 },\n { x: 9, y: 54 },\n { x: 10, y: 59 },\n { x: 11, y: 65 },\n { x: 12, y: 70 },\n { x: 13, y: 68 },\n { x: 14, y: 70 },\n { x: 15, y: 69 },\n { x: 16, y: 66 },\n { x: 17, y: 65.4 },\n { x: 18, y: 64 },\n { x: 19, y: 65 },\n { x: 20, y: 63.5 },\n { x: 21, y: 62 },\n { x: 22, y: 61.2 },\n { x: 23, y: 63 },\n { x: 24, y: 61 },\n { x: 25, y: 62 },\n { x: 26, y: 62 },\n { x: 27, y: 60 },\n { x: 28, y: 57.8 },\n { x: 29, y: 58 },\n { x: 30, y: 61 },\n { x: 31, y: 59 },\n { x: 32, y: 63 },\n { x: 33, y: 61 },\n { x: 34, y: 61.8 },\n { x: 35, y: 62 },\n { x: 36, y: 59.9 },\n { x: 37, y: 58 },\n { x: 38, y: 60 },\n { x: 39, y: 63 },\n { x: 40, y: 59.5 },\n { x: 41, y: 62.5 },\n { x: 42, y: 59.7 },\n { x: 43, y: 57 },\n { x: 44, y: 61 },\n { x: 45, y: 59 },\n { x: 46, y: 61 },\n { x: 47, y: 65 },\n { x: 48, y: 62 },\n { x: 49, y: 60 },\n { x: 50, y: 58 },\n { x: 51, y: 59 },\n { x: 52, y: 61 },\n { x: 53, y: 64 },\n { x: 54, y: 65.5 },\n { x: 55, y: 67 },\n { x: 56, y: 68 },\n { x: 57, y: 69 },\n { x: 58, y: 68 },\n { x: 59, y: 69.5 },\n { x: 60, y: 69.9 },\n { x: 61, y: 68.5 },\n { x: 62, y: 67 },\n { x: 63, y: 65 },\n { x: 64, y: 63 },\n { x: 65, y: 60 },\n { x: 66, y: 61.6 },\n { x: 67, y: 62 },\n { x: 68, y: 61 },\n { x: 69, y: 60 },\n { x: 70, y: 63.3 },\n { x: 71, y: 62.7 },\n { x: 72, y: 64.3 },\n { x: 73, y: 63 },\n { x: 74, y: 61.2 },\n { x: 75, y: 60 },\n { x: 76, y: 61 },\n { x: 77, y: 64 },\n { x: 78, y: 61.9 },\n { x: 79, y: 61 },\n { x: 80, y: 58 },\n { x: 81, y: 59 },\n { x: 82, y: 60.5 },\n { x: 83, y: 61 },\n { x: 84, y: 63 },\n { x: 85, y: 64.5 },\n { x: 86, y: 65 },\n { x: 87, y: 66.2 },\n { x: 88, y: 64.9 },\n { x: 89, y: 63 },\n { x: 90, y: 62 },\n { x: 91, y: 63 },\n { x: 92, y: 61.8 },\n { x: 93, y: 62 },\n { x: 94, y: 63 },\n { x: 95, y: 64.2 },\n { x: 96, y: 63 },\n { x: 97, y: 61 },\n { x: 98, y: 59.7 },\n { x: 99, y: 61 },\n { x: 100, y: 58 },\n { x: 101, y: 59 },\n { x: 102, y: 58 },\n { x: 103, y: 58 },\n { x: 104, y: 57.5 },\n { x: 105, y: 59.2 },\n { x: 106, y: 60 },\n { x: 107, y: 61.9 },\n { x: 108, y: 63 },\n { x: 109, y: 64.1 },\n { x: 110, y: 65.9 },\n { x: 111, y: 64 },\n { x: 112, y: 65 },\n { x: 113, y: 62 },\n { x: 114, y: 60 },\n { x: 115, y: 58 },\n { x: 116, y: 57 },\n { x: 117, y: 58.2 },\n { x: 118, y: 58.6 },\n { x: 119, y: 59.3 },\n { x: 120, y: 61 }\n]\n\n// Adding points to the series\nlineSeries.add(satisfactionData.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\n\n// Show the customized result table for each point\nlineSeries.setCursorResultTableFormatter((builder, series, xValue, yValue) => {\n return builder\n .addRow('Customer Satisfaction')\n .addRow(series.axisX.formatValue(xValue))\n .addRow(yValue.toFixed(2) + \"%\")\n})\n","url":null,"readme":"This example shows creation of a DateTime Axis, for rendering XY-series where either/both of X/Y dimensions can present *time*. This doesn't affect the input of data - format remains as *{x: number, y: number}* - however, DateTime-axes format their values from number to a date and time. This affects axis labels, markers and cursors.\n\nA DateTime-*Axis* is created by specifying its *TickStrategy*. Here's how it looks when setting the *Axis TickStrategy*:\n\n```javascript\n// Add an XY Chart\nconst chart = lightningChart().ChartXY({})\n// Set the TickStrategy of the default X Axis to a DateTime TickStrategy\nchart.getDefaultAxisX().setTickStrategy( AxisTickStrategies.DateTime )\n```\n\nThe above mentioned examples will provide an Axis that will format its scale values to their DateTime-representations. This conversion relies on a reference date, further referred to as *origin-date*. This *origin-date* specifies the DateTime value that is equal to *zero* as a numeric representation. Incremental values will result in progressive DateTimes by milliseconds. For example, given *origin-date* is equal to the **1st of January 2002, 2PM**, a numeric value of **7,200,000** would be translated to **1st of January 2002 4PM**.\n\nTranslating this to how we can modify the origin date in our Axis, we can do this by adding a mutator to the setTickStrategy() method to modify the origin date:\n\n```javascript\n// Define the origin-date. (y, m [0-11], d [1-31], h [0-23])\nconst originDate = new Date(2002, 0, 1, 13)\n// Create DateTime AxisTickStrategy with specified originDate.\nchart.getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n // Use a mutator to set the origin date for this Axis' TickStrategy\n (tickStrategy) => tickStrategy.setDateOrigin(originDate)\n )\n```\n\nIf this *TickStrategy* would be supplied to an *X-Axis*, it would effectively mean that its scale would start from 1st of January 2002 14PM, so a *XY-point* with coordinates `{ x: 0, y: 0 }` would be formated as `{ x: \"1.1.2002 14:00\", y: 0 }`.\n\n\nIt is worth mentioning that big *DateTime*-intervals can produce severe precision problems (eq. when zooming in). The only way to battle this is by reducing the distance of timestamps from the active *origin-date*.\n","image":"dateTimeAxis.png"},{"id":"lcjs-example-0021-dateTimeAxisOrigin","title":"DateTime Axis Origin","tags":["line","xy","date-time"],"description":"Example showcases using origin with Axis TickStrategies.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChart JS Example that showcases using origin with Axis TickStrategies.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n DataPatterns,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Create Dashboard.\nconst db = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfRows: 2,\n numberOfColumns: 1\n})\n// Create two XY-charts.\nconst chartDefaultOrigin = db.createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n})\nconst chartModifiedOrigin = db.createChartXY({\n columnIndex: 0,\n rowIndex: 1,\n columnSpan: 1,\n rowSpan: 1\n})\n\n// Use the DateTime Axis TickStrategy with the default origin.\nchartDefaultOrigin\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.DateTime)\n\n// Use the DateTime Axis TickStrategy with the origin set to current day.\nchartModifiedOrigin\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(new Date()\n ))\n// Setup the charts. \nchartDefaultOrigin\n .setTitle('Default origin')\n .getDefaultAxisY()\n .setTitle('Value')\nchartModifiedOrigin\n .setTitle('Modified origin')\n .getDefaultAxisY()\n .setTitle('Value')\n\n// Create line series for both charts.\nconst series1 = chartDefaultOrigin.addLineSeries()\nconst series2 = chartModifiedOrigin.addLineSeries()\n\n// Create a multiplier to set each point on X Axis correspond to 1 hour of time.\nconst dataFrequency = 1000 * 60 * 60\n\n// Generate traced points using 'xydata'-library.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(1000)\n .generate()\n .toPromise()\n .then(data => {\n // Use same data on both Series for demonstration purposes.\n series1.add(data.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\n series2.add(data.map((point) => ({ x: point.x * dataFrequency, y: point.y })))\n })\n","url":null,"readme":"This example shows the usage of Origin Date with DateTime Axis TickStrategy, for rendering XY-series where either or both of X/Y dimensions can present *time*.\n\nIn the example, both charts use the same data, with each point of data set to be an hour apart along the X Axis; What is different between the charts, is the *origin* for the DateTime TickStrategy used in the X Axis.\n\nThe top chart uses the default origin (January 1st, 1970), while the bottom chart uses a custom origin (set to current Date).\n\nThe *origin-date* can be specified to whichever DateTime is desired. It is done by passing a *javascript Date object* to the function that creates the *DateTime TickStrategy*:\n\n```javascript\n// Define the origin-date. (y, m [0-11], d [1-31], h [0-23])\nconst originDate = new Date(2002, 0, 1, 13)\n// Create DateTime AxisTickStrategy with specified originDate.\nconst dateTimeTickStrategy = AxisTickStrategies.DateTime(originDate)\n// Create a chart\nconst chart = lightningChart().ChartXY({})\n// Get the default X Axis\nchart.getDefaultAxisX()\n // Set the Tick Strategy to use\n .setTickStrategy( AxisTickStrategies.DateTime,\n // Use created DateTime AxisTickStrategy in the X Axis\n (tickStrategy) => tickStrategy.setDateOrigin(dat1eTimeTickStrategy) )\n```\n\nIf this *TickStrategy* would be supplied to an *X-Axis*, it would effectively mean that its scale would start from 1st of January 2002 14PM, so a *XY-point* with coordinates `{ x: 0, y: 0 }` would be formated as `{ x: 1.1.2002 14:00, y: 0 }`.\n\nIt is worth mentioning that big *DateTime*-intervals can produce severe precision problems (eq. when zooming in). The only way to battle this is by reducing the distance of timestamps from the active *origin-date*.\n","image":"dateTimeAxisOrigin.png"},{"id":"lcjs-example-0022-2dPointsValuePalette","title":"JavaScript 2D Points Value Palette Coloring","tags":["xy","line","points","palette"],"description":"Dynamic 2D points coloring by arbitrary user data set.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Multiple chart examples, dynamic point coloring, Scatter Charts, Point Cluster Charts, 3D charts for JS.","src":"/*\n * LightningChartJS example that showcases 2D points dynamic coloring based on an arbitrary user data set.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PointShape,\n PalettedFill,\n LUT,\n ColorRGBA,\n Themes,\n} = lcjs;\n\n// Import data-generators from 'xydata'-library.\nconst { createProgressiveTraceGenerator } = require(\"@arction/xydata\");\n\n// Create a XY Chart.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"2D points value palette coloring\")\n .setPadding({ right: 20 });\n\nconst palette = new PalettedFill({\n lookUpProperty: \"value\",\n lut: new LUT({\n units: \"trace dist (y)\",\n interpolate: true,\n steps: [\n { value: 0, color: ColorRGBA(255, 255, 127) },\n { value: 2, color: ColorRGBA(255, 0, 0) },\n { value: 10, color: ColorRGBA(255, 0, 0, 0) },\n ],\n }),\n});\n\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(1000)\n .generate()\n .toPromise()\n .then((tracePoints) => {\n const points = chart\n .addPointSeries({\n pointShape: PointShape.Circle,\n })\n .setName(\"Outliers\")\n .setPointSize(3.0)\n .setPointFillStyle(palette)\n // IMPORTANT: Individual point values must be explicitly enabled for dynamic coloring.\n .setIndividualPointValueEnabled(true);\n\n // Generate points for outlier series.\n const outlierPoints = [];\n tracePoints.forEach((p) =>\n outlierPoints.push(\n ...new Array(Math.round(Math.random() * 50)).fill(0).map((_, i) => {\n const outlierY = p.y + (Math.random() * 2 - 1) * 10;\n return {\n x: p.x,\n y: outlierY,\n // `value` is used to lookup color from palette. Manual calculation allows any kind of data set to be used.\n value: Math.abs(outlierY - p.y),\n };\n })\n )\n );\n points.add(outlierPoints);\n\n const line = chart\n .addLineSeries({\n dataPattern: {\n pattern: \"ProgressiveX\",\n },\n })\n .setName(\"Trace stroke\")\n .add(tracePoints)\n .setStrokeStyle((style) => style.setThickness(5));\n\n chart.addLegendBox().add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.20,\n })\n });\n","url":null,"readme":"_2D points dynamic coloring by value palette_\n\nThis example showcases a new feature in LCJS v3.0.1 release - dynamic coloring of 2D points using a value palette.\n\nValue palette coloring is a really powerful feature, which allows dynamic coloring based on any kind data set.\n\nIn this example it is used to color a data set based on Y distance from another data set.\n\nIn practice, this is done by calculating the Y difference and assigning a `value` property to each data point - naturally, there are endless different ways this can be used.\n\nIn addition to this, dynamic coloring by `x` or `y` coordinate is also supported. This is activated simply by setting the `PalettedFill.lookUpProperty` to either `'x'` or `'y'`.\n","image":"2dPointsValuePalette.png"},{"id":"lcjs-example-0023-decayingLineChart","title":"JavaScript Decaying Line Chart","tags":["xy","line","realtime"],"description":"Showcases Line Chart with refreshing data, where older samples are displayed for a while, slowly decaying out.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/**\n * LightningChartJS example for Line Chart with refreshing data, where older samples are displayed for a while, slowly decaying out.\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst {\n lightningChart,\n AutoCursorModes,\n SolidFill,\n SolidLine,\n ColorRGBA,\n Themes,\n} = lcjs;\n\n// Amount of data points in each sample.\nconst SAMPLE_SIZE = 1280;\n// Amount of unique samples in application.\nconst SAMPLE_COUNT = 300;\n// Max amount of samples displayed at any time.\nconst DECAY_STEPS_COUNT = 75;\n\n// Convenience function for checking if Theme is dark or light.\nconst isThemeDark = (theme) => [Themes.darkGold, Themes.darkGreen, Themes.darkLime, Themes.darkMagenta, Themes.darkRed, Themes.darkTurquoise, Themes.darkNature, Themes.blueSciFiNew].includes(theme)\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"Decaying Line Chart\")\n .setAutoCursorMode(AutoCursorModes.disabled);\n\nconst axisX = chart.getDefaultAxisX();\nconst axisY = chart.getDefaultAxisY().setInterval(-1.05, 1.05, false, true);\n\n// Generate series for each sample that can be displayed at a time.\nconst seriesList = new Array(DECAY_STEPS_COUNT).fill(0).map((_, i) => {\n const series = chart.addLineSeries({\n dataPattern: {\n // 'ProgressiveX' -> each data point is assumed to have larger X value than previous one.\n pattern: \"ProgressiveX\",\n },\n });\n return series;\n});\n\nconst defaultStrokeColor = seriesList[0]\n .getStrokeStyle()\n .getFillStyle()\n .getColor();\n\n// Generate list of stroke styles for each decay step.\nconst strokeStyles = new Array(DECAY_STEPS_COUNT).fill(0).map((_, i) => {\n const lerpPos = i / DECAY_STEPS_COUNT;\n // Linear interpolation convenience function.\n const lerp = (v0, v1, p) => v0 * (1 - p) + v1 * p;\n return new SolidLine({\n thickness: 1,\n fillStyle: new SolidFill({\n // Decay step colors shift between default stroke color and fully transparent white.\n color: ColorRGBA(\n lerp(defaultStrokeColor.getR(), isThemeDark(chart.getTheme()) ? 0 : 255, lerpPos),\n lerp(defaultStrokeColor.getG(), isThemeDark(chart.getTheme()) ? 0 : 255, lerpPos),\n lerp(defaultStrokeColor.getB(), isThemeDark(chart.getTheme()) ? 0 : 255, lerpPos),\n lerp(255, 0, lerpPos)\n ),\n }),\n });\n});\n\n// Generate example data.\nconst data = []\nfor (let i = 0; i < SAMPLE_COUNT; i += 1) {\n const sample = []\n const amplitude = Math.cos(i * 2 * Math.PI / SAMPLE_COUNT)\n for (let x = 0; x < SAMPLE_SIZE; x += 1) {\n let y = Math.cos(i * .01 + 5 * x * Math.PI / SAMPLE_SIZE) * amplitude\n y += Math.random() * 0.02\n sample.push({x, y})\n }\n data.push(sample)\n}\n\n// Setup data animation.\nlet iteration = 0;\nconst nextIteration = () => {\n // Update data of 1 series.\n const newSampleData = data[iteration % SAMPLE_COUNT];\n const newSampleSeriesIndex = iteration % seriesList.length;\n const newSampleSeries = seriesList[newSampleSeriesIndex];\n newSampleSeries.clear().add(newSampleData);\n\n // Update style of every series for decay effect.\n seriesList.forEach((series, i) => {\n let seriesStyleIndex = newSampleSeriesIndex - i;\n if (seriesStyleIndex < 0) {\n seriesStyleIndex = strokeStyles.length + seriesStyleIndex;\n }\n const seriesStyle = strokeStyles[seriesStyleIndex];\n series.setStrokeStyle(seriesStyle);\n });\n\n // Schedule next update and update counter.\n iteration += 1;\n requestAnimationFrame(nextIteration);\n};\nnextIteration();\n","url":null,"readme":"This example showcases a refreshing line chart application, where some amount of previous samples are left visible for a brief moment.\n\nOlder samples are constantly updated with increasing transparency colors to give a \"decaying\" effect.\n\nThis effect is achieved by preparing an individual `LineSeries` for each displayed sample and updating the stroke style on every update.\nUpdating stroke style is a really fast operation, and there isn't any particular limit to the number of series either, so the amount of data in this kind of application can be scaled quite far up.\n","image":"decayingLineChart.png"},{"id":"lcjs-example-0024-ultraPrecisionTradingChart","title":"JavaScript Ultra Precision Trading Chart","tags":["trading","dashboard","xy","line","ui","cursor","interactions"],"description":"Next-generation Fintech charts in web. LightningChart JS supports plotting of even 1 microsecond resolution data","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"// Trading line chart with 1 microsecond precision data\n// 3 series, display a 2.5 second interval, total data points = 7.5 million\n\nconst lcjs = require('@arction/lcjs')\nconst xydata = require('@arction/xydata')\nconst {\n AxisTickStrategies,\n emptyFill,\n emptyLine,\n synchronizeAxisIntervals,\n translatePoint,\n lightningChart,\n UIOrigins,\n UIElementBuilders,\n UILayoutBuilders,\n AutoCursorModes,\n Themes\n} = lcjs\nconst {\n createProgressiveTraceGenerator\n} = xydata\n\nconst CHANNELS = 3\nconst DATA_PER_CHANNEL = 2.5 * 1000 * 1000\nconst STEP_X = 10 ** -3\n\nconst dashboard = lightningChart().Dashboard({\n numberOfColumns: 1,\n numberOfRows: CHANNELS,\n disableAnimations: true,\n // theme: Themes.darkGold\n})\n\nconst chartList = new Array(CHANNELS).fill(0).map((_, i) => {\n const chart = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: i,\n })\n .setPadding({ right: 80 })\n\n if (i > 0) {\n chart.setTitleFillStyle(emptyFill)\n } else {\n chart.setTitle(`3 stock price trends with 1 microsecond data resolution (total ${DATA_PER_CHANNEL * CHANNELS} values)`)\n }\n\n const axisX = chart.getDefaultAxisX().setThickness({ min: 30 }).setTickStrategy(AxisTickStrategies.Time)\n const axisY = chart.getDefaultAxisY().setTitle('Price (€)').setThickness({ min: 80 })\n\n const uiLayout = chart\n .addUIElement(UILayoutBuilders.Column, { x: chart.getDefaultAxisX(), y: chart.getDefaultAxisY() })\n .setOrigin(UIOrigins.LeftTop)\n .setPosition({ x: chart.getDefaultAxisX().getInterval().start, y: chart.getDefaultAxisY().getInterval().end })\n .setMouseInteractions(false)\n .setBackground((background) => background.setStrokeStyle(emptyLine))\n chart.getDefaultAxisX().onScaleChange((start, end) => uiLayout.setPosition({ x: start, y: chart.getDefaultAxisY().getInterval().end }))\n chart.getDefaultAxisY().onScaleChange((start, end) => uiLayout.setPosition({ x: chart.getDefaultAxisX().getInterval().start, y: end }))\n uiLayout\n .addElement(UIElementBuilders.TextBox)\n .setText('< Stock name >')\n .setTextFont((font) => font.setSize(8))\n\n return chart\n})\n\nconst seriesList = chartList.map((chart, i) => {\n const series = chart\n .addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX',\n },\n automaticColorIndex: i * 2,\n })\n .setName('< Stock name >')\n .setCursorInterpolationEnabled(false)\n return series\n})\n\nsynchronizeAxisIntervals(...chartList.map((chart) => chart.getDefaultAxisX()))\n\nPromise.all(\n seriesList.map((series, i) =>\n createProgressiveTraceGenerator()\n .setNumberOfPoints(DATA_PER_CHANNEL)\n .generate()\n .toPromise()\n .then((xyTrace) => {\n // Map generated XY trace data set into a more realistic trading data set.\n const baseLine = 10 + Math.random() * 2000\n const variationAmplitude = baseLine * 0.03\n const yMin = xyTrace.reduce((min, cur) => Math.min(min, cur.y), Number.MAX_SAFE_INTEGER)\n const yMax = xyTrace.reduce((max, cur) => Math.max(max, cur.y), -Number.MAX_SAFE_INTEGER)\n const yIntervalHalf = (yMax - yMin) / 2\n const yTraceBaseline = yMin + yIntervalHalf\n return xyTrace.map((xy) => ({\n x: xy.x * STEP_X,\n y: baseLine + ((xy.y - yTraceBaseline) / yIntervalHalf) * variationAmplitude,\n }))\n }),\n ),\n).then((dataSets) => {\n seriesList.forEach((series, i) => {\n series.add(dataSets[i])\n })\n\n // Customize chart interactions.\n chartList.forEach((chart) => {\n chart.setMouseInteractions(false)\n chart.getDefaultAxisX().setMouseInteractions(false)\n })\n\n // Create custom chart interaction for mouse dragging inside chart area.\n const xBandList = chartList.map((chart) => chart.getDefaultAxisX().addBand().dispose())\n chartList.forEach((chart) => {\n const axisX = chart.getDefaultAxisX()\n const axisY = chart.getDefaultAxisY()\n chart.setMouseInteractionRectangleFit(false).setMouseInteractionRectangleZoom(false)\n chart.onSeriesBackgroundMouseDrag((_, event, button, startLocation, delta) => {\n if (button !== 0) return\n\n xBandList.forEach((band, i) => {\n const bandChart = chartList[i]\n const xAxisLocationStart = translatePoint(\n bandChart.engine.clientLocation2Engine(startLocation.x, startLocation.y),\n bandChart.engine.scale,\n { x: axisX, y: axisY },\n ).x\n const xAxisLocationNow = translatePoint(\n bandChart.engine.clientLocation2Engine(event.clientX, event.clientY),\n bandChart.engine.scale,\n { x: axisX, y: axisY },\n ).x\n if (Math.abs(event.clientX - startLocation.x) > 10) {\n band.restore().setValueStart(xAxisLocationStart).setValueEnd(xAxisLocationNow)\n } else {\n band.dispose()\n }\n })\n })\n chart.onSeriesBackgroundMouseDragStop((_, event, button, startLocation) => {\n if (button !== 0 || xBandList[0].isDisposed()) return\n\n const xStart = Math.min(xBandList[0].getValueStart(), xBandList[0].getValueEnd())\n const xEnd = Math.max(xBandList[0].getValueStart(), xBandList[0].getValueEnd())\n chartList[0].getDefaultAxisX().setInterval(xStart, xEnd, false, true)\n xBandList.forEach((band, i) => {\n const nChart = chartList[i]\n let yMin = 999999\n let yMax = -999999\n for (let x = xStart; x < xEnd; x += STEP_X) {\n const dp = dataSets[i][Math.round(x / STEP_X)]\n if (dp !== undefined) {\n yMin = Math.min(yMin, dp.y)\n yMax = Math.max(yMax, dp.y)\n }\n }\n nChart.getDefaultAxisY().setInterval(yMin, yMax, false, true)\n band.dispose()\n })\n })\n chart.onSeriesBackgroundMouseDoubleClick((_, event) => {\n if (event.button !== 0) return\n\n fitActive = true\n chartList.forEach((nChart) => {\n nChart.getDefaultAxisX().fit(false)\n nChart.getDefaultAxisY().fit(false)\n })\n fitActive = false\n })\n })\n\n let fitActive = false\n // When X Axis interval is changed, automatically fit Y axis based on visible data.\n chartList.forEach((chart, i) => {\n chart.getDefaultAxisX().onScaleChange((xStart, xEnd) => {\n if (fitActive) return\n\n let yMin = 999999\n let yMax = -999999\n for (let x = xStart; x < xEnd; x += STEP_X) {\n const dp = dataSets[i][Math.round(x / STEP_X)]\n if (dp !== undefined) {\n yMin = Math.min(yMin, dp.y)\n yMax = Math.max(yMax, dp.y)\n }\n }\n if (yMin < 999999) {\n chart.getDefaultAxisY().setInterval(yMin, yMax, false, true)\n }\n })\n })\n})\n\n// Setup custom data cursor.\nconst resultTable = dashboard.addUIElement(UILayoutBuilders.Column, dashboard.engine.scale)\n .setMouseInteractions(false)\n .setOrigin(UIOrigins.LeftBottom)\n .setMargin(5)\nconst resultTableRows = new Array(1 + CHANNELS).fill(0).map(_ => resultTable.addElement(UIElementBuilders.TextBox))\nresultTable.dispose()\nconst xTicks = chartList.map((chart) => chart.getDefaultAxisX().addCustomTick().dispose())\n\nchartList.forEach((chart) => {\n chart.setAutoCursorMode(AutoCursorModes.disabled)\n chart.onSeriesBackgroundMouseMove((_, event) => {\n const mouseLocationEngine = chart.engine.clientLocation2Engine(event.clientX, event.clientY)\n const mouseLocationAxisX = translatePoint(mouseLocationEngine, chart.engine.scale, { x: chart.getDefaultAxisX(), y: chart.getDefaultAxisY() }).x\n resultTableRows[0].setText(chart.getDefaultAxisX().formatValue(mouseLocationAxisX))\n for (let i = 0; i < CHANNELS; i += 1) {\n const series = seriesList[i]\n const nearestDataPoint = series.solveNearestFromScreen(mouseLocationEngine)\n resultTableRows[1 + i].setText(series.getName() + ': ' + (nearestDataPoint ? chart.getDefaultAxisY().formatValue(nearestDataPoint.location.y) + ' €' : ''))\n }\n resultTable\n .restore()\n .setPosition(mouseLocationEngine)\n xTicks.forEach((xTick) => xTick\n .restore()\n .setValue(mouseLocationAxisX)\n )\n })\n chart.onSeriesBackgroundMouseDragStart(() => {\n resultTable.dispose()\n xTicks.forEach((xTick) => xTick.dispose())\n })\n chart.onSeriesBackgroundMouseLeave(() => {\n resultTable.dispose()\n xTicks.forEach((xTick) => xTick.dispose())\n })\n})\n","url":null,"readme":"This example showcases how LightningChart JS can be used to enable next-generation Fintech chart applications.\n\nAs proven in our [2021 line charts performance comparison](https://www.arction.com/javascript-charts-performance-comparison/), LightningChart JS line charts are **over 700 times faster** than other web charts. LightningChart JS has been proved to be able to visualize data sets with even up to 500 million data points.\n\nThis large data plotting capacity paired together with great zoom capabilities enables some previously unseen possibilities in Fintech applications.\n\nIn this example, a random data set is generated for 3 stock price trends simulating a 1 microsecond resolution between each price measurement.\nThese trends are displayed with a shared X (time) view, showcasing an example on how analysis of incredibly high speed transactions and price impacts could be done in real life.\n\nThe amount of data in this example is 7 500 000 points. With 1 μs precision, this translates to 2.5 seconds of data per each trend.\n\nAs you can see, the data amount scales very quickly to crazy amounts. For this reason, this kind of visualization applications aren't applicable to entire data sets, but only to elsewhere identified \"points of interest\", such as turning points in trends.\n\nTo learn more about LightningChart JS and its Fintech capabilities, here are some potentially interesting links:\n\n- [Next Generation Real-Time Trading Dashboard](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0509-dashboardRealtimeTrading.html)\n\n- [LC JS Trading + Indicators (Volume, RSI, SMA, EMA) Showcase with real trading data from alphavantage.co](https://arction.github.io/lcjs-showcase-trading/)\n\n- [Candlestick, Area, DateTime features and more](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0502-dashboardTrading.html)\n\n- [Latest news on LC JS performance](https://www.arction.com/high-performance-javascript-charts/)\n","image":"ultraPrecisionTradingChart.png"},{"id":"lcjs-example-0025-officeDataVisualizationLayer","title":"JavaScript Office Layout Data Visualization Chart","tags":["xy","image","ui","heatmap"],"description":"Example showcasing LightningChart interactions with external images and icons in context of office layout data visualization.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/**\n * Example showcasing LightningChart interactions with external images and icons in context of office layout data visualization.\n */\n\nconst lcjs = require('@arction/lcjs')\nconst {\n lightningChart,\n AxisTickStrategies,\n ColorRGBA,\n ImageFill,\n PalettedFill,\n emptyLine,\n LUT,\n AutoCursorModes,\n UIElementBuilders,\n UIOrigins,\n LegendBoxBuilders,\n Themes\n} = lcjs\n\nconst chartPadding = 10\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setAnimationsEnabled(false)\n .setMouseInteractions(false)\n .setTitle('Office layout data visualization layer')\n .setAutoCursor(autoCursor => autoCursor\n .disposeTickMarkerX()\n .disposeTickMarkerY()\n )\n\nchart.forEachAxis((axis) => axis\n .setTickStrategy(AxisTickStrategies.Empty)\n .setStrokeStyle(emptyLine)\n .setInterval(0, 1, false, true)\n)\n\nconst legend = chart.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n .setAutoDispose({\n type: 'max-width',\n maxHeight: 0.30,\n })\n\nconst officeLayoutImage = new Image()\nofficeLayoutImage.crossOrigin = ''\nofficeLayoutImage.src = document.head.baseURI + 'examples/assets/0025/office.png'\nofficeLayoutImage.onload = () => {\n chart.setSeriesBackgroundFillStyle(\n new ImageFill({\n source: officeLayoutImage,\n }),\n )\n\n // Maintain static aspect ratio of chart area (enclosed area between axes).\n const targetAspectRatio = officeLayoutImage.height / officeLayoutImage.width\n const updateChartAspectRatio = () => {\n const chartBounds = chart.engine.container.getBoundingClientRect()\n const chartSizePx = {\n x: Math.ceil(chartBounds.width - 2 * chartPadding),\n y: Math.ceil(chartBounds.height - 2 * chartPadding),\n }\n const curAspectRatio = chartSizePx.y / chartSizePx.x\n if (curAspectRatio < targetAspectRatio) {\n // Add horizontal chart padding to maintain Map picture aspect ratio.\n const targetAxisWidth = chartSizePx.y / targetAspectRatio\n const horizontalPadding = Math.max(chartSizePx.x - targetAxisWidth, 0)\n chart.setPadding({ left: horizontalPadding / 2, right: horizontalPadding / 2, top: chartPadding, bottom: chartPadding })\n } else if (curAspectRatio > targetAspectRatio) {\n // Add vertical chart padding to maintain Map picture aspect ratio.\n const targetAxisHeight = chartSizePx.x * targetAspectRatio\n const verticalPadding = Math.max(chartSizePx.y - targetAxisHeight, 0)\n chart.setPadding({ top: verticalPadding / 2, bottom: verticalPadding / 2, left: chartPadding, right: chartPadding })\n }\n }\n updateChartAspectRatio()\n window.addEventListener('resize', updateChartAspectRatio)\n\n // Load heat map data visualization layer data set.\n fetch(document.head.baseURI + 'examples/assets/0025/office-wifi-strength.json')\n .then(r => r.json())\n .then(data => {\n const wifiStrengthMatrix = data.data\n const heatmap = chart.addHeatmapGridSeries({\n columns: wifiStrengthMatrix.length,\n rows: wifiStrengthMatrix[0].length,\n start: { x: 0, y: 0 },\n end: { x: 1, y: 1 }\n })\n .setName('Wi-Fi Strength')\n .invalidateIntensityValues(wifiStrengthMatrix)\n .setWireframeStyle(emptyLine)\n .setFillStyle(new PalettedFill({\n lookUpProperty: 'value',\n lut: new LUT({\n interpolate: false,\n steps: [\n // Value 0 = no measurement.\n { value: 0, color: ColorRGBA(0, 0, 0, 0), label: '' },\n // Value 1 = weak wifi strength.\n { value: .9, color: ColorRGBA(255, 0, 0, 50), label: 'Weak' },\n // Value 2 = medium wifi strength.\n { value: 1.9, color: ColorRGBA(255, 255, 0, 50), label: 'Medium' },\n // Value 3 = good wifi strength.\n { value: 2.9, color: ColorRGBA(0, 255, 0, 50), label: 'Good' }\n ]\n })\n }))\n .setCursorResultTableFormatter((builder, series, dataPoint) => builder\n .addRow(series.getName())\n .addRow(\n dataPoint.intensity === 0 ? 'No measurement' :\n dataPoint.intensity === 1 ? 'Weak' :\n dataPoint.intensity === 2 ? 'Medium' :\n dataPoint.intensity === 3 ? 'Good' :\n '?'\n )\n )\n\n legend.add(heatmap)\n })\n\n // Load router icon.\n const routerImage = new Image()\n routerImage.crossOrigin = ''\n routerImage.src = document.head.baseURI + 'examples/assets/0025/router.png'\n routerImage.onload = () => {\n const iconAspectRatio = routerImage.height / routerImage.width\n const iconWidthPx = 48\n // Display router icon inside chart at preset X and Y axis coordinates (range 0-1)\n const routerIcon = chart.addUIElement(UIElementBuilders.TextBox, { x: chart.getDefaultAxisX(), y: chart.getDefaultAxisY() })\n .setText('')\n .setPadding({ left: iconWidthPx, top: iconWidthPx * iconAspectRatio })\n .setBackground(background => background\n .setStrokeStyle(emptyLine)\n .setFillStyle(new ImageFill({\n source: routerImage\n }))\n )\n .setPosition({ x: 0.322, y: 0.09 })\n .setOrigin(UIOrigins.Center)\n }\n}\n","url":null,"readme":"Example showcasing LightningChart JS capabilities with external pictures.\n\nThis example takes place in the context of data visualization in office premises.\nFor this purpose, the series area is styled by a digital picture of the office layout.\n\nIn code, this is implemented by loading the `Image` (in this case PNG file), and creating a new `ImageFill` object using that image.\nWhile it might not be obvious from looking at it, the chart type used in this example is a `ChartXY`.\nThe picture is shown by configuring the fill style of the series background.\n\n```ts\nconst image = new Image()\nimage.src = 'office-layout.png'\n\nconst imageFill = new ImageFill({ source: image })\n\nchart.setSeriesBackgroundFillStyle(imageFill)\n```\n\nOnce, the `ChartXY` is laid over the office layout, any of the numerous data visualization features of the chart type can be used to add detail to the chart.\n\nIn this case, we used a `Heatmap Series` to display the distribution of WiFi strength across the entire office, where the data values are distributed to 4 categories (No measurement, Weak, Medium and Good).\n\n## Adding Icons to LightningCharts\n\nAdditionally, this example showcases how icons can be used inside charts.\nThe example uses this by displaying the WiFi router location as a picture of a router device (bottom of chart).\n\nThis is achieved similarly to the office layout picture by utilizing `ImageFill`.\nHowever, this time instead of styling the series background, an `UIElement` is created and the image is attached to its background.\n\n```ts\nconst uiIcon = chart.addUIElement()\n .setBackground(background => background\n .setFillStyle(imageFill)\n )\n // Icon size is controlled using padding.\n .setPadding({ left: widthPx, top: heightPx })\n .setText('')\n```\n\n[Office layout picture](https://www.edrawsoft.com/template-colored-office-layout.html) by [Edraw](https://www.edrawsoft.com)","image":"officeDataVisualizationLayer.png"},{"id":"lcjs-example-0026-temperatureAnomalyChart","title":"JavaScript Temperature Anomaly Chart","tags":["xy","line","image"],"description":"Visualization of Temperature Anomaly Index and CO2 amount for period from 1880 to 2020. Showcases animated video icons","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChart JS Example that showcases embedding animated GIF icons inside XY charts.\n */\n\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\nconst {\n lightningChart,\n AxisTickStrategies,\n UIElementBuilders,\n UIOrigins,\n ImageFill,\n emptyLine,\n ImageFitMode,\n emptyFill,\n Themes,\n} = lcjs\n\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('')\n\nconst axisY1 = chart.getDefaultAxisY()\n .setTitle('Atmospheric Carbon Dioxide (ppm)')\n\nconst axisY2 = chart.addAxisY({\n opposite: true\n})\n .setTitle('Temperature Anomaly Index (°C)')\n // Hide tick grid-lines from second Y axis.\n .setTickStrategy(AxisTickStrategies.Numeric, (ticks) => ticks\n .setMinorTickStyle(minor => minor\n .setGridStrokeStyle(emptyLine)\n )\n .setMajorTickStyle(major => major\n .setGridStrokeStyle(emptyLine)\n )\n )\n\nconst axisX = chart.getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.DateTime)\n\n// Fetch example data sets.\nfetch(document.head.baseURI + `examples/assets/0026/anomaly-data.json`)\n .then(r => r.json())\n .then(data => {\n const { temperature, co2 } = data\n\n // Visualize Atmospheric Carbon Dioxide (ppm).\n const carbonDioxideSeries = chart.addLineSeries({\n yAxis: axisY1,\n })\n .setName('Atmospheric Carbon Dioxide (ppm)')\n // Data set contains PPM measurement values only. First measurement is from year 1880, and each consecutive measurement is 1 year after previous.\n .add(co2.map((ppm, i) => ({\n y: ppm,\n x: new Date(1880 + i, 0, 1, 0, 0, 0, 0).getTime()\n })))\n\n // Visualize Temperature Anomaly Index (°C).\n const temperatureAnomalyIndexSeries = chart.addLineSeries({\n yAxis: axisY2,\n // Specify index for automatic color selection. By default this would be 1, but a larger number is supplied to increase contrast between series.\n automaticColorIndex: 2\n })\n .setName('Temperature Anomaly Index (°C)')\n // Data set contains PPM measurement values only. First measurement is from year 1880, and each consecutive measurement is 1 year after previous.\n .add(temperature.map((index, i) => ({\n y: index,\n x: new Date(1880 + i, 0, 1, 0, 0, 0, 0).getTime()\n })))\n\n // Add legend.\n const legend = chart.addLegendBox(undefined, { x: axisX, y: axisY1 }).add(chart)\n // Move to non-default location, top left of chart.\n .setOrigin(UIOrigins.LeftTop)\n .setMargin(4)\n const positionLegendOnAxes = () => legend.setPosition({ x: axisX.getInterval().start, y: axisY1.getInterval().end })\n positionLegendOnAxes()\n axisX.onScaleChange(positionLegendOnAxes)\n axisY1.onScaleChange(positionLegendOnAxes)\n\n // Add thundercloud icons to predefined X and Y2 (anomaly index) axis locations.\n const video = document.createElement('video')\n video.crossOrigin = ''\n video.autoplay = true\n video.muted = true\n video.loop = true\n video.src = document.head.baseURI + `examples/assets/0026/thundercloud.webm`\n video.load()\n video.addEventListener('loadeddata', e => {\n video.play()\n const thunderCloudPositions = [\n { x: new Date(1962, 0, 1).getTime(), y: 0.15 },\n { x: new Date(1999, 0, 1).getTime(), y: 0.70 },\n ]\n const thunderCloudImgSize = { x: video.videoWidth, y: video.videoHeight }\n const thunderCloudImgAspectRatio = thunderCloudImgSize.y / thunderCloudImgSize.x\n // NOTE: Visible icon size can be affected by device pixel ratio.\n const thunderCloudIconSizePx = { x: 100, y: 100 * thunderCloudImgAspectRatio }\n thunderCloudPositions.forEach((position) => {\n // UI Picture Icon can be created by creating a TextBox, removing text and controlling the icons size by padding.\n const uiIcon = chart.addUIElement(UIElementBuilders.TextBox, { x: axisX, y: axisY2 })\n .setPosition(position)\n .setOrigin(UIOrigins.CenterBottom)\n .setTextFillStyle(emptyFill)\n .setPadding({ left: thunderCloudIconSizePx.x, top: thunderCloudIconSizePx.y })\n .setBackground(background => background\n .setStrokeStyle(emptyLine)\n .setFillStyle(new ImageFill({\n source: video,\n fitMode: ImageFitMode.Fit,\n }))\n )\n })\n })\n })\n","url":null,"readme":"This example shows visualization of **Temperature anomaly index** and **Atmospheric Carbon Dioxide** in parts per million (ppm for short) for period from 1880 to 2020.\n\n* **Temperature anomaly** means a departure from a reference value or long-term average. A positive anomaly indicates that the observed temperature was warmer than the reference value, while a negative anomaly indicates that the observed temperature was cooler than the reference value.\n\nThis chart has two Y axes since it displays two trends on the same time range, but with different value ranges.\n\nThe extra Y axis on the right side is created like this\n\n```ts\nconst axisY2 = chart.addAxisY({ opposite: true })\n```\n\nWhen creating series, the connected axes can be explicitly defined like so\n\n```ts\nconst temperatureAnomalyIndexSeries = chart.addLineSeries({ yAxis: axisY2 }) \n```\n\nAdditionally, this example showcases adding animated video icons inside the chart. The thunderclouds in this example are displayed from an attached `.mp4` asset file, which is displayed using an `UIElement`.\n\n```ts\nconst video = document.createElement('video')\nvideo.src = 'thundercloud.mp4'\n\nconst uiIcon = chart.addUIElement()\n .setBackground(background => background\n .setFillStyle(new ImageFill({ source: video }))\n )\n```\n\n[Storm](https://icons8.com/icon/9t5k4YMYvtFl/storm) icon by [Icons8](https://icons8.com)\n","image":"temperatureAnomalyChart.png"},{"id":"lcjs-example-0027-visibleFitYAxis","title":"JavaScript Visible Fitting Y Axis Chart","tags":["xy","line","line","real-time"],"description":"Example how Y axis fitting to visible data can be achieved in scrolling line chart applications","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/**\n * Example how Y axis fitting to visible data can be achieved in scrolling line chart applications\n */\n\nconst lcjs = require('@arction/lcjs')\nconst xydata = require('@arction/xydata')\nconst {\n lightningChart,\n AxisScrollStrategies,\n Themes\n} = lcjs\nconst { createProgressiveTraceGenerator } = xydata\n\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Axis Y Fitting to visible data')\n .setMouseInteractions(false)\n\nconst lineSeries = chart.addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX',\n }\n})\n\n// Setup scrolling X Axis.\nconst dataPointsHistory = 500\nconst axisX = chart.getDefaultAxisX()\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(0, dataPointsHistory)\n .setMouseInteractions(false)\n\nconst axisY = chart.getDefaultAxisY()\n .setMouseInteractions(false)\n\n// Keep track of n last data points (visible data points).\nconst lastYValues = []\n// Value that controls how often visible Y interval should be updated. Frequent updates can be CPU intensive especially if there are a lot of data points in view.\nconst updateYViewIntervalMs = 100\nlet lastYViewIntervalUpdate = 0\n\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(10000)\n .generate()\n .setStreamInterval(1000 / 60)\n .setStreamBatchSize(1)\n .setStreamRepeat(true)\n .toStream()\n .forEach(point => {\n // Add point to line series.\n lineSeries.add(point)\n\n // Keep track of n last data points (visible last points)\n if (lastYValues.length >= dataPointsHistory) {\n lastYValues.shift()\n }\n lastYValues.push(point.y)\n\n const tNow = window.performance.now()\n if (tNow - lastYViewIntervalUpdate >= updateYViewIntervalMs) {\n lastYViewIntervalUpdate = tNow\n // Calculate Y values range of visible data points.\n let yMin = Number.MAX_SAFE_INTEGER\n let yMax = -Number.MAX_SAFE_INTEGER\n for (const y of lastYValues) {\n yMin = Math.min(yMin, y)\n yMax = Math.max(yMax, y)\n }\n // Actively set displayed Y axis interval to the range of visible data points.\n axisY.setInterval(yMin, yMax, false, true)\n }\n })\n","url":null,"readme":"Example showcasing how active Y fitting to range of visible data points can be achieved in scrolling applications.\n\nBy default, the *fitting* axis scroll strategy considers the full data set, not only the data points that are visible.\n\nIn some applications, this can be counter intuitive, which is why we created this example. This should provide a concrete reference on how this kind of \"active fitting\" can be implemented.\n\nThe idea is tracking the last couple of Y values and updating axis Y interval manually to only act according to the visible data points instead of entire data set.\n\n## Participating in the development of LightningChart JS\n\nIn case this particular mode of axis fitting is especially interesting/important to you, please don't hesitate to [contact our support](https://www.arction.com/support-services/) and share your very own requirements with us. As we've mentioned before, all our development is driven by user requirements so be sure to get your voice included!\n","image":"visibleFitYAxis.png"},{"id":"lcjs-example-0028-multiChannelLineProgressiveOwnAxes","title":"Multi-channel real-time data monitoring JavaScript Chart","tags":["dashboard","line","xy","realtime","datapattern","datacleaning"],"description":"Lightning-fast Line Chart visualization over multiple channels that progress on the same X Axis","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/**\n * Lightning-fast Line Chart visualization over multiple channels that progress on the same X Axis\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst xydata = require('@arction/xydata')\n\n// NOTE: Assuming predefined number of stacked channels.\nconst SIGNALS = new Array(10).fill(0).map((_, i) => ({\n title: `Ch ${i + 1}`,\n}));\n\nconst DEFAULT_X_RANGE_MS = 30 * 1000;\n\nconst {\n lightningChart,\n AutoCursorModes,\n emptyLine,\n AxisTickStrategies,\n AxisScrollStrategies,\n synchronizeAxisIntervals,\n UIOrigins,\n UIDraggingModes,\n translatePoint,\n LegendBoxBuilders,\n Themes,\n} = lcjs;\n\nconst { createProgressiveFunctionGenerator } = xydata;\n\nconst dashboard = lightningChart()\n .Dashboard({\n numberOfColumns: 1,\n numberOfRows: SIGNALS.length,\n // theme: Themes.darkGold\n })\n .setSplitterStyle(emptyLine);\n\nconst channels = SIGNALS.map((signal, iSignal) => {\n const chart = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: iSignal,\n })\n .setTitle(\"\")\n .setPadding({ top: 0, bottom: 0 })\n .setAutoCursorMode(AutoCursorModes.disabled)\n .setBackgroundStrokeStyle(emptyLine)\n .setMouseInteractions(false);\n\n const axisX = chart\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.Empty)\n .setStrokeStyle(emptyLine)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(0, 10, false, true)\n const axisY = chart\n .getDefaultAxisY()\n .setTickStrategy(AxisTickStrategies.Empty)\n .setStrokeStyle(emptyLine)\n .setTitle(signal.title)\n .setTitleRotation(0)\n .setThickness(60);\n\n const series = chart\n .addLineSeries({\n dataPattern: { pattern: \"ProgressiveX\" },\n automaticColorIndex: iSignal,\n })\n .setName(`Channel ${iSignal + 1}`)\n .setDataCleaning({ minDataPointCount: 10000 });\n\n return { chart, series, axisX, axisY };\n});\nconst channelTop = channels[0];\nconst channelBottom = channels[channels.length - 1];\n\nchannelTop.chart\n .setTitle(\"Multi-channel real-time monitoring (10 chs, 1000 Hz)\")\n .setPadding({ top: 8 });\n\nconst axisX = channelBottom.axisX\n .setTickStrategy(AxisTickStrategies.Time, (ticks) =>\n ticks\n .setMajorTickStyle((major) => major.setGridStrokeStyle(emptyLine))\n .setMinorTickStyle((minor) => minor.setGridStrokeStyle(emptyLine))\n )\nsynchronizeAxisIntervals(\n axisX,\n ...channels.map((ch) => ch.axisX).filter((axis) => axis !== axisX)\n);\naxisX.setInterval(-DEFAULT_X_RANGE_MS, 0);\n\n// Add legend\nconst legend = dashboard.addLegendBox(LegendBoxBuilders.VerticalLegendBox, dashboard.uiScale)\n .setPosition({ y: 50, x: translatePoint({ x: channelBottom.chart.pixelScale.x.getCellSize() - channelBottom.chart.getPadding().right, y: 0 }, channelBottom.chart.pixelScale, dashboard.uiScale).x })\n .setOrigin(UIOrigins.RightCenter)\nchannels.forEach(channel => legend.add(channel.series))\n\n// Custom interactions for zooming in/out along Time axis while keeping data scrolling.\naxisX\n .setNibInteractionScaleByDragging(false)\n .setNibInteractionScaleByWheeling(false)\n .setAxisInteractionZoomByWheeling(false);\nconst customZoomX = (_, event) => {\n const interval = axisX.getInterval();\n const range = interval.end - interval.start;\n const newRange = range + Math.sign(event.deltaY) * 0.1 * Math.abs(range);\n axisX.setInterval(interval.end - newRange, interval.end, false, false);\n event.preventDefault()\n event.stopPropagation()\n};\naxisX.onAxisInteractionAreaMouseWheel(customZoomX);\nchannels.forEach((channel) =>\n channel.chart.onSeriesBackgroundMouseWheel(customZoomX)\n);\n\n// Add LCJS user interface button for resetting view.\nconst buttonReset = dashboard\n .addUIElement()\n .setText(\"Reset\")\n .setPosition({ x: 0, y: 0 })\n .setOrigin(UIOrigins.LeftBottom)\n .setMargin({ left: 4, bottom: 4 })\n .setDraggingMode(UIDraggingModes.notDraggable);\nbuttonReset.onMouseClick((_) => {\n const xMax = channels[0].series.getXMax();\n axisX.setInterval(xMax - DEFAULT_X_RANGE_MS, xMax, false, false);\n channels.forEach((channel) => channel.axisY.fit());\n});\n\n// Define unique signals that will be used for channels.\nconst signals = [\n { length: 400 * Math.PI, func: (x) => Math.sin(x / (200)) },\n { length: 400 * Math.PI, func: (x) => Math.cos(x / (200)) },\n { length: 800 * Math.PI, func: (x) => Math.cos(x / (400)) + Math.sin(x / (200)) },\n { length: 800 * Math.PI, func: (x) => Math.sin(x / (100)) + Math.cos(x / (400)) },\n { length: 800 * Math.PI, func: (x) => Math.sin(x / (200)) * Math.cos(x / (400)) },\n { length: 1800 * Math.PI, func: (x) => Math.cos(x / (900)) },\n { length: 3200 * Math.PI, func: (x) => Math.sin(x / (1600)) },\n { length: 2600 * Math.PI, func: (x) => Math.sin(x / (400)) * Math.cos(x / (1300)) },\n]\n// Generate data sets for each signal.\nPromise.all(\n signals.map((signal) =>\n createProgressiveFunctionGenerator()\n .setStart(0)\n .setEnd(signal.length)\n .setStep(1)\n .setSamplingFunction(signal.func)\n .generate()\n .toPromise()\n .then((data) => data.map((xy) => xy.y)),\n ),\n)\n.then((dataSets) => {\n // Stream data into series.\n let xPrev = 0\n let iSample = 0\n const streamData = () => {\n const newDataPointsCount = 60; // Matches 1000 Hz very roughly\n const xNow = window.performance.now()\n const xDelta = xNow - xPrev\n const seriesNewDataPoints = []\n for (let iChannel = 0; iChannel < channels.length; iChannel++) {\n const dataSet = dataSets[iChannel % (dataSets.length - 1)]\n const newDataPoints = []\n for (let iDp = 0; iDp < newDataPointsCount; iDp++) {\n const x = xPrev + ((iDp + 1) / newDataPointsCount) * xDelta\n const iData = (iSample + iDp) % (dataSet.length - 1)\n const y = dataSet[iData]\n const point = { x, y }\n newDataPoints.push(point)\n }\n seriesNewDataPoints[iChannel] = newDataPoints\n }\n channels.forEach((channel, iChannel) => channel.series.add(seriesNewDataPoints[iChannel]))\n xPrev = xNow\n iSample += newDataPointsCount\n requestAnimationFrame(streamData)\n }\n streamData()\n})\n\n// Measure FPS.\nlet tFpsStart = window.performance.now();\nlet frames = 0;\nlet fps = 0;\nconst title = channelTop.chart.getTitle();\nconst recordFrame = () => {\n frames++;\n const tNow = window.performance.now();\n fps = 1000 / ((tNow - tFpsStart) / frames);\n requestAnimationFrame(recordFrame);\n\n channelTop.chart.setTitle(`${title} (FPS: ${fps.toFixed(1)})`);\n};\nrequestAnimationFrame(recordFrame);\nsetInterval(() => {\n tFpsStart = window.performance.now();\n frames = 0;\n}, 5000);\n","url":null,"readme":"Lightning-fast Line Chart visualization over multiple high speed (1000 Hz) trends that progress along the same scrolling Time X Axis.\n\nWidely used in all kinds of fields for monitoring live data from many (hundreds or even thousands) of data sources at the same time.\n\nFrames rendered per second (FPS) is recorded live, and displayed on the chart title. FPS of 40-60 indicates a smooth running performance.\n\n## Automatic Data Cleaning\n\nOne of the most ground breaking features of LightningChart JS is _automatic data cleaning_.\n\nBecause LightningChart JS is designed for real-time data streaming solutions, it is essential that old, out of view data is automatically cleaned in the most performant manner.\n\nIn practice, this results in an application where you can even scroll back for some distance and see older data, but if you scroll far enough, you will find that the old data has been cleaned. This allows the application to run _forever_!\n\n\n## Several times proven performance leader in JS charting\n\nLightningChart is the pioneer group among JavaScript chart providers who started the study of data visualization performance comparison.\nThis activity is based on open-source applications that test several different charting tools with an identical use case.\n\nDuring the test, different metrics of performance are measured which indicate how efficiently the data visualization software performs. Common metrics are:\n\n- _Refresh rate_ (FPS), how rapidly the displayed visualization is updated as times per second.\n- _CPU usage_ (%), how much of available computing resource is utilized.\n - This is very important, because almost entirety of the computing power allocated to browsing a single web page is SHARED between all the content on the web page.\n - In simple terms, if you have a badly performing chart on your web page then it means your whole page will perform bad.\n- _Data amount_, how much data can be shown. In practice, limitations could be imposed on how long history can be displayed or how precisely the data can be visualized. \n\n**Since November 2021**, LightningChart JS has dominated all performance tests which have since covered a large set of data visualization use cases in various industries:\n\n- [_Static line graphs_](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0017-largeLineChartXY.html) | These days LightningChart loads far larger data sets and over 50 times faster than your average web chart. \n\n- [_Real-time line charts_](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0010-multiChannelLineProgressive.html) | In the original motivation for its development, LightningChart JS performs over **500000** times more efficiently than the average JS chart - processing tens of thousands more data samples, using 4 times less processing power and refreshing 7 times in the same time others do just once.\n\n- [_Heatmap charts_](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0803-scrollingHeatmap.html) | Traditional JS heatmaps can be used to visualize small grids with total of 1000 data points and under. LCJS enables visualization of BILLION large data sets that could cover for example large geographical areas such as entire countries.\n\n**Find all the information of open-source LightningChart JS performance studies on our** [web page](https://www.arction.com/high-performance-javascript-charts/)!\n","image":"multiChannelLineProgressiveOwnAxes.png"},{"id":"lcjs-example-0030-logLine","title":"JavaScript Logarithmic Line Chart","tags":["line","xy","logarithmic"],"description":"Example showcasing logarithmic Axis with LineSeries.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChart JS Example that showcases Logarithmic Axes feature.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n ColorHEX,\n SolidLine,\n SolidFill,\n emptyLine,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveFunctionGenerator\n} = require('@arction/xydata')\n\n// Initialize chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n // Specify default Y Axis as logarithmic.\n defaultAxisY: {\n type: 'logarithmic',\n // Use 10 as base number.\n base: '10',\n }\n})\n .setTitle('Logarithmic Axis vs Linear Axis')\n\nconst yAxisLogarithmic = chart.getDefaultAxisY()\n .setTitle('Logarithmic Y Axis')\n .setTitleMargin(10)\n\n// Add a second Y Axis that is linear.\nconst yAxisLinear = chart.addAxisY({\n type: 'linear'\n})\n .setTitle('Linear Y Axis')\n // Remove tick grid lines from second Y Axis\n .setTickStrategy('Numeric', tickStrategy => tickStrategy\n .setMinorTickStyle(tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine) \n )\n .setMajorTickStyle(tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine) \n )\n )\n\n// Add LegendBox.\nconst legend = chart.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Graph 2 functions on both Axes.\nconst xStep = 0.1\nconst functions = [\n { label: 'f(x) = x', xStart: xStep, xEnd: 10, Y: (x) => x },\n { label: 'f(x) = 10^x', xStart: xStep, xEnd: 3.0, Y: (x) => 10 ** x },\n]\n\n// Generate function data in predefined X values range.\nPromise.all(functions.map(info => \n createProgressiveFunctionGenerator()\n .setStart(info.xStart)\n .setEnd(info.xEnd)\n .setStep(xStep)\n .setSamplingFunction(info.Y)\n .generate()\n .toPromise()\n))\n .then((dataSets) => {\n // Create two series for each function, one on each Axis.\n dataSets.forEach((dataSet, iFunction) => {\n const info = functions[iFunction];\n const legendEntries = [];\n [yAxisLinear, yAxisLogarithmic].forEach((yAxis, iAxis) => {\n const series = chart.addLineSeries({\n yAxis\n })\n .setCursorResultTableFormatter((builder, _, x, y) => builder\n .addRow(`${info.label } (${iAxis === 0 ? 'linear' : 'logarithmic'})`)\n .addRow('X', '', x.toFixed(1))\n .addRow('Y', '', y.toFixed(1))\n )\n .setName(info.label)\n .setStrokeStyle((style) => style.setThickness(5))\n .add(dataSet)\n\n console.log(series.getBoundaries())\n\n // Share LegendBoxEntry for both Series of the function.\n if (iAxis === 0) {\n legend.add(series)\n legend.setEntries((entry, component) => {\n if (component === series) {\n legendEntries[iFunction] = entry\n }\n })\n } else {\n series.attach(legendEntries[iFunction])\n }\n })\n })\n\n // Fit Axes immediately.\n yAxisLinear.fit()\n yAxisLogarithmic.fit()\n })\n","url":null,"readme":"This example showcases creation of logarithmic axes, highlighting the functional differences between linear and logarithmic axes using *line series*.\n\nLogarithmic Axis can be created by supplying `type: 'logarithmic'` argument when the Axis is created:\n\n```typescript\nconst chart = lightningChart().ChartXY({\n // Specify default Y Axis as logarithmic (10).\n defaultAxisY: {\n type: 'logarithmic',\n base: 10,\n }\n})\n\n// Add second Y Axis that is also logarithmic (Math.E).\nconst axis = chart.addAxisY({\n type: 'logarithmic',\n base: 'e',\n})\n```\n","image":"logLine.png"},{"id":"lcjs-example-0031-logBars","title":"JavaScript Grouped Bars with Logarithmic Y Axis","tags":["bars","logarithmic","column","group"],"description":"Example showcasing grouped bars chart with Logarithmic Y Axis","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChart JS Example that showcases logarithmic Y Axis in a Grouped Bars Chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AutoCursorModes,\n UIOrigins,\n LegendBoxBuilders,\n AxisTickStrategies,\n emptyLine,\n UIElementBuilders,\n Themes\n} = lcjs\n\n// Example test data.\nconst groupedBarsValues = {\n groupNames: ['Quarter 1', 'Quarter 2', 'Quarter 3', 'Quarter 4'],\n productNames: ['Product 1', 'Product 2', 'Product 3'],\n values: [\n // Quarter 1: product sales.\n [152000, 28300, 120000],\n // Quarter 2: product sales.\n [218000, 32600, 105600],\n // Quarter 3: product sales.\n [526900, 18000, 98500],\n // Quarter 4: product sales.\n [726500, 54600, 13400],\n ]\n}\nconst quartersCount = groupedBarsValues.groupNames.length\nconst productsCount = groupedBarsValues.productNames.length\n\n// : Plot a Bar Chart using Rectangle Series :\n\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n // Configure Y Axis as logarithmic.\n defaultAxisY: {\n type: 'logarithmic',\n // Use 10 as log base.\n base: '10',\n },\n})\n .setTitle('Grouped Bars Chart with Logarithmic Y Axis')\n .setAutoCursorMode(AutoCursorModes.onHover)\n .setAutoCursor((cursor) => cursor\n .disposeTickMarkerX()\n .setGridStrokeXStyle(emptyLine)\n .disposeTickMarkerY()\n .setGridStrokeYStyle(emptyLine)\n .disposePointMarker()\n .setResultTable((resultTable) => resultTable\n .setOrigin(UIOrigins.Center)\n )\n )\n .setMouseInteractions(false)\n\nconst xAxis = chart.getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.Empty)\n .setMouseInteractions(false)\n\nconst yAxis = chart.getDefaultAxisY()\n .setTitle('Product sales (€)')\n\n// Create one Rectangle Series for each PRODUCT.\nconst allProductsSeries = groupedBarsValues.productNames.map((productName, iProduct) => {\n const series = chart.addRectangleSeries()\n .setName(productName)\n .setCursorResultTableFormatter((builder, _, figure) => builder\n .addRow(`${productName} sales`)\n .addRow(`${figure.getDimensionsTwoPoints().y2} €`)\n )\n return series\n})\n\nconst barWidthX = 1.0\nconst groupsGapX = 1.0\nconst edgesMarginX = 1.0\n\n// Add Rectangle figures for each Quarter and for each product.\ngroupedBarsValues.values.forEach((quarterValues, iQuarter) => {\n quarterValues.forEach((quarterValue, iProduct) => {\n const productSeries = allProductsSeries[iProduct]\n const x1 = iQuarter * (productsCount * barWidthX + groupsGapX) + iProduct * barWidthX\n const x2 = x1 + barWidthX\n // NOTE: Logarithmic data range is not defined at 0.\n const y1 = 1\n const y2 = quarterValue\n productSeries.add({\n x1,\n x2,\n y1,\n y2\n })\n })\n})\n\n// Add X CustomTicks for each Quarter.\ngroupedBarsValues.groupNames.forEach((quarterName, iQuarter) => {\n const x1 = iQuarter * (productsCount * barWidthX + groupsGapX)\n const x2 = x1 + productsCount * barWidthX\n xAxis.addCustomTick(UIElementBuilders.AxisTick)\n .setValue((x1+x2) / 2)\n .setTextFormatter(() => quarterName)\n .setGridStrokeStyle(emptyLine)\n})\n\n// Set X view.\nxAxis.setInterval(-edgesMarginX, quartersCount * productsCount * barWidthX + (quartersCount - 1) * groupsGapX + edgesMarginX, false, true)\n\n// Add LegendBox.\nconst legend = chart.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\nlegend.add(chart)\n","url":null,"readme":"Example of visualizing a *Grouped Bars Chart* with a logarithmic Y Axis.","image":"logBars.png"},{"id":"lcjs-example-0032-logOHLC","title":"JavaScript OHLC Chart with Logarithmic Y Axis","tags":["candlestick","ohlc","logarithmic","date-time","trading","constantline","legendbox"],"description":"Example showcasing OHLC series with a logarithmic Y axis","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Trading Charts, High-Performance Charts, Financial Charts, Stock Charts, 2D & 3D charts, OHLC, Candlestick Charts.","src":"/*\n * LightningChart JS Example that showcases OHLC series with logarithmic Y Axis.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n OHLCSeriesTypes,\n AxisTickStrategies,\n LegendBoxBuilders,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Initialize chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n // Specify Y Axis as logarithmic.\n defaultAxisY: {\n type: 'logarithmic',\n base: '10',\n }\n})\n .setTitle('OHLC Chart with Logarithmic Y Axis')\n\n// Configure DateTime Axis X.\nconst dateOrigin = new Date(2013, 8, 16) //\nconst xAxis = chart.getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.DateTime, (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin))\n\nconst yAxis = chart.getDefaultAxisY()\n .setTitle('Stock price (€)')\n\n// Generate progressive XY data.\nconst y1 = 1000 * (0.5 + Math.random())\nconst y2 = 10000 * (0.5 + Math.random())\nconst priceBoomStartX = 3216\nconst priceBoomEndX = 5796\nconst flipAtY = (limitY, y) => y < limitY ? limitY + (limitY - y) : y\nPromise.all([\n createProgressiveTraceGenerator()\n .setNumberOfPoints(15000)\n .generate()\n .toPromise()\n .then((data) => data.map((xy) => ({ x: xy.x, y: Math.max(y1 + xy.y * 6, 1) }))),\n createProgressiveTraceGenerator()\n .setNumberOfPoints(15000)\n .generate()\n .toPromise()\n .then((data) => data.map((xy) => ({ x: xy.x, y: y2 + flipAtY(y2 * 0.75, xy.y * 250) })))\n])\n .then((dataSets) => {\n // Merge two data sets into one by interpolating from data set 1 to data set 2, simulating a \"price boom\".\n const data = dataSets[0].map((xy, i) => {\n if (i <= priceBoomStartX) return xy\n if (i >= priceBoomEndX) return dataSets[1][i]\n // Linear interpolation.\n const lerpAmount = (i - priceBoomStartX) / (priceBoomEndX - priceBoomStartX)\n return { x: xy.x, y: xy.y + lerpAmount * (dataSets[1][i].y - xy.y) }\n })\n return data\n })\n // Scale X step from [1] to 1 hour.\n .then((data) => data.map((xy) => ({ x: xy.x * 1000 * 60 * 60, y: xy.y })))\n .then((data) => {\n // Package XY points into OHLC series automatically.\n const series = chart.addOHLCSeries({ seriesConstructor: OHLCSeriesTypes.AutomaticPacking })\n .setName('Stock price')\n .setPackingResolution(1000 * 60 * 60)\n .add(data)\n\n // Add marker for price boom start.\n xAxis.addConstantLine()\n .setName('Price boom start')\n .setValue(priceBoomStartX * 1000 * 60 * 60)\n .setMouseInteractions(false)\n\n // Fit X Axis immediately.\n xAxis.fit()\n\n // Add LegendBox.\n const legend = chart.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.20,\n })\n .add(chart)\n })\n","url":null,"readme":"Example showcasing a *Candlesticks chart* with a logarithmic Y Axis.","image":"logOHLC.png"},{"id":"lcjs-example-0040-customLassoInteraction","title":"JavaScript Lasso Selection Chart","tags":["xy","point","polygon","interactions"],"description":"Example showcasing a custom ChartXY interaction for highlighting selected data points","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Multiple chart examples, dynamic point coloring, Scatter Charts, Point Cluster Charts, 3D charts for JS.","src":"/*\n * LightningChartJS example that showcases a simple XY line series.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n ColorCSS,\n PointShape,\n SolidLine,\n SolidFill,\n translatePoint,\n Themes,\n} = lcjs;\n\nconst { createProgressiveTraceGenerator } = require(\"@arction/xydata\");\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"Custom lasso interaction (drag Left mouse button)\")\n // Disable default chart interactions with left mouse button.\n .setMouseInteractionRectangleFit(false)\n .setMouseInteractionRectangleZoom(false);\n\n// Add series for displaying data set.\nconst pointSeries = chart.addPointSeries({\n pointShape: PointShape.Circle,\n});\n\n// Add another series for displaying highlighted data points.\nconst seriesHighlightedPoints = chart\n .addPointSeries({ pointShape: PointShape.Circle })\n .setCursorEnabled(false)\n .setMouseInteractions(false)\n .setPointFillStyle(new SolidFill({ color: ColorCSS(\"blue\") }));\n\n// Add a Polygon series and 1 polygon figure for displaying \"Lasso\" on user interactions.\nconst polygonSeries = chart\n .addPolygonSeries()\n .setCursorEnabled(false)\n .setMouseInteractions(false);\nconst polygonFigure = polygonSeries\n .add([])\n .setFillStyle(new SolidFill({ color: ColorCSS(\"gray\").setA(10) }))\n .setStrokeStyle(\n new SolidLine({\n thickness: 1,\n fillStyle: new SolidFill({ color: ColorCSS(\"gray\") }),\n })\n )\n // Hide polygon initially.\n .dispose();\n\n// Generate random example data.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(10000)\n .generate()\n .toPromise()\n .then((data) => {\n pointSeries.add(data);\n\n // * Add custom interactions to Chart events for lasso data selection interaction *\n\n // Array that keeps track of current coordinates in polygon figure (lasso).\n const lassoCheckedCoordinates = [];\n // Separate Array that keeps track of new lasso coordinates, that haven't been checked for covered data points yet.\n const lassoNewCoordinates = [];\n // Lasso updates are handled after a timeout to avoid cases where the custom interaction code causes the entire chart application to perform bad.\n // Generally it is not recommended to do heavy calculations directly inside event handlers!\n let lassoUpdateTimeout = undefined;\n\n // When Left mouse button is dragged inside series area, Lasso should be shown and selected data points highlighted.\n chart.onSeriesBackgroundMouseDrag((_, event, button) => {\n // If not left mouse button, don't do anything.\n if (button !== 0) return;\n\n // Translate mouse location to Axis coordinate system.\n const curLocationAxis = translatePoint(\n chart.engine.clientLocation2Engine(event.clientX, event.clientY),\n chart.engine.scale,\n pointSeries.scale\n );\n\n // Add location to list of new coordinates and schedule an update to the lasso.\n lassoNewCoordinates.push(curLocationAxis);\n // Don't update lasso any more frequently than every 25ms.\n lassoUpdateTimeout = lassoUpdateTimeout || setTimeout(updateLasso, 25);\n });\n\n // Reset previous lasso when mouse drag action is started.\n chart.onSeriesBackgroundMouseDragStart((_, __, button) => {\n // If not left mouse button, don't do anything.\n if (button !== 0) return;\n lassoCheckedCoordinates.length = 0;\n lassoNewCoordinates.length = 0;\n seriesHighlightedPoints.clear();\n polygonFigure.dispose();\n });\n\n /**\n * Function which updates the lasso and highlighted points.\n */\n const updateLasso = () => {\n const lassoCheckedCoordinatesLength = lassoCheckedCoordinates.length;\n const lassoNewCoordinatesLength = lassoNewCoordinates.length;\n\n if (\n lassoNewCoordinatesLength > 0 &&\n lassoCheckedCoordinatesLength + lassoNewCoordinatesLength >= 3\n ) {\n // * Highlight data points that are inside the lasso area *\n\n // Intersection checks are always done relative to first polygon coordinate.\n const triangleA =\n lassoCheckedCoordinatesLength > 0\n ? lassoCheckedCoordinates[0]\n : lassoNewCoordinates[0];\n // Consider only new triangles of the lasso coordinates, starting from the last checked coordinate,\n // and ending with the last new unchecked coordinate.\n let triangleB =\n lassoCheckedCoordinatesLength > 0\n ? lassoCheckedCoordinates[lassoCheckedCoordinatesLength - 1]\n : lassoNewCoordinates[1];\n for (\n let iTriangle = 0;\n iTriangle < lassoNewCoordinates.length;\n iTriangle += 1\n ) {\n const triangleC = lassoNewCoordinates[iTriangle];\n for (const point of data) {\n if (\n checkPointInsideTriangle(point, triangleA, triangleB, triangleC)\n ) {\n // The data point is inside the lasso -> highlight it.\n seriesHighlightedPoints.add(point);\n }\n }\n triangleB = triangleC;\n }\n\n // Append new coordinates to complete list of lasso coordinates.\n lassoCheckedCoordinates.push.apply(\n lassoCheckedCoordinates,\n lassoNewCoordinates\n );\n lassoNewCoordinates.length = 0;\n\n // Ensure lasso is visible.\n polygonFigure.restore().setDimensions(lassoCheckedCoordinates);\n }\n lassoUpdateTimeout = undefined;\n };\n\n /**\n * Highly optimized routine for checking if a XY point is inside a triangle defined by 3 XY points.\n */\n const checkPointInsideTriangle = (\n position,\n triangleA,\n triangleB,\n triangleC\n ) => {\n const dX = position.x - triangleC.x;\n const dY = position.y - triangleC.y;\n const dX21 = triangleC.x - triangleB.x;\n const dY12 = triangleB.y - triangleC.y;\n const s = dY12 * dX + dX21 * dY;\n const t =\n (triangleC.y - triangleA.y) * dX + (triangleA.x - triangleC.x) * dY;\n const D =\n dY12 * (triangleA.x - triangleC.x) + dX21 * (triangleA.y - triangleC.y);\n if (D < 0) return s <= 0 && t <= 0 && s + t >= D;\n return s >= 0 && t >= 0 && s + t <= D;\n };\n });\n","url":null,"readme":"This example showcases the creation of a custom user interaction.\n\nBy default, dragging left mouse inside the series area, a zoom/fit interaction is activated.\nThis default interaction can be disabled:\n\n```js\nchart\n // Disable default chart interactions with left mouse button.\n .setMouseInteractionRectangleFit(false)\n .setMouseInteractionRectangleZoom(false);\n```\n\nAnd any custom interaction can be implemented with different event subscription methods.\nIn this example, `ChartXY.onSeriesBackgroundMouseDrag` is used to hook on to the event when user drags their left mouse button inside the series area.\n`PolygonSeries` are used to draw a _freeform lasso selection_ as the user moves their mouse on the chart.\n\nThe data points that are inside the lasso are solved in real-time, and highlighted with a separate `PointSeries`.\n\n\n\nThis idea of custom interactions can be extended to any application specific dynamic interaction, like deleting selected points, displaying them in a separate chart or moving them - imagination is the limit!\n\nWhen implementing custom interactions that involve solving a list of data points from some selection - like lasso - optimizing the application side code is very important. Performing heavy computations inside event handlers can block the thread which can make it seem like the chart is not performing well when in reality it is the application code that is bottle-necking the performance.\n\nSome rules of thumb for implementing custom interactions:\n\n- **Don't do heavy calculations directly inside event handlers.** Instead, schedule an update using `setTimeout` and prevent recalculations happening more often than necessary. This example limits the lasso update to max. 1 update per 25 milliseconds.\n\n- **Work smart, not hard.** In the case of lasso selection, iterating over a large data set one-by-one and checking which points are inside a _polygon_ can be _really heavy_.\n Instead, on each update, we only check the new expanded polygon area.\n In practice, the lasso polygon often has even 1000 coordinates in which case we're skipping 999 iterations of the entire data set every time the lasso is updated.\n\nThe code in this example is optimized very well, feel free to reference it in your own custom interaction implementations!\n","image":"customLassoInteraction.png"},{"id":"lcjs-example-0050-linePaletteX","title":"JavaScript ECG Chart with Highlighted Beats","tags":["xy","line","palette"],"description":"Example showcasing Line Series feature for coloring line dynamically based on X coordinates","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/**\n * Example showcasing Line Series feature for coloring line dynamically based on X coordinates\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst {\n lightningChart,\n PalettedFill,\n LUT,\n ColorRGBA,\n AxisTickStrategies,\n Themes,\n} = lcjs;\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"ECG chart with color highlighted heart beats\");\n\nconst axisX = chart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.Time);\n\nconst axisY = chart.getDefaultAxisY().setTitle(\"mV\");\n\nfetch(document.head.baseURI + \"examples/assets/0050/data.json\")\n .then((r) => r.json())\n .then((ecgValuesY) => {\n const lineSeries = chart\n .addLineSeries({\n dataPattern: {\n pattern: \"ProgressiveX\",\n },\n })\n .addArrayY(ecgValuesY);\n\n // Detect beats from ECG data set, listing the ranges as X coordinates (data point indexes).\n const beats = [];\n let yPrev;\n let iPeakHigh;\n let iPeakLow;\n for (let i = 0; i < ecgValuesY.length; i += 1) {\n const y = ecgValuesY[i];\n if (iPeakHigh === undefined) {\n // Check for high peak.\n if (y > 700 && y < yPrev) {\n // High peak.\n iPeakHigh = i;\n }\n } else if (iPeakLow === undefined) {\n // Check for low peak.\n if (y < -700 && y > yPrev) {\n iPeakLow = i;\n // Mark beat range as data point indexes.\n beats.push({ iStart: iPeakHigh - 40, iEnd: iPeakLow + 120 });\n iPeakHigh = undefined;\n iPeakLow = undefined;\n }\n }\n yPrev = y;\n }\n\n // Style line series so that beat X ranges are highlighted with a special color.\n const colorDefault = lineSeries.getStrokeStyle().getFillStyle().getColor();\n const colorNormal = colorDefault;\n const colorHighlight = new ColorRGBA(0, 255, 0);\n const xPalette = new PalettedFill({\n lookUpProperty: \"x\",\n lut: new LUT({\n interpolate: false,\n steps: [\n { value: 0, color: colorNormal },\n ...beats\n .map((beat) => [\n { value: beat.iStart, color: colorHighlight },\n { value: beat.iEnd, color: colorNormal },\n ])\n .flat(),\n ],\n }),\n })\n\n lineSeries.setStrokeStyle((stroke) => stroke.setFillStyle(xPalette));\n axisX.setStrokeStyle((stroke) => stroke.setFillStyle(xPalette))\n });\n","url":null,"readme":"Example that showcases `LineSeries` feature for coloring line dynamically based on X coordinates.\n\nIn this example, there is a ECG data set (voltage measurements from a heart over short period of time).\nThis data is visualized as a _Line Chart_ where X dimension represents _time_ and Y dimension measured _voltage_.\n\nThis is a very traditional and well known setting, but this example adds a little twist to it in order to showcase the dynamic X coloring feature.\n\nThe example code automatically detects heart beats from the data set and tracks the X coordinate intervals that contain active heart beats.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nThis heart beat information is then used to prepare a _Value - Color lookup table_, a conceptually simple object that can be widely used with many different LightningChart JS components.\n\nThe lookup table associates a range of _Values_ with corresponding _Colors_. In this example, this means defining the X value ranges which should be colored \"normally\" and ranges which should be colored in \"highlighted\" manner.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nDynamic line coloring is a powerful feature which can serve many different needs. The best thing about it is that it doesn't compromise performance, meaning that you can use it just as well with 100 data points or 100 million data points.\n\nIn addition to dynamic coloring by X coordinate there are also more dynamic coloring modes available:\n\n- [Line dynamic coloring by Y coordinates](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0051-linePaletteY.html)\n- [Line dynamic coloring by separate Value data set](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0052-linePaletteValue.html)\n","image":"linePaletteX.png"},{"id":"lcjs-example-0051-linePaletteY","title":"JavaScript Good/Bad Values Threshold Line Chart","tags":["xy","line","palette"],"description":"Example showcasing Line Series feature for coloring line dynamically based on Y coordinates","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/**\n * Example showcasing Line Series feature for coloring line dynamically based on Y coordinates\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst { lightningChart, PalettedFill, LUT, ColorRGBA, SolidFill, Themes } =\n lcjs;\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"Line Chart with dynamic good/bad values highlighting\");\n\nconst thresholdBadY = -30000;\nconst thresholdGoodY = 10000;\nconst colorBad = ColorRGBA(255, 0, 0);\nconst colorGood = ColorRGBA(0, 255, 0);\n\nconst axisX = chart.getDefaultAxisX();\nconst axisY = chart.getDefaultAxisY();\n\naxisY\n .addConstantLine()\n .setMouseInteractions(false)\n .setValue(thresholdBadY)\n .setStrokeStyle((stroke) =>\n stroke.setFillStyle(new SolidFill({ color: colorBad.setA(50) }))\n );\n\naxisY\n .addConstantLine()\n .setMouseInteractions(false)\n .setValue(thresholdGoodY)\n .setStrokeStyle((stroke) =>\n stroke.setFillStyle(new SolidFill({ color: colorGood.setA(50) }))\n );\n\nfetch(document.head.baseURI + \"examples/assets/0051/data.json\")\n .then((r) => r.json())\n .then((valuesY) => {\n const lineSeries = chart\n .addLineSeries({\n dataPattern: {\n pattern: \"ProgressiveX\",\n },\n })\n .addArrayY(valuesY);\n\n const colorNormal = lineSeries.getStrokeStyle().getFillStyle().getColor();\n const yMin = lineSeries.getYMin();\n const yPalette = new PalettedFill({\n lookUpProperty: \"y\",\n lut: new LUT({\n interpolate: false,\n steps: [\n { value: yMin, color: colorBad },\n { value: thresholdBadY, color: colorNormal },\n { value: thresholdGoodY, color: colorGood },\n ],\n }),\n })\n\n lineSeries.setStrokeStyle((stroke) => stroke.setFillStyle(yPalette));\n axisY.setStrokeStyle((stroke) => stroke.setFillStyle(yPalette));\n });\n","url":null,"readme":"Example that showcases `LineSeries` feature for coloring line dynamically based on Y coordinates.\n\nThis example is based on a completely normal _Line Chart_, where the Y value depicts some trend, such as a stock price, sensor measurement, etc.\n\nProbably the most common need for dynamic Y based coloring comes from scenarios where the values have a range of Bad, Normal and Good values. A practical example could be a greenhouse where the room temperature is measured. For best results, the temperature should stay within acceptable range - neither too cold or too hot.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nThe dynamic Y coloring feature allows the visualization of this kind of value thresholds very intuitively, by automatically changing color of each data point based on the Y coordinate.\n\nThe logic of selecting color based on Y coordinate is done with a _Value - Color lookup table_, a conceptually simple object that can be widely used with many different LightningChart JS components.\n\nThe lookup table associates a range of _Values_ with corresponding _Colors_.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nDynamic line coloring is a powerful feature which can serve many different needs. The best thing about it is that it doesn't compromise performance, meaning that you can use it just as well with 100 data points or 100 million data points.\n\nIn addition to dynamic coloring by Y coordinate there are also more dynamic coloring modes available:\n\n- [Line dynamic coloring by X coordinates](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0050-linePaletteX.html)\n- [Line dynamic coloring by separate Value data set](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0052-linePaletteValue.html)\n","image":"linePaletteY.png"},{"id":"lcjs-example-0052-linePaletteValue","title":"JavaScript Racecar Track Data Analysis Chart","tags":["xy","line","palette"],"description":"Example showcasing Line Series feature for coloring line dynamically based on separate Value data set","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/**\n * Example showcasing Line Series feature for coloring line dynamically based on separate Value data set\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst {\n lightningChart,\n UIElementBuilders,\n UIOrigins,\n PalettedFill,\n LUT,\n ColorRGBA,\n emptyLine,\n AxisTickStrategies,\n Themes,\n} = lcjs;\n\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"Loading example data ...\")\n .setAutoCursor(cursor => cursor\n .disposeTickMarkerX()\n .disposeTickMarkerY()\n )\n\nconst axisX = chart.getDefaultAxisX();\nconst axisY = chart.getDefaultAxisY();\nchart\n .getDefaultAxes()\n .forEach((axis) =>\n axis.setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine)\n );\n\nconst lineSeries = chart\n .addLineSeries({ individualLookupValuesEnabled: true })\n .setCursorSolveBasis(\"nearest\")\n .setCursorInterpolationEnabled(false)\n .setStrokeStyle((stroke) => stroke.setThickness(10));\n\nconst labelStart = chart\n .addUIElement(UIElementBuilders.TextBox, { x: axisX, y: axisY })\n .setMouseInteractions(false)\n .dispose();\n\nconst dataSources = [\n {\n name: \"Speed\",\n file: \"demo-data-speed.json\",\n lut: new LUT({\n steps: [\n { value: 0, color: ColorRGBA(255, 255, 255) },\n { value: 25, color: ColorRGBA(255, 215, 0) },\n { value: 50, color: ColorRGBA(255, 0, 0) },\n ],\n interpolate: true,\n units: \"km/h\",\n }),\n format: (value) => `${value.toFixed(1)} km/h`,\n },\n {\n name: \"Steering\",\n file: \"demo-data-steering.json\",\n lut: new LUT({\n steps: [\n { value: -100, color: ColorRGBA(255, 255, 0) },\n { value: 0, color: ColorRGBA(255, 255, 255) },\n { value: 100, color: ColorRGBA(0, 0, 255) },\n ],\n interpolate: true,\n units: \"%\",\n }),\n format: (value) => `${value.toFixed(1)} %`,\n },\n {\n name: \"Throttle\",\n file: \"demo-data-throttle.json\",\n lut: new LUT({\n steps: [\n { value: 0, color: ColorRGBA(255, 255, 255) },\n { value: 50, color: ColorRGBA(255, 215, 0) },\n { value: 100, color: ColorRGBA(255, 0, 0) },\n ],\n interpolate: true,\n units: \"%\",\n }),\n format: (value) => `${value.toFixed(1)} %`,\n },\n];\n\nlet legend;\nconst displayDataSource = async (sourceName) => {\n // CLeanup previously displayed data source\n if (legend) {\n legend.dispose();\n legend = undefined;\n }\n\n const dataSource = dataSources.find((item) => item.name === sourceName);\n let data = dataSource.data;\n if (!data) {\n console.time(`Load data set ${sourceName}`);\n data = await fetch(\n document.head.baseURI + `examples/assets/0052/${dataSource.file}`\n ).then((r) => r.json());\n dataSource.data = data;\n console.timeEnd(`Load data set ${sourceName}`);\n }\n\n lineSeries\n .clear()\n .setName(sourceName)\n .add(data)\n .setStrokeStyle((stroke) =>\n stroke.setFillStyle(new PalettedFill({ lut: dataSource.lut }))\n )\n .setCursorResultTableFormatter((builder, _, __, ___, dataPoint) =>\n builder\n .addRow(sourceName)\n .addRow(dataPoint.value && dataSource.format(dataPoint.value))\n );\n\n const start = data[0];\n labelStart\n .restore()\n .setPosition(start)\n .setOrigin(UIOrigins.CenterBottom)\n .setMargin(10)\n .setText(\"START\");\n\n axisX.fit(false);\n axisY.fit(false);\n\n chart.setTitle(`Racecar ${sourceName} progression during 1 lap`);\n\n legend = chart.addLegendBox().add(chart);\n};\ndisplayDataSource(\"Speed\");\n\n// Embed HTML UI inside the chart for selecting between different data sources.\nconst uiDiv = document.createElement(\"div\");\nchart.engine.container.append(uiDiv);\nuiDiv.style.position = \"absolute\";\nuiDiv.style.top = `${chart.getTitleMarginTop()}px`;\nuiDiv.style.right = `${chart.getPadding().right}px`;\nconst inputDataSource = document.createElement(\"select\");\nuiDiv.append(inputDataSource);\ndataSources.forEach((dataSource) => {\n const option = document.createElement(\"option\");\n inputDataSource.append(option);\n option.innerHTML = dataSource.name;\n});\ninputDataSource.onchange = (e) => {\n displayDataSource(e.target.value);\n};\n","url":null,"readme":"Example that showcases `LineSeries` feature for coloring line dynamically based on separate Value data set.\n\nThis example takes place in the field of motor-sports, more specifically the analysis of data gathered from a remote controlled racecar while driving on a race track.\n\n**Both the data as well as use case in this example originates from a real user of LightningChart JS** - TestLogger produces a complete data management and analytics system for RC cars and is one of our satisfied long-time partners. You can read more how they are able to take advantage of LightningChart JS in their craft at our [case study](https://www.arction.com/news/data-analytics-for-racing-testlogger-case-study-lightningchart/).\n\nThe TestLogger software gathers an immense amount of high precision data from the RC car in real-time - for example in this application, speed, steering and throttle information are visualized. Each measurement is paired with a location information, which tells where the RC car was located at the time of measurement.\n\nSomething that we found amazing was that the RC car location information is actually calculated in real-time by tracking the orientation and speed of the RC car itself - it is not relying on GPS or any other positioning system!\n\nIn this example, the RC car data is used to dynamically color the path of the RC car based on the selected data set. For example, when \"Speed\" is analyzed, low speeds are colored as white and high speeds are colored as red.\n\nBy looking at the produced visualization, bottlenecks in the race can be spotted easily even with the naked eye. \n\nDynamic line coloring is a powerful feature which can serve many different needs. The best thing about it is that it doesn't compromise performance, meaning that you can use it just as well with 100 data points or 100 million data points.\n\nIn addition to dynamic coloring by separate Value data set there are also more dynamic coloring modes available:\n\n- [Line dynamic coloring by X coordinates](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0050-linePaletteX.html)\n- [Line dynamic coloring by Y coordinates](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0051-linePaletteY.html)\n","image":"linePaletteValue.png"},{"id":"lcjs-example-0053-dataGaps","title":"JavaScript Data Gaps Trading Chart","tags":["xy","trading","area","line","zoom band"],"description":"Example showcasing how data gaps can be handled XY series. Particularly highlights line and area series in a trading use case","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * Example showcasing how data gaps can be handled XY series. Particularly highlights line and area series in a trading use case\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n emptyLine,\n LegendBoxBuilders,\n Themes,\n} = lcjs;\n\nconst dashboard = lightningChart()\n .Dashboard({\n numberOfColumns: 1,\n numberOfRows: 2,\n // theme: Themes.darkGold\n })\n .setRowHeight(0, 1)\n .setRowHeight(1, 0.2);\n\nconst chart = dashboard\n .createChartXY({ columnIndex: 0, rowIndex: 0 })\n .setTitle(\"AAPL historical stock price and volume December 2021\");\n\nconst axisClose = chart.getDefaultAxisY().setTitle(\"Stock price (€)\");\n\nconst seriesClose = chart\n .addLineSeries({\n dataPattern: {\n pattern: \"ProgressiveX\",\n },\n })\n .setName(\"Stock price (€)\")\n .setCursorInterpolationEnabled(false)\n .setCursorResultTableFormatter((builder, series, x, y, dataPoint) =>\n builder\n .addRow(series.getName())\n .addRow(series.axisX.formatValue(dataPoint.x))\n .addRow(`${series.axisY.formatValue(dataPoint.y)} €`)\n );\n\nconst axisVolume = chart\n .addAxisY({ opposite: true })\n .setTitle(\"Volume (€)\")\n .setTickStrategy(AxisTickStrategies.Numeric, (ticks) =>\n ticks\n .setMajorTickStyle((major) => major.setGridStrokeStyle(emptyLine))\n .setMinorTickStyle((minor) => minor.setGridStrokeStyle(emptyLine))\n );\n\nconst seriesVolume = chart\n .addAreaSeries({ yAxis: axisVolume })\n .setName(\"Volume (€)\")\n .setCursorInterpolationEnabled(false)\n .setCursorResultTableFormatter((builder, series, position, high, low) =>\n builder\n .addRow(series.getName())\n .addRow(series.axisX.formatValue(position))\n .addRow(`${series.axisY.formatValue(high)} €`)\n );\n\nconst dateOrigin = new Date(\"2021-01-01\");\nconst dateOriginTime = dateOrigin.getTime();\n\nconst axisX = chart\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.DateTime, (ticks) =>\n ticks.setDateOrigin(dateOrigin)\n )\n // Set preset X default view.\n .setInterval(\n new Date(\"2021-12-07 20:00:00\").getTime() - dateOriginTime,\n new Date(\"2021-12-11 06:00:00\").getTime() - dateOriginTime,\n false,\n true\n );\n\nconst legend = chart\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n .add(chart);\n\nconst zoomBandChart = dashboard\n .createZoomBandChart({ axis: axisX, columnIndex: 0, rowIndex: 1 })\n .setTitle(\"\");\n\nfetch(document.head.baseURI + \"examples/assets/0053/data.json\")\n .then((r) => r.json())\n .then((data) => {\n // Compile XY data point lists for close series and volume series.\n // Data gaps are programmatically detected and marked into the data set.\n const dataGapThresholdX = 1 * 60 * 60 * 1000; // 1 hour as milliseconds\n const closeDataXY = [];\n const volumeDataXY = [];\n let xPrev;\n for (let i = 0; i < data.length; i += 1) {\n const p = data[i];\n if (xPrev !== undefined) {\n const xGap = p.time - xPrev;\n if (xGap > dataGapThresholdX) {\n // There is a gap in the data set between data points [i - 1] and [i]\n // Disconnect the series at this point by adding an extra data point with NaN value between these two data points.\n closeDataXY.push({ x: p.time - dateOriginTime, y: Number.NaN });\n volumeDataXY.push({ x: p.time - dateOriginTime, y: Number.NaN });\n i += 1;\n }\n }\n closeDataXY.push({ x: p.time - dateOriginTime, y: p.close });\n volumeDataXY.push({ x: p.time - dateOriginTime, y: p.volume });\n xPrev = p.time;\n }\n\n seriesClose.add(closeDataXY);\n seriesVolume.add(volumeDataXY);\n });\n","url":null,"readme":"Normally, series types such as `LineSeries`, `AreaSeries`, etc. automatically connect data points to highlight the progression of trend values. In some specific use cases, this is not the ideal behavior. One such use case is trading data visualization, which is also the setting for this particular.\n\nTrading data often contains frequent _data gaps_, meaning relatively large time intervals when there are no data samples available. These correspond to times when the market is \"closed\", evenings and weekends.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nIn LightningChart JS, data gaps can be specified by adding an extra data point with value of `NaN` (_Not-A-Number_).\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nThe code of this example shows one way of automatically detecting gaps in data sets and adding the `NaN` data points in. By default it looks for 1 hour difference between two data points, but this can be easily modified.\n","image":"dataGaps.png"},{"id":"lcjs-example-0100-areaRange","title":"JavaScript Area Range Chart","tags":["area","range","xy","date-time"],"description":"Example showcasing basic use of an Area Range Series. Also known as a Area Graph, Area Chart or Range Area Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Area charts for Scientific use, dynamic charts, High-Performance Charts, 2D JS charts with area graphs.","src":"/*\n * LightningChartJS example that showcases AreaRangeSeries.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n Themes\n} = lcjs\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 0, 1)\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n//Cache default X Axis for use.\nconst axisX = chart.getDefaultAxisX()\n// Use DateTime TickStrategy, using the origin specified above.\naxisX\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\nchart.setTitle('Area Range')\n// Add AreaRange Series\nconst areaRange = chart.addAreaRangeSeries()\n// Modify the ResultTable formatting.\nareaRange.setCursorResultTableFormatter((builder, series, figure, yMax, yMin) => {\n return builder\n .addRow('Actual vs Expected Share Prices of Company')\n .addRow('Date: ' + axisX.formatValue(figure))\n .addRow('Actual: ' + yMax.toFixed(2) + ' $')\n .addRow('Expected: ' + yMin.toFixed(2) + ' $')\n})\nchart.getDefaultAxisY()\n .setTitle('Share price ($)')\n// Data for the AreaRange Series\nlet areaRangeData = [\n {\n x: 0, yMax: 24, yMin: -15\n },\n {\n x: 6, yMax: 11, yMin: -13\n },\n {\n x: 13, yMax: 16, yMin: -11\n },\n {\n x: 20, yMax: 26, yMin: -8\n },\n {\n x: 27, yMax: -2, yMin: -4\n },\n {\n x: 34, yMax: -16, yMin: 2\n },\n {\n x: 41, yMax: -10, yMin: 9\n },\n {\n x: 48, yMax: 3, yMin: 17\n },\n {\n x: 55, yMax: -1, yMin: 26\n },\n {\n x: 62, yMax: 6, yMin: 35\n },\n {\n x: 69, yMax: 17, yMin: 39\n },\n {\n x: 76, yMax: -10, yMin: 41\n },\n {\n x: 83, yMax: -8, yMin: 42\n },\n {\n x: 90, yMax: 13, yMin: 41\n },\n {\n x: 97, yMax: -12, yMin: 39\n },\n {\n x: 104, yMax: 6, yMin: 37\n },\n {\n x: 111, yMax: -10, yMin: 36.5\n },\n {\n x: 118, yMax: 27, yMin: 36\n },\n {\n x: 125, yMax: 52, yMin: 38\n },\n {\n x: 132, yMax: 59, yMin: 42\n },\n {\n x: 139, yMax: 64, yMin: 50\n },\n\n {\n x: 146, yMax: 59, yMin: 53\n },\n {\n x: 153, yMax: 71, yMin: 54\n },\n {\n x: 160, yMax: 63, yMin: 53\n },\n {\n x: 167, yMax: 79, yMin: 52\n },\n {\n x: 174, yMax: 62, yMin: 51\n },\n {\n x: 181, yMax: 81, yMin: 49\n },\n {\n x: 188, yMax: 53, yMin: 48\n },\n {\n x: 195, yMax: 89, yMin: 48.5\n },\n {\n x: 202, yMax: 99, yMin: 49\n },\n {\n x: 209, yMax: 79, yMin: 51\n },\n {\n x: 216, yMax: 51, yMin: 51\n },\n {\n x: 223, yMax: 36, yMin: 51\n },\n {\n x: 230, yMax: 79, yMin: 50\n },\n {\n x: 237, yMax: 49, yMin: 53\n },\n {\n x: 244, yMax: 33, yMin: 55\n },\n {\n x: 251, yMax: 51, yMin: 58\n },\n {\n x: 258, yMax: 43, yMin: 60\n },\n {\n x: 265, yMax: 72, yMin: 61\n },\n {\n x: 272, yMax: 82, yMin: 60.5\n },\n {\n x: 279, yMax: 73, yMin: 59\n },\n\n {\n x: 286, yMax: 73, yMin: 58\n },\n {\n x: 293, yMax: 67, yMin: 55\n },\n {\n x: 300, yMax: 43, yMin: 53\n },\n {\n x: 307, yMax: 12, yMin: 54\n },\n {\n x: 314, yMax: 26, yMin: 54.5\n },\n {\n x: 321, yMax: 46, yMin: 56\n },\n {\n x: 328, yMax: 43, yMin: 58\n },\n {\n x: 335, yMax: 72, yMin: 60\n },\n {\n x: 342, yMax: 82, yMin: 62.5\n },\n {\n x: 349, yMax: 73, yMin: 64\n },\n {\n x: 356, yMax: 92, yMin: 65\n },\n {\n x: 363, yMax: 107, yMin: 66\n }\n]\n\nareaRangeData.forEach((point, i) => {\n areaRange.add({ position: (point.x * 24 * 60 * 60 * 1000), high: point.yMax, low: point.yMin })\n})\n","url":null,"readme":"*Also known as a Area Graph, Area Chart or Range Area Chart*\n\nThe example shows the basic usage of an Area Range series. The Range Area Chart is similar to the ***Area series***, which is plotted by shading the area between a range of values ( high & low ) represented by two curves of data. \n\nRange charts are generally used to show variations (low & high) simultaneously in the given period. Typical visualization applications use this type of graph shows temperature, price etc.\n\nThe series uses two fill styles, which can be configured individually, the identical behavior is applicable for borders:\n - the normal fill is used when High is greater than Low\n - the reversed fill is used when Low is greater than High\n\n```javascript\n// Create a new ChartXY.\nconst chart = lightningChart().ChartXY()\n\n// Add an area series with bipolar direction using default X and Y axes.\nconst areaRange = chart.addAreaRangeSeries()\n```\n\nThe series accepts ***AreaPoint*** type of points either as an object in format `{ position: number, high: number, low: number }`,\n\n```javascript\nseries.add({ position: 20, high: 45, low: -20 })\n```\n\nor via a factory that should be additionally imported.\n\n```javascript\nseries.add( AreaPoint( 20, 45, -20 ) )\n```\n\nAny number of points can be added with a single call.\n\n```javascript\n// Single point.\nseries.add({ position: 20, high: 45, low: -20 })\n\n// Multiple points at once.\nseries.add([\n { position: 20, high: 45, low: -20 },\n { position: 40, high: 95, low: 10 },\n { position: 60, high: 25, low: 60 }\n])\n```\n","image":"areaRange.png"},{"id":"lcjs-example-0101-multipleAreas","title":"JavaScript Multiple Areas Chart","tags":["range","area","xy"],"description":"Basic usage of a Monopolar Area series. Also known as a Area Graph or Area Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Area charts for Scientific use, dynamic charts, High-Performance Charts, 2D JS charts with area graphs.","src":"/*\n * LightningChart® example code: Demo shows how to draw multiple layered area series.\n * If you need any assistance, or notice error in this example code, please contact support@arction.com. \n * \n * http://www.arction.com | support@arction.com | sales@arction.com\n * © Arction Ltd 2009-2019. All rights reserved. \n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AreaSeriesTypes,\n UIElementBuilders,\n LegendBoxBuilders,\n UIButtonPictures,\n Themes\n} = lcjs\n\n// Create a XY Chart.\nconst xyChart = lightningChart().ChartXY({\n // theme: Themes.darkGold \n})\n .setTitle('Expected Profits To Expenses')\n .setPadding({ right: 2 })\n\n// Create a LegendBox as part of the chart.\nconst legend = xyChart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n\n// ---- Add multiple Area series with different baselines and direction. ----\nconst areaProfit = xyChart.addAreaSeries({ type: AreaSeriesTypes.Positive })\n .setName('Profits')\n\nconst areaExpense = xyChart.addAreaSeries({ type: AreaSeriesTypes.Negative })\n .setName('Expenses')\n\n// Set Axis nicely\nxyChart.getDefaultAxisX()\n .setTitle('Units Produced')\nxyChart.getDefaultAxisY()\n .setTitle('USD')\n\nconst profitData = [\n { x: 0, y: 0 },\n { x: 10, y: 21 },\n { x: 20, y: 59 },\n { x: 30, y: 62 },\n { x: 40, y: 78 },\n { x: 50, y: 85 },\n { x: 60, y: 95 },\n { x: 70, y: 98 },\n { x: 80, y: 103 },\n { x: 90, y: 110 },\n { x: 100, y: 112 },\n { x: 110, y: 126 },\n { x: 120, y: 132 },\n { x: 130, y: 170 },\n { x: 140, y: 172 },\n { x: 150, y: 202 },\n { x: 160, y: 228 },\n { x: 170, y: 267 },\n { x: 180, y: 300 },\n { x: 190, y: 310 },\n { x: 200, y: 320 },\n { x: 210, y: 329 },\n { x: 220, y: 336 },\n { x: 230, y: 338 },\n { x: 240, y: 343 },\n { x: 250, y: 352 },\n { x: 260, y: 355 },\n { x: 270, y: 390 },\n { x: 280, y: 392 },\n { x: 290, y: 418 },\n { x: 300, y: 421 },\n { x: 310, y: 430 },\n { x: 320, y: 434 },\n { x: 330, y: 468 },\n { x: 340, y: 472 },\n { x: 350, y: 474 },\n { x: 360, y: 480 },\n { x: 370, y: 506 },\n { x: 380, y: 545 },\n { x: 390, y: 548 },\n { x: 400, y: 552 },\n { x: 410, y: 584 },\n { x: 420, y: 612 },\n { x: 430, y: 619 },\n { x: 440, y: 627 },\n { x: 450, y: 657 },\n { x: 460, y: 669 },\n { x: 470, y: 673 },\n { x: 480, y: 695 },\n { x: 490, y: 702 },\n { x: 500, y: 710 }\n]\nconst expensesData = [\n { x: 0, y: 0 },\n { x: 10, y: -58 },\n { x: 20, y: -61 },\n { x: 30, y: -62 },\n { x: 40, y: -66 },\n { x: 50, y: -88 },\n { x: 60, y: -93 },\n { x: 70, y: -124 },\n { x: 80, y: -126 },\n { x: 90, y: -136 },\n { x: 100, y: -152 },\n { x: 110, y: -156 },\n { x: 120, y: -190 },\n { x: 130, y: -199 },\n { x: 140, y: -200 },\n { x: 150, y: -208 },\n { x: 160, y: -210 },\n { x: 170, y: -235 },\n { x: 180, y: -270 },\n { x: 190, y: -299 },\n { x: 200, y: -321 },\n { x: 210, y: -342 },\n { x: 220, y: -350 },\n { x: 230, y: -360 },\n { x: 240, y: -374 },\n { x: 250, y: -413 },\n { x: 260, y: -433 },\n { x: 270, y: -447 },\n { x: 280, y: -449 },\n { x: 290, y: -454 },\n { x: 300, y: -461 },\n { x: 310, y: -461 },\n { x: 320, y: -492 },\n { x: 330, y: -496 },\n { x: 340, y: -518 },\n { x: 350, y: -522 },\n { x: 360, y: -557 },\n { x: 370, y: -562 },\n { x: 380, y: -596 },\n { x: 390, y: -599 },\n { x: 400, y: -609 },\n { x: 410, y: -611 },\n { x: 420, y: -628 },\n { x: 430, y: -635 },\n { x: 440, y: -636 },\n { x: 450, y: -643 },\n { x: 460, y: -643 },\n { x: 470, y: -647 },\n { x: 480, y: -648 },\n { x: 490, y: -659 },\n { x: 500, y: -665 }\n]\n\n// ---- Generate points using 'xydata'-library and add it to every plot. ----\nprofitData.forEach((point) => { areaProfit.add(point) })\nexpensesData.forEach((point) => { areaExpense.add(point) })\n\n// Set the custom result table for both areaSeries\nareaProfit\n .setCursorResultTableFormatter((builder, series, position, highValue, lowValue) => {\n return builder\n .addRow('Profits')\n .addRow('Amount: $' + highValue.toFixed(0))\n .addRow('Units Produced: ' + position.toFixed(0))\n })\nareaExpense\n .setCursorResultTableFormatter((builder, series, position, highValue, lowValue) => {\n return builder\n .addRow('Expenses')\n .addRow('Amount: $' + highValue.toFixed(0) * -1)\n .addRow('Units Produced: ' + position.toFixed(0))\n })\n\n// Add series to LegendBox and style entries.\nlegend.add(\n areaProfit,\n true,\n 'Expected Profits To Expenses',\n UIElementBuilders.CheckBox\n .setPictureOff(UIButtonPictures.Circle)\n .setPictureOn(UIButtonPictures.Circle)\n)\nlegend.add(\n areaExpense,\n true,\n 'Expected Profits To Expenses',\n UIElementBuilders.CheckBox\n .setPictureOff(UIButtonPictures.Circle)\n .setPictureOn(UIButtonPictures.Circle)\n)\n","url":null,"readme":"*Also known as a Area Graph or Area Chart*\n\nThe example shows the basic usage of a monopolar area series. The area series is based on ***line series*** with the area between the baseline and the given data filled with color. It is drawn on a Cartesian coordinate system and represents the quantitative data.\n\nCurrent example chart contains two monopolar area series. They are drawn on different sides of the specified baseline and the selected area type specifies the direction. The first area has a positive direction, the second one has a negative direction.\n\nThe simple area chart can be created with few simple lines of code:\n\n```javascript\n// Create a new ChartXY.\nconst chart = lightningChart().ChartXY()\n\n// Add an area series with positive direction using default X and Y axes.\nconst areaPositive = chart.addAreaSeries( { baseline: 0, type: AreaSeriesTypes.Positive } )\n\n// Add an area series with negative direction using default X and Y axes.\nconst areaNegative = chart.addAreaSeries( { baseline: 0, type: AreaSeriesTypes.Negative } )\n```\n\nThe baseline value the type of number and the type can be specified only during the creation of a series instance, where\n\n- The baseline is a fixed reference level of minimum or starting point used for comparisons, which allow customizing the position of the area.\n\n- The type of area series is an enum selector which defines the type of area series:\n - Select AreaSeriesTypes.Positive to show the data only above the baseline.\n - Select AreaSeriesTypes.Negative to show the data only below the baseline.\n - Select AreaSeriesTypes.Both to show the data from both sides of the baseline. *Bipolar area series will be explained in the future example*.\n\nThe series accepts points in format `{ x: number, y: number }`. Any number of points can be added with a single call.\n\n```javascript\n// Single point.\nseries.add({ x: 50, y: 60 })\n\n// Multiple points at once.\nseries.add([\n { x: 55, y: 60 },\n { x: 60, y: 62},\n { x: 65, y: 65}\n])\n```\n","image":"multipleAreas.png"},{"id":"lcjs-example-0102-areaBipolar","title":"Area Bipolar JavaScript Chart","tags":["area","xy","date-time"],"description":"Basic usage of Bipolar Area Series. Also known as a Bubble Series, Bubble Chart and Bubble Graph.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Area charts for Scientific use, dynamic charts, High-Performance Charts, 2D JS charts with area graphs.","src":"/*\n * LightningChart® example code: Demo shows how to draw multiple layered area series.\n * If you need any assistance, or notice error in this example code, please contact support@arction.com. \n * \n * http://www.arction.com | support@arction.com | sales@arction.com\n * © Arction Ltd 2009-2019. All rights reserved. \n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AreaSeriesTypes,\n AxisScrollStrategies,\n AxisTickStrategies,\n AutoCursorModes,\n Themes\n} = lcjs\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2017, 0, 1)\n\n// Create a XY Chart.\nconst xyChart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\nxyChart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.DateTime, (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin))\nxyChart.setTitle('Company growth in comparison to static baseline')\nxyChart.setAutoCursorMode(AutoCursorModes.onHover)\n\n// set y-axis title\nconst axisY = xyChart.getDefaultAxisY()\n .setTitle('Growth %')\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(0, 80)\n\nlet areaBipolarData = [\n { x: 0, y: 12 },\n { x: 1, y: 71 },\n { x: 2, y: 24 },\n { x: 3, y: 39 },\n { x: 4, y: 24 },\n { x: 5, y: 10 },\n { x: 6, y: 58 },\n { x: 7, y: 10 },\n { x: 8, y: 74 },\n { x: 9, y: 23 },\n { x: 10, y: 19 },\n { x: 11, y: 25 },\n { x: 12, y: 51 },\n { x: 13, y: 20 },\n { x: 14, y: 40 },\n { x: 15, y: 50 },\n { x: 16, y: 26 },\n { x: 17, y: 72 },\n { x: 18, y: 39 },\n { x: 19, y: 49 },\n { x: 20, y: 22 },\n { x: 21, y: 21 },\n { x: 22, y: 36 },\n { x: 23, y: 73 },\n { x: 24, y: 67 },\n { x: 25, y: 53 },\n { x: 26, y: 8 },\n { x: 27, y: 7 },\n { x: 28, y: 71 },\n { x: 29, y: 29 },\n { x: 30, y: 56 },\n { x: 31, y: 18 },\n { x: 32, y: 15 },\n { x: 33, y: 9 },\n { x: 34, y: 29 },\n { x: 35, y: 64 },\n { x: 36, y: 44 },\n { x: 37, y: 62 },\n { x: 38, y: 70 },\n { x: 39, y: 19 },\n { x: 40, y: 55 },\n { x: 41, y: 15 },\n { x: 42, y: 48 },\n { x: 43, y: 23 },\n { x: 44, y: 51 },\n { x: 45, y: 51 },\n { x: 46, y: 64 },\n { x: 47, y: 15 },\n { x: 48, y: 31 },\n { x: 49, y: 40 },\n { x: 50, y: 11 },\n { x: 51, y: 30 }\n]\nconst dataFrequency = 1000 * 60 * 60 * 24 * 7\n// Add dynamic bipolar Area Series.\nconst areaBipolar = xyChart.addAreaSeries({ baseline: 40, type: AreaSeriesTypes.Bipolar })\n .setCursorInterpolationEnabled(false)\n .setCursorResultTableFormatter((builder, series, position, high, low) => builder\n .addRow(series.getName())\n .addRow('Date:', series.axisX.formatValue(position))\n .addRow('Growth:', series.axisY.formatValue(high), '%')\n )\n\nareaBipolar.add(areaBipolarData.map(point => ({ x: point.x * dataFrequency, y: point.y })))\n","url":null,"readme":"*Also known as a Area Graph, Area Chart or Area Chart with Negative values*\n\nThe example shows the basic usage of a bipolar area series. The area series is based on ***line series*** with the area between the baseline and the given data filled with color. It is drawn on a Cartesian coordinate system and represents the quantitative data.\n\nCurrent example chart contains one bipolar area series. The data is drawn from both sides of the specified baseline. \n\nThe simple area chart can be created with few simple lines of code:\n\n```javascript\n// Create a new ChartXY.\nconst chart = lightningChart().ChartXY()\n\n// Add an area series with bipolar direction using default X and Y axes.\nconst areaBipolar = chart.addAreaSeries( { baseline: 0, type: AreaSeriesTypes.Both } )\n```\n\nThe baseline value the type of number and the type can be specified only during the creation of a series instance, where\n\n- The baseline is a fixed reference level of minimum or starting point used for comparisons, which allow customizing the position of the area.\n\n- The type of area series is an enum selector which defines the type of area series:\n - Select AreaSeriesTypes.Both to show the data from both sides of the baseline.\n\nThe series accepts points in format `{ x: number, y: number }`. Any number of points can be added with a single call.\n\n```javascript\n// Single point.\nseries.add({ x: 50, y: 60 })\n\n// Multiple points at once.\nseries.add([\n { x: 55, y: 60 },\n { x: 60, y: 62},\n { x: 65, y: 65}\n])\n```\n","image":"areaBipolar.png"},{"id":"lcjs-example-0103-layeredAreas","title":"Layered Areas JavaScript Chart","tags":["area","xy","date-time"],"description":"Layered Area Chart done by layering multiple Area Series on top of each other. Also known as a Layered Area Graph, Layered Area Chart or Multiple Area Charts.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Area charts for Scientific use, dynamic charts, High-Performance Charts, 2D JS charts with area graphs.","src":"/*\n * LightningChartJS example that showcases creation and styling of Area Series in a layered setting.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n UIElementBuilders,\n Themes\n} = lcjs\n\n// Create a XY Chart.\nconst xyChart = lightningChart().ChartXY({\n // theme: Themes.darkGold \n})\n .setTitle('Product version distribution')\n .setMouseInteractions(true)\n .setPadding({ right: 25 })\n\n// Custom tick labels for X Axis.\nconst reportTableXlable = ['Jan-17', 'Feb-17', 'Mar-17', 'Apr-17', 'May-17', 'Jun-17', 'Jul-17',\n 'Aug-17', 'Sep-17', 'Oct-17', 'Nov-17', 'Dec-17']\n\n// Creating AreaSeries\nconst createAreaSeries = (versionNumber, index) => {\n return xyChart.addAreaSeries()\n .setName(`Version ${versionNumber}`)\n .setCursorResultTableFormatter((builder, series, xValue, yValue) => {\n return builder\n .addRow(series.getName())\n .addRow('Date: ', reportTableXlable[parseInt(xValue)])\n .addRow('Distribution: ' + yValue.toFixed(2))\n });\n}\n\n// Create the area series\nconst V1Area = createAreaSeries(1, 0)\nconst V2Area = createAreaSeries(2, 2)\nconst V3Area = createAreaSeries(3, 2)\nconst V4Area = createAreaSeries(4, 0)\nconst V5Area = createAreaSeries(5, 1)\nconst V6Area = createAreaSeries(6, 2)\nconst V7Area = createAreaSeries(7, 0)\nconst V8Area = createAreaSeries(8, 1)\nconst V9Area = createAreaSeries(9, 2)\nconst V10Area = createAreaSeries(10, 0)\nconst V11Area = createAreaSeries(11, 1)\nconst V12Area = createAreaSeries(12, 2)\n\n// DataSet for all versions\nconst version1 = [{\n x: 'Jan-17', y: 1.3\n}, {\n x: 'Feb-17', y: 1.1\n}, {\n x: 'Mar-17', y: 1\n}, {\n x: 'Apr-17', y: 0.8\n}, {\n x: 'May-17', y: 0.7\n}, {\n x: 'Jun-17', y: 0.6\n}, {\n x: 'Jul-17', y: 0.6\n}, {\n x: 'Aug-17', y: 0.5\n}, {\n x: 'Sep-17', y: 0.4\n}, {\n x: 'Oct-17', y: 0.4\n}, {\n x: 'Nov-17', y: 0.3\n}, {\n x: 'Dec-17', y: 0.3\n}]\n\nconst version2 = [{\n x: 'Jan-17', y: 4.9\n}, {\n x: 'Feb-17', y: 4\n}, {\n x: 'Mar-17', y: 3.7\n}, {\n x: 'Apr-17', y: 3.2\n}, {\n x: 'May-17', y: 2.8\n}, {\n x: 'Jun-17', y: 2.4\n}, {\n x: 'Jul-17', y: 2.3\n}, {\n x: 'Aug-17', y: 2\n}, {\n x: 'Sep-17', y: 1.7\n}, {\n x: 'Oct-17', y: 1.5\n}, {\n x: 'Nov-17', y: 1.2\n}, {\n x: 'Dec-17', y: 1.1\n}]\n\nconst version3 = [{\n x: 'Jan-17', y: 6.8\n}, {\n x: 'Feb-17', y: 5.9\n}, {\n x: 'Mar-17', y: 5.4\n}, {\n x: 'Apr-17', y: 4.6\n}, {\n x: 'May-17', y: 4.1\n}, {\n x: 'Jun-17', y: 3.5\n}, {\n x: 'Jul-17', y: 3.3\n}, {\n x: 'Aug-17', y: 3\n}, {\n x: 'Sep-17', y: 2.6\n}, {\n x: 'Oct-17', y: 2.2\n}, {\n x: 'Nov-17', y: 1.8\n}, {\n x: 'Dec-17', y: 1.5\n}]\n\nconst version4 = [{\n x: 'Jan-17', y: 2\n}, {\n x: 'Feb-17', y: 1.7\n}, {\n x: 'Mar-17', y: 1.5\n}, {\n x: 'Apr-17', y: 1.3\n}, {\n x: 'May-17', y: 1.2\n}, {\n x: 'Jun-17', y: 1\n}, {\n x: 'Jul-17', y: 1\n}, {\n x: 'Aug-17', y: 0.9\n}, {\n x: 'Sep-17', y: 0.7\n}, {\n x: 'Oct-17', y: 0.6\n}, {\n x: 'Nov-17', y: 0.5\n}, {\n x: 'Dec-17', y: 0.4\n}]\n\nconst version5 = [{\n x: 'Jan-17', y: 25.2\n}, {\n x: 'Feb-17', y: 22.6\n}, {\n x: 'Mar-17', y: 20.8\n}, {\n x: 'Apr-17', y: 18.8\n}, {\n x: 'May-17', y: 17.1\n}, {\n x: 'Jun-17', y: 15.1\n}, {\n x: 'Jul-17', y: 14.5\n}, {\n x: 'Aug-17', y: 13.4\n}, {\n x: 'Sep-17', y: 12\n}, {\n x: 'Oct-17', y: 10.3\n}, {\n x: 'Nov-17', y: 8.6\n}, {\n x: 'Dec-17', y: 7.6\n}]\n\nconst version6 = [{\n x: 'Jan-17', y: 11.3\n}, {\n x: 'Feb-17', y: 10.1\n}, {\n x: 'Mar-17', y: 9.4\n}, {\n x: 'Apr-17', y: 8.7\n}, {\n x: 'May-17', y: 7.8\n}, {\n x: 'Jun-17', y: 7.1\n}, {\n x: 'Jul-17', y: 6.7\n}, {\n x: 'Aug-17', y: 6.1\n}, {\n x: 'Sep-17', y: 5.4\n}, {\n x: 'Oct-17', y: 4.8\n}, {\n x: 'Nov-17', y: 3.8\n}, {\n x: 'Dec-17', y: 3.5\n}]\n\nconst version7 = [{\n x: 'Jan-17', y: 22.8\n}, {\n x: 'Feb-17', y: 23.3\n}, {\n x: 'Mar-17', y: 23.1\n}, {\n x: 'Apr-17', y: 23.3\n}, {\n x: 'May-17', y: 23.3\n}, {\n x: 'Jun-17', y: 21.7\n}, {\n x: 'Jul-17', y: 21\n}, {\n x: 'Aug-17', y: 20.2\n}, {\n x: 'Sep-17', y: 19.2\n}, {\n x: 'Oct-17', y: 17.6\n}, {\n x: 'Nov-17', y: 15.4\n}, {\n x: 'Dec-17', y: 14.4\n}]\n\nconst version8 = [{\n x: 'Jan-17', y: 24\n}, {\n x: 'Feb-17', y: 29.6\n}, {\n x: 'Mar-17', y: 31.3\n}, {\n x: 'Apr-17', y: 31.2\n}, {\n x: 'May-17', y: 31.8\n}, {\n x: 'Jun-17', y: 32.2\n}, {\n x: 'Jul-17', y: 32\n}, {\n x: 'Aug-17', y: 29.7\n}, {\n x: 'Sep-17', y: 28.1\n}, {\n x: 'Oct-17', y: 25.5\n}, {\n x: 'Nov-17', y: 22.7\n}, {\n x: 'Dec-17', y: 21.3\n}]\n\nconst version9 = [{\n x: 'Jan-17', y: 0.3\n}, {\n x: 'Feb-17', y: 0.5\n}, {\n x: 'Mar-17', y: 2.4\n}, {\n x: 'Apr-17', y: 6.6\n}, {\n x: 'May-17', y: 10.6\n}, {\n x: 'Jun-17', y: 14.2\n}, {\n x: 'Jul-17', y: 15.8\n}, {\n x: 'Aug-17', y: 19.3\n}, {\n x: 'Sep-17', y: 22.3\n}, {\n x: 'Oct-17', y: 22.9\n}, {\n x: 'Nov-17', y: 20.3\n}, {\n x: 'Dec-17', y: 18.1\n}]\n\nconst version10 = [{\n x: 'Jan-17', y: 0\n}, {\n x: 'Feb-17', y: 0.2\n}, {\n x: 'Mar-17', y: 0.4\n}, {\n x: 'Apr-17', y: 0.5\n}, {\n x: 'May-17', y: 0.9\n}, {\n x: 'Jun-17', y: 1.6\n}, {\n x: 'Jul-17', y: 2\n}, {\n x: 'Aug-17', y: 4\n}, {\n x: 'Sep-17', y: 6.2\n}, {\n x: 'Oct-17', y: 8.2\n}, {\n x: 'Nov-17', y: 10.5\n}, {\n x: 'Dec-17', y: 10.1\n}]\n\nconst version11 = [{\n x: 'Jan-17', y: 0\n}, {\n x: 'Feb-17', y: 0\n}, {\n x: 'Mar-17', y: 0\n}, {\n x: 'Apr-17', y: 0\n}, {\n x: 'May-17', y: 0\n}, {\n x: 'Jun-17', y: 0\n}, {\n x: 'Jul-17', y: 0.2\n}, {\n x: 'Aug-17', y: 0.5\n}, {\n x: 'Sep-17', y: 0.8\n}, {\n x: 'Oct-17', y: 4.9\n}, {\n x: 'Nov-17', y: 11.4\n}, {\n x: 'Dec-17', y: 14\n}]\n\nconst version12 = [{\n x: 'Jan-17', y: 0\n}, {\n x: 'Feb-17', y: 0\n}, {\n x: 'Mar-17', y: 0\n}, {\n x: 'Apr-17', y: 0\n}, {\n x: 'May-17', y: 0\n}, {\n x: 'Jun-17', y: 0\n}, {\n x: 'Jul-17', y: 0\n}, {\n x: 'Aug-17', y: 0\n}, {\n x: 'Sep-17', y: 0.3\n}, {\n x: 'Oct-17', y: 0.8\n}, {\n x: 'Nov-17', y: 3.2\n}, {\n x: 'Dec-17', y: 7.5\n}]\n\nconst axisX = xyChart.getDefaultAxisX()\n .setMouseInteractions(false)\n .setScrollStrategy(undefined)\n // Disable default ticks.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n// Create Custom Axis\nlet customAxisX = (data, index) => {\n axisX.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(index)\n .setGridStrokeLength(0)\n .setTextFormatter((_) => data[index].x)\n\n}\n\n// Generate Chart\nconst generateChart = (data, area, createTicks) => {\n data\n .map((p, index) => ({ x: index, y: p.y }))\n .forEach((point, index) => {\n area.add(point)\n if(createTicks){\n customAxisX(data, index)\n }\n })\n}\n\n// generating different layered for charts\ngenerateChart(version1, V1Area, true)\ngenerateChart(version2, V2Area)\ngenerateChart(version3, V3Area)\ngenerateChart(version4, V4Area)\ngenerateChart(version5, V5Area)\ngenerateChart(version6, V6Area)\ngenerateChart(version7, V7Area)\ngenerateChart(version8, V8Area)\ngenerateChart(version9, V9Area)\ngenerateChart(version10, V10Area)\ngenerateChart(version11, V11Area)\ngenerateChart(version12, V12Area)\n\n// Enable AutoCursor auto-fill.\nxyChart.setAutoCursor((cursor) => cursor\n .setResultTableAutoTextStyle(false)\n .disposeTickMarkerX()\n)\n\nxyChart.getDefaultAxisY()\n .setTitle('Percentage')\n .setScrollStrategy(undefined)\n .setInterval(0, 50)\n .setMouseInteractions(false)\n","url":null,"readme":"*Also known as a Layered Area Graph, Layered Area Chart or Multiple Area Charts*\n\nLayers mean individual slices of information (series) which can be stacked to create your composition of multiple series within the same chart view using overlapping.\n\nIn this example, layered area chart is basically multiple areas layered by either making use of transparency or perspective. It can be used instead of a multiple ***LineSeries*** to compare development of a trend, to search patterns and relationships both within a collection and across collections over the period.\n","image":"layeredAreas.png"},{"id":"lcjs-example-0104-stackedMountains","title":"JavaScript Stacked Mountains Chart","tags":["area","xy","date-time"],"description":"Stacked Charts are a popular visual aid for comparing parts of a whole. Also known as Stacked Area Graph or Stacked Areas.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Area charts for Scientific use, dynamic charts, High-Performance Charts, 2D JS charts with area graphs.","src":"/*\n * LightningChartJS example that showcases stacked mountains chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n AutoCursorModes,\n Themes\n} = lcjs\n\n// Set the origin date to use for the X Axis\nconst dateOrigin = new Date(2017, 0, 1)\n// Multiplier used for X Axis values to transform each X value as a month.\nconst dataFrequency = 60 * 60 * 24 * 30 * 1000\n// Create a XY Chart.\nconst xyChart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n\n// Set up the Chart, disable zooming and panning mouse interactions\n// and set AutoCursor to show when hovering mouse over Series.\nxyChart\n .setTitle('Product Version Distribution')\n .setMouseInteractions(false)\n .setAutoCursorMode(AutoCursorModes.onHover)\n\n// Set up the X and Y Axes for the chart.\nxyChart\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n .setMouseInteractions(false)\n\nxyChart.getDefaultAxisY()\n .setTitle('Distribution %')\n .setInterval(0, 100)\n .setMouseInteractions(false)\n\n// ---- Add multiple series with different names and values. ----\nconst versionName = [\n 'Version 1',\n 'Version 2',\n 'Version 3',\n 'Version 4',\n 'Version 5',\n 'Version 6',\n 'Version 7',\n 'Version 8',\n 'Version 9',\n 'Version 10',\n 'Version 11',\n 'Version 12'\n]\n// Array to store the created Area Series.\nconst version = []\n// Create Series for each version name.\nversionName.forEach((v, k) => {\n // The first version (data) is drawn at the bottom of the chart, so we can just use a Area Series to render it.\n if (k == 0) {\n version[k] = xyChart.addAreaSeries()\n .setName(v)\n } else {\n // Rest of the versions (data) are drawn based on the version before, so we'll use Area Range Series to render it.\n version[k] = xyChart.addAreaRangeSeries()\n .setName(v)\n }\n // Set up how to display the Result Table.\n version[k].setCursorResultTableFormatter((builder, series, xValue, yValueHigh, yValueLow) => {\n return builder\n .addRow(v)\n .addRow('Date: ' + series.axisX.formatValue(xValue))\n .addRow('Distribution: ' + (yValueHigh - yValueLow).toFixed(2) + '%')\n })\n})\n// Create data for each Version.\nconst data = [\n [\n { x: 0, y: 1.3 },\n { x: 1, y: 1.2 },\n { x: 2, y: 1.1 },\n { x: 3, y: 1.1 },\n { x: 4, y: 1 },\n { x: 5, y: 0.9 },\n { x: 6, y: 0.8 },\n { x: 7, y: 0.8 },\n { x: 8, y: 0.7 },\n { x: 9, y: 0.7 },\n { x: 10, y: 0.6 },\n { x: 11, y: 0.6 },\n { x: 12, y: 0.5 },\n { x: 13, y: 0.5 },\n { x: 14, y: 0.5 },\n { x: 15, y: 0.4 }\n ],\n [\n { x: 0, y: 4.9 },\n { x: 1, y: 4.5 },\n { x: 2, y: 4.2 },\n { x: 3, y: 4 },\n { x: 4, y: 3.7 },\n { x: 5, y: 3.5 },\n { x: 6, y: 3.3 },\n { x: 7, y: 3.1 },\n { x: 8, y: 2.9 },\n { x: 9, y: 2.7 },\n { x: 10, y: 2.5 },\n { x: 11, y: 2.3 },\n { x: 12, y: 2.2 },\n { x: 13, y: 2 },\n { x: 14, y: 1.9 },\n { x: 15, y: 1.7 }\n ],\n [\n { x: 0, y: 6.8 },\n { x: 1, y: 6.4 },\n { x: 2, y: 5.9 },\n { x: 3, y: 5.7 },\n { x: 4, y: 5.4 },\n { x: 5, y: 5.2 },\n { x: 6, y: 4.8 },\n { x: 7, y: 4.4 },\n { x: 8, y: 4.1 },\n { x: 9, y: 3.9 },\n { x: 10, y: 3.5 },\n { x: 11, y: 3.3 },\n { x: 12, y: 3.1 },\n { x: 13, y: 3 },\n { x: 14, y: 2.9 },\n { x: 15, y: 2.6 }\n ],\n [\n { x: 0, y: 3 },\n { x: 1, y: 2.2 },\n { x: 2, y: 1.7 },\n { x: 3, y: 1.6 },\n { x: 4, y: 1.5 },\n { x: 5, y: 1.5 },\n { x: 6, y: 1.3 },\n { x: 7, y: 1.3 },\n { x: 8, y: 1.2 },\n { x: 9, y: 1.1 },\n { x: 10, y: 1 },\n { x: 11, y: 1 },\n { x: 12, y: 0.9 },\n { x: 13, y: 0.9 },\n { x: 14, y: 0.8 },\n { x: 15, y: 0.7 }\n ],\n [\n { x: 0, y: 25.2 },\n { x: 1, y: 24.5 },\n { x: 2, y: 23.5 },\n { x: 3, y: 21.9 },\n { x: 4, y: 20.8 },\n { x: 5, y: 20.5 },\n { x: 6, y: 19.5 },\n { x: 7, y: 18.6 },\n { x: 8, y: 17.6 },\n { x: 9, y: 16.5 },\n { x: 10, y: 15.3 },\n { x: 11, y: 14.7 },\n { x: 12, y: 13.8 },\n { x: 13, y: 13.4 },\n { x: 14, y: 12.8 },\n { x: 15, y: 11.7 }\n ],\n [\n { x: 0, y: 11.3 },\n { x: 1, y: 10.8 },\n { x: 2, y: 10.1 },\n { x: 3, y: 9.8 },\n { x: 4, y: 9.4 },\n { x: 5, y: 9.2 },\n { x: 6, y: 8.7 },\n { x: 7, y: 8.2 },\n { x: 8, y: 7.8 },\n { x: 9, y: 7.4 },\n { x: 10, y: 7.1 },\n { x: 11, y: 6.7 },\n { x: 12, y: 6.4 },\n { x: 13, y: 6.1 },\n { x: 14, y: 5.7 },\n { x: 15, y: 5.4 }\n ],\n [\n { x: 0, y: 22.8 },\n { x: 1, y: 23.2 },\n { x: 2, y: 23.3 },\n { x: 3, y: 23.2 },\n { x: 4, y: 23.1 },\n { x: 5, y: 23 },\n { x: 6, y: 23.3 },\n { x: 7, y: 22.6 },\n { x: 8, y: 22.3 },\n { x: 9, y: 21.8 },\n { x: 10, y: 21.7 },\n { x: 11, y: 21.2 },\n { x: 12, y: 20.8 },\n { x: 13, y: 20.2 },\n { x: 14, y: 19.8 },\n { x: 15, y: 19.2 }\n ],\n [\n { x: 0, y: 24 },\n { x: 1, y: 26.8 },\n { x: 2, y: 29.5 },\n { x: 3, y: 30.7 },\n { x: 4, y: 31.3 },\n { x: 5, y: 31.2 },\n { x: 6, y: 31.2 },\n { x: 7, y: 31.2 },\n { x: 8, y: 31.8 },\n { x: 9, y: 32.3 },\n { x: 10, y: 32.2 },\n { x: 11, y: 32 },\n { x: 12, y: 30.9 },\n { x: 13, y: 29.7 },\n { x: 14, y: 28.6 },\n { x: 15, y: 28.8 }\n ],\n [\n { x: 0, y: 0.7 },\n { x: 1, y: 0.4 },\n { x: 2, y: 0.5 },\n { x: 3, y: 1.7 },\n { x: 4, y: 3.4 },\n { x: 5, y: 4.6 },\n { x: 6, y: 6.6 },\n { x: 7, y: 9.1 },\n { x: 8, y: 10.6 },\n { x: 9, y: 12.3 },\n { x: 10, y: 14.4 },\n { x: 11, y: 16 },\n { x: 12, y: 17.8 },\n { x: 13, y: 19.3 },\n { x: 14, y: 21.1 },\n { x: 15, y: 22.3 }\n ],\n [\n { x: 0, y: 0 },\n { x: 1, y: 0 },\n { x: 2, y: 0.2 },\n { x: 3, y: 0.3 },\n { x: 4, y: 0.4 },\n { x: 5, y: 0.4 },\n { x: 6, y: 0.5 },\n { x: 7, y: 0.7 },\n { x: 8, y: 1 },\n { x: 9, y: 1.3 },\n { x: 10, y: 1.7 },\n { x: 11, y: 2 },\n { x: 12, y: 3.3 },\n { x: 13, y: 4.4 },\n { x: 14, y: 5.2 },\n { x: 15, y: 6.1 }\n ],\n [\n { x: 0, y: 0 },\n { x: 1, y: 0 },\n { x: 2, y: 0 },\n { x: 3, y: 0 },\n { x: 4, y: 0 },\n { x: 5, y: 0 },\n { x: 6, y: 0 },\n { x: 7, y: 0 },\n { x: 8, y: 0 },\n { x: 9, y: 0 },\n { x: 10, y: 0 },\n { x: 11, y: 0.2 },\n { x: 12, y: 0.3 },\n { x: 13, y: 0.5 },\n { x: 14, y: 0.5 },\n { x: 15, y: 0.8 }\n ],\n [\n { x: 0, y: 0 },\n { x: 1, y: 0 },\n { x: 2, y: 0 },\n { x: 3, y: 0 },\n { x: 4, y: 0 },\n { x: 5, y: 0 },\n { x: 6, y: 0 },\n { x: 7, y: 0 },\n { x: 8, y: 0 },\n { x: 9, y: 0 },\n { x: 10, y: 0 },\n { x: 11, y: 0 },\n { x: 12, y: 0 },\n { x: 13, y: 0 },\n { x: 14, y: 0.2 },\n { x: 15, y: 0.3 }\n ]\n]\n\n// Function to get the proper High value for a Series.\nconst getYHigh = (p, k) => {\n let sum = 0\n while (p >= 0) {\n sum += data[p][k].y\n p--\n }\n return sum\n}\n\n// Function to get the proper Low value for a Series.\nconst getYLow = (p, k) => {\n let sum = 0\n while (p - 1 >= 0) {\n sum += data[p - 1][k].y\n p--\n }\n return sum\n}\n\n/**\n * Fill each Area Series with the data created for them.\n */\ndata[0].forEach((point, i) => {\n version.forEach((series, index) => {\n // For the first series, only one Y value is needed.\n if (index == 0) {\n version[index].add({\n x: point.x * dataFrequency,\n y: point.y\n })\n // Rest of the series need both the High and Low values;\n // Low is the previous Series' High value.\n } else {\n version[index].add(\n {\n position: point.x * dataFrequency,\n high: getYHigh(index, i),\n low: getYLow(index, i)\n }\n )\n }\n })\n})\n","url":null,"readme":"*Also known as Stacked Area Graph or Stacked Areas*\n\nThe stacked charts are a popular visual aid used for categorizing and comparing the parts of a whole using different colors to distinguish the categories.\n\nThis chart is created with custom stacking logic by using ***Area*** and ***AreaRange*** series and position each next data segment on top of the previous. Relying on characteristics and use cases of mountain series mentioned in previous examples, area is drawn on a Cartesian coordinate system and represents the quantitative data. Thus, in the example, the first data segment starts from a zero baseline and each next category would use the magnitude of previous segment as a low starting point.\n\n```javascript\n// Create one Area series to be the base.\nconst areaFirst = chart.addAreaSeries()\n\n// Create the next AreaRange series to be stacked on top of previous.\nconst areaNext1 = chart.addAreaRangeSeries()\nconst areaNext2 = chart.addAreaRangeSeries()\n```\n","image":"stackedMountains.png"},{"id":"lcjs-example-0105-temperatureVariations","title":"Temperature Variations JavaScript Chart","tags":["area","range","xy","date-time","legendbox"],"description":"The example shows the basic usage of Area Range series to display variation in temperature.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Area charts for Scientific use, dynamic charts, High-Performance Charts, 2D JS charts with area graphs.","src":"/*\n * LightningChartJS example that showcases a simulation of daily temperature variations.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n SolidFill,\n SolidLine,\n ColorRGBA,\n ColorHEX,\n LegendBoxBuilders,\n LinearGradientFill,\n Themes\n} = lcjs\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2019, 3, 1)\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\nchart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.DateTime, (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin))\nchart.setTitle('Daily temperature range, April 2019')\n\nconst axisX = chart.getDefaultAxisX()\nconst axisY = chart.getDefaultAxisY()\n .setTitle('Temperature (°C)')\n .setScrollStrategy(undefined)\n\n// Daily temperature records\nconst recordRange = chart.addAreaRangeSeries()\n// Current month daily temperature variations\nconst currentRange = chart.addAreaRangeSeries()\n// ----- Series stylings\n// Temperature records fill style, gradient Red - Blue scale. \nconst recordRangeFillStyle = new LinearGradientFill(\n {\n angle: 0,\n stops:[\n {color: ColorHEX('#0000FF9F'), offset:0},\n {color: ColorHEX('#FF00009F'), offset:1}\n ]\n }\n)\n// Record range stroke fill style, high line\nconst recordRangeStrokeFillStyleHigh = new SolidLine().setFillStyle(new SolidFill({ color: ColorRGBA(250, 91, 70) }))\n// Record range stroke fill style, low line\nconst recordRangeStrokeFillStyleLow = new SolidLine().setFillStyle(new SolidFill({ color: ColorRGBA(63, 138, 250) }))\n// Current month temperature fill style\nconst currentRangeFillStyle = new SolidFill({ color: ColorRGBA(255, 174, 0, 200) })\n// Current range stroke fill style\nconst currentRangeStrokeFillStyle = new SolidLine().setFillStyle(new SolidFill({ color: ColorRGBA(250, 226, 105) }))\n// ----- Applying stylings\n// Record range\nrecordRange\n .setName('Temperature records range')\n .setHighFillStyle(recordRangeFillStyle)\n // Same fill style for the highlighted series\n .setHighFillStyleHighlight(recordRangeFillStyle)\n .setHighStrokeStyle(recordRangeStrokeFillStyleHigh)\n .setHighStrokeStyleHighlight(recordRangeStrokeFillStyleHigh)\n .setLowStrokeStyle(recordRangeStrokeFillStyleLow)\n .setLowStrokeStyleHighlight(recordRangeStrokeFillStyleLow)\n// Current range\ncurrentRange\n .setName('2019 temperatures')\n .setHighFillStyle(currentRangeFillStyle)\n .setHighStrokeStyle(currentRangeStrokeFillStyle)\n .setLowStrokeStyle(currentRangeStrokeFillStyle)\n\n// ----- Result tables settings\n// Record range\nrecordRange.setCursorResultTableFormatter((builder, series, figure, yMax, yMin) => {\n return builder\n .addRow('Temperature records range')\n .addRow('Date: ' + axisX.formatValue(figure))\n .addRow('Highest: ' + yMax.toFixed(2) + ' °C')\n .addRow('Lowest: ' + yMin.toFixed(2) + ' °C')\n})\n// Current range\ncurrentRange.setCursorResultTableFormatter((builder, series, figure, yMax, yMin) => {\n return builder\n .addRow('2019 temperatures')\n .addRow('Date: ' + axisX.formatValue(figure))\n .addRow('Highest: ' + yMax.toFixed(2) + ' °C')\n .addRow('Lowest: ' + yMin.toFixed(2) + ' °C')\n})\n// ----- Generating data\nconst randomInt = (min, max) => {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\nconst currentRangeData = []\nconst recordRangeData = []\n// Current range\nfor (let i = 0; i < 31; i++) {\n const randomPoint = () => {\n const x = i\n let yMax\n if (i > 0) {\n const previousYMax = currentRangeData[i - 1].yMax\n yMax = randomInt(previousYMax - 5, previousYMax + 5)\n } else {\n yMax = randomInt(-5, 25)\n }\n const yMin = randomInt(yMax - 5, yMax) - 5\n return {\n x,\n yMax,\n yMin\n }\n }\n currentRangeData.push(randomPoint())\n}\n\nlet recordYMax = currentRangeData[0].yMax\nlet recordYMin = currentRangeData[0].yMin\nfor (let i = 1; i < currentRangeData.length; i++) {\n if (currentRangeData[i].yMin < recordYMin) recordYMin = currentRangeData[i].yMin\n if (currentRangeData[i].yMax > recordYMax) recordYMax = currentRangeData[i].yMax\n}\n// Set series interval\naxisY.setInterval(recordYMin - 5, recordYMax + 5)\n// ----- Generate record temperatures\nfor (let i = 0; i < 31; i++) {\n const randomPoint = () => {\n const x = i\n const yMax = randomInt(recordYMax - 2, recordYMax + 2)\n const yMin = randomInt(recordYMin - 1, recordYMin)\n return {\n x,\n yMax,\n yMin\n }\n }\n recordRangeData.push(randomPoint())\n}\n// ----- Adding data points\nrecordRangeData.forEach((point, i) => {\n recordRange.add({ position: (point.x * 24 * 60 * 60 * 1000), high: point.yMax, low: point.yMin })\n})\n\ncurrentRangeData.forEach((point, i) => {\n currentRange.add({ position: (point.x * 24 * 60 * 60 * 1000), high: point.yMax, low: point.yMin })\n})\n// ----- Add legend box\nconst legendBox = chart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n\nlegendBox.add(chart)\n","url":null,"readme":"The example shows the basic usage of Area Range series to display variation in temperature.\n\nRange charts are generally used to show variations (low & high) simultaneously in the given period.\n\n```javascript\n// Create a new ChartXY.\nconst chart = lightningChart().ChartXY()\n\n// Add an area series with bipolar direction using default X and Y axes.\nconst areaRange = chart.addAreaRangeSeries()\n```\n\nThe series accepts ***AreaPoint*** type of points either as an object in format \n`{ position: number, high: number, low: number }`,\n\n```javascript\nseries.add({ position: 20, high: 45, low: -20 })\n```\n\nor via a factory that should be additionally imported.\n\n```javascript\nseries.add( AreaPoint( 20, 45, -20 ) )\n```\n\nAny number of points can be added with a single call.\n\n```javascript\n// Single point.\nseries.add({ position: 20, high: 45, low: -20 })\n\n// Multiple points at once.\nseries.add([\n { position: 20, high: 45, low: -20 },\n { position: 40, high: 95, low: 10 },\n { position: 60, high: 25, low: 60 }\n])\n```\n","image":"temperatureVariations.png"},{"id":"lcjs-example-0150-ecg","title":"JavaScript ECG Chart","tags":["line","xy","realtime","datapattern","datacleaning"],"description":"This example shows a simulated electrocardiogram(ECG)-signal by using a Line Series in a XY Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases a simulated ECG signal.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n Themes\n} = lcjs\n\n// Import data-generators from 'xydata'-library.\nconst {\n createSampledDataGenerator\n} = require('@arction/xydata')\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold \n}).setTitle('ECG')\n\n// Create line series optimized for regular progressive X data.\nconst series = chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true => The X step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n })\n // Destroy automatically outscrolled data (old data becoming out of scrolling axis range).\n // Actual data cleaning can happen at any convenient time (not necessarily immediately when data goes out of range).\n .setMaxPointCount(10000)\n .setMouseInteractions(false)\n\n// Setup view nicely.\nchart.getDefaultAxisY()\n .setTitle('mV')\n .setInterval(-1600, 1000)\n .setScrollStrategy(AxisScrollStrategies.expansion)\n\nchart.getDefaultAxisX()\n .setTitle('milliseconds')\n .setInterval(0, 2500)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n\n// Points that are used to generate a continuous stream of data.\nconst point = [\n { x: 2, y: 81 },\n { x: 3, y: 83 },\n { x: 4, y: 88 },\n { x: 5, y: 98 },\n { x: 6, y: 92 },\n { x: 7, y: 85 },\n { x: 8, y: 73 },\n { x: 9, y: 71 },\n { x: 10, y: 70 },\n { x: 11, y: 83 },\n { x: 12, y: 73 },\n { x: 13, y: 79 },\n { x: 14, y: 84 },\n { x: 15, y: 78 },\n { x: 16, y: 67 },\n { x: 17, y: 71 },\n { x: 18, y: 76 },\n { x: 19, y: 77 },\n { x: 20, y: 64 },\n { x: 21, y: 53 },\n { x: 22, y: 0 },\n { x: 23, y: 41 },\n { x: 24, y: 51 },\n { x: 25, y: 3 },\n { x: 26, y: 31 },\n { x: 27, y: 37 },\n { x: 28, y: 35 },\n { x: 29, y: 48 },\n { x: 30, y: 40 },\n { x: 31, y: 42 },\n { x: 32, y: 42 },\n { x: 33, y: 32 },\n { x: 34, y: 21 },\n { x: 35, y: 41 },\n { x: 36, y: 48 },\n { x: 37, y: 47 },\n { x: 38, y: 45 },\n { x: 39, y: 42 },\n { x: 40, y: 28 },\n { x: 41, y: 15 },\n { x: 42, y: 1 },\n { x: 43, y: -12 },\n { x: 44, y: -4 },\n { x: 45, y: 15 },\n { x: 46, y: 23 },\n { x: 47, y: 22 },\n { x: 48, y: 40 },\n { x: 49, y: 46 },\n { x: 50, y: 49 },\n { x: 51, y: 48 },\n { x: 52, y: 43 },\n { x: 53, y: 52 },\n { x: 54, y: 49 },\n { x: 55, y: 44 },\n { x: 56, y: 41 },\n { x: 57, y: 41 },\n { x: 58, y: 45 },\n { x: 59, y: 57 },\n { x: 60, y: 67 },\n { x: 61, y: 65 },\n { x: 62, y: 58 },\n { x: 63, y: 47 },\n { x: 64, y: 34 },\n { x: 65, y: 35 },\n { x: 66, y: 23 },\n { x: 67, y: 11 },\n { x: 68, y: 7 },\n { x: 69, y: 14 },\n { x: 70, y: 23 },\n { x: 71, y: 18 },\n { x: 72, y: 31 },\n { x: 73, y: 35 },\n { x: 74, y: 44 },\n { x: 75, y: 49 },\n { x: 76, y: 34 },\n { x: 77, y: 7 },\n { x: 78, y: -3 },\n { x: 79, y: -8 },\n { x: 80, y: -11 },\n { x: 81, y: -20 },\n { x: 82, y: -28 },\n { x: 83, y: -4 },\n { x: 84, y: 15 },\n { x: 85, y: 20 },\n { x: 86, y: 26 },\n { x: 87, y: 26 },\n { x: 88, y: 24 },\n { x: 89, y: 34 },\n { x: 90, y: 35 },\n { x: 91, y: 30 },\n { x: 92, y: 22 },\n { x: 93, y: 12 },\n { x: 94, y: 15 },\n { x: 95, y: 18 },\n { x: 96, y: 24 },\n { x: 97, y: 18 },\n { x: 98, y: 26 },\n { x: 99, y: 25 },\n { x: 100, y: 13 },\n { x: 101, y: 2 },\n { x: 102, y: 1 },\n { x: 103, y: -10 },\n { x: 104, y: -10 },\n { x: 105, y: -4 },\n { x: 106, y: 8 },\n { x: 107, y: 15 },\n { x: 108, y: 15 },\n { x: 109, y: 15 },\n { x: 110, y: 15 },\n { x: 111, y: 18 },\n { x: 112, y: 19 },\n { x: 113, y: 3 },\n { x: 114, y: -12 },\n { x: 115, y: -14 },\n { x: 116, y: -10 },\n { x: 117, y: -22 },\n { x: 118, y: -24 },\n { x: 119, y: -29 },\n { x: 120, y: -21 },\n { x: 121, y: -19 },\n { x: 122, y: -26 },\n { x: 123, y: -9 },\n { x: 124, y: -10 },\n { x: 125, y: -6 },\n { x: 126, y: -8 },\n { x: 127, y: -31 },\n { x: 128, y: -52 },\n { x: 129, y: -57 },\n { x: 130, y: -40 },\n { x: 131, y: -20 },\n { x: 132, y: 7 },\n { x: 133, y: 14 },\n { x: 134, y: 10 },\n { x: 135, y: 6 },\n { x: 136, y: 12 },\n { x: 137, y: -5 },\n { x: 138, y: -2 },\n { x: 139, y: 9 },\n { x: 140, y: 23 },\n { x: 141, y: 36 },\n { x: 142, y: 52 },\n { x: 143, y: 61 },\n { x: 144, y: 56 },\n { x: 145, y: 48 },\n { x: 146, y: 48 },\n { x: 147, y: 38 },\n { x: 148, y: 29 },\n { x: 149, y: 33 },\n { x: 150, y: 20 },\n { x: 151, y: 1 },\n { x: 152, y: -7 },\n { x: 153, y: -9 },\n { x: 154, y: -4 },\n { x: 155, y: -12 },\n { x: 156, y: -3 },\n { x: 157, y: 5 },\n { x: 158, y: -3 },\n { x: 159, y: 12 },\n { x: 160, y: 6 },\n { x: 161, y: -10 },\n { x: 162, y: -2 },\n { x: 163, y: 15 },\n { x: 164, y: 17 },\n { x: 165, y: 21 },\n { x: 166, y: 22 },\n { x: 167, y: 15 },\n { x: 168, y: 16 },\n { x: 169, y: 1 },\n { x: 170, y: -2 },\n { x: 171, y: -9 },\n { x: 172, y: -16 },\n { x: 173, y: -18 },\n { x: 174, y: -15 },\n { x: 175, y: -4 },\n { x: 176, y: 0 },\n { x: 177, y: -1 },\n { x: 178, y: -1 },\n { x: 179, y: -3 },\n { x: 180, y: -12 },\n { x: 181, y: -15 },\n { x: 182, y: -13 },\n { x: 183, y: -16 },\n { x: 184, y: -29 },\n { x: 185, y: -34 },\n { x: 186, y: -28 },\n { x: 187, y: -29 },\n { x: 188, y: -27 },\n { x: 189, y: -25 },\n { x: 190, y: -25 },\n { x: 191, y: -33 },\n { x: 192, y: -38 },\n { x: 193, y: -36 },\n { x: 194, y: -12 },\n { x: 195, y: -7 },\n { x: 196, y: -20 },\n { x: 197, y: -21 },\n { x: 198, y: -14 },\n { x: 199, y: -7 },\n { x: 200, y: 7 },\n { x: 201, y: 14 },\n { x: 202, y: 18 },\n { x: 203, y: 28 },\n { x: 204, y: 27 },\n { x: 205, y: 38 },\n { x: 206, y: 33 },\n { x: 207, y: 24 },\n { x: 208, y: 20 },\n { x: 209, y: 15 },\n { x: 210, y: 6 },\n { x: 211, y: 0 },\n { x: 212, y: -2 },\n { x: 213, y: 2 },\n { x: 214, y: 0 },\n { x: 215, y: -2 },\n { x: 216, y: -12 },\n { x: 217, y: -10 },\n { x: 218, y: 20 },\n { x: 219, y: 41 },\n { x: 220, y: 35 },\n { x: 221, y: 27 },\n { x: 222, y: 12 },\n { x: 223, y: -1 },\n { x: 224, y: -15 },\n { x: 225, y: -20 },\n { x: 226, y: -23 },\n { x: 227, y: 0 },\n { x: 228, y: 24 },\n { x: 229, y: 36 },\n { x: 230, y: 52 },\n { x: 231, y: 61 },\n { x: 232, y: 67 },\n { x: 233, y: 73 },\n { x: 234, y: 88 },\n { x: 235, y: 85 },\n { x: 236, y: 71 },\n { x: 237, y: 74 },\n { x: 238, y: 67 },\n { x: 239, y: 41 },\n { x: 240, y: 26 },\n { x: 241, y: 13 },\n { x: 242, y: 10 },\n { x: 243, y: 1 },\n { x: 244, y: -10 },\n { x: 245, y: -26 },\n { x: 246, y: -33 },\n { x: 247, y: -23 },\n { x: 248, y: -25 },\n { x: 249, y: -24 },\n { x: 250, y: -24 },\n { x: 251, y: -28 },\n { x: 252, y: -24 },\n { x: 253, y: -25 },\n { x: 254, y: -21 },\n { x: 255, y: -8 },\n { x: 256, y: -5 },\n { x: 257, y: -4 },\n { x: 258, y: -13 },\n { x: 259, y: -29 },\n { x: 260, y: -42 },\n { x: 261, y: -52 },\n { x: 262, y: -52 },\n { x: 263, y: -40 },\n { x: 264, y: -40 },\n { x: 265, y: -34 },\n { x: 266, y: -28 },\n { x: 267, y: -30 },\n { x: 268, y: -37 },\n { x: 269, y: -40 },\n { x: 270, y: -38 },\n { x: 271, y: -41 },\n { x: 272, y: -39 },\n { x: 273, y: -46 },\n { x: 274, y: -48 },\n { x: 275, y: -48 },\n { x: 276, y: -40 },\n { x: 277, y: -40 },\n { x: 278, y: -45 },\n { x: 279, y: -57 },\n { x: 280, y: -61 },\n { x: 281, y: -63 },\n { x: 282, y: -78 },\n { x: 283, y: -81 },\n { x: 284, y: -87 },\n { x: 285, y: -82 },\n { x: 286, y: -88 },\n { x: 287, y: -100 },\n { x: 288, y: -100 },\n { x: 289, y: -97 },\n { x: 290, y: -104 },\n { x: 291, y: -102 },\n { x: 292, y: -79 },\n { x: 293, y: -72 },\n { x: 294, y: -72 },\n { x: 295, y: -63 },\n { x: 296, y: -35 },\n { x: 297, y: -22 },\n { x: 298, y: -10 },\n { x: 299, y: 2 },\n { x: 300, y: 5 },\n { x: 301, y: 9 },\n { x: 302, y: -10 },\n { x: 303, y: -16 },\n { x: 304, y: -16 },\n { x: 305, y: -10 },\n { x: 306, y: -4 },\n { x: 307, y: -1 },\n { x: 308, y: 2 },\n { x: 309, y: 14 },\n { x: 310, y: 21 },\n { x: 311, y: 23 },\n { x: 312, y: 17 },\n { x: 313, y: 13 },\n { x: 314, y: 10 },\n { x: 315, y: 0 },\n { x: 316, y: -6 },\n { x: 317, y: -5 },\n { x: 318, y: 11 },\n { x: 319, y: 22 },\n { x: 320, y: 28 },\n { x: 321, y: 31 },\n { x: 322, y: 33 },\n { x: 323, y: 29 },\n { x: 324, y: 26 },\n { x: 325, y: 27 },\n { x: 326, y: 28 },\n { x: 327, y: 26 },\n { x: 328, y: 35 },\n { x: 329, y: 44 },\n { x: 330, y: 52 },\n { x: 331, y: 80 },\n { x: 332, y: 100 },\n { x: 333, y: 101 },\n { x: 334, y: 111 },\n { x: 335, y: 120 },\n { x: 336, y: 128 },\n { x: 337, y: 150 },\n { x: 338, y: 174 },\n { x: 339, y: 201 },\n { x: 340, y: 232 },\n { x: 341, y: 278 },\n { x: 342, y: 350 },\n { x: 343, y: 422 },\n { x: 344, y: 510 },\n { x: 345, y: 580 },\n { x: 346, y: 662 },\n { x: 347, y: 738 },\n { x: 348, y: 806 },\n { x: 349, y: 869 },\n { x: 350, y: 907 },\n { x: 351, y: 939 },\n { x: 352, y: 954 },\n { x: 353, y: 971 },\n { x: 354, y: 961 },\n { x: 355, y: 912 },\n { x: 356, y: 826 },\n { x: 357, y: 713 },\n { x: 358, y: 553 },\n { x: 359, y: 382 },\n { x: 360, y: 166 },\n { x: 361, y: -56 },\n { x: 362, y: -275 },\n { x: 363, y: -518 },\n { x: 364, y: -824 },\n { x: 365, y: -1122 },\n { x: 366, y: -1325 },\n { x: 367, y: -1453 },\n { x: 368, y: -1507 },\n { x: 369, y: -1547 },\n { x: 370, y: -1568 },\n { x: 371, y: -1559 },\n { x: 372, y: -1553 },\n { x: 373, y: -1537 },\n { x: 374, y: -1499 },\n { x: 375, y: -1447 },\n { x: 376, y: -1424 },\n { x: 377, y: -1398 },\n { x: 378, y: -1352 },\n { x: 379, y: -1291 },\n { x: 380, y: -1189 },\n { x: 381, y: -1085 },\n { x: 382, y: -977 },\n { x: 383, y: -852 },\n { x: 384, y: -736 },\n { x: 385, y: -649 },\n { x: 386, y: -603 },\n { x: 387, y: -576 },\n { x: 388, y: -454 },\n { x: 389, y: -443 },\n { x: 390, y: -332 },\n { x: 391, y: -264 },\n { x: 392, y: -209 },\n { x: 393, y: -153 },\n { x: 394, y: -105 },\n { x: 395, y: -61 },\n { x: 396, y: -16 },\n { x: 397, y: 37 },\n { x: 398, y: 96 },\n { x: 399, y: 150 },\n { x: 400, y: 198 },\n { x: 401, y: 238 },\n { x: 402, y: 265 },\n { x: 403, y: 294 },\n { x: 404, y: 324 },\n { x: 405, y: 351 },\n { x: 406, y: 367 },\n { x: 407, y: 376 },\n { x: 408, y: 378 },\n { x: 409, y: 391 },\n { x: 410, y: 406 },\n { x: 411, y: 427 },\n { x: 412, y: 433 },\n { x: 413, y: 448 },\n { x: 414, y: 440 },\n { x: 415, y: 429 },\n { x: 416, y: 429 },\n { x: 417, y: 420 },\n { x: 418, y: 413 },\n { x: 419, y: 420 },\n { x: 420, y: 411 },\n { x: 421, y: 408 },\n { x: 422, y: 404 },\n { x: 423, y: 398 },\n { x: 424, y: 401 },\n { x: 425, y: 412 },\n { x: 426, y: 389 },\n { x: 427, y: 367 },\n { x: 428, y: 357 },\n { x: 429, y: 359 },\n { x: 430, y: 351 },\n { x: 431, y: 345 },\n { x: 432, y: 341 },\n { x: 433, y: 345 },\n { x: 434, y: 346 },\n { x: 435, y: 340 },\n { x: 436, y: 334 },\n { x: 437, y: 323 },\n { x: 438, y: 319 },\n { x: 439, y: 314 },\n { x: 440, y: 284 },\n { x: 441, y: 263 },\n { x: 442, y: 261 },\n { x: 443, y: 248 },\n { x: 444, y: 234 },\n { x: 445, y: 236 },\n { x: 446, y: 236 },\n { x: 447, y: 248 },\n { x: 448, y: 252 },\n { x: 449, y: 251 },\n { x: 450, y: 237 },\n { x: 451, y: 230 },\n { x: 452, y: 238 },\n { x: 453, y: 227 },\n { x: 454, y: 207 },\n { x: 455, y: 188 },\n { x: 456, y: 163 },\n { x: 457, y: 155 },\n { x: 458, y: 152 },\n { x: 459, y: 153 },\n { x: 460, y: 156 },\n { x: 461, y: 171 },\n { x: 462, y: 162 },\n { x: 463, y: 155 },\n { x: 464, y: 148 },\n { x: 465, y: 139 },\n { x: 466, y: 154 },\n { x: 467, y: 158 },\n { x: 468, y: 155 },\n { x: 469, y: 159 },\n { x: 470, y: 147 },\n { x: 471, y: 143 },\n { x: 472, y: 133 },\n { x: 473, y: 118 },\n { x: 474, y: 118 },\n { x: 475, y: 121 },\n { x: 476, y: 130 },\n { x: 477, y: 133 },\n { x: 478, y: 133 },\n { x: 479, y: 128 },\n { x: 480, y: 120 },\n { x: 481, y: 97 },\n { x: 482, y: 91 },\n { x: 483, y: 88 },\n { x: 484, y: 85 },\n { x: 485, y: 84 },\n { x: 486, y: 74 },\n { x: 487, y: 44 },\n { x: 488, y: 32 },\n { x: 489, y: 10 },\n { x: 490, y: -2 },\n { x: 491, y: -9 },\n { x: 492, y: -4 },\n { x: 493, y: -5 },\n { x: 494, y: 1 },\n { x: 495, y: 5 },\n { x: 496, y: 21 },\n { x: 497, y: 41 },\n { x: 498, y: 44 },\n { x: 499, y: 39 },\n { x: 500, y: 24 },\n { x: 501, y: 22 },\n { x: 502, y: 37 },\n { x: 503, y: 44 },\n { x: 504, y: 35 },\n { x: 505, y: 31 },\n { x: 506, y: 35 },\n { x: 507, y: 20 },\n { x: 508, y: 15 },\n { x: 509, y: 7 },\n { x: 510, y: 4 },\n { x: 511, y: 9 },\n { x: 512, y: 0 },\n { x: 513, y: -15 },\n { x: 514, y: -21 },\n { x: 515, y: -31 },\n { x: 516, y: -32 },\n { x: 517, y: -48 },\n { x: 518, y: -53 },\n { x: 519, y: -29 },\n { x: 520, y: -14 },\n { x: 521, y: -6 },\n { x: 522, y: 1 },\n { x: 523, y: 4 },\n { x: 524, y: -4 },\n { x: 525, y: -3 },\n { x: 526, y: 2 },\n { x: 527, y: 1 },\n { x: 528, y: -12 },\n { x: 529, y: -37 },\n { x: 530, y: -29 },\n { x: 531, y: -25 },\n { x: 532, y: -18 },\n { x: 533, y: -31 },\n { x: 534, y: -42 },\n { x: 535, y: -26 },\n { x: 536, y: -22 },\n { x: 537, y: -18 },\n { x: 538, y: -25 },\n { x: 539, y: -16 },\n { x: 540, y: -13 },\n { x: 541, y: -23 },\n { x: 542, y: -15 },\n { x: 543, y: 0 },\n { x: 544, y: 8 },\n { x: 545, y: 14 },\n { x: 546, y: 34 },\n { x: 547, y: 39 },\n { x: 548, y: 33 },\n { x: 549, y: 22 },\n { x: 550, y: 18 },\n { x: 551, y: 20 },\n { x: 552, y: 23 },\n { x: 553, y: 16 },\n { x: 554, y: 11 },\n { x: 555, y: 1 },\n { x: 556, y: 6 },\n { x: 557, y: 11 },\n { x: 558, y: 7 },\n { x: 559, y: 14 },\n { x: 560, y: 22 },\n { x: 561, y: 14 },\n { x: 562, y: 14 },\n { x: 563, y: 5 },\n { x: 564, y: -6 },\n { x: 565, y: -14 },\n { x: 566, y: -27 },\n { x: 567, y: -28 },\n { x: 568, y: -21 },\n { x: 569, y: -16 },\n { x: 570, y: -8 },\n { x: 571, y: -5 },\n { x: 572, y: -8 },\n { x: 573, y: 3 },\n { x: 574, y: 22 },\n { x: 575, y: 29 },\n { x: 576, y: 27 },\n { x: 577, y: 23 },\n { x: 578, y: 22 },\n { x: 579, y: 25 },\n { x: 580, y: 34 },\n { x: 581, y: 36 },\n { x: 582, y: 39 },\n { x: 583, y: 44 },\n { x: 584, y: 55 },\n { x: 585, y: 54 },\n { x: 586, y: 44 },\n { x: 587, y: 39 },\n { x: 588, y: 41 },\n { x: 589, y: 49 },\n { x: 590, y: 44 },\n { x: 591, y: 33 },\n { x: 592, y: 27 },\n { x: 593, y: 23 },\n { x: 594, y: 20 },\n { x: 595, y: 18 },\n { x: 596, y: 20 },\n { x: 597, y: 19 },\n { x: 598, y: 8 },\n { x: 599, y: 7 },\n { x: 600, y: 2 },\n { x: 601, y: 4 },\n { x: 602, y: -3 },\n { x: 603, y: -16 },\n { x: 604, y: -16 },\n { x: 605, y: -19 },\n { x: 606, y: -28 },\n { x: 607, y: -37 },\n { x: 608, y: -26 },\n { x: 609, y: -14 },\n { x: 610, y: -31 },\n { x: 611, y: -45 },\n { x: 612, y: -45 },\n { x: 613, y: -43 },\n { x: 614, y: -50 },\n { x: 615, y: -59 },\n { x: 616, y: -73 },\n { x: 617, y: -79 },\n { x: 618, y: -88 },\n { x: 619, y: -92 },\n { x: 620, y: -95 },\n { x: 621, y: -101 },\n { x: 622, y: -104 },\n { x: 623, y: -124 },\n { x: 624, y: -150 },\n { x: 625, y: -152 },\n { x: 626, y: -153 },\n { x: 627, y: -174 },\n { x: 628, y: -205 },\n { x: 629, y: -215 },\n { x: 630, y: -211 },\n { x: 631, y: -214 },\n { x: 632, y: -211 },\n { x: 633, y: -222 },\n { x: 634, y: -218 },\n { x: 635, y: -211 },\n { x: 636, y: -200 },\n { x: 637, y: -200 },\n { x: 638, y: -196 },\n { x: 639, y: -184 },\n { x: 640, y: -189 },\n { x: 641, y: -202 },\n { x: 642, y: -203 },\n { x: 643, y: -202 },\n { x: 644, y: -200 },\n { x: 645, y: -205 },\n { x: 646, y: -211 },\n { x: 647, y: -226 },\n { x: 648, y: -241 },\n { x: 649, y: -242 },\n { x: 650, y: -252 },\n { x: 651, y: -273 },\n { x: 652, y: -279 },\n { x: 653, y: -288 },\n { x: 654, y: -291 },\n { x: 655, y: -289 },\n { x: 656, y: -286 },\n { x: 657, y: -269 },\n { x: 658, y: -266 },\n { x: 659, y: -280 },\n { x: 660, y: -287 },\n { x: 661, y: -277 },\n { x: 662, y: -260 },\n { x: 663, y: -271 },\n { x: 664, y: -269 },\n { x: 665, y: -271 },\n { x: 666, y: -287 },\n { x: 667, y: -299 },\n { x: 668, y: -297 },\n { x: 669, y: -288 },\n { x: 670, y: -287 },\n { x: 671, y: -287 },\n { x: 672, y: -289 },\n { x: 673, y: -287 },\n { x: 674, y: -286 },\n { x: 675, y: -276 },\n { x: 676, y: -271 },\n { x: 677, y: -266 },\n { x: 678, y: -260 },\n { x: 679, y: -252 },\n { x: 680, y: -236 },\n { x: 681, y: -223 },\n { x: 682, y: -215 },\n { x: 683, y: -213 },\n { x: 684, y: -224 },\n { x: 685, y: -230 },\n { x: 686, y: -220 },\n { x: 687, y: -209 },\n { x: 688, y: -207 },\n { x: 689, y: -194 },\n { x: 690, y: -182 },\n { x: 691, y: -181 },\n { x: 692, y: -186 },\n { x: 693, y: -189 },\n { x: 694, y: -186 },\n { x: 695, y: -174 },\n { x: 696, y: -167 },\n { x: 697, y: -161 },\n { x: 698, y: -158 },\n { x: 699, y: -155 },\n { x: 700, y: -153 },\n { x: 701, y: -139 },\n { x: 702, y: -135 },\n { x: 703, y: -130 },\n { x: 704, y: -129 },\n { x: 705, y: -116 },\n { x: 706, y: -107 },\n { x: 707, y: -98 },\n { x: 708, y: -84 },\n { x: 709, y: -85 },\n { x: 710, y: -92 },\n { x: 711, y: -100 },\n { x: 712, y: -105 },\n { x: 713, y: -97 },\n { x: 714, y: -81 },\n { x: 715, y: -72 },\n { x: 716, y: -58 },\n { x: 717, y: -49 },\n { x: 718, y: -35 },\n { x: 719, y: -33 },\n { x: 720, y: -28 },\n { x: 721, y: -13 },\n { x: 722, y: -7 },\n { x: 723, y: -9 },\n { x: 724, y: -6 },\n { x: 725, y: 10 },\n { x: 726, y: 22 },\n { x: 727, y: 16 },\n { x: 728, y: 5 },\n { x: 729, y: -12 },\n { x: 730, y: -12 },\n { x: 731, y: 1 },\n { x: 732, y: 6 },\n { x: 733, y: 17 },\n { x: 734, y: 41 },\n { x: 735, y: 52 },\n { x: 736, y: 54 },\n { x: 737, y: 57 },\n { x: 738, y: 63 },\n { x: 739, y: 81 },\n { x: 740, y: 96 },\n { x: 741, y: 107 },\n { x: 742, y: 118 },\n { x: 743, y: 133 },\n { x: 744, y: 123 },\n { x: 745, y: 121 },\n { x: 746, y: 129 },\n { x: 747, y: 128 },\n { x: 748, y: 127 },\n { x: 749, y: 112 },\n { x: 750, y: 89 },\n { x: 751, y: 0 },\n { x: 752, y: 123 },\n { x: 753, y: 42 },\n { x: 754, y: 98 },\n { x: 755, y: 109 },\n { x: 756, y: 109 },\n { x: 757, y: 108 },\n { x: 758, y: 113 },\n { x: 759, y: 121 },\n { x: 760, y: 119 },\n { x: 761, y: 119 },\n { x: 762, y: 114 },\n { x: 763, y: 112 },\n { x: 764, y: 109 },\n { x: 765, y: 107 },\n { x: 766, y: 105 },\n { x: 767, y: 114 },\n { x: 768, y: 122 },\n { x: 769, y: 130 },\n { x: 770, y: 134 },\n { x: 771, y: 121 },\n { x: 772, y: 113 },\n { x: 773, y: 100 },\n { x: 774, y: 94 },\n { x: 775, y: 114 },\n { x: 776, y: 112 },\n { x: 777, y: 108 },\n { x: 778, y: 116 },\n { x: 779, y: 114 },\n { x: 780, y: 112 },\n { x: 781, y: 118 },\n { x: 782, y: 119 },\n { x: 783, y: 116 },\n { x: 784, y: 109 },\n { x: 785, y: 110 },\n { x: 786, y: 108 },\n { x: 787, y: 113 },\n { x: 788, y: 116 },\n { x: 789, y: 118 },\n { x: 790, y: 107 },\n { x: 791, y: 103 },\n { x: 792, y: 109 },\n { x: 793, y: 110 },\n { x: 794, y: 103 },\n { x: 795, y: 106 },\n { x: 796, y: 104 },\n { x: 797, y: 93 },\n { x: 798, y: 86 },\n { x: 799, y: 77 },\n { x: 800, y: 83 },\n { x: 801, y: 87 },\n { x: 802, y: 80 },\n { x: 803, y: 95 },\n { x: 804, y: 100 },\n { x: 805, y: 88 },\n { x: 806, y: 102 },\n { x: 807, y: 87 },\n { x: 808, y: 77 },\n { x: 809, y: 88 },\n { x: 810, y: 81 },\n { x: 811, y: 71 },\n { x: 812, y: 59 },\n { x: 813, y: 61 },\n { x: 814, y: 67 },\n { x: 815, y: 76 },\n { x: 816, y: 91 },\n { x: 817, y: 94 },\n { x: 818, y: 93 },\n { x: 819, y: 89 },\n { x: 820, y: 94 },\n { x: 821, y: 98 },\n { x: 822, y: 103 },\n { x: 823, y: 95 },\n { x: 824, y: 83 },\n { x: 825, y: 89 },\n { x: 826, y: 88 },\n { x: 827, y: 96 },\n { x: 828, y: 97 },\n { x: 829, y: 97 },\n { x: 830, y: 92 },\n { x: 831, y: 88 },\n { x: 832, y: 86 },\n { x: 833, y: 84 },\n { x: 834, y: 84 },\n { x: 835, y: 76 },\n { x: 836, y: 65 },\n { x: 837, y: 52 },\n { x: 838, y: 45 },\n { x: 839, y: 47 },\n { x: 840, y: 36 },\n { x: 841, y: 33 },\n { x: 842, y: 46 },\n { x: 843, y: 46 },\n { x: 844, y: 57 },\n { x: 845, y: 53 },\n { x: 846, y: 52 },\n { x: 847, y: 56 },\n { x: 848, y: 61 },\n { x: 849, y: 64 },\n { x: 850, y: 65 },\n { x: 851, y: 59 },\n { x: 852, y: 55 },\n { x: 853, y: 60 },\n { x: 854, y: 59 },\n { x: 855, y: 61 },\n { x: 856, y: 55 },\n { x: 857, y: 51 },\n { x: 858, y: 48 },\n { x: 859, y: 46 },\n { x: 860, y: 49 },\n { x: 861, y: 47 },\n { x: 862, y: 46 },\n { x: 863, y: 44 },\n { x: 864, y: 43 },\n { x: 865, y: 46 },\n { x: 866, y: 47 },\n { x: 867, y: 45 },\n { x: 868, y: 28 },\n { x: 869, y: 17 },\n { x: 870, y: 20 },\n { x: 871, y: 24 },\n { x: 872, y: 22 },\n { x: 873, y: 38 },\n { x: 874, y: 29 },\n { x: 875, y: 23 },\n { x: 876, y: 23 },\n { x: 877, y: 9 },\n { x: 878, y: 1 },\n { x: 879, y: 15 },\n { x: 880, y: 32 },\n { x: 881, y: 38 },\n { x: 882, y: 37 },\n { x: 883, y: 38 },\n { x: 884, y: 31 },\n { x: 885, y: 18 },\n { x: 886, y: 11 },\n { x: 887, y: 5 },\n { x: 888, y: 5 },\n { x: 889, y: -1 },\n { x: 890, y: -6 },\n { x: 891, y: -8 },\n { x: 892, y: -6 },\n { x: 893, y: 5 },\n { x: 894, y: 14 },\n { x: 895, y: 8 },\n { x: 896, y: 21 },\n { x: 897, y: 35 },\n { x: 898, y: 35 },\n { x: 899, y: 32 },\n { x: 900, y: 26 },\n { x: 901, y: 28 },\n { x: 902, y: 26 },\n { x: 903, y: 24 },\n { x: 904, y: 23 },\n { x: 905, y: 28 },\n { x: 906, y: 26 },\n { x: 907, y: 27 },\n { x: 908, y: 23 },\n { x: 909, y: 32 },\n { x: 910, y: 30 },\n { x: 911, y: 19 },\n { x: 912, y: 16 },\n { x: 913, y: 25 },\n { x: 914, y: 32 },\n { x: 915, y: 20 },\n { x: 916, y: 12 },\n { x: 917, y: 8 },\n { x: 918, y: 7 },\n { x: 919, y: 14 },\n { x: 920, y: 14 },\n { x: 921, y: 11 },\n { x: 922, y: 15 },\n { x: 923, y: 4 },\n { x: 924, y: -5 },\n { x: 925, y: -3 },\n { x: 926, y: -3 },\n { x: 927, y: -11 },\n { x: 928, y: -2 },\n { x: 929, y: 18 },\n { x: 930, y: 11 },\n { x: 931, y: -2 },\n { x: 932, y: 1 },\n { x: 933, y: -9 },\n { x: 934, y: -21 },\n { x: 935, y: -13 },\n { x: 936, y: -16 },\n { x: 937, y: -4 },\n { x: 938, y: 15 },\n { x: 939, y: 31 },\n { x: 940, y: 55 },\n { x: 941, y: 52 },\n { x: 942, y: 35 },\n { x: 943, y: 23 },\n { x: 944, y: 24 },\n { x: 945, y: 20 },\n { x: 946, y: 19 },\n { x: 947, y: 18 },\n { x: 948, y: 13 },\n { x: 949, y: 6 },\n { x: 950, y: 7 },\n { x: 951, y: 12 },\n { x: 952, y: 12 },\n { x: 953, y: 3 },\n { x: 954, y: 2 },\n { x: 955, y: -4 },\n { x: 956, y: -11 },\n { x: 957, y: -12 },\n { x: 958, y: -9 },\n { x: 959, y: -17 },\n { x: 960, y: -6 },\n { x: 961, y: 1 },\n { x: 962, y: -2 },\n { x: 963, y: -6 },\n { x: 964, y: -18 },\n { x: 965, y: -17 },\n { x: 966, y: -14 },\n { x: 967, y: -13 },\n { x: 968, y: -11 },\n { x: 969, y: 9 },\n { x: 970, y: 9 },\n { x: 971, y: 2 },\n { x: 972, y: -2 },\n { x: 973, y: -14 },\n { x: 974, y: -27 },\n { x: 975, y: -24 },\n { x: 976, y: -16 },\n { x: 977, y: -10 },\n { x: 978, y: -3 },\n { x: 979, y: 2 },\n { x: 980, y: 7 },\n { x: 981, y: 16 },\n { x: 982, y: 29 },\n { x: 983, y: 40 },\n { x: 984, y: 47 },\n { x: 985, y: 46 },\n { x: 986, y: 30 },\n { x: 987, y: 19 },\n { x: 988, y: 20 },\n { x: 989, y: 21 },\n { x: 990, y: 22 },\n { x: 991, y: 12 },\n { x: 992, y: 0 },\n { x: 993, y: -6 },\n { x: 994, y: -6 },\n { x: 995, y: -11 },\n { x: 996, y: -9 },\n { x: 997, y: -5 },\n { x: 998, y: -9 },\n { x: 999, y: -15 },\n { x: 1000, y: -18 },\n { x: 1001, y: -21 },\n { x: 1002, y: -19 },\n { x: 1003, y: -27 },\n { x: 1004, y: -31 },\n { x: 1005, y: -32 },\n { x: 1006, y: -35 },\n { x: 1007, y: -31 },\n { x: 1008, y: -26 },\n { x: 1009, y: -26 },\n { x: 1010, y: -19 },\n { x: 1011, y: -6 },\n { x: 1012, y: 0 },\n { x: 1013, y: -3 },\n { x: 1014, y: -16 },\n { x: 1015, y: -16 },\n { x: 1016, y: -3 },\n { x: 1017, y: 5 },\n { x: 1018, y: 13 },\n { x: 1019, y: 6 },\n { x: 1020, y: 9 },\n { x: 1021, y: 18 },\n { x: 1022, y: 40 },\n { x: 1023, y: 54 },\n { x: 1024, y: 64 },\n { x: 1025, y: 68 },\n { x: 1026, y: 57 },\n { x: 1027, y: 47 },\n { x: 1028, y: 41 },\n { x: 1029, y: 41 },\n { x: 1030, y: 50 },\n { x: 1031, y: 54 },\n { x: 1032, y: 35 },\n { x: 1033, y: 33 },\n { x: 1034, y: 33 },\n { x: 1035, y: 27 },\n { x: 1036, y: 26 },\n { x: 1037, y: 19 },\n { x: 1038, y: 16 },\n { x: 1039, y: 28 },\n { x: 1040, y: 44 },\n { x: 1041, y: 38 },\n { x: 1042, y: 42 },\n { x: 1043, y: 57 },\n { x: 1044, y: 61 },\n { x: 1045, y: 65 },\n { x: 1046, y: 55 },\n { x: 1047, y: 45 },\n { x: 1048, y: 33 },\n { x: 1049, y: 21 },\n { x: 1050, y: 11 },\n { x: 1051, y: 5 },\n { x: 1052, y: -14 },\n { x: 1053, y: -30 },\n { x: 1054, y: -35 },\n { x: 1055, y: -31 },\n { x: 1056, y: -32 },\n { x: 1057, y: -33 },\n { x: 1058, y: -25 },\n { x: 1059, y: -19 },\n { x: 1060, y: -18 },\n { x: 1061, y: -30 },\n { x: 1062, y: -42 },\n { x: 1063, y: -38 },\n { x: 1064, y: -44 },\n { x: 1065, y: -49 },\n { x: 1066, y: -43 },\n { x: 1067, y: -41 },\n { x: 1068, y: -30 },\n { x: 1069, y: -26 },\n { x: 1070, y: -29 },\n { x: 1071, y: -33 },\n { x: 1072, y: -53 },\n { x: 1073, y: -58 },\n { x: 1074, y: -58 },\n { x: 1075, y: -45 },\n { x: 1076, y: -37 },\n { x: 1077, y: -39 },\n { x: 1078, y: -51 },\n { x: 1079, y: -50 },\n { x: 1080, y: -52 },\n { x: 1081, y: -53 },\n { x: 1082, y: -36 },\n { x: 1083, y: -27 },\n { x: 1084, y: -29 },\n { x: 1085, y: -24 },\n { x: 1086, y: -27 },\n { x: 1087, y: -34 },\n { x: 1088, y: -46 },\n { x: 1089, y: -49 },\n { x: 1090, y: -42 },\n { x: 1091, y: -50 },\n { x: 1092, y: -49 },\n { x: 1093, y: -50 },\n { x: 1094, y: -42 },\n { x: 1095, y: -35 },\n { x: 1096, y: -24 },\n { x: 1097, y: -33 },\n { x: 1098, y: -40 },\n { x: 1099, y: -36 },\n { x: 1100, y: -37 },\n { x: 1101, y: -38 },\n { x: 1102, y: -51 },\n { x: 1103, y: -61 },\n { x: 1104, y: -67 },\n { x: 1105, y: -75 },\n { x: 1106, y: -81 },\n { x: 1107, y: -70 },\n { x: 1108, y: -66 },\n { x: 1109, y: -71 },\n { x: 1110, y: -72 },\n { x: 1111, y: -57 },\n { x: 1112, y: -48 },\n { x: 1113, y: -40 },\n { x: 1114, y: -31 },\n { x: 1115, y: 0 },\n { x: 1116, y: 31 },\n { x: 1117, y: -63 },\n { x: 1118, y: -16 },\n { x: 1119, y: -22 },\n { x: 1120, y: -30 },\n { x: 1121, y: -36 },\n { x: 1122, y: -37 },\n { x: 1123, y: -42 },\n { x: 1124, y: -40 },\n { x: 1125, y: -47 },\n { x: 1126, y: -38 },\n { x: 1127, y: -5 },\n { x: 1128, y: 2 },\n { x: 1129, y: -9 },\n { x: 1130, y: -2 },\n { x: 1131, y: 7 },\n { x: 1132, y: 11 },\n { x: 1133, y: 12 },\n { x: 1134, y: 22 },\n { x: 1135, y: 26 },\n { x: 1136, y: 29 },\n { x: 1137, y: 21 },\n { x: 1138, y: 25 },\n { x: 1139, y: 32 },\n { x: 1140, y: 35 },\n { x: 1141, y: 36 },\n { x: 1142, y: 48 },\n { x: 1143, y: 74 },\n { x: 1144, y: 79 },\n { x: 1145, y: 78 },\n { x: 1146, y: 92 },\n { x: 1147, y: 108 },\n { x: 1148, y: 120 },\n { x: 1149, y: 143 },\n { x: 1150, y: 172 },\n { x: 1151, y: 201 },\n { x: 1152, y: 232 },\n { x: 1153, y: 285 },\n { x: 1154, y: 363 },\n { x: 1155, y: 447 },\n { x: 1156, y: 514 },\n { x: 1157, y: 573 },\n { x: 1158, y: 663 },\n { x: 1159, y: 754 },\n { x: 1160, y: 815 },\n { x: 1161, y: 859 },\n { x: 1162, y: 895 },\n { x: 1163, y: 940 },\n { x: 1164, y: 977 },\n { x: 1165, y: 972 },\n { x: 1166, y: 945 },\n { x: 1167, y: 898 },\n { x: 1168, y: 808 },\n { x: 1169, y: 686 },\n { x: 1170, y: 532 },\n { x: 1171, y: 360 },\n { x: 1172, y: 167 },\n { x: 1173, y: -33 },\n { x: 1174, y: -232 },\n { x: 1175, y: -472 },\n { x: 1176, y: -766 },\n { x: 1177, y: -1082 },\n { x: 1178, y: -1295 },\n { x: 1179, y: -1438 },\n { x: 1180, y: -1509 },\n { x: 1181, y: -1567 },\n { x: 1182, y: -1594 },\n { x: 1183, y: -1583 },\n { x: 1184, y: -1569 },\n { x: 1185, y: -1547 },\n { x: 1186, y: -1504 },\n { x: 1187, y: -1457 },\n { x: 1188, y: -1432 },\n { x: 1189, y: -1403 },\n { x: 1190, y: -1335 },\n { x: 1191, y: -1249 },\n { x: 1192, y: -1157 },\n { x: 1193, y: -1058 },\n { x: 1194, y: -957 },\n { x: 1195, y: -835 },\n { x: 1196, y: -733 },\n { x: 1197, y: -650 },\n { x: 1198, y: -567 },\n { x: 1199, y: -508 },\n { x: 1200, y: -446 },\n { x: 1201, y: -378 },\n { x: 1202, y: -304 },\n { x: 1203, y: -240 },\n { x: 1204, y: -180 },\n { x: 1205, y: -123 },\n { x: 1206, y: -63 },\n { x: 1207, y: -11 },\n { x: 1208, y: 46 },\n { x: 1209, y: 112 },\n { x: 1210, y: 181 },\n { x: 1211, y: 221 },\n { x: 1212, y: 256 },\n { x: 1213, y: 283 },\n { x: 1214, y: 318 },\n { x: 1215, y: 348 },\n { x: 1216, y: 371 },\n { x: 1217, y: 397 },\n { x: 1218, y: 410 },\n { x: 1219, y: 409 },\n { x: 1220, y: 424 },\n { x: 1221, y: 440 },\n { x: 1222, y: 443 },\n { x: 1223, y: 429 },\n { x: 1224, y: 420 },\n { x: 1225, y: 424 },\n { x: 1226, y: 429 },\n { x: 1227, y: 415 },\n { x: 1228, y: 394 },\n { x: 1229, y: 391 },\n { x: 1230, y: 402 },\n { x: 1231, y: 410 },\n { x: 1232, y: 410 },\n { x: 1233, y: 408 },\n { x: 1234, y: 408 },\n { x: 1235, y: 405 },\n { x: 1236, y: 399 },\n { x: 1237, y: 392 },\n { x: 1238, y: 383 },\n { x: 1239, y: 376 },\n { x: 1240, y: 375 },\n { x: 1241, y: 368 },\n { x: 1242, y: 366 },\n { x: 1243, y: 363 },\n { x: 1244, y: 353 },\n { x: 1245, y: 345 },\n { x: 1246, y: 334 },\n { x: 1247, y: 326 },\n { x: 1248, y: 317 },\n { x: 1249, y: 313 },\n { x: 1250, y: 320 },\n { x: 1251, y: 318 },\n { x: 1252, y: 300 },\n { x: 1253, y: 275 },\n { x: 1254, y: 262 },\n { x: 1255, y: 252 },\n { x: 1256, y: 239 },\n { x: 1257, y: 236 },\n { x: 1258, y: 231 },\n { x: 1259, y: 236 },\n { x: 1260, y: 240 },\n { x: 1261, y: 235 },\n { x: 1262, y: 222 },\n { x: 1263, y: 220 },\n { x: 1264, y: 223 },\n { x: 1265, y: 228 },\n { x: 1266, y: 222 },\n { x: 1267, y: 205 },\n { x: 1268, y: 197 },\n { x: 1269, y: 191 },\n { x: 1270, y: 180 },\n { x: 1271, y: 185 },\n { x: 1272, y: 174 },\n { x: 1273, y: 170 },\n { x: 1274, y: 166 },\n { x: 1275, y: 161 },\n { x: 1276, y: 151 },\n { x: 1277, y: 148 },\n { x: 1278, y: 142 },\n { x: 1279, y: 136 },\n { x: 1280, y: 131 },\n { x: 1281, y: 127 },\n { x: 1282, y: 118 },\n { x: 1283, y: 111 },\n { x: 1284, y: 114 },\n { x: 1285, y: 110 },\n { x: 1286, y: 97 },\n { x: 1287, y: 85 },\n { x: 1288, y: 72 },\n { x: 1289, y: 65 },\n { x: 1290, y: 61 },\n { x: 1291, y: 62 },\n { x: 1292, y: 64 },\n { x: 1293, y: 61 },\n { x: 1294, y: 59 },\n { x: 1295, y: 56 },\n { x: 1296, y: 64 },\n { x: 1297, y: 55 },\n { x: 1298, y: 56 },\n { x: 1299, y: 73 },\n { x: 1300, y: 63 },\n { x: 1301, y: 56 },\n { x: 1302, y: 54 },\n { x: 1303, y: 35 },\n { x: 1304, y: 12 },\n { x: 1305, y: -3 },\n { x: 1306, y: -2 },\n { x: 1307, y: -9 },\n { x: 1308, y: -15 },\n { x: 1309, y: -13 },\n { x: 1310, y: 1 },\n { x: 1311, y: 27 },\n { x: 1312, y: 48 },\n { x: 1313, y: 53 },\n { x: 1314, y: 55 },\n { x: 1315, y: 54 },\n { x: 1316, y: 27 },\n { x: 1317, y: 20 },\n { x: 1318, y: 14 },\n { x: 1319, y: 10 },\n { x: 1320, y: 3 },\n { x: 1321, y: 9 },\n { x: 1322, y: 21 },\n { x: 1323, y: 15 },\n { x: 1324, y: 9 },\n { x: 1325, y: 5 },\n { x: 1326, y: 0 },\n { x: 1327, y: 0 },\n { x: 1328, y: -1 },\n { x: 1329, y: 3 },\n { x: 1330, y: 4 },\n { x: 1331, y: 2 },\n { x: 1332, y: -4 },\n { x: 1333, y: -5 },\n { x: 1334, y: -12 },\n { x: 1335, y: -14 },\n { x: 1336, y: -20 },\n { x: 1337, y: -23 },\n { x: 1338, y: -21 },\n { x: 1339, y: -20 },\n { x: 1340, y: -28 },\n { x: 1341, y: -25 },\n { x: 1342, y: -25 },\n { x: 1343, y: -30 },\n { x: 1344, y: -34 },\n { x: 1345, y: -43 },\n { x: 1346, y: -39 },\n { x: 1347, y: -36 },\n { x: 1348, y: -44 },\n { x: 1349, y: -28 },\n { x: 1350, y: -22 },\n { x: 1351, y: -11 },\n { x: 1352, y: -12 },\n { x: 1353, y: -7 },\n { x: 1354, y: -14 },\n { x: 1355, y: -11 },\n { x: 1356, y: -13 },\n { x: 1357, y: -19 },\n { x: 1358, y: -19 },\n { x: 1359, y: -13 },\n { x: 1360, y: 4 },\n { x: 1361, y: 19 },\n { x: 1362, y: 16 },\n { x: 1363, y: 19 },\n { x: 1364, y: 21 },\n { x: 1365, y: 22 },\n { x: 1366, y: 5 },\n { x: 1367, y: -12 },\n { x: 1368, y: -27 },\n { x: 1369, y: -24 },\n { x: 1370, y: -16 },\n { x: 1371, y: -15 },\n { x: 1372, y: -2 },\n { x: 1373, y: 8 },\n { x: 1374, y: -1 },\n { x: 1375, y: -7 },\n { x: 1376, y: -1 },\n { x: 1377, y: 12 },\n { x: 1378, y: 26 },\n { x: 1379, y: 27 },\n { x: 1380, y: 32 },\n { x: 1381, y: 27 },\n { x: 1382, y: 19 },\n { x: 1383, y: 22 },\n { x: 1384, y: 30 },\n { x: 1385, y: 36 },\n { x: 1386, y: 38 },\n { x: 1387, y: 43 },\n { x: 1388, y: 46 },\n { x: 1389, y: 40 },\n { x: 1390, y: 35 },\n { x: 1391, y: 27 },\n { x: 1392, y: 24 },\n { x: 1393, y: 23 },\n { x: 1394, y: 16 },\n { x: 1395, y: 7 },\n { x: 1396, y: 7 },\n { x: 1397, y: 11 },\n { x: 1398, y: 16 },\n { x: 1399, y: 10 },\n { x: 1400, y: 6 },\n { x: 1401, y: 3 },\n { x: 1402, y: 3 },\n { x: 1403, y: 12 },\n { x: 1404, y: 12 },\n { x: 1405, y: 8 },\n { x: 1406, y: 5 },\n { x: 1407, y: 4 },\n { x: 1408, y: 4 },\n { x: 1409, y: 4 },\n { x: 1410, y: 12 },\n { x: 1411, y: 22 },\n { x: 1412, y: 9 },\n { x: 1413, y: 0 },\n { x: 1414, y: -6 },\n { x: 1415, y: -23 },\n { x: 1416, y: -25 },\n { x: 1417, y: -25 },\n { x: 1418, y: -31 },\n { x: 1419, y: -45 },\n { x: 1420, y: -51 },\n { x: 1421, y: -50 },\n { x: 1422, y: -46 },\n { x: 1423, y: -55 },\n { x: 1424, y: -59 },\n { x: 1425, y: -60 },\n { x: 1426, y: -63 },\n { x: 1427, y: -62 },\n { x: 1428, y: -62 },\n { x: 1429, y: -63 },\n { x: 1430, y: -75 },\n { x: 1431, y: -85 },\n { x: 1432, y: -92 },\n { x: 1433, y: -94 },\n { x: 1434, y: -87 },\n { x: 1435, y: -85 },\n { x: 1436, y: -77 },\n { x: 1437, y: -91 },\n { x: 1438, y: -106 },\n { x: 1439, y: -114 },\n { x: 1440, y: -121 },\n { x: 1441, y: -133 },\n { x: 1442, y: -146 },\n { x: 1443, y: -159 },\n { x: 1444, y: -168 },\n { x: 1445, y: -167 },\n { x: 1446, y: -179 },\n { x: 1447, y: -190 },\n { x: 1448, y: -200 },\n { x: 1449, y: -205 },\n { x: 1450, y: -210 },\n { x: 1451, y: -213 },\n { x: 1452, y: -210 },\n { x: 1453, y: -217 },\n { x: 1454, y: -219 },\n { x: 1455, y: -225 },\n { x: 1456, y: -239 },\n { x: 1457, y: -246 },\n { x: 1458, y: -257 },\n { x: 1459, y: -276 },\n { x: 1460, y: -298 },\n { x: 1461, y: -297 },\n { x: 1462, y: -305 },\n { x: 1463, y: -312 },\n { x: 1464, y: -305 },\n { x: 1465, y: -300 },\n { x: 1466, y: -312 },\n { x: 1467, y: -321 },\n { x: 1468, y: -318 },\n { x: 1469, y: -306 },\n { x: 1470, y: -302 },\n { x: 1471, y: -296 },\n { x: 1472, y: -297 },\n { x: 1473, y: -294 },\n { x: 1474, y: -287 },\n { x: 1475, y: -290 },\n { x: 1476, y: -301 },\n { x: 1477, y: -310 },\n { x: 1478, y: -312 },\n { x: 1479, y: 0 },\n { x: 1480, y: -265 },\n { x: 1481, y: -362 },\n { x: 1482, y: -303 },\n { x: 1483, y: -302 },\n { x: 1484, y: -293 },\n { x: 1485, y: -296 },\n { x: 1486, y: -295 },\n { x: 1487, y: -286 },\n { x: 1488, y: -291 },\n { x: 1489, y: -287 },\n { x: 1490, y: -268 },\n { x: 1491, y: -243 },\n { x: 1492, y: -231 },\n { x: 1493, y: -229 },\n { x: 1494, y: -228 },\n { x: 1495, y: -229 },\n { x: 1496, y: -236 },\n { x: 1497, y: -243 },\n { x: 1498, y: -242 },\n { x: 1499, y: -217 },\n { x: 1500, y: -206 },\n { x: 1501, y: -199 },\n { x: 1502, y: -189 },\n { x: 1503, y: -187 },\n { x: 1504, y: -178 },\n { x: 1505, y: -163 },\n { x: 1506, y: -152 },\n { x: 1507, y: -150 },\n { x: 1508, y: -149 },\n { x: 1509, y: -144 },\n { x: 1510, y: -137 },\n { x: 1511, y: -121 },\n { x: 1512, y: -119 },\n { x: 1513, y: -132 },\n { x: 1514, y: -126 },\n { x: 1515, y: -123 },\n { x: 1516, y: -104 },\n { x: 1517, y: -96 },\n { x: 1518, y: -97 },\n { x: 1519, y: -82 },\n { x: 1520, y: -56 },\n { x: 1521, y: -42 },\n { x: 1522, y: -47 },\n { x: 1523, y: -40 },\n { x: 1524, y: -33 },\n { x: 1525, y: -37 },\n { x: 1526, y: -43 },\n { x: 1527, y: -51 },\n { x: 1528, y: -51 },\n { x: 1529, y: -35 },\n { x: 1530, y: -19 },\n { x: 1531, y: -12 },\n { x: 1532, y: -11 },\n { x: 1533, y: -9 },\n { x: 1534, y: -2 },\n { x: 1535, y: 12 },\n { x: 1536, y: 24 },\n { x: 1537, y: 24 },\n { x: 1538, y: 32 },\n { x: 1539, y: 42 },\n { x: 1540, y: 39 },\n { x: 1541, y: 45 },\n { x: 1542, y: 55 },\n { x: 1543, y: 43 },\n { x: 1544, y: 42 },\n { x: 1545, y: 45 },\n { x: 1546, y: 46 },\n { x: 1547, y: 51 },\n { x: 1548, y: 58 },\n { x: 1549, y: 61 },\n { x: 1550, y: 57 },\n { x: 1551, y: 55 },\n { x: 1552, y: 46 },\n { x: 1553, y: 29 },\n { x: 1554, y: 23 },\n { x: 1555, y: 24 },\n { x: 1556, y: 21 },\n { x: 1557, y: 27 },\n { x: 1558, y: 45 },\n { x: 1559, y: 56 },\n { x: 1560, y: 79 },\n { x: 1561, y: 102 },\n { x: 1562, y: 103 },\n { x: 1563, y: 114 },\n { x: 1564, y: 129 },\n { x: 1565, y: 116 },\n { x: 1566, y: 112 },\n { x: 1567, y: 127 },\n { x: 1568, y: 130 },\n { x: 1569, y: 135 },\n { x: 1570, y: 143 },\n { x: 1571, y: 144 },\n { x: 1572, y: 157 },\n { x: 1573, y: 153 },\n { x: 1574, y: 140 },\n { x: 1575, y: 135 },\n { x: 1576, y: 129 },\n { x: 1577, y: 111 },\n { x: 1578, y: 103 },\n { x: 1579, y: 106 },\n { x: 1580, y: 108 },\n { x: 1581, y: 94 },\n { x: 1582, y: 96 },\n { x: 1583, y: 89 },\n { x: 1584, y: 85 },\n { x: 1585, y: 89 },\n { x: 1586, y: 94 },\n { x: 1587, y: 82 }\n\n]\n// Create a data generator to supply a continuous stream of data.\ncreateSampledDataGenerator(point, 1, 10)\n .setSamplingFrequency(1)\n .setInputData(point)\n .generate()\n .setStreamBatchSize(48)\n .setStreamInterval(50)\n .setStreamRepeat(true)\n .toStream()\n .forEach(point => {\n // Push the created points to the series.\n series.add({ x: point.timestamp, y: point.data.y })\n })\n","url":null,"readme":"This example shows a simulated ECG-signal by using a Line Series in a XY Chart.\n\nThe simulated signal pushes 960 points per second to the chart.\n\nECG stands for electrocardiogram which is a simple test that can be used to check heart's rhythm and electrical activity.\n","image":"ecg.png"},{"id":"lcjs-example-0200-candlesticks","title":"JavaScript Candlestick Chart","tags":["candlestick","ohlc","trading","xy","date-time"],"description":"This type of chart is used as a trading tool to visualize price movements. Also known as Japanese Candlestick Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Trading Charts, High-Performance Charts, Financial Charts, Stock Charts, 2D & 3D charts, OHLC, Candlestick Charts.","src":"/*\n * LightningChartJS example that showcases creation of a Candlestick-chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n OHLCFigures,\n emptyLine,\n AxisScrollStrategies,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createOHLCGenerator\n} = require('@arction/xydata')\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 0, 1)\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n// Use DateTime X-axis using with above defined origin.\nchart\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\nchart.setTitle('Candlesticks Chart')\n// Style AutoCursor using preset.\nchart.setAutoCursor(cursor => {\n cursor.disposeTickMarkerY()\n cursor.setGridStrokeYStyle(emptyLine)\n})\nchart.setPadding({ right: 40 })\n\n// Change the title and behavior of the default Y Axis\nchart.getDefaultAxisY()\n .setTitle('USD')\n .setInterval(90, 110)\n .setScrollStrategy(AxisScrollStrategies.expansion)\n\n// Add a OHLC series with Candlestick as type of figures.\nconst series = chart.addOHLCSeries({ positiveFigure: OHLCFigures.Candlestick })\n// Generate some points using 'xydata'-library.\nconst dataSpan = 10 * 24 * 60 * 60 * 1000\nconst dataFrequency = 1000 * 60\ncreateOHLCGenerator()\n .setNumberOfPoints(dataSpan / dataFrequency)\n .setDataFrequency(dataFrequency)\n .setStart(100)\n .generate()\n .toPromise()\n .then(data => {\n series.add(data)\n })\n","url":null,"readme":"*Also known as Japanese Candlestick Chart*\n\nThis example shows basic implementation of candlestick chart using OHLCSeries. This type of chart is used as a trading tool to visualize price movements. A candlestick figure can represent multiple recorded values, which are packed into 4 values (open, high, low and close). This makes it useful for dynamically displaying data from longer intervals as well as shorter.\n\nOHLCSeries are created using ChartXY method.\n\n```javascript\nconst chart = lightningChart().ChartXY()\n// Method for adding OHLCSeries takes one argument: seriesConstructor.\nconst ohlcSeries = chart.addOHLCSeries(\n // Specify type of figure used\n { seriesConstructor: OHLCFigures.Candlestick }\n)\n```\n\nOHLCSeries accept data in the form of interface 'XOHLC':\n\n```javascript\nconst xohlc = [\n // X-position\n 0,\n // Opening Y-value\n 100,\n // Highest Y-value\n 200,\n // Lowest Y-value\n 50,\n // Closing Y-value\n 75\n]\n// Add new segment to series.\nohlcSeries.add(xohlc)\n```\n\nadd() can be called with a single XOHLC-object or with an array of them.\n\n## Anatomy of a candlestick figure\n\nCandlesticks are formed from two parts: *Body* and *Line*s. Both of these can be individually styled.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n","image":"candleSticks.png"},{"id":"lcjs-example-0201-ohlc","title":"JavaScript OHLC Chart","tags":["ohlc","trading","xy","date-time"],"description":"Basic implementation of OHLC chart. Also known as Price Chart, Bar Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Trading Charts, High-Performance Charts, Financial Charts, Stock Charts, 2D & 3D charts, OHLC, Candlestick Charts.","src":"/*\n * LightningChartJS example that showcases creation of OHLC-chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n OHLCFigures,\n AxisScrollStrategies,\n emptyLine,\n Themes\n} = lcjs\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n// Use DateTime TickStrategy for the X Axis, set current date as the origin.\nchart\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(new Date())\n )\n\nchart.setTitle('Open-High-Low-Close')\n// Modify AutoCursor to only show TickMarker and GridLine over the X Axis.\nchart.setAutoCursor(cursor => {\n cursor.disposeTickMarkerY()\n cursor.setGridStrokeYStyle(emptyLine)\n})\n\n// Add a OHLC Series with Bar as type of figures.\nconst series = chart.addOHLCSeries({ positiveFigure: OHLCFigures.Bar })\n .setName('Open-High-Low-Close')\n// Create an array of XOHLC tuples (See API documentation) to use with the OHLC Series\n//The XOHLC tuple consists of five different values; position on X Axis (in this case, the date of each entry), the open, high, low and close values.\nconst data = [\n [new Date(2019, 6, 29).getTime(), 208.46, 210.64, 208.44, 209.68],\n [new Date(2019, 6, 30).getTime(), 208.76, 210.16, 207.31, 208.78],\n [new Date(2019, 6, 31).getTime(), 216.42, 221.37, 211.3, 213.04],\n [new Date(2019, 7, 1).getTime(), 213.9, 218.03, 206.74, 208.43],\n [new Date(2019, 7, 2).getTime(), 205.53, 206.43, 201.63, 204.02],\n [new Date(2019, 7, 5).getTime(), 197.99, 198.65, 192.58, 193.34],\n [new Date(2019, 7, 6).getTime(), 196.31, 198.07, 194.04, 197],\n [new Date(2019, 7, 7).getTime(), 195.41, 199.56, 193.82, 199.04],\n [new Date(2019, 7, 8).getTime(), 200.2, 203.53, 199.39, 203.43],\n [new Date(2019, 7, 9).getTime(), 201.3, 202.76, 199.29, 200.99],\n [new Date(2019, 7, 12).getTime(), 199.62, 202.05, 199.15, 200.48],\n [new Date(2019, 7, 13).getTime(), 201.02, 212.14, 200.48, 208.97],\n [new Date(2019, 7, 14).getTime(), 203.16, 206.44, 202.59, 202.75],\n [new Date(2019, 7, 15).getTime(), 203.46, 205.14, 199.67, 201.74],\n [new Date(2019, 7, 16).getTime(), 204.28, 207.16, 203.84, 206.5],\n [new Date(2019, 7, 19).getTime(), 210.62, 212.73, 210.03, 210.35],\n [new Date(2019, 7, 20).getTime(), 210.88, 213.35, 210.32, 210.36],\n [new Date(2019, 7, 21).getTime(), 212.99, 213.65, 211.6, 212.64],\n [new Date(2019, 7, 22).getTime(), 213.19, 214.44, 210.75, 212.46],\n [new Date(2019, 7, 23).getTime(), 209.43, 212.05, 201, 202.64]\n]\n// Modify the bars for better visibility\nseries\n .setPositiveStyle((figure) => figure\n .setStrokeStyle((stroke) => stroke.setThickness(2))\n )\n .setNegativeStyle((figure) => figure\n .setStrokeStyle((stroke) => stroke.setThickness(2))\n )\n .setFigureWidth(10)\n// Add the created data array to the OHLC series.\nseries.add(data)\n// Add a single data entry to the array.\nseries.add([new Date(2019, 7, 26).getTime(), 205.86, 207.19, 205.06, 206.49])\n// Change the title and behavior of the default Y Axis\nchart.getDefaultAxisY()\n .setTitle('USD')\n .setInterval(195, 220)\n .setScrollStrategy(AxisScrollStrategies.expansion)\n// Fit the X Axis around the given data. Passing false skips animating the fitting.\nchart.getDefaultAxisX()\n .fit(false)\n","url":null,"readme":"*Also known as Price Chart, Bar Chart*\n\nThis example shows basic implementation of OHLC chart using OHLC-series.\n\n```javascript\n// OHLCSeries exists inside XY-charts.\nconst chart = lightningChart().ChartXY()\nconst ohlcSeries = chart.addOHLCSeries(\n // Specify type of figure used\n { positiveFigure: OHLCFigures.Bar }\n)\n```\n\nOHLC-series accept data in the form of interface 'XOHLC':\n\n```javascript\nconst xohlc = [\n // X-position\n 0,\n // Opening Y-value\n 100,\n // Highest Y-value\n 200,\n // Lowest Y-value\n 50,\n // Closing Y-value\n 75\n]\n// Add new segment to series.\nohlcSeries.add(xohlc)\n```\n\n`add()` can be called with a single XOHLC-object or with an array of them.\n\n## Anatomy of a Bar figure\n\nA bar figure is formed from three line segments, which can be styled with a single *LineStyle* object.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\n## Figure styling\n\nOHLC Series provides an ability to specify styles for both positive and negative candlesticks individually. \n\n```javascript\n// Width of both positive and negative candlesticks\nconst figureWidth = 5.0\n// Green color filling\nconst fillStylePositive = new SolidFill()\n .setColor( ColorRGBA( 0, 128, 0 ) )\n// Lime color filling\nconst fillStyleHighlightPositive = new SolidFill()\n .setColor( ColorRGBA (0, 255, 0) )\n// Black color stroke\nconst bodyStrokeStyle = new SolidLine()\n .setFillStyle( new SolidFill().setColor( ColorRGBA( 0, 0, 0 ) ) )\n .setThickness( 1.0 )\n// Green color stroke\nconst strokeStylePositive = new SolidLine()\n .setFillStyle( new SolidFill().setColor( ColorRGBA( 0, 128, 0 ) ) )\n// Lime color stroke\nconst strokeStylePositiveHighlight = new SolidLine()\n .setFillStyle( new SolidFill().setColor( ColorRGBA( 0, 240, 0 ) ) )\n\nohlcSeries\n\t// Setting width of figures\n\t.setFigureWidth ( figureWidth )\n\t// Styling positive candlestick\n\t.setPositiveStyle ( ( candlestick ) => candlestick\n // Candlestick body fill style\n\t\t.setBodyFillStyle( fillStylePositive )\n\t\t// Candlestick body fill style when highlighted\n .setBodyFillStyleHighlight( fillStyleHighlightPositive )\n\t\t// Candlestick body stroke style\n .setBodyStrokeStyle( bodyStrokeStyle )\n // Candlestick stroke style\n\t\t.setStrokeStyle( strokeStylePositive )\n\t\t// Candlestick stroke style when highlighted\n .setStrokeStyleHighlight( strokeStylePositiveHighlight )\n )\n\t// Styling negative candlestick\n\t.setNegativeStyle( ( candlestick ) => candlestick\n // etc ...\n )\n```\n","image":"ohlc.png"},{"id":"lcjs-example-0202-ohlcPlotAutomaticPacking","title":"JavaScript OHLC Chart with Automatic Packing","tags":["ohlc","trading","date-time","line","xy"],"description":"This example shows real-time OHLC-packing using a variant of OHLC-series.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Trading Charts, High-Performance Charts, Financial Charts, Stock Charts, 2D & 3D charts, OHLC, Candlestick Charts.","src":"/*\n * LightningChartJS example that showcases real-time OHLC-packing using a variant of OHLC-series.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n AxisScrollStrategies,\n OHLCSeriesTypes,\n emptyLine,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Decide on an origin for DateTime axis ( cur time - 5 minutes ).\nconst fiveMinutesInMs = 5 * 60 * 1000\nconst dateOrigin = new Date(new Date().getTime() - fiveMinutesInMs)\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n// Use DateTime X-axis using previously defined origin.\nchart\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\n// Set chart title and modify the padding of the chart.\nchart\n .setTitle('Realtime OHLC and line')\n .setPadding({\n right: 42\n })\n// Modify AutoCursor to only show TickMarker and Gridline over X Axis.\nchart.setAutoCursor(cursor => {\n cursor.disposeTickMarkerY()\n cursor.setGridStrokeYStyle(emptyLine)\n})\n\n// Configure X-axis to be progressive.\nchart.getDefaultAxisX()\n .setScrollStrategy(AxisScrollStrategies.progressive)\n // View fits 5 minutes.\n .setInterval(0, fiveMinutesInMs)\n\n// Show title 'USD' on Y axis.\nchart.getDefaultAxisY()\n .setTitle('USD')\n\n// Add underlying line series.\nconst lineSeries = chart.addLineSeries()\n .setCursorEnabled(false)\n .setStrokeStyle((strokeStyle) => strokeStyle\n .setFillStyle(fill => fill.setA(70))\n .setThickness(1)\n )\n\n// Add OHLC series with automatic packing (so we can feed it XY-points just like for the line series).\nconst ohlcSeriesAutoPacking = chart.addOHLCSeries(\n // Specify type of OHLC-series for adding points\n { seriesConstructor: OHLCSeriesTypes.AutomaticPacking }\n)\n // Set packing resolution to 100 ms so we can zoom to full resolution.\n .setPackingResolution(100)\n\nconst add = (points) => {\n lineSeries.add(points)\n // With automatic packing, the add method accepts data points that use the {x, y} format (for example, {x: time, y: measurement}).\n // OHLC Series can automatically pack these raw measurements into OHLC data.\n ohlcSeriesAutoPacking.add(points)\n}\n\n// Generate data using 'xydata'-library.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(10000)\n .generate()\n .toPromise()\n .then((data) => data.map((p) => ({\n // Resolution = 100 ms.\n x: p.x * 100, y: p.y\n })))\n .then((data) => {\n // Add 5 minutes worth of points immediately ( to simulate previous data ).\n add(data.splice(0, Math.round(5 * 60 * 10)))\n // Then stream some more\n setInterval(() => {\n add(data.splice(0, 1))\n }, 50)\n })\n","url":null,"readme":"This example shows real-time OHLC-packing using a variant of OHLC-series.\n\n```javascript\nconst chart = lightningChart().ChartXY()\nconst series = chart.addOHLCSeries(\n // Specify the type of OHLC-series for adding points\n { seriesConstructor: OHLCSeriesTypes.AutomaticPacking }\n)\n```\n\nOHLC-series that were created with type 'AutomaticPacking' accept data the same way as any other horizontally progressive XY-series:\n\n```javascript\n// Single point.\nseries.add({ x: 50, y: 60 })\n\n// Multiple points at once.\nseries.add([\n { x: 55, y: 60 },\n { x: 60, y: 62},\n { x: 65, y: 65}\n])\n```\n\n## Packing logic\n\nSupplied points are packed by columns, within which the Y-values are mapped to open, high, low and close -values, which are used to draw *OHLCFigures*.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n","image":"ohlcAutomaticPacking.png"},{"id":"lcjs-example-0203-ohlcPlotAutomaticPackingResolution","title":"JavaScript OHLC Chart with Automatic Packing Resolution","tags":["ohlc","trading","xy","dashboard"],"description":"The examples purpose is to shed some light on the packing logic of OHLCSeriesWithAutomaticPacking. This is a variant of OHLCSeries.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Trading Charts, High-Performance Charts, Financial Charts, Stock Charts, 2D & 3D charts, OHLC, Candlestick Charts.","src":"/*\n * LightningChartJS example that showcases the 'packing resolution' property of StockSeries.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n OHLCSeriesTypes,\n emptyLine,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\nconst dataSpan = 60 * 60 * 1000\nconst dataFrequency = 1 * 1000\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 0, 1)\n// Create charts and series for two different packing resolutions.\nconst dashboard = lightningChart().Dashboard({numberOfColumns: 1, numberOfRows: 2})\nconst chartDefault = dashboard.createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n // theme: Themes.darkGold\n})\n// Use DateTime TickStrategy with custom origin date.\nchartDefault\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\nchartDefault\n .setTitle('Default packing resolution')\n .setAutoCursor(cursor => {\n cursor.disposeTickMarkerY()\n cursor.setGridStrokeYStyle(emptyLine)\n })\n// Preventing ResultTable from getting cut at the edge\nchartDefault.setPadding({\n right: 42\n})\n\n// show title 'USD on Y axis\nchartDefault.getDefaultAxisY()\n .setTitle('USD')\n\nconst chartLow = dashboard.createChartXY({\n columnIndex: 0,\n rowIndex: 1,\n // theme: Themes.darkGold\n})\n// Use DateTime TickStrategy with custom origin date.\nchartLow\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\nchartLow\n .setTitle('Very small packing resolution')\n .setAutoCursor(cursor => {\n cursor.disposeTickMarkerY()\n cursor.setGridStrokeYStyle(emptyLine)\n })\n// Preventing ResultTable from getting cut at the edge\nchartLow.setPadding({\n right: 42\n})\n\n// show title 'USD on Y axis\nchartLow.getDefaultAxisY()\n .setTitle('USD')\n\nconst seriesDefault = chartDefault.addOHLCSeries(\n // Specify type of OHLC-series for adding points\n { seriesConstructor: OHLCSeriesTypes.AutomaticPacking }\n)\n .setName('Default packing resolution')\n\nconst seriesLow = chartLow.addOHLCSeries({ seriesConstructor: OHLCSeriesTypes.AutomaticPacking })\n .setName('Very small packing resolution')\n // Set packing resolution that is equal to the minimum resolution between two points.\n // (essentially allows users to zoom to full resolution)\n .setPackingResolution(dataFrequency)\n\n// Push points to both series.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(dataSpan / dataFrequency)\n .generate()\n .toPromise()\n .then((data) => data.map((p) => ({\n x: p.x * dataFrequency, y: p.y\n })))\n .then((data) => {\n seriesDefault.add(data)\n seriesLow.add(data)\n // Fit axes to fully show difference between packing resolutions. (without fitting\n // the initial pixel size of axes would drastically affect automatic packing resolution)\n chartDefault.getDefaultAxisX().fit()\n chartLow.getDefaultAxisX().fit()\n })\n","url":null,"readme":"The examples purpose is to shed some light on the packing logic of OHLCSeriesWithAutomaticPacking and how it can be fit to users needs by usage of method: `setPackingResolution`.\n\nThis class is a variant of OHLCSeries, which adds the automatic packing of XY-points to XOHLC-points. In a nutshell, when pushing points, it simply packages these points into 'XOHLC'-objects at certain intervals (which is controlled by the packing resolution property). \n\nBy default, or if packing resolution is explicitly set to 'undefined', the used value will be automatically computed based on current pixel-size. This effectively means that any newly pushed points will never be able to be zoomed closer than the view at the time of packing.\n\nTo ensure that the figures can be zoomed up to desired details, users can set an explicit value for the packing resolution, which will specify the minimum interval (in axis values) between two fully zoomed figures.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n","image":"ohlcAutomaticPackingResolution.png"},{"id":"lcjs-example-0300-verticalBars","title":"JavaScript Vertical Bar Chart","tags":["bar","column","xy"],"description":"Bar Charts show discrete numerical comparisons across categories, where the value represents the height of a bar. Also known as Bar Graph, Column Chart or Column Graph.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example for rendering a 'vertical bar chart' using user-side logic as there is no dedicated Chart type for Bars, yet.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n SolidFill,\n SolidLine,\n ColorRGBA,\n emptyLine,\n AutoCursorModes,\n UIOrigins,\n AxisTickStrategies,\n UIElementBuilders,\n Themes\n} = lcjs\n\nconst lc = lightningChart()\n\nconst months = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July',\n 'August', 'September', 'October', 'November', 'December'\n]\n// Define an interface for creating vertical bars.\nlet barChart\n{\n barChart = (options) => {\n // flat red fill style for positive bars\n const flatRedStyle = new SolidFill().setColor(ColorRGBA(242, 67, 79))\n // flat blue fill style for negative bars\n const flatBlueStyle = new SolidFill().setColor(ColorRGBA(42, 171, 240))\n\n let x = 0\n const figureThickness = 10\n const figureGap = figureThickness * .5\n const bars = []\n\n // Create a XY-Chart and add a RectSeries to it for rendering rectangles.\n const chart = lc.ChartXY(options)\n .setTitle('Changes in electricity usage between 2017 and 2018')\n .setAutoCursorMode(AutoCursorModes.onHover)\n // Disable mouse interactions (e.g. zooming and panning) of plotting area\n .setMouseInteractions(false)\n\n // Bar series represented with rectangles.\n const rectangles = chart.addRectangleSeries()\n\n // cursor\n //#region\n // Show band using Rectangle series.\n const band = chart.addRectangleSeries()\n .setMouseInteractions(false)\n .setCursorEnabled(false).add({ x: 0, y: 0, width: 0, height: 0 })\n .setFillStyle(new SolidFill().setColor(ColorRGBA(255, 255, 255, 50)))\n .setStrokeStyle(emptyLine)\n .dispose()\n // Modify AutoCursor.\n chart.setAutoCursor(cursor => cursor\n .disposePointMarker()\n .disposeTickMarkerX()\n .disposeTickMarkerY()\n .setGridStrokeXStyle(emptyLine)\n .setGridStrokeYStyle(emptyLine)\n .setResultTable((table) => {\n table\n .setOrigin(UIOrigins.CenterBottom)\n })\n )\n // Change how series parses its data-points using series method.\n rectangles.setCursorResultTableFormatter((builder, series, figure) => {\n let counter = 0\n // Find cached entry for the figure.\n const entry = bars.find((bar, index) => {\n counter = index;\n return bar.rect == figure\n }).entry\n // Parse result table content from values of 'entry'.\n return builder\n .addRow(`Month: ${months[counter]}`)\n .addRow(`Value: ${entry.value}%`)\n })\n // Apply cursor logic using series.onHover method\n rectangles.onHover((_, point) => {\n if (point) {\n const figure = point.figure\n const dimensions = figure.getDimensionsPositionAndSize()\n // Show band.\n band\n .setDimensions({\n x: dimensions.x - figureGap * .5,\n y: figure.scale.y.getInnerStart(),\n width: dimensions.width + figureGap,\n height: figure.scale.y.getInnerInterval()\n })\n .restore()\n } else\n band.dispose()\n })\n //#endregion\n\n // X-axis of the series\n const axisX = chart.getDefaultAxisX()\n .setTitle('Quarter')\n .setMouseInteractions(false)\n .setScrollStrategy(undefined)\n // Disable default ticks.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n // Y-axis of the series\n const axisY = chart.getDefaultAxisY()\n .setTitle('(%)')\n .setMouseInteractions(false)\n .setScrollStrategy(AxisScrollStrategies.fitting)\n\n //Add middle line\n const constantLine = axisY.addConstantLine()\n constantLine.setValue(0)\n .setMouseInteractions(false)\n .setStrokeStyle(new SolidLine(\n { thickness: 2, fillStyle: new SolidFill({ color: ColorRGBA(125, 125, 125) }) }))\n\n /**\n * Add multiple bars.\n * @param entries Add multiple bars data.\n */\n const addValues = (entries) => {\n for (const entry of entries) {\n bars.push(add(entry))\n }\n }\n /**\n * Add single bar.\n * @param entry Add a single bar data.\n */\n const addValue = (entry) => {\n bars.push(add(entry))\n }\n /**\n * Construct bar to draw.\n * @param entry Single bar data.\n */\n const add = (entry) => {\n // Create rect dimensions.\n const rectDimensions = {\n x: x - figureThickness,\n y: 0,\n width: figureThickness,\n height: entry.value\n }\n // Add rect to the series.\n const rect = rectangles.add(rectDimensions)\n // Set individual color for the bar.\n rect.setFillStyle(entry.value > 0 ? flatRedStyle : flatBlueStyle)\n\n // Set view manually.\n axisX.setInterval(\n -(figureThickness + figureGap),\n x + figureGap\n )\n\n // Add custom tick, more like categorical axis.\n if (entry.category.length > 0) {\n axisX.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(x - figureGap)\n .setGridStrokeLength(0)\n .setTextFormatter(_ => entry.category)\n .setMarker(marker => marker\n .setTextFillStyle(new SolidFill({ color: ColorRGBA(170, 170, 170) }))\n )\n }\n x += figureThickness + figureGap\n // Return data-structure with both original 'entry' and the rectangle figure that represents it.\n return {\n entry,\n rect\n }\n }\n\n // Return public methods of a bar chart interface.\n return {\n addValue,\n addValues\n }\n }\n}\n\n// Use bar chart interface to construct series.\nconst chart = barChart({\n // theme: Themes.darkGold\n})\n// Add multiple bars at once.\nchart.addValues([\n { category: '', value: 20 },\n { category: 'Q1', value: 20 },\n { category: '', value: -25 },\n { category: '', value: 40 },\n { category: 'Q2', value: 28 },\n { category: '', value: -23 },\n { category: '', value: -40 },\n { category: 'Q3', value: 35 },\n { category: '', value: 17 },\n { category: '', value: 24 },\n { category: 'Q4', value: -29 },\n { category: '', value: 15 }\n])\n","url":null,"readme":"*Also known as Bar Graph, Column Chart or Column Graph*\n\nThis example shows the creation of a column chart made on user side by utilizing RectangleSeries which displays data as vertical bars. Bar Charts show discrete numerical comparisons across categories, where the value represents the height of a bar.\n\nThe following code below shows the creation of a Vertical Bar Chart using a pre-defined interface. Moreover, the current interface allows visualizing columns with negative values.\n\nThe bar series accepts points in format `{ category: string, value: number }`. Any number of points can be added with a single call.\n\n```javascript\n// Create Chart.\nconst chart = barChart()\n\n// Add bars.\nchart.addValues([\n { category: 'A', value: 20 },\n { category: 'B', value: -30 }\n])\n```\n\nThe actual Bar Chart logic just serves to provide a starting point for users to create their own API based on their needs and preferences.\n","image":"verticalBars.png"},{"id":"lcjs-example-0301-horizontalBars","title":"JavaScript Horizontal Bar Chart","tags":["bar","column","xy"],"description":"Horizontal variant of a Bar Chart. Also known as Bar Graph, Column Chart or Column Graph.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example for rendering a 'Simple horizontal bar chart'.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n SolidLine,\n ColorRGBA,\n emptyLine,\n emptyFill,\n AxisTickStrategies,\n AutoCursorModes,\n UIOrigins,\n UIElementBuilders,\n Themes\n} = lcjs\n\nconst lc = lightningChart()\n\n// Define an interface for creating horizontal bars.\nlet barChart\n{\n barChart = (options) => {\n // flat red fill style for positive bars\n const flatRedStyle = new SolidFill().setColor(ColorRGBA(242, 67, 79))\n // flat blue fill style for negative bars\n const flatBlueStyle = new SolidFill().setColor(ColorRGBA(42, 171, 240))\n\n let y = 0\n const figureThickness = 10\n const figureGap = figureThickness * .5\n const bars = []\n\n // Create a XY-Chart and add a RectSeries to it for rendering rectangles.\n const chart = lc.ChartXY(options)\n .setTitle('Mass memory production increases in 2018')\n .setAutoCursorMode(AutoCursorModes.onHover)\n // Disable mouse interactions (e.g. zooming and panning) of plotting area\n .setMouseInteractions(false)\n .setPadding({ right: 20 })\n\n // Bar series represented with rectangles.\n const rectangles = chart.addRectangleSeries()\n\n // cursor\n //#region\n // Show band using Rectangle series.\n const band = chart.addRectangleSeries()\n .setMouseInteractions(false)\n .setCursorEnabled(false).add({ x: 0, y: 0, width: 0, height: 0 })\n .setFillStyle(new SolidFill().setColor(ColorRGBA(255, 255, 255, 50)))\n .setStrokeStyle(emptyLine)\n .dispose()\n // Modify AutoCursor.\n chart.setAutoCursor(cursor => cursor\n .setResultTableAutoTextStyle(true)\n .disposePointMarker()\n .disposeTickMarkerX()\n .disposeTickMarkerY()\n .setGridStrokeXStyle(emptyLine)\n .setGridStrokeYStyle(emptyLine)\n .setResultTable((table) => {\n table\n .setOrigin(UIOrigins.CenterBottom)\n })\n )\n // Change how marker displays its information.\n rectangles.setCursorResultTableFormatter((builder, series, figure) => {\n // Find cached entry for the figure.\n const entry = bars.find((bar) => bar.rect == figure).entry\n // Parse result table content from values of 'entry'.\n return builder\n .addRow('Month: ' + entry.category)\n .addRow('Value: ' + String(entry.value))\n })\n // Apply cursor logic using series.onHover method\n rectangles.onHover((_, point) => {\n if (point) {\n const figure = point.figure\n const dimensions = figure.getDimensionsPositionAndSize()\n // Show band.\n band\n .setDimensions({\n x: figure.scale.x.getInnerStart(),\n y: dimensions.y - figureGap * .5,\n width: figure.scale.x.getInnerInterval(),\n height: dimensions.height + figureGap\n })\n .restore()\n } else\n band.dispose()\n })\n //#endregion\n\n // X-axis of the series\n const axisX = chart.getDefaultAxisX()\n .setMouseInteractions(false)\n .setInterval(-100, 100)\n .setTitle('%')\n\n // Y-axis of the series\n const axisY = chart.getDefaultAxisY()\n .setMouseInteractions(false)\n .setScrollStrategy(undefined)\n // Disable default ticks.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n //Add middle line\n const constantLine = axisX.addConstantLine()\n constantLine.setValue(0)\n .setMouseInteractions(false)\n .setStrokeStyle(new SolidLine(\n { thickness: 2, fillStyle: new SolidFill({ color: ColorRGBA(125, 125, 125) }) }))\n\n /**\n * Add multiple bars.\n * @param entries Add multiple bars data.\n */\n const addValues = (entries) => {\n for (const entry of entries) {\n bars.push(add(entry))\n }\n }\n /**\n * Add single bar.\n * @param entry Add a single bar data.\n */\n const addValue = (entry) => {\n bars.push(add(entry))\n }\n /**\n * Construct bar to draw.\n * @param entry Single bar data.\n */\n const add = (entry) => {\n // Create rect dimensions.\n const rectDimensions = {\n x: 0,\n y: y - figureThickness,\n width: entry.value,\n height: figureThickness\n }\n // Add rect to the series.\n const rect = rectangles.add(rectDimensions)\n // Set individual color for the bar.\n rect.setFillStyle(entry.value > 0 ? flatRedStyle : flatBlueStyle)\n\n // Set view manually.\n axisY.setInterval(\n -(figureThickness + figureGap),\n y + figureGap\n )\n\n // Add custom tick, more like categorical axis.\n axisY.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(y - figureGap)\n .setGridStrokeLength(0)\n .setTextFormatter(_ => entry.category)\n .setMarker(marker => marker\n .setTextFillStyle(new SolidFill({ color: ColorRGBA(170, 170, 170) }))\n )\n y += figureThickness + figureGap\n // Return data-structure with both original 'entry' and the rectangle figure that represents it.\n return {\n entry,\n rect\n }\n }\n\n // Return public methods of a bar chart interface.\n return {\n addValue,\n addValues\n }\n }\n}\n\n// Use bar chart interface to construct series.\nconst chart = barChart({\n // theme: Themes.darkGold\n})\n// Add multiple bars at once.\nchart.addValues([\n { category: 'Jan', value: 20 },\n { category: 'Feb', value: -30 },\n { category: 'Mar', value: -100 },\n { category: 'Apr', value: 100 },\n { category: 'May', value: -75 },\n { category: 'Jun', value: 80 },\n { category: 'Jul', value: -100 },\n { category: 'Aug', value: 35 },\n { category: 'Sep', value: -50 },\n { category: 'Oct', value: 100 },\n { category: 'Nov', value: 5 },\n { category: 'Dec', value: 15 }\n])\n","url":null,"readme":"*Also known as Bar Graph, Column Chart or Column Graph*\n\nSimilarly to ***Column Chart or Vertical Bar Chart***, this example shows the creation of a column chart made on user side by utilizing RectangleSeries, but displays data as horizontal bars. Bar Charts show discrete numerical comparisons across categories, where the value represents the length of a bar.\n\nThe following code below shows the creation of a Horizontal Bar Chart using a pre-defined interface. Moreover, the current interface allows visualizing columns with negative values.\n\nThe bar series accepts points in format `{ category: string, value: number }`. Any number of points can be added with a single call.\n\n```javascript\n// Create Chart.\nconst chart = barChart()\n\n// Add bars.\nchart.addValues([\n { category: 'A', value: 20 },\n { category: 'B', value: -30 }\n])\n```\n\nThe actual Bar Chart logic just serves to provide a starting point for users to create their own API based on their needs and preferences.\n","image":"horizontalBars.png"},{"id":"lcjs-example-0302-groupedBars","title":"JavaScript Grouped Bars Chart","tags":["bar","column","group","xy"],"description":"Grouped bars for better categorizing than normal bar chart. Also known as Multi-set and Clustered Bar Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example that showcases creation of a grouped bars chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n emptyLine,\n AutoCursorModes,\n UIOrigins,\n LegendBoxBuilders,\n AxisScrollStrategies,\n AxisTickStrategies,\n UIElementBuilders,\n Themes\n} = lcjs\n\nconst lc = lightningChart()\n\n// Define an interface for creating vertical bars.\nlet barChart\n{\n barChart = (options) => {\n const figureThickness = 10\n const figureGap = figureThickness * .25\n const groupGap = figureGap * 3.0\n const groups = []\n const categories = []\n\n // Create a XY-Chart and add a RectSeries to it for rendering rectangles.\n const chart = lc.ChartXY(options)\n .setTitle('Grouped Bars (Employee Count)')\n .setAutoCursorMode(AutoCursorModes.onHover)\n // Disable mouse interactions (e.g. zooming and panning) of plotting area\n .setMouseInteractions(false)\n // Temporary fix for library-side bug. Remove after fixed.\n .setPadding({ bottom: 30 })\n\n // X-axis of the series\n const axisX = chart.getDefaultAxisX()\n .setMouseInteractions(false)\n .setScrollStrategy(undefined)\n // Disable default ticks.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n // Y-axis of the series\n const axisY = chart.getDefaultAxisY()\n .setMouseInteractions(false)\n .setTitle('Number of Employees')\n .setInterval(0, 70)\n .setScrollStrategy(AxisScrollStrategies.fitting)\n\n // cursor\n //#region\n // Modify AutoCursor.\n chart.setAutoCursor(cursor => cursor\n .disposePointMarker()\n .disposeTickMarkerX()\n .disposeTickMarkerY()\n .setGridStrokeXStyle(emptyLine)\n .setGridStrokeYStyle(emptyLine)\n .setResultTable((table) => {\n table\n .setOrigin(UIOrigins.CenterBottom)\n })\n )\n // Define function that creates a Rectangle series (for each category), that adds cursor functionality to it\n const createSeriesForCategory = (category) => {\n const series = chart.addRectangleSeries()\n // Change how marker displays its information.\n series.setCursorResultTableFormatter((builder, series, figure) => {\n // Find cached entry for the figure.\n let entry = {\n name: category.name,\n value: category.data[category.figures.indexOf(figure)]\n }\n // Parse result table content from values of 'entry'.\n return builder\n .addRow('Department:', entry.name)\n .addRow('# of employees:', String(entry.value))\n })\n return series\n }\n //#endregion\n // LegendBox\n //#region\n const legendBox = chart.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.20,\n })\n .setTitle('Department')\n\n //#endregion\n // Function redraws bars chart based on values of 'groups' and 'categories'\n const redraw = () => {\n let x = 0\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex]\n const xStart = x\n for (const category of categories) {\n const value = category.data[groupIndex]\n if (value !== undefined) {\n // Position figure of respective value.\n const figure = category.figures[groupIndex]\n figure.setDimensions({\n x,\n y: 0,\n width: figureThickness,\n height: value\n })\n // Figure gap\n x += figureThickness + figureGap\n }\n }\n // Position CustomTick\n group.tick.setValue((xStart + x - figureGap) / 2)\n\n // Group gap\n x += groupGap\n }\n axisX.setInterval(-(groupGap + figureGap), x)\n }\n const addGroups = (names) => {\n for (const name of names)\n groups.push({\n name,\n tick: axisX.addCustomTick(UIElementBuilders.AxisTick)\n .setGridStrokeLength(0)\n .setTextFormatter((_) => name)\n })\n }\n const addCategory = (entry) => {\n // Each category has its own series.\n const series = createSeriesForCategory(entry)\n .setName(entry.name)\n entry.figures = entry.data.map((value) => series.add({ x: 0, y: 0, width: 0, height: 0 }))\n legendBox.add(series)\n categories.push(entry)\n redraw()\n }\n // Return public methods of a bar chart interface.\n return {\n addCategory,\n addGroups\n }\n }\n}\n\n// Use bar chart interface to construct series\nconst chart = barChart({\n // theme: Themes.darkGold\n})\n\n// Add groups\nchart.addGroups(['Finland', 'Germany', 'UK'])\n\n// Add categories of bars\nconst categories = ['Engineers', 'Sales', 'Marketing']\nconst data = [\n [48, 27, 24],\n [19, 40, 14],\n [33, 33, 62]\n]\ndata.forEach((data, i) =>\n chart.addCategory({\n name: categories[i],\n data\n })\n)\n","url":null,"readme":"*Also known as Multi-set / Clustered Bar Chart*\n\nThis example shows creation of a Grouped Bar Chart made on user side by utilizing RectangleSeries. This is a variation of normal Bar Chart where groups of bars are spaced apart from each other for further categorizing.\n\nHere's the creation of a Grouped Bar Chart using a pre-defined interface.\n\n```javascript\n// Create Chart.\nconst chart = barChart()\n// Add groups.\nchart.addGroups([\n 'Group A',\n 'Group B'\n])\n// Add categories & values.\nchart\n .addCategory({\n name: 'Category #1',\n // 'data' contain values for each group in same order as they were defined before.\n data: [100, 200],\n fill: new SolidFill().setColor(prettyColor1)\n })\n .addCategory({\n name: 'Category #2',\n // 'data' contain values for each group in same order as they were defined before.\n data: [50, 160],\n fill: new SolidFill().setColor(prettyColor2)\n })\n```\n\nThe actual Grouped Bar Chart logic just serves to provide a starting point for users to create their own API based on their needs and preferences.\n","image":"groupedBars.png"},{"id":"lcjs-example-0303-spanChart","title":"JavaScript Span Chart","tags":["bar","xy"],"description":"Also known as a Range Bar, Column Graph, Floating Bar Graph, Difference Graph, High-Low Graph.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example that showcases creation of a Span-chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n ColorRGBA,\n emptyLine,\n emptyFill,\n AxisTickStrategies,\n ColorPalettes,\n SolidLine,\n UIOrigins,\n UIElementBuilders,\n UILayoutBuilders,\n UIDraggingModes,\n Themes\n} = lcjs\n\nconst lc = lightningChart()\n\n// Titles for span\nconst titles = [\n 'Certificate exams',\n 'Interview',\n 'Trainee training program',\n 'Department competition training sessions',\n 'Internet security training',\n 'Scrum meeting',\n 'Development meeting',\n 'First Aid training',\n 'Conquering the silence - How to improve your marketing'\n]\n\n// Define an interface for creating span charts.\nlet spanChart\n// User side SpanChart logic.\n{\n spanChart = () => {\n // Create a XY-Chart and add a RectSeries to it for rendering rectangles.\n const chart = lc.ChartXY({\n // theme: Themes.darkGold \n })\n .setTitle('Conference Room Reservations')\n .setMouseInteractions(false)\n // Disable default AutoCursor\n .setAutoCursorMode(0)\n .setPadding({ right: '2' })\n const rectangles = chart.addRectangleSeries()\n\n const axisX = chart.getDefaultAxisX()\n .setMouseInteractions(false)\n // Hide default ticks, instead rely on CustomTicks.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n const axisY = chart.getDefaultAxisY()\n .setMouseInteractions(false)\n .setTitle('Conference Room')\n // Hide default ticks, instead rely on CustomTicks.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n let y = 0\n for (let i = 8; i <= 20; i++) {\n const label = i > 12 ? i - 12 + 'PM' : i + 'AM'\n axisX.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(i)\n .setTickLength(4)\n .setGridStrokeLength(0)\n .setTextFormatter(_ => label)\n .setMarker(marker => marker\n .setTextFillStyle(new SolidFill({ color: ColorRGBA(170, 170, 170) }))\n )\n }\n\n\n const figureHeight = 10\n const figureThickness = 10\n const figureGap = figureThickness * .5\n const fitAxes = () => {\n // Custom fitting for some additional margins\n axisY.setInterval(y, figureHeight * .5)\n }\n\n let customYRange = figureHeight + figureGap * 1.6\n const addCategory = (category) => {\n const categoryY = y\n\n const addSpan = (i, min, max, index) => {\n // Add rect\n const rectDimensions = {\n x: min,\n y: categoryY - figureHeight,\n width: max - min,\n height: figureHeight\n }\n // Add element for span labels\n const spanText = chart.addUIElement(\n UILayoutBuilders.Row,\n { x: axisX, y: axisY }\n )\n .setOrigin(UIOrigins.Center)\n .setDraggingMode(UIDraggingModes.notDraggable)\n .setPosition({\n x: (min + max) / 2,\n y: rectDimensions.y + 5,\n })\n .setBackground(background => background\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n\n spanText.addElement(\n UIElementBuilders.TextBox\n .addStyler(\n textBox =>\n textBox.setTextFont(fontSettings => fontSettings.setSize(13)).setText(titles[index])\n .setTextFillStyle(new SolidFill().setColor(ColorRGBA(255, 255, 255)))\n\n )\n\n )\n if (index != i) {\n customYRange = customYRange + figureHeight + 1\n\n }\n fitAxes()\n // Return figure\n return rectangles.add(rectDimensions)\n }\n\n // Add custom tick for category\n axisY.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(y - figureHeight * 0.5)\n .setGridStrokeLength(0)\n .setTextFormatter(_ => category)\n .setMarker(marker => marker\n .setTextFillStyle(new SolidFill({ color: ColorRGBA(170, 170, 170) }))\n )\n y -= figureHeight * 1.5\n\n fitAxes()\n // Return interface for category.\n return {\n addSpan\n }\n }\n // Return interface for span chart.\n return {\n addCategory\n }\n }\n}\n\n// Use the interface for example.\nconst chart = spanChart()\nconst categories = ['5 chair room', '5 chair room', '5 chair room', '10 chair room', '10 chair room', '20 chair room', 'Conference Hall'].map((name) => chart.addCategory(name))\nconst colorPalette = ColorPalettes.flatUI(categories.length)\nconst fillStyles = categories.map((_, i) => new SolidFill({ color: colorPalette(i) }))\nconst strokeStyle = new SolidLine({\n fillStyle: new SolidFill({ color: ColorRGBA(0, 0, 0) }),\n thickness: 2\n})\nconst spans = [\n [[10, 13], [16, 18]],\n [[8, 17]],\n [[12, 20]],\n [[9, 17]],\n [[10, 12], [15, 19]],\n [[11, 16]],\n [[9, 18]]\n]\n\nlet index = 0;\nspans.forEach((values, i) => {\n values.forEach((value, j) => {\n categories[i].addSpan(i, value[0], value[1], index)\n .setFillStyle(fillStyles[i])\n .setStrokeStyle(strokeStyle)\n index = index + 1\n }\n )\n})\n\n\n","url":null,"readme":"*Also known as a Range Bar, Column Graph, Floating Bar Graph, Difference Graph, High-Low Graph*\n\nThis example shows creation of a Span Chart made on user side by utilizing RectangleSeries. Span Charts display categorized value ranges - focusing only on the extreme values. Each category can have multiple 'spans'.\n\nHere's the creation of a Span Chart using a pre-defined interface.\n\n```javascript\n// Create Chart.\nconst chart = spanChart()\n// Add categories.\nconst tools = chart.addCategory('Tools')\nconst fools = chart.addCategory('Fools')\n// Add spans as min-max.\ntools.addSpan(100, 150)\nfools.addSpan(50, 75)\n\n// Adding a span returns the actual Figure that represents it, which can be styled.\nfools.addSpan(200, 250)\n .setFillStyle(new SolidFill().setColor(prettyColor))\n .setStrokeStyle(emptyLine)\n```\n\nThe actual Span Chart logic just serves to provide a starting point for users to create their own API based on their needs and preferences. The functionality can be easily extended to construct ***Gantt Chart***.\n","image":"spanChart.png"},{"id":"lcjs-example-0304-mosaicChart","title":"JavaScript Mosaic Chart","tags":["bar","xy"],"description":"Mosaic Chart can be used to compare observation counts of groups across different categories. Also known as Marimekko Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example for rendering a 'Mosaic chart'.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n ColorRGBA,\n emptyLine,\n emptyFill,\n UIElementBuilders,\n UIBackgrounds,\n UIOrigins,\n AxisTickStrategies,\n Themes\n} = lcjs\n\nconst lc = lightningChart()\n\n// Define an interface for creating mosaic charts.\nlet mosaicChart\n// User side MosaicChart logic.\n{\n mosaicChart = () => {\n // Create a XY-Chart and add a RectSeries to it for rendering rectangles.\n const chart = lc.ChartXY({\n // theme: Themes.darkGold \n })\n .setTitle('Controlled Group Testing')\n .setMouseInteractions(false)\n // Disable default AutoCursor\n .setAutoCursorMode(0)\n const rectangles = chart.addRectangleSeries()\n\n const bottomAxis = chart.getDefaultAxisX()\n .setInterval(0, 100)\n .setScrollStrategy(undefined)\n .setMouseInteractions(false)\n .setTitle('%')\n const leftAxis = chart.getDefaultAxisY()\n .setInterval(0, 100)\n .setMouseInteractions(false)\n // Hide default ticks of left Axis.\n .setTickStrategy(AxisTickStrategies.Empty)\n const rightAxis = chart.addAxisY({ opposite: true })\n .setInterval(0, 100)\n .setScrollStrategy(undefined)\n .setMouseInteractions(false)\n .setTitle('%')\n const topAxis = chart.addAxisX({ opposite: true })\n .setInterval(0, 100)\n .setMouseInteractions(false)\n // Hide default ticks of top Axis.\n .setTickStrategy(AxisTickStrategies.Empty)\n\n // Create marker for the top of each column.\n const categoryMarkerBuilder = UIElementBuilders.AxisTick\n // Style the marker.\n .addStyler((marker) => marker\n .setTextFillStyle(new SolidFill({ color: ColorRGBA(170, 170, 170) }))\n )\n // Create text on top of each section.\n const subCategoryLabelBuilder = UIElementBuilders.TextBox\n // Style the label.\n .addStyler(label => label\n // Set the origin point and fillStyle (color) for the label.\n .setOrigin(UIOrigins.Center)\n .setTextFillStyle(new SolidFill().setColor(ColorRGBA(255, 255, 255)))\n .setMouseInteractions(false)\n .setBackground((background) => background\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n )\n\n const categories = []\n const yCategories = []\n const subCategories = []\n let margin = 0.1\n\n\n // Recreate rectangle figures from scratch.\n const _updateChart = () => {\n // Remove already existing figures.\n rectangles.clear()\n // Make new figures from each category.\n const sumCategoryValues = categories.reduce((prev, cur) => prev + cur.value, 0)\n if (sumCategoryValues > 0) {\n let xPos = 0\n // For each category on a single column, recreate the marker to the left of the chart.\n for (const yCategory of yCategories) {\n yCategory.tick\n .setTextFormatter(_ => yCategory.name)\n .setValue(yCategory.value)\n .restoreMarker()\n }\n // For each category (or column)\n for (const category of categories) {\n // Calculate the correct value to display for each category\n const relativeCategoryValue = 100 * category.value / sumCategoryValues\n const sumSubCategoryValues = category.subCategories.reduce((prev, cur) => prev + cur.value, 0)\n // If there are subCategories for the column\n if (sumSubCategoryValues > 0) {\n // Recreate the tick to display above each category and set the correct value to it\n category.tick\n .setTextFormatter(_ => category.name + \" (\" + Math.round(relativeCategoryValue) + \"%)\")\n .setValue(xPos + relativeCategoryValue / 2)\n .restoreMarker()\n let yPos = 0\n for (const subCategory of category.subCategories) {\n // Calculate proper value for the subCategory\n const relativeSubCategoryValue = 100 * subCategory.value / sumSubCategoryValues\n if (relativeSubCategoryValue > 0) {\n const rectangleDimensions = {\n x: xPos + margin,\n y: yPos + margin,\n width: relativeCategoryValue - 2 * margin,\n height: relativeSubCategoryValue - 2 * margin\n }\n // Create a rectangle to represent the subCategory\n rectangles.add(rectangleDimensions)\n .setFillStyle(subCategory.subCategory.fillStyle)\n .setStrokeStyle(emptyLine)\n // Recreate the label for the subCategory and update the value for it\n subCategory.label\n .setText(Math.round(relativeSubCategoryValue) + \"%\")\n .setPosition({ x: xPos + relativeCategoryValue / 2, y: yPos + relativeSubCategoryValue / 2 })\n .restore()\n } else\n // The subCategory is not shown, so we can dispose of its label.\n subCategory.label.dispose()\n yPos += relativeSubCategoryValue\n }\n } else {\n // There are no subCategories for the column, so the elements related to it can be disposed.\n category.tick\n .disposeMarker()\n category.subCategories.forEach(sub => sub.label.dispose())\n }\n xPos += relativeCategoryValue\n }\n }\n }\n // Method to add a new subCategory to the chart.\n const addSubCategory = () => {\n const subCategory = {\n fillStyle: Themes.darkGold.seriesFillStyle,\n setFillStyle(fillStyle) {\n this.fillStyle = fillStyle\n // Refresh the chart.\n _updateChart()\n return this\n }\n }\n subCategories.push(subCategory)\n return subCategory\n }\n // Method to add a new main category to the chart.\n const addCategory = (name) => {\n const category = {\n name,\n value: 0,\n tick: topAxis.addCustomTick(categoryMarkerBuilder)\n .setGridStrokeStyle(emptyLine)\n ,\n subCategories: [],\n setCategoryValue(value) {\n this.value = value\n _updateChart()\n return this\n },\n setSubCategoryValue(subCategory, value) {\n const existing = this.subCategories.find(a => a.subCategory == subCategory)\n if (existing !== undefined) {\n existing.value = value\n } else {\n this.subCategories.push({\n subCategory,\n value,\n label: chart.addUIElement(subCategoryLabelBuilder, { x: bottomAxis, y: rightAxis })\n })\n }\n _updateChart()\n return this\n }\n }\n categories.push(category)\n return category\n }\n // Method to add subCategory markers.\n const addYCategory = (name, value) => {\n const yCategory = {\n name,\n value: value,\n tick: leftAxis.addCustomTick(categoryMarkerBuilder)\n .setGridStrokeStyle(emptyLine),\n setCategoryYValue(value) {\n this.value = value\n _updateChart()\n return this\n }\n }\n yCategories.push(yCategory)\n return yCategory\n }\n // Return interface for mosaic chart\n return {\n addSubCategory,\n addCategory,\n addYCategory\n }\n }\n}\n\n// Use the interface for example.\nconst chart = mosaicChart()\nchart.addYCategory(\"Refreshed\", 80)\nchart.addYCategory(\"No Effect\", 40)\nchart.addYCategory(\"Caused Exhaustion\", 12)\n\nconst subCategory_exhaust = chart.addSubCategory()\n .setFillStyle(new SolidFill().setColor(ColorRGBA(200, 0, 0)))\nconst subCategory_noEffect = chart.addSubCategory()\n .setFillStyle(new SolidFill().setColor(ColorRGBA(240, 190, 0)))\nconst subCategory_refresh = chart.addSubCategory()\n .setFillStyle(new SolidFill().setColor(ColorRGBA(0, 180, 0)))\n\nchart.addCategory('With caffeine')\n .setCategoryValue(48)\n .setSubCategoryValue(subCategory_exhaust, 25)\n .setSubCategoryValue(subCategory_noEffect, 35)\n .setSubCategoryValue(subCategory_refresh, 40)\n\nchart.addCategory('Decaffeinated')\n .setCategoryValue(32)\n .setSubCategoryValue(subCategory_exhaust, 10)\n .setSubCategoryValue(subCategory_noEffect, 45)\n .setSubCategoryValue(subCategory_refresh, 45)\n\nchart.addCategory('Placebo product')\n .setCategoryValue(20)\n .setSubCategoryValue(subCategory_exhaust, 20)\n .setSubCategoryValue(subCategory_noEffect, 50)\n .setSubCategoryValue(subCategory_refresh, 30)\n","url":null,"readme":"*Also known as Marimekko Chart*\n\nThis example shows creation of a Mosaic Chart made on user side by utilizing RectangleSeries. Mosaic Chart can be used to compare observation counts of groups (sub-categories) across different categories.\n\nHere's the creation of a Mosaic Chart using a pre-defined interface.\n\n```javascript\n// Create Chart.\nconst chart = mosaicChart()\n// Add sub-categories (Each X-category can have a single value for each sub-category).\nconst A = chart.addSubCategory('A')\nconst B = chart.addSubCategory('B')\n// Add categories (These are drawn progressively on X axis).\nconst category1 = chart.addCategory('Category #1')\nconst category2 = chart.addCategory('Category #2')\n// Set values of categories (relative X size).\ncategory1.setCategoryValue(60)\ncategory2.setCategoryValue(40)\n// Set values of sub-categories on categories (relative Y size).\ncategory1\n .setSubCategoryValue(A, 40)\n .setSubCategoryValue(B, 60)\ncategory2\n .setSubCategoryValue(A, 80)\n .setSubCategoryValue(B, 20)\n```\n\nThe actual Mosaic Chart logic just serves to provide a starting point for users to create their own API based on their needs and preferences.\n","image":"mosaicChart.png"},{"id":"lcjs-example-0305-racingBars","title":"JavaScript COVID-19 Tracker Chart","tags":["bar","column","xy"],"description":"Bar chart race shows the dynamics of the Covid-19 spread.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * COVID-19 Bar chart race on LightningChartJS.\n */\n\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n ColorHEX,\n AnimationEasings,\n Animator,\n UIOrigins,\n UILayoutBuilders,\n AxisTickStrategies,\n UIElementBuilders,\n AxisScrollStrategies,\n emptyLine,\n emptyFill,\n Themes\n} = lcjs\n\nconst ls = lightningChart()\n\n// Variables used in the example\nconst rectThickness = 1\nconst rectGap = 0.5\nconst bars = []\nconst duration = 400 // duration of timer and animation\n\nlet y = 0\nlet initday = 15\n// 2 days ago. the final day of the race\nlet yesterday = new Date(new Date().getFullYear(),new Date().getMonth() , new Date().getDate() - 2).toISOString() // ((d) => { d.setDate(d.getDate() - 2); return d })(new Date)\nlet connectionError = '' \n\nconst barChart = options => {\n // Create a XY chart and add a RectSeries to it for rendering rectangles.\n const chart = ls.ChartXY(options)\n // Use Chart's title to track date\n .setTitle('COVID-19 cases ' + new Date(2020, 2, 15).toLocaleDateString(undefined, { year: \"numeric\", month: \"long\", day: \"numeric\" }))\n // Disable AutoCursor (hide information of bar by hover the mouse over it)\n .setAutoCursorMode(0)\n // Add padding to Chart's right side\n .setPadding({ right: 40 })\n .setMouseInteractions(false);\n\n // Cache X axis\n const axisX = chart.getDefaultAxisX()\n // Disable the scrolling animation for the X Axis, so it doesn't interfere.\n .setAnimationScroll(false)\n .setMouseInteractions(false);\n\n // Cache Y axis \n const axisY = chart.getDefaultAxisY()\n // Hide default ticks\n .setTickStrategy(AxisTickStrategies.Empty)\n // Disable Mouse interactions for the Y Axis\n .setMouseInteractions(false)\n\n // Set custom label for Y-axis\n const createTickLabel = (entry, y) => {\n return axisY.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(y + rectGap)\n .setGridStrokeLength(0)\n .setTextFormatter(_ => entry.country)\n .setMarker((marker) => marker\n .setTextFillStyle(new SolidFill({ color: ColorHEX('#aaaf') }))\n .setTextFont(fontSettings => fontSettings.setSize(17))\n )\n }\n\n // Function returns single bar with property of dimensions, data(entry) and label\n const addCountryHandler = entry => {\n const rectDimensions = {\n x: 0,\n y: y,\n width: entry.value,\n height: rectThickness\n }\n\n // Each country has its own rectangle series for different style.\n const rectSeries = chart.addRectangleSeries()\n const rect = rectSeries.add(rectDimensions)\n\n // Add TextBox element to the bar\n const label = chart.addUIElement(\n UILayoutBuilders.TextBox,\n { x: axisX, y: axisY }\n )\n .setOrigin(UIOrigins.LeftBottom)\n .setPosition({\n x: entry.value,\n y: y\n })\n .setText(entry.value.toLocaleString())\n .setTextFont(fontSettings => fontSettings.setSize(15))\n .setPadding(10)\n .setBackground((background) => background\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n\n // Set label title and position\n const tick = createTickLabel(entry, y)\n\n // Set interval for Y axis\n axisY.setInterval(-rectThickness, y)\n\n // Increase value of Y variable \n y += rectThickness\n\n // Return figure\n return {\n entry,\n rect,\n label,\n tick,\n }\n }\n\n // Loop for adding bars\n const addCountries = (entries) => {\n axisX\n .setMouseInteractions(false) // Cache Y axis\n .setTickStrategy(\n AxisTickStrategies.Numeric,\n (tickStrategy) => tickStrategy\n // .setMinorTickStyle((tickStyle) => tickStyle.setTickPadding(3, 20))\n .setFormattingFunction(timeScaled => {\n if (timeScaled / 1000 >= 1000) {\n return timeScaled / 1000000 + 'M'\n }\n return timeScaled / 1000 + 'K'\n }\n )\n )\n for (const entry of entries) {\n bars.push(addCountryHandler(entry))\n }\n }\n\n // Sorting and splicing array of data\n const sortCountries = (data, raceDay) => {\n\n let myday = (raceDay.getMonth() + 1) + '/' + raceDay.getDate() + '/' + raceDay.getFullYear().toString().substr(-2)\n const countries = { ...data }\n\n // Map list of countries and sort them in the order (First sort by value, then by country)\n const countryList = Object.values(countries).map((c) => (\n { country: c.country, value: c.history[myday] }\n )).sort((a, b) => (a.value > b.value) ? 1 : (a.value === b.value) ? ((a.country > b.country) ? 1 : -1) : -1)\n\n // Keep only top 20 countries\n countryList.splice(0, countryList.length - 20)\n\n return countryList\n }\n\n // Loop for re-rendering list of data\n const startRace = (data) => {\n\n // Inital day of race\n let raceDay = new Date(2020, 2, initday)\n\n // Set title of chart \n chart.setTitle(connectionError + ' COVID-19 cases ' + raceDay.toLocaleDateString(undefined, { year: \"numeric\", month: \"long\", day: \"numeric\" }))\n\n // Get sorting data\n const sortedCountries = sortCountries(data, raceDay)\n\n // Check if the functions(startRace) has already done first pass\n if (bars.length > 0) {\n for (let i = 0; i < sortedCountries.length; i++) {\n\n // Prevent automatic scrolling of Y axis\n axisY.setScrollStrategy(AxisScrollStrategies.progressive)\n\n // Get index of each bar before sorting\n const initY = bars.map((e) => (e.entry.country)).indexOf(sortedCountries[i].country);\n\n // Get index of each bar after sorting\n const finalY = sortedCountries.map((e) => (e.country)).indexOf(sortedCountries[i].country);\n\n // Get Dimensions, Position And Size of bar[i]\n const rectDimensions = bars[i].rect.getDimensionsPositionAndSize()\n\n // Animation of changing the position of bar[i] by Y axis\n bars[i].animator = Animator(() => { undefined }) // function that executes after animation \n // Time for animation and easing type\n (duration, AnimationEasings.linear)\n // functions gets 2 arrays of 2 values (range) - initY (prev Y pos) and finalY.y(new Y pos) and rectDimensions.width, sortedCountries[i].value - prev and next width of each bar \n // and creates loop with increasing intermediate value (newPos, newWidth)\n ([[initY, finalY], [rectDimensions.width, sortedCountries[i].value]], ([animatedYPosition, animatedValue]) => {\n // Reset values \n bars[i].entry.country = sortedCountries[i].country\n // Animate x and y positions\n bars[i].rect.setDimensions({\n x: 0,\n y: animatedYPosition,\n width: animatedValue,\n height: 0.98\n })\n .restore()\n\n // Animate labels\n bars[i].label\n // The topmost country's label should be inside the bar, the others should be to the right of the bar.\n .setOrigin(i !== bars.length - 1 ? UIOrigins.LeftCenter : UIOrigins.RightCenter)\n // Position the label\n .setPosition({\n x: animatedValue,\n y: animatedYPosition > 0 ? (animatedYPosition + rectGap) : rectGap\n })\n .setText(Math.round(animatedValue).toLocaleString())\n .setPadding(10, 0, 10, 0)\n // Disable mouse interactions for the label\n .setMouseInteractions(false)\n // update tick position\n bars[i].tick.setValue(animatedYPosition + rectGap)\n })\n }\n\n } else {\n // If function executes for the first time, add countries to the Chart.\n addCountries(sortedCountries)\n }\n\n // we've bot reached the last day (i.e. yesterday) execute the function again and increase the day\n if (raceDay.toISOString() !== yesterday) {\n initday++\n setTimeout(() => startRace(data), duration)\n }\n }\n\n // function is used for showing errors on line 328\n const setTitle = (msg) => {\n chart.setTitle(msg)\n }\n\n return {\n addCountries,\n startRace,\n setTitle\n }\n\n}\n\nconst startRaceHandler = (chart) => {\n\n // Fetch all countries and history of cases\n fetch('https://www.arction.com/lightningchart-js-interactive-examples/data/covid/confirmed.json')\n .then(res => res.json())\n .then(data => {\n\n const dat = [...data.locations]\n\n // After fetching and merging data create bars\n chart.startRace(mergeData(dat))\n })\n .catch(err => {\n yesterday = '2020-05-30T21:00:00.000Z'\n connectionError = 'Example of data'\n chart.startRace(mergeData(fallbackData))\n })\n\n // Some countries are divided by region and it is needed to megre them\n const mergeData = data => {\n const result = []\n // Return only specific information \n data.forEach(basket => {\n\n let ob = {\n country: basket['country'],\n history: { ...basket['history'] }\n }\n\n // Check if array already contains the country\n let has = false\n result.find(obj => obj.country == ob.country\n ? has = true\n : has = false\n )\n\n // Unite object values\n const sum = (obj, newObj) => {\n Object.keys(obj).map(date => (\n obj[date] += newObj[date]\n ))\n }\n\n // Format the data\n if (has) {\n result.find(obj => (\n obj.country == ob.country\n && sum(obj.history, ob.history))\n )\n } else {\n result.push(ob)\n }\n });\n\n return result;\n };\n}\n\n// Create chart\nconst newchart = barChart({\n // theme: Themes.light\n})\n\n// Start fetching\nstartRaceHandler(newchart)\n\n\n//fallback data \nconst fallbackData = [\n {\n country: 'US',\n history: {\n '3/15/20': 3212,\n '3/16/20': 4679,\n '3/17/20': 6512,\n '3/18/20': 9169,\n '3/19/20': 13663,\n '3/20/20': 20030,\n '3/21/20': 26025,\n '3/22/20': 34855,\n '3/23/20': 46086,\n '3/24/20': 56698,\n '3/25/20': 68773,\n '3/26/20': 86613,\n '3/27/20': 105293,\n '3/28/20': 124900,\n '3/29/20': 143779,\n '3/30/20': 165861,\n '3/31/20': 192177,\n '4/1/20': 224418,\n '4/2/20': 256636,\n '4/3/20': 288906,\n '4/4/20': 321318,\n '4/5/20': 351203,\n '4/6/20': 382613,\n '4/7/20': 413382,\n '4/8/20': 444580,\n '4/9/20': 480534,\n '4/10/20': 514942,\n '4/11/20': 544119,\n '4/12/20': 571400,\n '4/13/20': 598310,\n '4/14/20': 627082,\n '4/15/20': 652513,\n '4/16/20': 682548,\n '4/17/20': 715267,\n '4/18/20': 743223,\n '4/19/20': 769416,\n '4/20/20': 799212,\n '4/21/20': 825046,\n '4/22/20': 853818,\n '4/23/20': 887386,\n '4/24/20': 919658,\n '4/25/20': 950100,\n '4/26/20': 976680,\n '4/27/20': 1000298,\n '4/28/20': 1024746,\n '4/29/20': 1051136,\n '4/30/20': 1080303,\n '5/1/20': 1115219,\n '5/2/20': 1142639,\n '5/3/20': 1167095,\n '5/4/20': 1191071,\n '5/5/20': 1215543,\n '5/6/20': 1240053,\n '5/7/20': 1267418,\n '5/8/20': 1294224,\n '5/9/20': 1319414,\n '5/10/20': 1338381,\n '5/11/20': 1357566,\n '5/12/20': 1380423,\n '5/13/20': 1400812,\n '5/14/20': 1427725,\n '5/15/20': 1452425,\n '5/16/20': 1476586,\n '5/17/20': 1495068,\n '5/18/20': 1517302,\n '5/19/20': 1538241,\n '5/20/20': 1560975,\n '5/21/20': 1586662,\n '5/22/20': 1610252,\n '5/23/20': 1631496,\n '5/24/20': 1651676,\n '5/25/20': 1670442,\n '5/26/20': 1689948,\n '5/27/20': 1708342,\n '5/28/20': 1730551,\n '5/29/20': 1755010,\n '5/30/20': 1778689,\n '5/31/20': 1797763,\n }\n },\n {\n country: 'Russia',\n history: {\n '3/15/20': 63,\n '3/16/20': 90,\n '3/17/20': 114,\n '3/18/20': 147,\n '3/19/20': 199,\n '3/20/20': 253,\n '3/21/20': 306,\n '3/22/20': 367,\n '3/23/20': 438,\n '3/24/20': 495,\n '3/25/20': 658,\n '3/26/20': 840,\n '3/27/20': 1036,\n '3/28/20': 1264,\n '3/29/20': 1534,\n '3/30/20': 1836,\n '3/31/20': 2337,\n '4/1/20': 2777,\n '4/2/20': 3548,\n '4/3/20': 4149,\n '4/4/20': 4731,\n '4/5/20': 5389,\n '4/6/20': 6343,\n '4/7/20': 7497,\n '4/8/20': 8672,\n '4/9/20': 10131,\n '4/10/20': 11917,\n '4/11/20': 13584,\n '4/12/20': 15770,\n '4/13/20': 18328,\n '4/14/20': 21102,\n '4/15/20': 24490,\n '4/16/20': 27938,\n '4/17/20': 32008,\n '4/18/20': 36793,\n '4/19/20': 42853,\n '4/20/20': 47121,\n '4/21/20': 52763,\n '4/22/20': 57999,\n '4/23/20': 62773,\n '4/24/20': 68622,\n '4/25/20': 74588,\n '4/26/20': 80949,\n '4/27/20': 87147,\n '4/28/20': 93558,\n '4/29/20': 99399,\n '4/30/20': 106498,\n '5/1/20': 114431,\n '5/2/20': 124054,\n '5/3/20': 134687,\n '5/4/20': 145268,\n '5/5/20': 155370,\n '5/6/20': 165929,\n '5/7/20': 177160,\n '5/8/20': 187859,\n '5/9/20': 198676,\n '5/10/20': 209688,\n '5/11/20': 221344,\n '5/12/20': 232243,\n '5/13/20': 242271,\n '5/14/20': 252245,\n '5/15/20': 262843,\n '5/16/20': 272043,\n '5/17/20': 281752,\n '5/18/20': 290678,\n '5/19/20': 299941,\n '5/20/20': 308705,\n '5/21/20': 317554,\n '5/22/20': 326448,\n '5/23/20': 335882,\n '5/24/20': 344481,\n '5/25/20': 353427,\n '5/26/20': 362342,\n '5/27/20': 370680,\n '5/28/20': 379051,\n '5/29/20': 387623,\n '5/30/20': 396575,\n '5/31/20': 405843\n }\n },\n {\n country: 'Spain',\n history: {\n '3/15/20': 7798,\n '3/16/20': 9942,\n '3/17/20': 11748,\n '3/18/20': 13910,\n '3/19/20': 17963,\n '3/20/20': 20410,\n '3/21/20': 25374,\n '3/22/20': 28768,\n '3/23/20': 35136,\n '3/24/20': 39885,\n '3/25/20': 49515,\n '3/26/20': 57786,\n '3/27/20': 65719,\n '3/28/20': 73235,\n '3/29/20': 80110,\n '3/30/20': 87956,\n '3/31/20': 95923,\n '4/1/20': 104118,\n '4/2/20': 112065,\n '4/3/20': 119199,\n '4/4/20': 126168,\n '4/5/20': 131646,\n '4/6/20': 136675,\n '4/7/20': 141942,\n '4/8/20': 148220,\n '4/9/20': 153222,\n '4/10/20': 158273,\n '4/11/20': 163027,\n '4/12/20': 166831,\n '4/13/20': 170099,\n '4/14/20': 172541,\n '4/15/20': 177644,\n '4/16/20': 184948,\n '4/17/20': 190839,\n '4/18/20': 191726,\n '4/19/20': 198674,\n '4/20/20': 200210,\n '4/21/20': 204178,\n '4/22/20': 208389,\n '4/23/20': 213024,\n '4/24/20': 202990,\n '4/25/20': 205905,\n '4/26/20': 207634,\n '4/27/20': 209465,\n '4/28/20': 210773,\n '4/29/20': 212917,\n '4/30/20': 213435,\n '5/1/20': 215216,\n '5/2/20': 216582,\n '5/3/20': 217466,\n '5/4/20': 218011,\n '5/5/20': 219329,\n '5/6/20': 220325,\n '5/7/20': 221447,\n '5/8/20': 222857,\n '5/9/20': 223578,\n '5/10/20': 224350,\n '5/11/20': 227436,\n '5/12/20': 228030,\n '5/13/20': 228691,\n '5/14/20': 229540,\n '5/15/20': 230183,\n '5/16/20': 230698,\n '5/17/20': 230698,\n '5/18/20': 231606,\n '5/19/20': 232037,\n '5/20/20': 232555,\n '5/21/20': 233037,\n '5/22/20': 234824,\n '5/23/20': 235290,\n '5/24/20': 235772,\n '5/25/20': 235400,\n '5/26/20': 236259,\n '5/27/20': 236259,\n '5/28/20': 237906,\n '5/29/20': 238564,\n '5/30/20': 239228,\n '5/31/20': 239479\n }\n },\n {\n country: 'Turkey',\n history: {\n '3/15/20': 6,\n '3/16/20': 18,\n '3/17/20': 47,\n '3/18/20': 98,\n '3/19/20': 192,\n '3/20/20': 359,\n '3/21/20': 670,\n '3/22/20': 1236,\n '3/23/20': 1529,\n '3/24/20': 1872,\n '3/25/20': 2433,\n '3/26/20': 3629,\n '3/27/20': 5698,\n '3/28/20': 7402,\n '3/29/20': 9217,\n '3/30/20': 10827,\n '3/31/20': 13531,\n '4/1/20': 15679,\n '4/2/20': 18135,\n '4/3/20': 20921,\n '4/4/20': 23934,\n '4/5/20': 27069,\n '4/6/20': 30217,\n '4/7/20': 34109,\n '4/8/20': 38226,\n '4/9/20': 42282,\n '4/10/20': 47029,\n '4/11/20': 52167,\n '4/12/20': 56956,\n '4/13/20': 61049,\n '4/14/20': 65111,\n '4/15/20': 69392,\n '4/16/20': 74193,\n '4/17/20': 78546,\n '4/18/20': 82329,\n '4/19/20': 86306,\n '4/20/20': 90980,\n '4/21/20': 95591,\n '4/22/20': 98674,\n '4/23/20': 101790,\n '4/24/20': 104912,\n '4/25/20': 107773,\n '4/26/20': 110130,\n '4/27/20': 112261,\n '4/28/20': 114653,\n '4/29/20': 117589,\n '4/30/20': 120204,\n '5/1/20': 122392,\n '5/2/20': 124375,\n '5/3/20': 126045,\n '5/4/20': 127659,\n '5/5/20': 129491,\n '5/6/20': 131744,\n '5/7/20': 133721,\n '5/8/20': 135569,\n '5/9/20': 137115,\n '5/10/20': 138657,\n '5/11/20': 139771,\n '5/12/20': 141475,\n '5/13/20': 143114,\n '5/14/20': 144749,\n '5/15/20': 146457,\n '5/16/20': 148067,\n '5/17/20': 149435,\n '5/18/20': 150593,\n '5/19/20': 151615,\n '5/20/20': 152587,\n '5/21/20': 153548,\n '5/22/20': 154500,\n '5/23/20': 155686,\n '5/24/20': 156827,\n '5/25/20': 157814,\n '5/26/20': 158762,\n '5/27/20': 159797,\n '5/28/20': 160979,\n '5/29/20': 162120,\n '5/30/20': 163103,\n '5/31/20': 163942,\n }\n },\n {\n country: 'Germany',\n history: {\n '3/15/20': 5795,\n '3/16/20': 7272,\n '3/17/20': 9257,\n '3/18/20': 12327,\n '3/19/20': 15320,\n '3/20/20': 19848,\n '3/21/20': 22213,\n '3/22/20': 24873,\n '3/23/20': 29056,\n '3/24/20': 32986,\n '3/25/20': 37323,\n '3/26/20': 43938,\n '3/27/20': 50871,\n '3/28/20': 57695,\n '3/29/20': 62095,\n '3/30/20': 66885,\n '3/31/20': 71808,\n '4/1/20': 77872,\n '4/2/20': 84794,\n '4/3/20': 91159,\n '4/4/20': 96092,\n '4/5/20': 100123,\n '4/6/20': 103374,\n '4/7/20': 107663,\n '4/8/20': 113296,\n '4/9/20': 118181,\n '4/10/20': 122171,\n '4/11/20': 124908,\n '4/12/20': 127854,\n '4/13/20': 130072,\n '4/14/20': 131359,\n '4/15/20': 134753,\n '4/16/20': 137698,\n '4/17/20': 141397,\n '4/18/20': 143342,\n '4/19/20': 145184,\n '4/20/20': 147065,\n '4/21/20': 148291,\n '4/22/20': 150648,\n '4/23/20': 153129,\n '4/24/20': 154999,\n '4/25/20': 156513,\n '4/26/20': 157770,\n '4/27/20': 158758,\n '4/28/20': 159912,\n '4/29/20': 161539,\n '4/30/20': 163009,\n '5/1/20': 164077,\n '5/2/20': 164967,\n '5/3/20': 165664,\n '5/4/20': 166152,\n '5/5/20': 167007,\n '5/6/20': 168162,\n '5/7/20': 169430,\n '5/8/20': 170588,\n '5/9/20': 171324,\n '5/10/20': 171879,\n '5/11/20': 172576,\n '5/12/20': 173171,\n '5/13/20': 174098,\n '5/14/20': 174478,\n '5/15/20': 175233,\n '5/16/20': 175752,\n '5/17/20': 176369,\n '5/18/20': 176551,\n '5/19/20': 177778,\n '5/20/20': 178473,\n '5/21/20': 179021,\n '5/22/20': 179710,\n '5/23/20': 179986,\n '5/24/20': 180328,\n '5/25/20': 180600,\n '5/26/20': 181200,\n '5/27/20': 181524,\n '5/28/20': 182196,\n '5/29/20': 182922,\n '5/30/20': 183189,\n '5/31/20': 183410,\n }\n },\n {\n country: 'Brazil',\n history: {\n '3/15/20': 162,\n '3/16/20': 200,\n '3/17/20': 321,\n '3/18/20': 372,\n '3/19/20': 621,\n '3/20/20': 793,\n '3/21/20': 1021,\n '3/22/20': 1546,\n '3/23/20': 1924,\n '3/24/20': 2247,\n '3/25/20': 2554,\n '3/26/20': 2985,\n '3/27/20': 3417,\n '3/28/20': 3904,\n '3/29/20': 4256,\n '3/30/20': 4579,\n '3/31/20': 5717,\n '4/1/20': 6836,\n '4/2/20': 8044,\n '4/3/20': 9056,\n '4/4/20': 10360,\n '4/5/20': 11130,\n '4/6/20': 12161,\n '4/7/20': 14034,\n '4/8/20': 16170,\n '4/9/20': 18092,\n '4/10/20': 19638,\n '4/11/20': 20727,\n '4/12/20': 22192,\n '4/13/20': 23430,\n '4/14/20': 25262,\n '4/15/20': 28320,\n '4/16/20': 30425,\n '4/17/20': 33682,\n '4/18/20': 36658,\n '4/19/20': 38654,\n '4/20/20': 40743,\n '4/21/20': 43079,\n '4/22/20': 45757,\n '4/23/20': 50036,\n '4/24/20': 54043,\n '4/25/20': 59324,\n '4/26/20': 63100,\n '4/27/20': 67446,\n '4/28/20': 73235,\n '4/29/20': 79685,\n '4/30/20': 87187,\n '5/1/20': 92202,\n '5/2/20': 97100,\n '5/3/20': 101826,\n '5/4/20': 108620,\n '5/5/20': 115455,\n '5/6/20': 126611,\n '5/7/20': 135773,\n '5/8/20': 146894,\n '5/9/20': 156061,\n '5/10/20': 162699,\n '5/11/20': 169594,\n '5/12/20': 178214,\n '5/13/20': 190137,\n '5/14/20': 203165,\n '5/15/20': 220291,\n '5/16/20': 233511,\n '5/17/20': 241080,\n '5/18/20': 255368,\n '5/19/20': 271885,\n '5/20/20': 291579,\n '5/21/20': 310087,\n '5/22/20': 330890,\n '5/23/20': 347398,\n '5/24/20': 363211,\n '5/25/20': 374898,\n '5/26/20': 391222,\n '5/27/20': 411821,\n '5/28/20': 438238,\n '5/29/20': 465166,\n '5/30/20': 498440,\n '5/31/20': 514849,\n }\n },\n {\n country: 'Italy',\n history: {\n '3/15/20': 24747,\n '3/16/20': 27980,\n '3/17/20': 31506,\n '3/18/20': 35713,\n '3/19/20': 41035,\n '3/20/20': 47021,\n '3/21/20': 53578,\n '3/22/20': 59138,\n '3/23/20': 63927,\n '3/24/20': 69176,\n '3/25/20': 74386,\n '3/26/20': 80589,\n '3/27/20': 86498,\n '3/28/20': 92472,\n '3/29/20': 97689,\n '3/30/20': 101739,\n '3/31/20': 105792,\n '4/1/20': 110574,\n '4/2/20': 115242,\n '4/3/20': 119827,\n '4/4/20': 124632,\n '4/5/20': 128948,\n '4/6/20': 132547,\n '4/7/20': 135586,\n '4/8/20': 139422,\n '4/9/20': 143626,\n '4/10/20': 147577,\n '4/11/20': 152271,\n '4/12/20': 156363,\n '4/13/20': 159516,\n '4/14/20': 162488,\n '4/15/20': 165155,\n '4/16/20': 168941,\n '4/17/20': 172434,\n '4/18/20': 175925,\n '4/19/20': 178972,\n '4/20/20': 181228,\n '4/21/20': 183957,\n '4/22/20': 187327,\n '4/23/20': 189973,\n '4/24/20': 192994,\n '4/25/20': 195351,\n '4/26/20': 197675,\n '4/27/20': 199414,\n '4/28/20': 201505,\n '4/29/20': 203591,\n '4/30/20': 205463,\n '5/1/20': 207428,\n '5/2/20': 209328,\n '5/3/20': 210717,\n '5/4/20': 211938,\n '5/5/20': 213013,\n '5/6/20': 214457,\n '5/7/20': 215858,\n '5/8/20': 217185,\n '5/9/20': 218268,\n '5/10/20': 219070,\n \"5/11/20\": 219814,\n \"5/12/20\": 221216,\n \"5/13/20\": 222104,\n \"5/14/20\": 223096,\n \"5/15/20\": 223885,\n \"5/16/20\": 224760,\n \"5/17/20\": 225435,\n \"5/18/20\": 225886,\n \"5/19/20\": 226699,\n \"5/20/20\": 227364,\n \"5/21/20\": 228006,\n \"5/22/20\": 228658,\n \"5/23/20\": 229327,\n \"5/24/20\": 229858,\n \"5/25/20\": 230158,\n \"5/26/20\": 230555,\n \"5/27/20\": 231139,\n \"5/28/20\": 231732,\n \"5/29/20\": 232248,\n \"5/30/20\": 232664,\n \"5/31/20\": 232997\n }\n },\n {\n country: 'India',\n history: {\n '3/15/20': 113,\n '3/16/20': 119,\n '3/17/20': 142,\n '3/18/20': 156,\n '3/19/20': 194,\n '3/20/20': 244,\n '3/21/20': 330,\n '3/22/20': 396,\n '3/23/20': 499,\n '3/24/20': 536,\n '3/25/20': 657,\n '3/26/20': 727,\n '3/27/20': 887,\n '3/28/20': 987,\n '3/29/20': 1024,\n '3/30/20': 1251,\n '3/31/20': 1397,\n '4/1/20': 1998,\n '4/2/20': 2543,\n '4/3/20': 2567,\n '4/4/20': 3082,\n '4/5/20': 3588,\n '4/6/20': 4778,\n '4/7/20': 5311,\n '4/8/20': 5916,\n '4/9/20': 6725,\n '4/10/20': 7598,\n '4/11/20': 8446,\n '4/12/20': 9205,\n '4/13/20': 10453,\n '4/14/20': 11487,\n '4/15/20': 12322,\n '4/16/20': 13430,\n '4/17/20': 14352,\n '4/18/20': 15722,\n '4/19/20': 17615,\n '4/20/20': 18539,\n '4/21/20': 20080,\n '4/22/20': 21370,\n '4/23/20': 23077,\n '4/24/20': 24530,\n '4/25/20': 26283,\n '4/26/20': 27890,\n '4/27/20': 29451,\n '4/28/20': 31324,\n '4/29/20': 33062,\n '4/30/20': 34863,\n '5/1/20': 37257,\n '5/2/20': 39699,\n '5/3/20': 42505,\n '5/4/20': 46437,\n '5/5/20': 49400,\n '5/6/20': 52987,\n '5/7/20': 56351,\n '5/8/20': 59695,\n '5/9/20': 62808,\n '5/10/20': 67161,\n '5/11/20': 70768,\n '5/12/20': 74292,\n '5/13/20': 78055,\n '5/14/20': 81997,\n '5/15/20': 85784,\n '5/16/20': 90648,\n '5/17/20': 95698,\n '5/18/20': 100328,\n '5/19/20': 106475,\n '5/20/20': 112028,\n '5/21/20': 118226,\n '5/22/20': 124794,\n '5/23/20': 131423,\n '5/24/20': 138536,\n '5/25/20': 144950,\n '5/26/20': 150793,\n '5/27/20': 158086,\n '5/28/20': 165386,\n '5/29/20': 173491,\n '5/30/20': 181827,\n '5/31/20': 190609,\n }\n }\n]","url":null,"readme":"*Also known as Bar Graph, Column Chart or Column Graph*\n\nA custom chart type (Racing Bars Chart) to visualize tracking of the Co-Vid 19 virus.\nTha data (country, history of cases) that is taken from API (https://coronavirus-tracker-api.herokuapp.com/confirmed) \nIn setInterval loop data is sorted by total COVID cases per each day and top 20 cases added to \nthe bars series in format `{ category: string, value: number, color: string }`. (color - random value in HEX format)\n\nThe Animator was used to animate the changing of the value and position order of each county in the list. \n\n```javascript\n// create chart\nconst newchart = barChart()\n\n\n// Add bars.\nchart.addValues([\n { country: 'Belgium', value: 26,666, color: '#ffffff' }\n])\n```\n","image":"racingBars.png"},{"id":"lcjs-example-0400-spiderStatic","title":"JavaScript Static Spider Chart","tags":["spider","radar","web","legendbox","radial"],"description":"This example shows the basic use of Spider Chart. Also known as Radar Chart, Web Chart, Polar Chart, Star Series.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Many radial charts, spider charts, donut charts, radar charts, pie chart, fast & reliable JavaScript chart types.","src":"/*\n * LightningChartJS example that showcases a simple SpiderChart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n LegendBoxBuilders,\n Themes\n} = lcjs\n\n// Create spider chart and Three series.\nconst chart = lightningChart().Spider({\n // theme: Themes.darkGold \n})\n .setTitle('Company branch efficiency')\n .setAxisInterval(100)\n .setScaleLabelStrategy(undefined)\n .setPadding({ top: 100 })\n\nconst series = [\n chart.addSeries()\n .setName('Sydney'),\n chart.addSeries()\n .setName('Kuopio'),\n chart.addSeries()\n .setName('New York')\n]\nseries.forEach((value, i) => {\n value\n .setPointSize(10)\n .setCursorResultTableFormatter((builder, series, value, axis) =>\n builder.addRow(`${series.getName()} ${axis}`)\n )\n})\n\n// Add constant points to series.\nconst categories = ['Pre-planning', 'Customer contacts', 'Meetings', 'Development time', 'Releases',]\n//This is for Sydney Series.\nseries[0].addPoints(\n { axis: categories[0], value: 6 },\n { axis: categories[1], value: 22 },\n { axis: categories[2], value: 61 },\n { axis: categories[3], value: 76 },\n { axis: categories[4], value: 100 },\n)\n//This is for Kuopio Series.\nseries[1].addPoints(\n { axis: categories[0], value: 44 },\n { axis: categories[1], value: 8 },\n { axis: categories[2], value: 97 },\n { axis: categories[3], value: 68 },\n { axis: categories[4], value: 69 },\n)\n//This is for New York Series.\nseries[2].addPoints(\n { axis: categories[0], value: 94 },\n { axis: categories[1], value: 63 },\n { axis: categories[2], value: 4 },\n { axis: categories[3], value: 67 },\n { axis: categories[4], value: 71 },\n)\n\n// Create LegendBox as part of SpiderChart.\nconst legend = chart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n// Add SpiderChart to LegendBox\nlegend.add(chart)\n\n// Enable AutoCursor auto-fill.\nchart.setAutoCursor(cursor => (cursor)\n .setResultTableAutoTextStyle(true)\n)\n","url":null,"readme":"*Also known as Radar Chart, Web Chart, Polar Chart, Star Series*\n\nThis example shows the creation and API of Spider Chart, which is generally used to compare multivariate quantitative data set. Each quantitative variable is represented on a categorical axis starting from the same center point.\n\nTypical usage of the Radar (Spider) chart is to compare various products over a range of characteristics.\n\nSpider Charts are created in a very straight-forward manner:\n\n```javascript\n// Add a Spider Chart.\nconst spiderChart = Spider()\n```\n\nSpider Series provides an ability to specify styles for both markers and lines individually.\n\n```javascript\nconst spiderSeries = spiderChart.addSeries(PointShape.Circle)\n .setName('Positive feedback distribution')\n .setFillStyle(fillStyle)\n .setPointFillStyle(pointFillStyle)\n // etc ...\n```\n\nActual data is added with the format: `{ axis: string, value: number }`, where 'axis' refers to the name of a category.\n\n```javascript\nspiderSeries.addPoints(\n // Any number of { axis, value } pairs can be passed.\n { axis: 'Team spirit', value: 55 },\n { axis: 'Premises', value: 27 },\n { axis: 'Salary', value: 25 }\n)\n```\n\nAdding points with unique tags will automatically create new categorical axes for the Spider Chart in the order of adding (the first axis will always point directly up and following ones will traverse clock-wise). Adding more points to the same category tag in one series will override any previous values.\n","image":"spiderStatic.png"},{"id":"lcjs-example-0401-spiderAnimated","title":"Animated JavaScript Radar Chart","tags":["spider","radar","web","radial"],"description":"This example shows creation of a Radar Chart with animated transitions by using a suitably styled SpiderChart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Many radial charts, spider charts, donut charts, radar charts, pie chart, fast & reliable JavaScript chart types.","src":"/*\n * LightningChartJS example that showcases a Spider (Radar) Chart with animated changing of values.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SpiderWebMode,\n Themes\n} = lcjs\n\n// Create a circular spider chart and add a series to it.\nconst chart = lightningChart().Spider({\n // theme: Themes.darkGold \n})\n .setTitle('Animated Radar Chart')\n .setAxisInterval(100)\n // Configure spider to be circular (like a traditional Radar Chart).\n .setWebMode(SpiderWebMode.Circle)\nconst series = chart.addSeries()\n\n// Set initial series values, creating axes.\nconst categories = ['Category A', 'Category B', 'Category C', 'Category D', 'Category E']\nseries.addPoints(\n { axis: categories[0], value: 100 },\n { axis: categories[1], value: 100 },\n { axis: categories[2], value: 100 },\n { axis: categories[3], value: 100 },\n { axis: categories[4], value: 100 }\n)\n\n// Setup randomization of series values at regular intervals.\nconst randomizePoints = () => {\n for (const category of categories) {\n const value = Math.random() * 100\n series.addPoints({ axis: category, value })\n }\n}\n// Randomize points every other second (2000 ms).\nsetInterval(randomizePoints, 2000)\n","url":null,"readme":"This example shows creation of a Radar Chart with animated transitions by using a suitably styled SpiderChart.\n\nSpiderCharts can be styled to look like traditional Radar Charts by usage of SpiderWebModes - more specifically, SpiderWebMode.Circle.\n\n```javascript\n// Set web-mode of SpiderChart, affecting the shape of its background, webs and nibs.\nspiderChart.setWebMode(SpiderWebMode.Circle)\n```\n\nTransitions can be set at regular intervals using setInterval like so:\n\n```javascript\nsetInterval(() => {\n // This code will be called approximately every 100 milliseconds.\n}, 100)\n```\n","image":"spiderAnimated.png"},{"id":"lcjs-example-0440-solidGaugeChart","title":"JavaScript Solid Gauge Chart","tags":["gauge","legendbox","radial"],"description":"This example shows solid gauge chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Many radial charts, spider charts, donut charts, radar charts, pie chart, fast & reliable JavaScript chart types.","src":"/*\n * LightningChartJS example that showcases creation and styling of radial-gauge.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n GaugeChartTypes,\n SolidLine,\n SolidFill,\n ColorRGBA,\n UIOrigins,\n Themes\n} = lcjs\n\n// Initialize gauge\nconst gauge = lightningChart().Gauge({\n // theme: Themes.darkGold \n type: GaugeChartTypes.Solid\n})\n .setTitle('Annual sales goal')\n .setThickness(80)\n .setDataLabelFormatter(new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }))\n .setGaugeStrokeStyle(new SolidLine().setFillStyle(new SolidFill()).setThickness(1))\n .setAngleInterval(225, -45)\n\n// Create slice\nconst slice = gauge\n .getDefaultSlice()\n .setInterval(0, 400000)\n .setValue(329000)\n // .setFillStyle(new SolidFill({ color: ColorRGBA(12, 213, 87) }))\n .setName('2019 sales')\n\n// Add LegendBox and define the position in the chart\nconst legend = gauge.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Add gaugeChart to LegendBox\nlegend.add(gauge)\n","url":null,"readme":"This example shows solid gauge chart.\n\nThe chart can be created with a simple line of code.\n\n```javascript\n// Create a new Gauge chart.\nconst gauge = lightningChart().Gauge({ type: GaugeChartTypes.Solid })\n```\n\nAfter creating the Gauge Chart the value for it can be set simply.\n\n```javascript\ngauge\n // Get default slice, this is the only slice there is and\n // it should be manipulated to set wanted value to the Gauge Chart.\n .getDefaultSlice()\n // Set start and end values.\n .setInterval(0, 400000)\n // Set the displayed value.\n .setValue(329000)\n```\n","image":"solidGauge.png"},{"id":"lcjs-example-0450-pieChart","title":"JavaScript Pie Chart","tags":["pie","radial","legendbox"],"description":"Pie Chart (or a Circular Chart) is a chart used to show statistical graphic.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Many radial charts, spider charts, donut charts, radar charts, pie chart, fast & reliable JavaScript chart types.","src":"/*\n * LightningChartJS example that shows the creation of a Pie Chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PieChartTypes,\n LegendBoxBuilders,\n SliceLabelFormatters,\n Themes\n} = lcjs\n\nconst pieType = window.innerWidth > 599 ? PieChartTypes.LabelsOnSides : PieChartTypes.LabelsInsideSlices\n\nconst pie = lightningChart().Pie({\n // theme: Themes.darkGold \n type: pieType\n})\n .setTitle('Project Time Division')\n .setAnimationsEnabled(true)\n .setMultipleSliceExplosion(true)\n\n// ----- User defined data -----\nconst data = [\n {\n name: 'Planning',\n value: 40\n },\n {\n name: 'Development',\n value: 120\n },\n {\n name: 'Testing',\n value: 60\n },\n {\n name: 'Review',\n value: 24\n },\n {\n name: 'Bug Fixing',\n value: 90\n }\n]\n\n// ----- Create Slices -----\nconst slices = data.map((item) => pie.addSlice(item.name, item.value))\n\n// Specify function which generates text for Slice Labels(LabelFormatter).\n\npie.setLabelFormatter(SliceLabelFormatters.NamePlusRelativeValue)\n\n\n// ----- Add LegendBox -----\npie.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(pie)\n","url":null,"readme":"Pie Chart (or a Circular Chart) is a chart used to show statistical graphic. The Pie Chart is divided into slices, with each slice illustrating a numerical portion of the whole Pie. Each slice's size (usually depicted in the central angle and area of the slice) is proportional to its quantity.\n\nThe chart can be created with a simple line of code.\n\n```javascript\n// Create a new Pie Chart.\nconst chart = lightningChart().Pie()\n```\n\nThe Pie Chart has two types for displaying the labels for each slice; The slices can be placed either on top of each slice by using the LabelsInsideSlices type, or they can be placed on both sides of the Chart by using LabelsOnSides type. The type must be given to the Chart as a parameter when creating it.\nBy default, the LabelsOnSides type is used.\n\n```javascript\n// Create a new Pie Chart and pass the type to use when placing labels.\nconst chart = lightningChart().Pie( { type: PieChartTypes.LabelsOnSides } )\n```\n\nAfter creating the Pie Chart, we can populate it by adding slices to it.\nThe slice should always get a name and value in a single object.\n\n```javascript\n// Add a slice to populate the Pie.\nchart.addSlice( { name: 'Planning', value: 100 } )\n```\n\nEach slice can be 'exploded' by clicking on them, and 'imploded' by clicking on a exploded slice.\nExploding slices can be set to only one at a time, or allowing all slices to be exploded at the same time.\n\n```javascript\n// Allow multiple slices to be in exploded state at the same time.\nchart.setMultipleSliceExplosion( true )\n```\n\nThe labels for all slices can be formatted in different ways.\n\n```javascript\n// Set the label formatting to show the slice's name and the relative value\n// (size of the slice as percentage).\npie.setLabelFormatter( SliceLabelFormatters.NamePlusRelativeValue )\n```\n\nThe lines connecting each slice to its label can be modified.\n","image":"pieChart.png"},{"id":"lcjs-example-0451-donutChart","title":"JavaScript Donut Chart","tags":["donut","radial","legendbox"],"description":"Donut Chart is a variation of Pie chart - functionally it's the same, visually it's only missing the center.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Many radial charts, spider charts, donut charts, radar charts, pie chart, fast & reliable JavaScript chart types.","src":"/*\n * LightningChartJS example that shows the creation and styling of a donut chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PieChartTypes,\n UIElementBuilders,\n LegendBoxBuilders,\n UIDraggingModes,\n SliceLabelFormatters,\n UIOrigins,\n emptyFill,\n emptyLine,\n Themes\n} = lcjs\n\nconst donut = lightningChart().Pie({\n // theme: Themes.darkGold \n type: PieChartTypes.LabelsInsideSlices\n})\n .setTitle('Inter Hotels - hotel visitors in June 2016')\n .setPadding({ top: 40 })\n .setAnimationsEnabled(true)\n .setMultipleSliceExplosion(false)\n // Style as \"Donut Chart\"\n .setInnerRadius(60)\n\n// ----- Static data -----\nconst data = {\n country: ['US', 'Canada', 'Greece', 'UK', 'Finland', 'Denmark'],\n values: [15000, 20030, 8237, 16790, 9842, 4300]\n}\n// Preparing data for each Slice\nconst processedData = []\nlet totalVisitor = 0\nfor (let i = 0; i < data.values.length; i++) {\n totalVisitor += data.values[i]\n processedData.push({ name: `${data.country[i]}`, value: data.values[i] })\n}\n\n// ----- Create Slices -----\nprocessedData.map((item) => donut.addSlice(item.name, item.value))\ndonut.setLabelFormatter(SliceLabelFormatters.NamePlusValue)\n// ----- Add LegendBox -----\ndonut.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n .add(donut)\n\n// ----- Add TextBox -----\ndonut.addUIElement(UIElementBuilders.TextBox)\n .setPosition({ x: 50, y: 50 })\n .setOrigin(UIOrigins.CenterTop)\n .setDraggingMode(UIDraggingModes.notDraggable)\n .setMargin(5)\n .setTextFont(fontSettings => fontSettings.setSize(25))\n .setText(`Total: ${totalVisitor} visitors`)\n .setBackground((background) => background\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n","url":null,"readme":"Donut Chart is a variation of Pie chart - functionally it's the same, visually it's only missing the center.\n\nThe chart can be created with a few simple lines of code.\n\nThe inner radius is used to set how far inwards from the outer edge of the circle we should cut the circle from, essentially creating a ring.\nFor example, setting the inner radius as 0.50 will draw a ring, where the circle's inner radius is at 50% distance from the circle's full radius.\n\n```javascript\n// Create a new Pie Chart.\nconst chart = lightningChart().Pie()\nchart.setInnerRadius(50)\n```\n\nIt is possible to disable the animations for the Pie / Donut chart: value changes, disabling / enabling slices and the explosion / implosion of a slice.\nAnimations are enabled by default.\n\n```javascript\n// Disable all animations for the chart.\nchart.setAnimationsEnabled( false )\n```\n\nThe slice fill styles can be styled by using a palette. A palette is a collection of fill styles which can be called by index.\n\n```javascript\n// Use a palette of colors to create the Fill Styles. You can also create your own \n// - check the ColorPalettes documentation for more info.\nconst colorPalette = ColorPalettes.fullSpectrum\n// Create a palette of Fill Styles to use with the Pie Chart's Slices.\nconst fillStylePalette = SolidFillPalette( colorPalette, 10 )\npie.setSliceFillStyle( fillStylePalette )\n```\n\nYou can also create a custom color palette and use it with the Chart.\nEasiest way to add a custom color palette is to create an array of colors and creating a function that returns colors from the array based on index.\n\n```javascript\n// ----- Create custom Palette for Donut (defines color of Slice filling) ----\nconst colorArray = [\n ColorRGBA( 97, 33, 15, 255 ),\n ColorRGBA( 255, 140, 66, 255 ),\n ColorRGBA( 225, 86, 52, 255 ),\n ColorRGBA( 234, 43, 31, 255 ),\n ColorRGBA( 249, 223, 116, 255 ),\n ColorRGBA( 245, 224, 183, 255 )\n]\n// Create a simple function which returns a color based on index. \n// Both parameters (length and index) can be used to create more complex functions -\n// length should be the length of the color array.\nconst colorPalette = ( length ) => ( index ) => {\n return colorArray[index]\n}\n// Pass the color palette to the SolidFillPalette method,\n// which returns a fillStyle palette that can be used with the Donut Chart\nconst fillStylePalette = SolidFillPalette( colorPalette, data.values.length)\n// Set the custom fillStyle for the Donut Chart\ndonut.setSliceFillStyle( fillStylePalette )\n```\n\nAll slices in the chart can have a border surrounding them, which can be styled for the entire chart.\n\n```javascript\n// Create a StrokeStyle to use with the chart.\nconst customStrokeStyle = new SolidLine(\n {\n fillStyle: new SolidFill(\n { color: ColorRGBA(30,144,255) }\n ),\n thickness: 5\n }\n)\n// Set the StrokeStyle to use with all slices in the chart.\nchart.setSliceStrokeStyle( customStrokeStyle )\n```\n","image":"donutChart.png"},{"id":"lcjs-example-0452-pieLUT","title":"JavaScript Pie Chart with Lookup table","tags":["donut","radial","legendbox"],"description":"Example showcasing the use of Lookup Table with a Pie Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Many radial charts, spider charts, donut charts, radar charts, pie chart, fast & reliable JavaScript chart types.","src":"/*\n * LightningChartJS example that showcases usage of color lookup table on Pie.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n PieChartTypes,\n lightningChart,\n LegendBoxBuilders,\n SliceLabelFormatters,\n SliceSorters,\n LUT,\n ColorRGBA,\n Themes\n} = lcjs\n\n// Create a new color-value lookup table\nconst lut = new LUT({\n steps: [\n { value: 20, color: ColorRGBA(255, 0, 24) },\n { value: 40, color: ColorRGBA(255, 165, 44) },\n { value: 60, color: ColorRGBA(255, 255, 65) },\n { value: 80, color: ColorRGBA(0, 128, 24) },\n { value: 100, color: ColorRGBA(0, 0, 249) },\n { value: 120, color: ColorRGBA(134, 0, 125) }\n ],\n interpolate: true\n})\n\n// Create a Pie Chart\nconst pie = lightningChart()\n .Pie({\n // theme: Themes.darkGold \n type: PieChartTypes.LabelsOnSides\n })\n .setTitle('Pie Chart')\n .setAnimationsEnabled(true)\n .setMultipleSliceExplosion(true)\n .setLabelFormatter(SliceLabelFormatters.NamePlusValue)\n .setSliceSorter(SliceSorters.None)\n // Attach lookup table\n .setLUT(lut)\n .setLabelConnectorGap(10)\n\nconst data = []\n\nfor (let i = 1; i <= 10; i++)\n data.push({ name: `Slice #${i}`, value: 1 + Math.random() * 120 })\n\n// Create Slices\nconst slices = data.map((item) => pie.addSlice(item.name, item.value))\n\n// Add LegendBox\npie\n .addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(pie)\n\n// 2 seconds after the example has loaded, change the values of each slice.\nsetTimeout(() => {\n slices.forEach((slice) => slice.setValue(1 + Math.random() * 120))\n}, 2000)\n\n// Change value of every slice regularly\nsetInterval(() => {\n slices.forEach((slice) => slice.setValue(1 + Math.random() * 120))\n}, 5000)\n","url":null,"readme":"Lookup table stores information about values and its associated colors. It provides efficient lookup of the color based on provided value as well as linear and step interpolation between colors.\n\nThe current example shows usage of lookup table with a Pie Chart.\n\n```javascript\n// create LUT from 0..120 with gradient steps.\nconst lut = new LUT( {\n steps: [\n { value: 20, color: ColorRGBA( 255, 0, 24 ) },\n { value: 40, color: ColorRGBA( 255, 165, 44 ) },\n { value: 60, color: ColorRGBA( 255, 255, 65 ) },\n { value: 80, color: ColorRGBA( 0, 128, 24 ) },\n { value: 100, color: ColorRGBA( 0, 0, 249 ) },\n { value: 120, color: ColorRGBA( 134, 0, 125 ) }\n ],\n interpolate: true\n} \n```\n\nCreate a Pie Chart and attach lookup table to fill the slices with colors based on value.\n\n```javascript\n// Create a new Pie Chart\nconst chart = lightningChart()\n .Pie({ type: PieChartTypes.LabelsOnSides })\n .setAnimationsEnabled( true )\n .setMultipleSliceExplosion( true )\n .setLabelFormatter( SliceLabelFormatters.NamePlusValue )\n .setSliceSorter( SliceSorters.None )\n // Attach lookup table.\n .setLUT( lut )\n .setLabelConnectorGap( 10 )\n\n```\n","image":"pieLUT.png"},{"id":"lcjs-example-0460-simpleFunnelChart","title":"JavaScript Funnel Chart","tags":["funnel","pyramid","sliced","legendbox"],"description":"Funnel Chart is a chart used to show statistical graphic. Funnel Chart is divided into slices, with each slice illustrating the numerical portion of the Funnel. ","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example that shows the creation and styling of a Funnel chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n FunnelChartTypes,\n FunnelLabelSide,\n SliceLabelFormatters,\n lightningChart,\n FunnelSliceModes,\n LegendBoxBuilders,\n Themes\n} = lcjs\n\n// Create a Funnel chart\nconst funnel = lightningChart().Funnel({\n // theme: Themes.darkGold \n type: FunnelChartTypes.LabelsOnSides\n})\n .setTitle('Customer contacts progression')\n .setSliceMode(FunnelSliceModes.VariableHeight)\n .setSliceGap(0)\n .setHeadWidth(95)\n .setNeckWidth(40)\n .setLabelSide(FunnelLabelSide.Right)\n .setPadding({ bottom: 45 })\n\n// Data for slices\nconst data = [\n {\n name: 'Prospects',\n value: 2000\n },\n {\n name: 'Contacts',\n value: 1540\n },\n {\n name: 'Leads',\n value: 1095\n },\n {\n name: 'Customers',\n value: 549\n }\n]\n// Add data to the slices\nfunnel.addSlices(data)\n\n// Set formatter of Slice Labels\nfunnel.setLabelFormatter(SliceLabelFormatters.NamePlusValue)\n\n// Add LegendBox and define the position in the chart\nconst lb = funnel\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\nlb.add(funnel, { disposeOnClick: false })\n","url":null,"readme":"Funnel Chart is a chart used to show statistical graphic. Funnel Chart is divided into slices, with each slice illustrating the numerical portion of the Funnel. Each slice's size is proportional to its quantity.\n\nThe chart can be created with a simple line of code.\n\n```javascript\n// Create a new Funnel Chart.\nconst funnel = lightningChart().Funnel()\n\n```\n\nThe Funnel has two types for displaying the labels for each slice; The slices can be placed either on top of each slice or the labels can be placed to the side of the Funnel, drawn with a connector line between the slice and its label.\n\nIf no type is given, the Funnel defaults to showing labels on side of Funnel.\n\n```javascript\n// Create a Funnel Chart with labels on the side.\nconst funnel = lightningChart().Funnel({ type: FunnelChartTypes.LabelsOnSide })\n\n// Create a Funnel Chart with labels inside of slices.\nconst funnel = lightningChart().Funnel({ type: FunnelChartTypes.LabelsInsideSlices })\n\n```\n\nAfter creating the Funnel Chart, we can populate it by adding slices to it.\nThe slice should always get a name and value as parameters.\n\nYou can alternatively add multiple slices as an array of objects containing a name and a value for each slice.\n\n```javascript\n// Add a single slice to the Funnel.\nfunnel.addSlice( 'Slice', 50 )\n\n// Add multiple slices to populate the Funnel.\nconst data = [\n {\n name: 'Prospects',\n value: 2000\n },\n {\n name: 'Contacts',\n value: 1540\n },\n {\n name: 'Leads',\n value: 1095\n },\n {\n name: 'Customers',\n value: 549\n }\n]\n// Add data to the slices\nfunnel.addSlices( data )\n\n```\n\nModifying how the Funnel and its slices are drawn can be done through the Funnel Chart's API.\n\n```javascript\n// Set the gap between each of the slices. This value can be between 0 to 20 pixels.\nfunnel.setSliceGap( 5 )\n\n// Set the width of the Funnel's top edge. This value can be from 0 to 100 (in percents).\nfunnel.setHeadWidth( 95 )\n\n// Set the width of the Funnel's bottom edge. This value can be from 0 to 100 (in percents).\nfunnel.setNeckWidth( 40 )\n\n// If the labels are set to be placed on the side of the Funnel,\n// we can determine the side they will be placed.\nfunnel.setLabelSide( FunnelLabelSide.Right )\n```\n\nThe slices can be styled using the Funnel Chart's API.\n\n```javascript\n// Create a palette of Fill Styles to use with the Funnel's Slices.\nconst palette = SolidFillPalette( ColorPalettes.warm, data.length )\n// Set the palette used for coloring each of the slices.\nfunnel.setSliceFillStyle( palette )\n```\n\nThe Funnel Chart has different ways to draw the slices depending on their value.\n\nPerhaps the most common way is to show the value as the height of the slice in relation to the combined value of all slices.\nThis can be achieved by setting the Funnel's Slice Mode to Variable Height.\n\n```javascript\n// Set Funnel chart slice mode to Variable Height.\nfunnel.setSliceMode( FunnelSliceModes.VariableHeight )\n```\n\nAnother common way is to show all the slices with equal height, but to have their width change depending on their value relative to the combined total value.\n\n```javascript\n// Set Funnel Chart slice mode to Variable Width.\nfunnel.setSliceMode( FunnelSliceModes.VariableWidth )\n```\n\nThe labels for all slices can be formatted in different ways.\n\n```javascript\n// Set the label formatting to show the slice's name and value.\nfunnel.setLabelFormatter( SliceLabelFormatters.NamePlusValue )\n```\n\nThe lines connecting each slice to its label can be modified.\n\n```javascript\n// Set the style that will be used with each connector line.\nfunnel.setLabelConnectorStyle(\n new SolidLine(\n {\n thickness: 2,\n fillStyle: new SolidFill(\n { color: ColorRGBA(125, 95, 220) }\n )\n }\n )\n)\n```\n","image":"simpleFunnel.png"},{"id":"lcjs-example-0465-simplePyramidChart","title":"JavaScript Pyramid Chart","tags":["pyramid","funnel","sliced","legendbox"],"description":"Pyramid Chart is a chart used to show statistical graphic. The Pyramid chart is divided into slices, with each slice illustrating the numerical portion of the whole Pyramid.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example that shows the creation and styling of a Pyramid chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n PyramidChartTypes,\n PyramidLabelSide,\n SliceLabelFormatters,\n lightningChart,\n LegendBoxBuilders,\n Themes\n} = lcjs\n\n// Create a Pyramid chart\nconst pyramid = lightningChart()\n .Pyramid({\n // theme: Themes.darkGold \n type: PyramidChartTypes.LabelsOnSides\n })\n .setTitle('Company staff growth')\n .setAnimationsEnabled(true)\n .setNeckWidth(80)\n .setSliceGap(5)\n .setPadding({ bottom: 45 })\n .setLabelSide(PyramidLabelSide.Right)\n\n// Data for slices\nconst data = [\n {\n name: '2015 - 2016',\n value: 3\n },\n {\n name: '2016 - 2017',\n value: 5\n },\n {\n name: '2017 - 2018',\n value: 10\n },\n {\n name: '2018 - 2019',\n value: 17\n }\n]\n// Add data to the slices\npyramid.addSlices(data)\n\n// Set formatter of Slice Labels\npyramid.setLabelFormatter(SliceLabelFormatters.NamePlusValue)\n\n// Add LegendBox and define the position in the chart\nconst lb = pyramid\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n\n// Add the Pyramid to the LegendBox and disable the button click functionality.\nlb.add(pyramid, { disposeOnClick: false })\n","url":null,"readme":"Pyramid Chart is a chart used to show statistical graphic. The Pyramid chart is divided into slices, with each slice illustrating the numerical portion of the whole Pyramid. Each slice's size (usually depicted as the slice's relative height from the Pyramid) is proportional to its quantity.\n\nThe chart can be created with a simple line of code.\n\n```javascript\n// Create a new Pyramid Chart.\nconst pyramid = lightningChart().Pyramid()\n```\n\nThe Pyramid Chart has two types for displaying the labels for each slice; The slices can be placed either on top of each slice by using the LabelsInsideSlices type, or they can be placed on both sides of the Chart by using LabelsOnSides type. The type must be given to the Chart as a parameter when creating it.\nBy default, the LabelsOnSides type is used.\n\n```javascript\n// Create a new Pyramid Chart and pass the type to use when placing labels.\nconst pyramid = lightningChart().Pyramid( { type: PyramidChartTypes.LabelsOnSides } )\n```\n\nAfter creating the Pyramid Chart, we can populate it by adding slices to it.\nThe slice should always get a name and value as parameters.\n\nYou can alternatively add multiple slices as an array of objects containing a name and a value for each slice.\n\n```javascript\n// Add a single slice to populate the Pyramid.\npyramid.addSlice( 'Planning', 100 )\n\n// Add multiple slices to populate the Pyramid.\npyramid.addSlices([\n {\n name: 'Slice1', value: 45\n }, {\n name: 'Slice2', value: 83\n }, {\n name: 'Slice3', value: 19\n }\n ])\n\n```\n\nYou can modify how the Pyramid and its slices are drawn through the Pyramid Chart's API.\n\n```javascript\n// Set the width of the Pyramid's bottom edge. This value can be from 0 to 100 (in percents).\npyramid.setNeckWidth( 80 )\n\n// Set the gap between each of the slices. This value can be between 0 to 20 pixels.\npyramid.setSliceGap( 5 )\n\n// If the labels are set to be placed on the side of the Pyramid,\n// we can determine the side here as well.\npyramid.setLabelSide( PyramidLabelSide.Right )\n\n```\n\nThe Slices can be styled using the Pyramid Chart's API.\n\n```javascript\n// Create a palette of Solid FillStyles to use with the Pyramid slices.\nconst palette = SolidFillPalette( ColorPalettes.warm, data.length )\n// Set the palette used for coloring each of the slices.\npyramid.setSliceFillStyle( palette )\n\n```\n\nThe labels for all slices can be formatted in different ways.\n\n```javascript\n// Set the label formatting to show the slice's name and the relative value\n// (size of the slice as percentage).\npyramid.setLabelFormatter( SliceLabelFormatters.NamePlusRelativeValue )\n```\n\nThe lines connecting each slice to its label can be modified.\n\n```javascript\n// Set the style used with all connector lines.\npyramid.setLabelConnectorStyle(\n new SolidLine({\n thickness: 3,\n fillStyle: new SolidFill(\n { color: ColorRGBA( 100, 150, 195 ) }\n )\n })\n)\n```\n","image":"simplePyramid.png"},{"id":"lcjs-example-0500-dashboardWithLegendBox","title":"JavaScript Dashboard With LegendBox","tags":["dashboard","legendbox","spline","spider","radar","web","xy"],"description":"Example showing a dashboard with multiple chart types and LegendBox Panel.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases a dashboard with LegendBox.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n PointShape,\n AxisTickStrategies,\n Themes\n} = lcjs\n\n// Import data-generators from 'xydata'-library.\nconst {\n createProgressiveRandomGenerator\n} = require('@arction/xydata')\n\n// Create Dashboard and stand-alone LegendBox.\nconst db = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfRows: 2,\n numberOfColumns: 2\n})\n\n// Create a legendBox docked to the Dashboard.\nconst legend = db.createLegendBoxPanel({\n columnIndex: 0,\n rowIndex: 1,\n columnSpan: 1,\n rowSpan: 1\n})\n\n\n// Spline\n{\n const dateOrigin = new Date()\n const dataFrequency = 1000\n const chart = db.createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n })\n .setTitle('Live sales')\n .setPadding({ right: 30 })\n .setMouseInteractionsWhileScrolling(true)\n\n const series = chart.addSplineSeries({ pointShape: PointShape.Circle })\n .setName('Product')\n .setStrokeStyle((strokeStyle) => strokeStyle.setThickness(2))\n .setPointSize(5)\n .setCursorInterpolationEnabled(false)\n .setCursorResultTableFormatter((tableBuilder, series, x, y) => tableBuilder\n .addRow(series.getName())\n .addRow('Time : ', series.axisX.formatValue(x))\n .addRow('Sold : ', y.toFixed(0) + ' pieces')\n )\n\n chart.getDefaultAxisX()\n .setInterval(-61 * 1000, 0)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n chart.getDefaultAxisY()\n .setTitle('Units sold')\n .setInterval(0, 500)\n .setScrollStrategy(AxisScrollStrategies.expansion)\n\n // Stream some random data.\n createProgressiveRandomGenerator()\n .setNumberOfPoints(10000)\n .generate()\n .setStreamBatchSize(1)\n .setStreamInterval(500)\n .setStreamRepeat(true)\n .toStream()\n .forEach(point => {\n point.x = point.x * dataFrequency\n point.y = point.y * 500\n series.add(point)\n })\n\n // Add to LegendBox\n legend.add(chart)\n}\n\n// Spider\n{\n const chart = db.createSpiderChart({\n columnIndex: 1,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 2\n })\n .setTitle('Product development costs vs. sales profits')\n .setScaleLabelFont((font) => font.setSize(12))\n .setAxisLabelFont((font) => font.setSize(14).setStyle('italic'))\n\n chart.addSeries(PointShape.Circle)\n .setName('Sales Profits')\n .addPoints(\n { axis: 'January', value: 100 },\n { axis: 'February', value: 200 },\n { axis: 'March', value: 300 },\n { axis: 'April', value: 400 },\n { axis: 'May', value: 500 },\n { axis: 'June', value: 650 },\n { axis: 'July', value: 800 },\n { axis: 'August', value: 990 },\n { axis: 'September', value: 1200 },\n { axis: 'October', value: 1100 },\n { axis: 'November', value: 1400 },\n { axis: 'December', value: 1500 }\n )\n .setCursorResultTableFormatter((tableContentBuilder, series, value, axis, formatValue) => tableContentBuilder\n .addRow(series.getName())\n .addRow(axis)\n .addRow('$' + value)\n )\n\n chart.addSeries(PointShape.Circle)\n .setName('Development Costs')\n .addPoints(\n { axis: 'January', value: 0 },\n { axis: 'February', value: 100 },\n { axis: 'March', value: 300 },\n { axis: 'April', value: 400 },\n { axis: 'May', value: 500 },\n { axis: 'June', value: 600 },\n { axis: 'July', value: 700 },\n { axis: 'August', value: 900 },\n { axis: 'September', value: 1000 },\n { axis: 'October', value: 1100 },\n { axis: 'November', value: 1300 },\n { axis: 'December', value: 1400 }\n )\n .setCursorResultTableFormatter((tableContentBuilder, series, value, axis, formatValue) => tableContentBuilder\n .addRow(series.getName())\n .addRow(axis)\n .addRow('$' + value)\n )\n\n // Add to LegendBox\n legend.add(chart)\n\n // Set the row height\n db.setRowHeight(0, 3)\n}\n","url":null,"readme":"This example shows a simple dashboard with multiple chart types and LegendBox Panel.\n\nThe dashboard allows rendering of multiple scenes in a single view port highly efficiently with minimal memory resources. During the creation of a dashboard instance, the amount of rows and columns will have to be specified. This can not be changed afterwards.\n\n```javascript\n// Create a dashboard with three rows and two columns.\nconst dashboard = lightningChart().Dashboard({\n numberOfRows: 3,\n numberOfColumns: 2\n})\n```\n\nCharts and Panels can then be added to the dashboard like follows:\n\n```javascript\n// Create a ChartXY that occupies the top row of the dashboard.\nconst chartXY = dashboard.createChartXY({\n // Row index (starting from bottom).\n columnIndex: 2,\n // Column index (starting from left).\n rowIndex: 0,\n // Row span (height, basically).\n columnSpan: 1,\n // Column span (width, basically).\n rowSpan: 2\n})\n```\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nDashboards have separate methods for adding a different kind of Charts or Panels. Dashboard represents a grid with rows & columns. During the creation of the element, the row & column indices and the horizontal & vertical spans should be specified to position it in the correct place and fill the desired amount of cells.\n\n```javascript\n// Create a spider chart and attach to dashboard.\n// Row 0, Column 0, Rows to fill 2, Columns to fill 1.\nconst spiderChart = dashboard.createSpider( 0, 0, 2, 1 )\n\n// Create a Legend Box Panel and attach to dashboard.\n// Row 0, Column 1, Rows to fill 2, Columns to fill 1.\nconst legendBox = dashboard.createLegendBoxPanel( {\n columnIndex: 0,\n rowIndex: 1,\n columnSpan: 2,\n rowSpan: 1\n})\n```\n\nThe dashboard rows and columns can have varying heights and widths respectively - you can resize them by clicking and dragging on the grid line separating the columns and rows from each other, or by using methods to set them programmatically:\n\n```javascript\n// Set height of the first row of a dashboard.\n// By default each row and column has a size of 1.\n// The size is always relative to the combined size of each row / column.\ndashboard.setRowHeight( 0, 2 )\n// Set width of the first and the second column of a dashboard.\n// First column width will be 2/5 of the entire view's width.\ndashboard.setColumnWidth( 0, 2 )\n// Second column width will be 3/5 of the entire view's width.\ndashboard.setColumnWidth( 1, 3 )\n```\n","image":"dashboardWithLegendbox.png"},{"id":"lcjs-example-0501-dashboard5chs1000pps","title":"JavaScript Dashboard 5 Channels 1000 pps","tags":["dashboard","line","realtime","xy","datapattern","datacleaning"],"description":"Example for a dashboard with multiple progressive channels of data. Using progressive Line Series.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases usage of Dashboard with multiple channels and axis scroll strategies.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n emptyFill,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveRandomGenerator\n} = require('@arction/xydata')\n\nconst channels = [\"Ch 1\", \"Ch 2\", \"Ch 3\", \"Ch 4\", \"Ch 5\"]\nconst channelCount = channels.length\n\n// Create Dashboard.\nconst grid = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfRows: channelCount,\n numberOfColumns: 1\n})\n\n// Map XY-charts to Dashboard for each channel.\nconst charts = channels.map((channelName, i) => {\n const chart = grid.createChartXY({\n columnIndex: 0,\n rowIndex: i,\n columnSpan: 1,\n rowSpan: 1\n })\n // Hide titles because we have very little space.\n .setTitleFillStyle(emptyFill)\n\n // Configure X-axis of chart to be progressive and have nice interval.\n chart.getDefaultAxisX()\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(0, 10000) // 10,000 millisecond axis\n\n return chart\n})\n\n// Map progressive line series for each chart.\nconst series = charts.map((chart, i) =>\n chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true => The X step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n })\n // Destroy automatically outscrolled data (old data becoming out of X axis range).\n // Actual data cleaning can happen at any convenient time (not necessarily immediately when data goes out of range).\n .setMaxPointCount(10000)\n .setStrokeStyle((lineStyle) => lineStyle.setThickness(1.0))\n)\n\n// Configure a common data-generator for all channels.\nconst dataGenerator = createProgressiveRandomGenerator()\n .setNumberOfPoints(3600)\n\n// Setup a continuous data-stream for each series.\nseries.forEach((value, i) =>\n dataGenerator\n .generate()\n .setStreamRepeat(true)\n // Use 1000 points / sec data rate (1 millisecond interval for data points). \n // Requesting generator to give an array of data points after every 15 ms. \n // As using 1 millisecond data point interval, it means 15 datapoints\n // have to be generated every round, 1 for each millisecond. \n .setStreamBatchSize(15) // 15 points per batch \n .setStreamInterval(15) // interval in milliseconds \n .toStream()\n .forEach((data) => value.add(data))\n)\n","url":null,"readme":"This example shows a dashboard with multiple progressive channels of data points using progressive line series.\n\nThe dashboard allows rendering of multiple scenes in a single view port highly efficiently with minimal memory resources. In our case, the rows of dashboard grid are filled with individual charts, where each represents the data channel.\n\n## Progressive series\n\nProgressive series are highly optimized series for the rendering of high-volume and high-density data while keeping full interactivity.\nThese optimizations are enabled by selecting a ***DataPattern***, which needs to be specified during the creation of the series instance and cannot be changed further for performance related reasons. *More detailed description was explained in previous examples.*\n","image":"dashboard5ch.png"},{"id":"lcjs-example-0502-dashboardTrading","title":"JavaScript Trading Dashboard","tags":["dashboard","ohlc","trading","range","area"],"description":"This example shows the creation of a simple trading dashboard with multiple individual charts on a single pane.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases usage of Dashboard for trading.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n LegendBoxBuilders,\n emptyLine,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createOHLCGenerator,\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Create dashboard to house two charts\nconst db = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfRows: 2,\n numberOfColumns: 1\n})\n\n// Decide on an origin for DateTime axis.\nconst dateOrigin = new Date(2018, 0, 1)\n// Chart that contains the OHLC candle stick series and Bollinger band\nconst chartOHLC = db.createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n})\n// Use DateTime TickStrategy with custom date origin for X Axis.\nchartOHLC\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n// Modify Chart.\nchartOHLC\n .setTitle('Trading dashboard')\n //Style AutoCursor.\n .setAutoCursor(cursor => {\n cursor.disposeTickMarkerY()\n cursor.setGridStrokeYStyle(emptyLine)\n })\n .setPadding({ right: 40 })\n\n// The top chart should have 66% of view height allocated to it. By giving the first row a height of 2, the relative\n// height of the row becomes 2/3 of the whole view (default value for row height / column width is 1)\ndb.setRowHeight(0, 2)\n\n// Create a LegendBox for Candle-Stick and Bollinger Band\nconst legendBoxOHLC = chartOHLC.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Define function which sets Y axis intervals nicely.\nlet setViewNicely\n\n// Create OHLC Figures and Area-range.\n//#region\n\n// Get Y-axis for series (view is set manually).\nconst stockAxisY = chartOHLC.getDefaultAxisY()\n .setScrollStrategy(undefined)\n .setTitle('USD')\n // Synchronize left margins of the stacked charts by assigning a static Y Axis thickness for both.\n .setThickness(80)\n\n// Add series.\nconst areaRange = chartOHLC.addAreaRangeSeries({ yAxis: stockAxisY })\n .setName('Bollinger band')\n .setMouseInteractions(false)\n .setCursorEnabled(false)\n\nconst stockFigureWidth = 5.0\nconst stock = chartOHLC.addOHLCSeries({ yAxis: stockAxisY })\n .setName('Candle-Sticks')\n // Setting width of figures\n .setFigureWidth(stockFigureWidth)\n\n// Make function that handles adding OHLC segments to series.\nconst add = (ohlc) => {\n // ohlc is equal to [x, open, high, low, close]\n stock.add(ohlc)\n // AreaRange looks better if it extends a bit further than the actual OHLC values.\n const areaOffset = 0.2\n areaRange.add(\n {\n position: ohlc[0],\n high: ohlc[2] - areaOffset,\n low: ohlc[3] + areaOffset,\n }\n )\n}\n\n// Generate some static data.\ncreateOHLCGenerator()\n .setNumberOfPoints(100)\n .setDataFrequency(24 * 60 * 60 * 1000)\n .generate()\n .toPromise()\n .then(data => {\n data.forEach(add)\n setViewNicely()\n })\n\n//#endregion\n\n// Create volume.\n//#region\nconst chartVolume = db.createChartXY({\n columnIndex: 0,\n rowIndex: 1,\n columnSpan: 1,\n rowSpan: 1\n})\n// Use DateTime TickStrategy with custom date origin for X Axis.\nchartVolume\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n// Modify Chart.\nchartVolume\n .setTitle('Volume')\n .setPadding({ right: 40 })\n// Create a LegendBox as part of the chart.\nconst legendBoxVolume = chartVolume.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n\n// Create Y-axis for series (view is set manually).\nconst volumeAxisY = chartVolume.getDefaultAxisY()\n .setTitle('USD')\n // Synchronize left margins of the stacked charts by assigning a static Y Axis thickness for both.\n .setThickness(80)\nconst volume = chartVolume.addAreaSeries({ yAxis: volumeAxisY })\n .setName('Volume')\n\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(990)\n .generate()\n .toPromise()\n .then(data => {\n volume.add(data.map(point => ({ x: point.x * 2.4 * 60 * 60 * 1000, y: Math.abs(point.y) * 10 })))\n setViewNicely()\n })\n\n//#endregion\n\n\n// Add series to LegendBox.\nlegendBoxOHLC.add(chartOHLC)\nlegendBoxVolume.add(chartVolume)\n\nsetViewNicely = () => {\n const yBoundsStock = { min: areaRange.getYMin(), max: areaRange.getYMax(), range: areaRange.getYMax() - areaRange.getYMin() }\n const yBoundsVolume = { min: volume.getYMin(), max: volume.getYMax(), range: volume.getYMax() - volume.getYMin() }\n // Set Y axis intervals so that series don't overlap and volume is under stocks.\n volumeAxisY.setInterval(yBoundsVolume.min, yBoundsVolume.max)\n stockAxisY.setInterval(yBoundsStock.min - yBoundsStock.range * .33, yBoundsStock.max)\n}\n\nstock.setCursorResultTableFormatter((builder, series, segment) => {\n return builder\n .addRow(series.getName())\n .addRow(series.axisX.formatValue(segment.getPosition()))\n .addRow('Open ' + segment.getOpen().toFixed(2))\n .addRow('High ' + segment.getHigh().toFixed(2))\n .addRow('Low ' + segment.getLow().toFixed(2))\n .addRow('Close ' + segment.getClose().toFixed(2))\n})\n\nvolume.setCursorResultTableFormatter((builder, series, position, high, low) => {\n return builder\n .addRow(series.getName())\n .addRow(series.axisX.formatValue(position))\n .addRow('Value ' + Math.round(high))\n .addRow('Base ' + Math.round(low))\n})\n","url":null,"readme":"This example shows the creation of a simple trading dashboard with multiple individual charts on a single pane.\n\nThe chart contains:\n- Japanese candlesticks ( ***OHLC series*** ) to represent the market price data\n- Mountains area ( ***AreaRange series*** ) to represent the difference between high & low values\n- Mountains area ( ***Area series*** ) to represent the volume\n\n## Legend\n\nLegend in this example is a UI object embedded to the chart using predefined simple builders for horizontal or vertical layout.\n\n- Horizontal legend\n\n ```javascript\n // Create a horizontal legend embedded to the chart.\n const legend = chart.addLegendBox( LegendBoxBuilders.HorizontalLegendBox )\n ```\n \n- Vertical legend\n\n ```javascript\n // Create a vertical legend embedded to the chart.\n const legend = chart.addLegendBox( LegendBoxBuilders.VerticalLegendBox )\n ```\n\nThe whole chart with contained series, the whole dashboard with contained charts and series, or the series individually can be easily attached to the legend box.\n\n- Adding a chart\n\n ```javascript\n // Attach the chart and its series to legend.\n // Creates a group with charts.\n const entries = legend.add( chart )\n ```\n\n- Adding a dashboard\n\n ```javascript\n // Attach the dashboard with charts with series to legend.\n // Creates groups of charts with series.\n const entries = legend.add( dashboard )\n ```\n\n- Adding a series\n\n ```javascript\n // Attach the individual series as a group to legend.\n // Creates a group from a single series.\n const entries = legend.add( series )\n ```\n","image":"dashboardTrading.png"},{"id":"lcjs-example-0503-dashboardBusiness","title":"JavaScript Business Dashboard","tags":["dashboard","xy","bar","column","ui","line","date-time"],"description":"This example shows the specific business case to visualize the costs of a imaginary company across all the departments combined in a single interactive dashboard.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases a business-like-Dashboard.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n ColorPalettes,\n SolidFill,\n SolidLine,\n UILayoutBuilders,\n UIElementBuilders,\n AutoCursorModes,\n AxisTickStrategies,\n emptyLine,\n emptyFill,\n AxisScrollStrategies,\n Themes\n} = lcjs\n\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Create styles for normal & selected graphs.\nconst palette = ColorPalettes.arctionWarm(2)\nconst mainStrokeStyle = new SolidLine().setFillStyle(new SolidFill().setColor(palette(0))).setThickness(20 / window.devicePixelRatio)\nconst selectedFillStyle = new SolidFill().setColor(palette(1))\n\n// Department names \nconst teams = [\n \"Dev\",\n \"Maintenance\",\n \"Support\",\n \"Sales\",\n \"Marketing\"\n]\n// 1 data-point per day\nconst pointResolution = 24 * 60 * 60 * 1000\n// Generate data\nconst budgets = Promise.all(\n teams.map((_, index) => createProgressiveTraceGenerator()\n .setNumberOfPoints(365)\n .generate()\n .toPromise()\n .then(data => data.map(point => ({\n x: point.x * pointResolution,\n y: index > 0 ? Math.abs(point.y) * 100 + 100 : Math.abs(point.y) * 50 + 1800\n })))\n )\n)\n\n// Create dashboard which will host all chart and UI elements\nconst db = lightningChart().Dashboard({\n // theme: Themes.darkGold\n numberOfRows: 3,\n numberOfColumns: 2\n})\n\n// Total \nconst totalBudgetsPerTeam = budgets.then(\n teamBudgets =>\n teamBudgets.map(budgetPerTeam =>\n budgetPerTeam.reduce((sum, v) => sum + v.y, 0)\n )\n)\n\n// Create Cartesian Chart for Bars\nconst barChart = db.createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 2\n})\n // Disable auto cursor\n .setAutoCursorMode(AutoCursorModes.disabled)\n // Set correct chart title\n .setTitle('Total expenses for 2018 per department')\n // Disable mouse interactions\n .setMouseInteractions(false)\n\n// Get Y axis\nconst axisX = barChart.getDefaultAxisX()\n// Modify X axis\naxisX\n // Disable default ticks.\n .setTickStrategy(AxisTickStrategies.Empty)\n // Disable mouse interactions\n .setMouseInteractions(false)\n // Set static Axis range.\n .setInterval(0, 100, false, true)\n // Disable auto scaling\n .setScrollStrategy(undefined)\n\n// Modify Y axis\nbarChart\n .getDefaultAxisY()\n .setTitle('Expenses ($)')\n .setStrokeStyle(style => style.setThickness(0))\n .setNibStyle(emptyLine)\n .setMouseInteractions(false)\n// Create series for individual lines\nconst bars = barChart.addSegmentSeries()\n// Calculate \nconst numberOfGapsBetweenBars = teams.length + 1\n// Create custom ticks to mark positions of different departments bars\nconst customTicks = teams.map((team, i) => axisX\n // Add new custom tick\n .addCustomTick(UIElementBuilders.AxisTick)\n // Set team name as marker text\n .setTextFormatter(_ => team)\n // Position custom tick in according with department index\n .setValue(100 / numberOfGapsBetweenBars * (i + 1))\n // Disable gridstroke.\n .setGridStrokeStyle(emptyLine)\n)\n\n\n// Decide on an origin for DateTime axes (shared between two charts).\nconst dateOrigin = new Date(2018, 0, 1)\n\n// Create chart for a single department costs distribution graph\nconst lineChart = db.createChartXY({\n columnIndex: 0,\n rowIndex: 2,\n columnSpan: 2,\n rowSpan: 1\n})\n .setPadding({ right: 40 })\n// Set the row height for the third row to take 50% of view space.\ndb.setRowHeight(2, 2)\n// Create simple line series \nconst lineSeries = lineChart\n .addLineSeries()\n .setName('Total Expenses')\n // Set selected fill color for the series\n .setStrokeStyle((style) => style.setFillStyle(selectedFillStyle))\n\nlineChart\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\n// Style chart selected department costs distribution\nbudgets.then(\n costsOfTeams => {\n // Finds the peak value across all departments\n const max = costsOfTeams.reduce(\n (max, costs) => costs.reduce(\n (lMax, cost) => lMax > cost.y ? lMax : cost.y,\n max\n ),\n 0\n )\n // Get Y axis\n lineChart\n .getDefaultAxisY().setTitle('Expenses ($)')\n // Disable auto scaling\n .setScrollStrategy(AxisScrollStrategies.fitting)\n // Set Y scale interval so that costs distribution fits\n .setInterval(0, max)\n }\n)\n\nlineSeries.setCursorResultTableFormatter((builder, series, Xvalue, Yvalue) => {\n // Find cached entry for the figure.\n return builder\n .addRow('Total expenses')\n .addRow('Date: ' + series.axisX.formatValue(Xvalue))\n .addRow('Expenses: $' + Yvalue.toFixed(2))\n})\n\n// Create interactive Bar chart \nPromise.all([totalBudgetsPerTeam, budgets])\n .then(([values, costsOfTeams]) => {\n // Create bar for each department\n // Departments are marked by custom ticks\n const barCol = customTicks.map((tick, i) => {\n // Get custom tick position\n const pos = tick.getValue()\n // Add Line which represents bar\n // Line X position is based on custom tick value\n return bars.add({\n startX: pos,\n startY: 0,\n endX: pos,\n endY: values[i]\n })\n })\n // Create function which shows costs distribution per day for selected department\n const selectedDepartment = i => {\n // Change the chart title according to the selected department\n lineChart.setTitle(`${teams[i]} expenses per day`)\n // Remove points which belong to costs distribution of previously selected department\n lineSeries.clear()\n // Add points for costs distribution of newly selected department\n lineSeries.add(costsOfTeams[i])\n // Set main color to all bars\n barCol.forEach(bar => bar.setStrokeStyle(mainStrokeStyle))\n // Set special color for selected bar\n barCol[i].setStrokeStyle((strokeStyle) => strokeStyle.setFillStyle(selectedFillStyle))\n }\n // Attach event listener for mouse/touch events of each bar \n barCol.forEach((bar, i) => {\n bar.onMouseEnter(() => selectedDepartment(i))\n bar.onTouchStart(() => selectedDepartment(i))\n })\n // Select the first department at initial value\n selectedDepartment(0)\n })\n\n// Draw text field with total amount of costs and description\nconst column = db\n // Create a dashboard without any content, \n // but with possibility to host any UI element\n .createUIPanel({\n columnIndex: 1,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n })\n // Add a column structure to the UI panel\n .addUIElement(UILayoutBuilders.Column)\n .setPosition({ x: 50, y: 50 })\n .setPadding({ right: 40 })\n .setBackground((background) => background\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n\ntotalBudgetsPerTeam.then(teamCosts => {\n // Add the first row to the column\n const firstRow = column.addElement(UILayoutBuilders.Row)\n // Add a gap which allocates all empty space in front of text\n firstRow.addGap()\n // Add text element right after gap\n firstRow.addElement(\n UIElementBuilders.TextBox\n // Modify TextBox builder to style the text field\n .addStyler(textBox => textBox\n // Define font settings for the text box\n .setTextFont(fontSettings => fontSettings.setSize(75 / window.devicePixelRatio))\n // Define content of the text box\n .setText('$' + teamCosts.reduce((sum, cost) => sum + cost, 0).toFixed())\n )\n )\n // Add a gap which allocates all empty space right after text\n firstRow.addGap()\n // Add a text box to the second row of the column\n column.addElement(\n UIElementBuilders.TextBox\n // Modify TextBox builder to style the text field\n .addStyler(textBox => textBox\n .setTextFont(fontSettings => fontSettings.setSize(25 / window.devicePixelRatio))\n .setText(\"Total company expenses\")\n )\n )\n})\n\n// Draw total costs distribution per days\nconst totalCostsChart = db\n // Create a cartesian chart\n .createChartXY({\n columnIndex: 1,\n rowIndex: 1,\n columnSpan: 1,\n rowSpan: 1\n })\n // Specify ChartXY title\n .setTitle('Total expenses per day')\n .setPadding({ right: 40 })\n\ntotalCostsChart\n .getDefaultAxisX()\n .setTickStrategy(\n AxisTickStrategies.DateTime,\n (tickStrategy) => tickStrategy.setDateOrigin(dateOrigin)\n )\n\nconst totalCost = totalCostsChart\n // Add the smooth line\n .addSplineSeries()\n .setName('Total Expenses ($)')\n // Change the thickness of the stroke\n .setStrokeStyle((strokeStyle) => strokeStyle.setThickness(2))\n\nbudgets.then(teamBudgets => {\n // Calculate total amount of costs per day\n const totalCostsPerDays = new Array(365)\n for (let i = 0; i < 365; i++) {\n totalCostsPerDays[i] = {\n x: i * pointResolution,\n y: teams.reduce((sum, _, teamIndex) => sum + teamBudgets[teamIndex][i].y, 0)\n }\n }\n // Draw a smooth line for total amount of costs per day\n totalCost\n // Hide points\n .setPointFillStyle(emptyFill)\n // Add data\n .add(totalCostsPerDays)\n})\ntotalCost.setCursorResultTableFormatter((builder, series, Xvalue, Yvalue) => {\n // Find cached entry for the figure.\n return builder\n .addRow('Total expenses')\n .addRow('Date: ' + series.axisX.formatValue(Xvalue))\n .addRow('Expenses: $' + Yvalue.toFixed(2))\n})\ntotalCostsChart.getDefaultAxisY().setTitle('Expenses ($)')\n","url":null,"readme":"The data visualization tools are widely used in all fields of industries. This example shows the specific business case to visualize the costs of the *imaginary company* across all the departments for the whole year combined in a single interactive dashboard.\n\n#### Dashboard layout\n\nThe dashboard grid is created with 4 rows and 2 columns. Some visualization components in this example fill multiple cells by explicitly providing a row- & column- span during the creation.\n\n1. *Top-left cell.* The cell contains a chart that shows the costs per year for each department using ***Bar Chart or Column Chart*** implemented with ***SegmentSeries*** different tool than ***RectangleSeries***. Segment series provides an ability to create and place freely line segments by specifying the start & end.\n\n ```javascript\n // Create XY chart and attach to the dashboard.\n const barChart = dashboard.createChartXY({\n columnIndex: 2,\n rowIndex: 0,\n columnSpan: 2,\n rowSpan: 1\n })\n\n // Add segment series to series individual line segments.\n // This series uses default axes.\n const bars = barChart.addSegmentSeries()\n ```\n The segment series accepts input in the following format { startX: number, startY: number, endX: number, endY: number }. The series returns the created line segment to give an ability of further modifications. The chart fills 2 rows & 1 column.\n\n ```javascript\n // Add line segment.\n const column = bars.add({\n startX: 10,\n startY: 10,\n endX: 20,\n endY: 20\n })\n ```\n\n Regarding the customization, each column can be configured to have individual styling and mouse & touch events. Each chart and series has mouse/touch events. Search in our API documentation by starting to type \"onMouse\".\n\n ```javascript\n // Configure the created bar column.\n column\n .setStrokeStyle( style => ... )\n .onMouseEnter( () => pointerEnterHandler )\n .onTouchEvent( () => pointerEnterHandler )\n ```\n\n2. *Top-right cell, upper part.* This cell contains a UI panel that shows the total company costs for the whole year. UI panels are able to visualize only UI components. The chart fills 1 row & 1 column.\n\n ```javascript\n // Create UI panel and attach to the dashboard.\n const panel = dashboard.createUIPanel({\n columnIndex: 3,\n rowIndex: 1,\n columnSpan: 1,\n rowSpan: 1\n })\n\n // Add UI element specifying the builder.\n // E.g. CheckBox, Button, Legend, etc.\n panel.addUIElement(/* builder from the library */)\n ```\n\n 3. *Top-right cell, lower part.* This cell contains a chart which shows the only costs for a single department for each day of the year. The chart renders the line series with data gathered by moving the mouse over the column in the bar chart. The chart fills 1 row & 1 column.\n\n ```javascript\n // Decide on an origin for DateTime axes.\n const dateTimeTickStrategy = AxisTickStrategies.DateTime(new Date(2018, 0, 1))\n\n // Create a chart for visualizing the costs of selected department.\n // Specify DateTime format for x-axis labels.\n const lineChart = dashboard.createChartXY({\n columnIndex: 2, \n rowIndex: 1, \n columnSpan: 1, \n rowSpan:1, \n chartXYOptions: { defaultAxisXTickStrategy: dateTimeTickStrategy }\n })\n\n // Create line series for elected department.\n const lineSeries = lineChart.addLineSeries()\n ```\n\n4. *Bottom cell.* This cell contains a chart which shows the smooth line ( using ***SplineSeries*** ) of total costs across all the apartments during the whole year. The chart fills 2 rows & 2 columns.\n ```javascript\n // Create a chart for visualizing the total costs of the company.\n // Specify DateTime format for x-axis labels similarly as before.\n const totalCostsChart = dashboard.createChartXY({\n columnIndex: 0, \n rowIndex: 0, \n columnSpan: 2, \n rowSpan:2, \n chartXYOptions: { defaultAxisXTickStrategy: dateTimeTickStrategy }\n })\n\n // Create line series for total costs of the company.\n const lineSeries = lineChart.addSplineSeries()\n ```\n","image":"dashboardBusiness.png"},{"id":"lcjs-example-0504-dashboard2chs1000pps","title":"Dashboard 2 Channels 1000 pps","tags":["dashboard","line","xy","datapattern","datacleaning"],"description":"This example shows different progressive data-patterns, scrolling strategies, custom axes and function generators inside a dashboard.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases different directions of progressivity and using custom axes.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveFunctionGenerator\n} = require('@arction/xydata')\n\nconst viewRange = Math.PI * 2 * 10\n\n// Create Dashboard.\nconst grid = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfRows: 1,\n numberOfColumns: 2\n})\n\n// Create two XY-charts.\nconst chart1 = grid.createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n})\nconst chart2 = grid.createChartXY({\n columnIndex: 1,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n})\n\n// Create progressive series with different directions and configure Y-axes suitably.\n// First, a vertically regressive series.\nchart1.setTitle('Vertical regressive')\nchart1.getDefaultAxisY()\n .setInterval(viewRange, 0)\n .setScrollStrategy(AxisScrollStrategies.regressive)\nconst series1 = chart1.addLineSeries({\n dataPattern: {\n // pattern: 'RegressiveY' => Each consecutive data point has decreased Y coordinate.\n pattern: 'RegressiveY',\n // regularProgressiveStep: true => The Y step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n})\n // Destroy automatically outscrolled data (old data becoming out of scrolling axis range).\n // Actual data cleaning can happen at any convenient time (not necessarily immediately when data goes out of range).\n .setMaxPointCount(10000)\n // Point to nearest Y data point with auto cursor.\n .setCursorSolveBasis('nearest-y')\n\n// Second, a vertically progressive series with custom axis.\nchart2.setTitle('Vertical progressive')\n// Add new axis to 'right' side of chart.\nconst customAxisY = chart2.addAxisY(true)\n .setInterval(-viewRange, 0)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n\nconst series2 = chart2.addLineSeries({\n yAxis: customAxisY,\n dataPattern: {\n // pattern: 'ProgressiveY' => Each consecutive data point has increased Y coordinate.\n pattern: 'ProgressiveY',\n // regularProgressiveStep: true => The Y step between each consecutive data point is regular (for example, always `1.0`).\n regularProgressiveStep: true,\n }\n})\n // Destroy automatically outscrolled data (old data becoming out of scrolling axis range).\n // Actual data cleaning can happen at any convenient time (not necessarily immediately when data goes out of range).\n .setMaxPointCount(10000)\n // Point to nearest Y data point with auto cursor.\n .setCursorSolveBasis('nearest-y')\n\n// Dispose unused default Y-axis.\nchart2.getDefaultAxisY().dispose()\n\n// Lastly, setup data-generation for both series.\ncreateProgressiveFunctionGenerator()\n .setSamplingFunction(Math.sin)\n .setEnd(Math.PI * 2)\n .setStep(0.015)\n .generate()\n // 1 second / 20 milliseconds * 20 points per batch = 1000 points / sec\n .setStreamBatchSize(20)\n .setStreamInterval(20)\n .setStreamRepeat(true)\n .toStream()\n .forEach((point) => {\n // Transform point to suit series.\n series1.add({ x: point.y, y: -point.x })\n })\n\ncreateProgressiveFunctionGenerator()\n .setSamplingFunction((x) => Math.sin(x * .5) + Math.sin(x) + Math.cos(x * 1.5) + Math.cos(x * 0.25))\n .setEnd(Math.PI * 100)\n .setStep(0.015)\n .generate()\n // 1000 points / sec\n .setStreamBatchSize(20)\n .setStreamInterval(20)\n .setStreamRepeat(true)\n .toStream()\n .forEach((point) => {\n // Transform point to suit series.\n series2.add({ x: point.y, y: point.x })\n })\n","url":null,"readme":"This example shows different progressive data-patterns, scrolling strategies, custom axes and function generators inside a dashboard.\n","image":"dashboard2ch.png"},{"id":"lcjs-example-0505-dashboardMultiDirection","title":"Dashboard Multi-Direction","tags":["dashboard","xy","line","point"],"description":"This example shows series/axes progressing to all kinds of directions inside a dashboard.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases series/axes progressing to all kinds of directions inside a dashboard.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n ColorRGBA,\n AxisScrollStrategies,\n DataPatterns,\n Themes\n} = lcjs\n\n// Import data-generators from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator,\n createTraceGenerator\n} = require('@arction/xydata')\n\n// Create a 3x3 dashboard.\nconst grid = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfRows: 3,\n numberOfColumns: 3\n})\n\n// Add charts to dashboard.\nconst cells = [\n { row: 1, col: 0 },\n { row: 2, col: 1 },\n { row: 1, col: 2 },\n { row: 0, col: 1 },\n { row: 1, col: 1 }\n]\nconst chooseRandom = (options) => options[Math.round(Math.random() * (options.length - 1))]\nconst createCell = (cell) => {\n const chart = grid.createChartXY({\n columnIndex: cell.col,\n rowIndex: cell.row,\n columnSpan: 1,\n rowSpan: 1\n })\n // Add a random omni-directional series.\n const type = chooseRandom(['PointSeries', 'LineSeries'])\n // Setup data-generation for series.\n if (cell.row == cell.col) {\n const series = chart['add' + type]()\n if (type === 'LineSeries') {\n series.setCursorSolveBasis('nearest')\n }\n // Random trace\n createTraceGenerator()\n .setNumberOfPoints(100000)\n .generate()\n .setStreamInterval(50)\n .setStreamBatchSize(10)\n .setStreamRepeat(true)\n .toStream()\n .forEach(point => series.add(point))\n } else {\n // Random progressive trace with mapped direction.\n const flipPlane = cell.col == 1\n const mul = { x: cell.col == 0 ? -1 : 1, y: cell.row == 0 ? 1 : -1 }\n // Configure axes.\n let axisX = chart.getDefaultAxisX(), axisY = chart.getDefaultAxisY()\n if (cell.row == cells.reduce((prev, cell) => Math.max(prev, cell.row), 0)) {\n axisX.dispose()\n axisX = chart.addAxisX(true)\n }\n if (cell.col == 0) {\n axisY.dispose()\n axisY = chart.addAxisY(true)\n }\n if (mul.x < 0) {\n axisX\n .setInterval(-100, 0)\n .setScrollStrategy(flipPlane ? AxisScrollStrategies.fitting : AxisScrollStrategies.regressive)\n } else\n axisX\n .setInterval(0, 100)\n .setScrollStrategy(flipPlane ? AxisScrollStrategies.fitting : AxisScrollStrategies.progressive)\n\n if (mul.y < 0) {\n axisY\n .setInterval(-100, 0)\n .setScrollStrategy(flipPlane ? AxisScrollStrategies.regressive : AxisScrollStrategies.fitting)\n } else\n axisY\n .setInterval(0, 100)\n .setScrollStrategy(flipPlane ? AxisScrollStrategies.progressive : AxisScrollStrategies.fitting)\n\n const series = chart['add' + type](axisX, axisY)\n if (type === 'LineSeries') {\n series.setCursorSolveBasis('nearest')\n }\n createProgressiveTraceGenerator()\n .setNumberOfPoints(100000)\n .generate()\n .setStreamInterval(50)\n .setStreamBatchSize(2)\n .setStreamRepeat(true)\n .toStream()\n .forEach(point => series.add({ x: (flipPlane ? point.y : point.x) * mul.x, y: (flipPlane ? point.x : point.y) * mul.y }))\n }\n return chart.setTitle(type)\n}\ncells.map(createCell)\n","url":null,"readme":"This example shows series/axes progressing to all kinds of directions inside a dashboard.\n","image":"dashboardMulti.png"},{"id":"lcjs-example-0506-dashboardPie","title":"JavaScript Dashboard With Pie, XY, Spider and Donut Charts","tags":["dashboard","pie","radar","spider","web","donut","xy","area","legendbox"],"description":"This example shows different kinds of charts inside a dashboard.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases series/axes progressing to all kinds of directions inside a dashboard.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SliceLabelFormatters,\n AreaSeriesTypes,\n PointShape,\n UIOrigins,\n UIDraggingModes,\n PieChartTypes,\n UIElementBuilders,\n emptyFill,\n emptyLine,\n Themes\n} = lcjs\n\n// Create a 5x2 dashboard.\nconst grid = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfRows: 3,\n numberOfColumns: 2\n})\n\n// Create a legendBox docked to the Dashboard.\nconst legend = grid.createLegendBoxPanel({\n columnIndex: 1,\n rowIndex: 2,\n columnSpan: 1,\n rowSpan: 1\n})\n\nconst pieType = window.innerWidth > 850 ? PieChartTypes.LabelsOnSides : PieChartTypes.LabelsInsideSlices\n\n//Pie Chart\n{\n //Create a Pie Chart\n const pie = grid.createPieChart(({\n columnIndex: 0,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1,\n pieOptions: { type: pieType }\n }))\n .setTitle('CPU Usage')\n .setAnimationsEnabled(true)\n .setMultipleSliceExplosion(true)\n\n // ----- CPU Usage data -----\n const data = [\n { name: 'OS', value: 20 },\n { name: 'Browser', value: 5 },\n { name: 'Video editor', value: 10 },\n { name: 'Unused', value: 65 }\n ]\n\n // ----- Create Slices -----\n const slices = data.map((item) => pie.addSlice(item.name, item.value))\n\n // Specify function which generates text for Slice Labels(LabelFormatter).\n pie.setLabelFormatter(SliceLabelFormatters.NamePlusRelativeValue)\n pie.setLabelFont((font) => font.setSize(15))\n\n // Add Pie chart to LegendBox\n legend.add(pie)\n}\n// Area Range\n{\n // Create a XY Chart.\n const xyChart = grid.createChartXY({\n columnIndex: 1,\n rowIndex: 1,\n columnSpan: 1,\n rowSpan: 1\n })\n .setTitle('Power Consumption')\n\n // ---- The Area Series both have the same baseline and direction. ----\n const areaCPU = xyChart.addAreaSeries({ type: AreaSeriesTypes.Positive })\n .setName('CPU')\n\n const areaGPU = xyChart.addAreaSeries({ type: AreaSeriesTypes.Positive })\n .setName('GPU')\n\n xyChart.getDefaultAxisX()\n .setTitle('Component Load (%)')\n xyChart.getDefaultAxisY()\n .setTitle('Watts')\n\n const cpuData = [\n { x: 0 },\n { x: 4 },\n { x: 8 },\n { x: 12 },\n { x: 16 },\n { x: 20 },\n { x: 24 },\n { x: 28 },\n { x: 32 },\n { x: 36 },\n { x: 40 },\n { x: 44 },\n { x: 48 },\n { x: 52 },\n { x: 56 },\n { x: 60 },\n { x: 64 },\n { x: 68 },\n { x: 72 },\n { x: 76 },\n { x: 80 },\n { x: 84 },\n { x: 88 },\n { x: 92 },\n { x: 96 },\n { x: 100 }\n ]\n const gpuData = [\n { x: 0 },\n { x: 4 },\n { x: 8 },\n { x: 12 },\n { x: 16 },\n { x: 20 },\n { x: 24 },\n { x: 28 },\n { x: 32 },\n { x: 36 },\n { x: 40 },\n { x: 44 },\n { x: 48 },\n { x: 52 },\n { x: 56 },\n { x: 60 },\n { x: 64 },\n { x: 68 },\n { x: 72 },\n { x: 76 },\n { x: 80 },\n { x: 84 },\n { x: 88 },\n { x: 92 },\n { x: 96 },\n { x: 100 }\n ]\n\n areaCPU.add(cpuData.map((point) => ({ x: point.x, y: point.x * 3.2 + Math.random() * 9.4 })))\n areaGPU.add(gpuData.map((point) => ({ x: point.x, y: point.x * 2.8 + Math.random() * 6.6 })))\n\n // Set the custom result table\n areaCPU\n .setCursorResultTableFormatter((builder, series, position, highValue, lowValue) => {\n return builder\n .addRow('CPU')\n .addRow('Power Consumption ' + highValue.toFixed(0) + ' watts')\n .addRow('component load ' + position.toFixed(0) + ' %')\n })\n areaGPU\n .setCursorResultTableFormatter((builder, series, position, highValue, lowValue) => {\n return builder\n .addRow('GPU')\n .addRow('Power Consumption ' + highValue.toFixed(0) + ' watts')\n .addRow('component load ' + position.toFixed(0) + ' %')\n })\n\n // Add XY Chart to LegendBox\n legend.add(xyChart)\n\n}\n// Spider\n{\n //Create a Spider Chart\n const chart = grid.createSpiderChart({\n columnIndex: 1,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n })\n .setTitle('Average Component Load')\n .setScaleLabelFont((font) => font.setSize(12))\n .setAxisLabelFont((font) => font.setSize(14).setStyle('italic'))\n\n chart.addSeries(PointShape.Circle)\n .setName('System Load')\n .addPoints(\n { axis: 'CPU', value: 10 },\n { axis: 'Memory', value: 10 },\n { axis: 'Network', value: 20 },\n { axis: 'Hard-Drive', value: 40 },\n { axis: 'GPU', value: 20 }\n )\n .setCursorResultTableFormatter((tableContentBuilder, series, value, axis, formatValue) => tableContentBuilder\n .addRow(series.name)\n .addRow(axis)\n .addRow(value + ' %')\n )\n // Add Spider Chart to LegendBox\n legend.add(chart)\n\n}\n\n//Donut Chat\n{\n //Create a Donut Chart\n const donut = grid.createPieChart({\n columnIndex: 0,\n rowIndex: 1,\n columnSpan: 1,\n rowSpan: 2,\n pieOptions: { type: pieType }\n })\n .setTitle('Memory Usage')\n .setAnimationsEnabled(true)\n .setMultipleSliceExplosion(false)\n .setInnerRadius(50)\n\n // ----- Static data -----\n const data = {\n memory: ['OS', 'Browser', 'Video editor', 'Unused'],\n values: [1000, 692, 2000, 4500]\n }\n // Preparing data for each Slice\n const processedData = [];\n let totalMemoryUse = 0;\n for (let i = 0; i < data.values.length; i++) {\n totalMemoryUse += data.values[i];\n processedData.push({ name: `${data.memory[i]}`, value: data.values[i] });\n }\n\n // ----- Create Slices -----\n processedData.map((item) => donut.addSlice(item.name, item.value))\n donut.setLabelFormatter(SliceLabelFormatters.NamePlusValue)\n donut.setLabelFont((font) => font.setSize(15))\n\n //add Donut to Legend Box\n legend.add(donut)\n\n // ----- Add TextBox below the Donut Chart-----\n donut.addUIElement(UIElementBuilders.TextBox)\n .setPosition({ x: 50, y: 10 })\n .setOrigin(UIOrigins.Center)\n .setDraggingMode(UIDraggingModes.notDraggable)\n .setMargin(5)\n .setBackground((background) => background\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n .setTextFont(fontSettings => fontSettings.setSize(12))\n .setText(`Total memory : ${totalMemoryUse} MB`)\n}\n\ngrid.setRowHeight(0, 2)\n\n// Reduce Font size of LegendBoxes.\nlegend.setLegendBoxes((legendBox) => legendBox\n .setTitleFont((font) => font\n .setSize(12)\n )\n .setEntries((entry) => entry\n .setTextFont((font) => font\n .setSize(12)\n )\n )\n)\n","url":null,"readme":"This example shows different kinds of charts inside a dashboard.\n","image":"dashboardPie.png"},{"id":"lcjs-example-0507-dashboardFiberAnalysis","title":"JavaScript Distance Intensity Chart","tags":["dashboard","xy","heatmap","area","palette","legendbox"],"description":"This example showcases a real life application used in Fiber Analysis","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases a real life application used in Fiber Monitoring\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n emptyLine, \n emptyFill, \n AreaSeriesTypes, \n ColorRGBA,\n PalettedFill, \n LUT, \n emptyTick,\n UIElementBuilders, \n UIOrigins,\n synchronizeAxisIntervals,\n Themes\n} = lcjs\n\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\nconst CONFIG = {\n /**\n * Step between optical fibre measurements (Meters).\n */\n opticalFibreDistanceStep: 10,\n /**\n * Start value for optical fibre axis (Meters).\n */\n opticalFibreDistanceStart: 0,\n /**\n * End value for optical fibre axis (Meters).\n */\n opticalFibreDistanceEnd: 3200,\n /**\n * Step between each heat map row along Time Axis (lower chart Y axis) (Milliseconds).\n */\n timeStep: 1000,\n /**\n * Start time along Time Axis (lower chart Y axis) (Milliseconds).\n */\n timeStart: new Date('2021-06-17T08:54:04').getTime(),\n /**\n * End time along Time Axis (lower chart Y axis) (Milliseconds).\n */\n timeEnd: new Date('2021-06-17T08:54:38').getTime()\n}\n\n// All Axis coordinates on Date Axis are offset by this value to prevent zooming issues.\nconst dateOrigin = CONFIG.timeStart\n\nconst lut = new LUT({\n interpolate: false,\n steps: [\n { value: 0, color: ColorRGBA(0, 0, 0, 0) },\n { value: 200, color: ColorRGBA(96, 146, 237) },\n { value: 300, color: ColorRGBA(0, 0, 255) },\n { value: 400, color: ColorRGBA(255, 215, 0) },\n { value: 500, color: ColorRGBA(255, 164, 0) },\n { value: 600, color: ColorRGBA(255, 64, 0) },\n ],\n})\n\nconst dataPromise = new Promise(async (resolve) => {\n const timeStepsCount = Math.ceil((CONFIG.timeEnd - CONFIG.timeStart) / CONFIG.timeStep)\n const opticalFibreLengthX = Math.ceil((CONFIG.opticalFibreDistanceEnd - CONFIG.opticalFibreDistanceStart) / CONFIG.opticalFibreDistanceStep)\n const traceDataArray = await Promise.all(\n new Array(timeStepsCount).fill(0).map((_, i) => \n createProgressiveTraceGenerator()\n .setNumberOfPoints(opticalFibreLengthX)\n .generate()\n .toPromise()\n .then(xyPoints => xyPoints.map(xy => Math.abs( xy.y * 100 )))\n )\n )\n // `traceDataArray` can be supplied into heat map series as is,\n // calculate data for Area Series by summing every trace column value for every X coordinate.\n const areaData = new Array(opticalFibreLengthX).fill(0).map((_, iX) => ({\n x: CONFIG.opticalFibreDistanceStart + iX * CONFIG.opticalFibreDistanceStep,\n y: traceDataArray.reduce((sum, cur) => sum + cur[iX], 0)\n }))\n \n resolve({\n traceDataArray,\n areaData\n })\n})\n\nconst dashboard = lightningChart().Dashboard({\n // theme: Themes.darkGold\n numberOfColumns: 1,\n numberOfRows: 2,\n})\n .setRowHeight(0, 0.3)\n .setRowHeight(1, 0.7)\n\nconst chartTop = dashboard.createChartXY({\n rowIndex: 0,\n columnIndex: 0,\n})\n .setTitle('Distance Intensity Chart')\n .setPadding({ right: 24 })\n\nconst axisTopX = chartTop.getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.Empty)\n .setStrokeStyle(emptyLine)\n\nconst axisTopY = chartTop.getDefaultAxisY()\n .setTitle('Intensity Sum')\n\nconst chartBottom = dashboard.createChartXY({\n rowIndex: 1,\n columnIndex: 0,\n})\n .setTitleFillStyle(emptyFill)\n .setPadding({ right: 24 })\n\nconst axisBottomX = chartBottom.getDefaultAxisX()\n .setTitle('Optical Fiber Distance (m)')\n\nconst formatterOptionsDateTimeAxis = {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n}\n\nconst axisBottomY = chartBottom.getDefaultAxisY()\n .setTitle('Time')\n .setTickStrategy(AxisTickStrategies.DateTime, (ticks) => ticks\n .setDateOrigin(new Date(dateOrigin))\n .setGreatTickStyle(emptyTick)\n .setMinorTickStyle(emptyTick)\n .setFormattingDay({}, formatterOptionsDateTimeAxis, {})\n .setFormattingDecade(formatterOptionsDateTimeAxis, {})\n .setFormattingHour({}, formatterOptionsDateTimeAxis, {})\n .setFormattingMilliSecond({}, formatterOptionsDateTimeAxis)\n .setFormattingMinute({}, formatterOptionsDateTimeAxis, {})\n .setFormattingMonth({}, formatterOptionsDateTimeAxis, {})\n .setFormattingSecond({}, formatterOptionsDateTimeAxis)\n .setFormattingWeek({}, formatterOptionsDateTimeAxis, {})\n .setFormattingYear(formatterOptionsDateTimeAxis, {})\n )\n\n\n// Code for synchronizing all X Axis intervals in stacked XY charts.\nsynchronizeAxisIntervals(axisBottomX, axisTopX)\n\n\n// Align stacked Y Axes'.\n;[axisTopY, axisBottomY].forEach((axis) => axis.setThickness(100))\n\n\n// Visualize data.\ndataPromise.then(data => {\n const { traceDataArray, areaData } = data\n\n const areaSeries = chartTop.addAreaSeries({type: AreaSeriesTypes.Positive})\n .add(areaData)\n .setCursorResultTableFormatter((builder, series, x, y) => builder\n .addRow('Intensity sum:', '', y.toFixed(1))\n .addRow('Optical fiber distance:', '', axisBottomX.formatValue(x) + ' m')\n )\n\n const heatmapOptions = {\n columns: traceDataArray[0].length,\n rows: traceDataArray.length,\n start: {\n x: CONFIG.opticalFibreDistanceStart,\n y: CONFIG.timeStart - dateOrigin,\n },\n step: {\n x: CONFIG.opticalFibreDistanceStep,\n y: CONFIG.timeStep,\n },\n dataOrder: 'rows'\n }\n const heatmapSeries = chartBottom.addHeatmapGridSeries(heatmapOptions)\n .setPixelInterpolationMode('disabled')\n .invalidateIntensityValues(traceDataArray)\n .setFillStyle(new PalettedFill({\n lookUpProperty: 'value',\n lut\n }))\n .setWireframeStyle(emptyLine)\n .setCursorResultTableFormatter((builder, series, dataPoint) => builder\n .addRow('Intensity:', '', dataPoint.intensity.toFixed(1))\n .addRow('Optical fiber distance:', '', axisBottomX.formatValue(dataPoint.x) + ' m')\n .addRow('Time:', '', axisBottomY.formatValue(dataPoint.y))\n )\n\n axisBottomX.fit(false)\n axisBottomY.fit(false)\n axisTopX.fit(false)\n axisTopY.fit(false)\n\n chartBottom.setPadding({\n bottom: 64\n })\n\n const lutRange = chartBottom.addUIElement(UIElementBuilders.LUTRange)\n .setLUT(lut)\n .setLUTLength(500)\n .setPosition({ x: 50, y: 0 })\n .setOrigin(UIOrigins.CenterBottom)\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n .setBackground(background => background\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n\n})\n","url":null,"readme":"This example is based on a real life usage scenario of _LightningChart JS_ in the field of **Fiber Analysis**.\n\n_Fiber Analysis_ refers to the assessment of fiber quality to analyze attenuation and other fiber optic performance metrics during single point of time or across a time period.\n\nThis example showcases an example dashboard for analyzing fiber properties over a short time period (~30 seconds).\n\nThe metrics are gathered at several locations across the fiber to help spot problem locations (total fibre length is more than 3 kilometers).\n\nThe primary metric, _intensity_, is recorded for each location along fibre (meters) and for various time steps. The _intensity_ value is _abstract_, meaning that it could reflect many different values for different analysis purposes. A common property in fiber metrics to analyse is _Attenuation_.\n\nThe color of each sample is colored in a _heat map grid series_ based on a color lookup table, which makes identifying _hot spots_ convenient (for example, orange is bad, blue is ok).\n\nThe data used in the example is randomly generated each time the example is run.\n","image":"dashboardWaterfall.png"},{"id":"lcjs-example-0508-dashboardMedical","title":"JavaScript Medical Dashboard","tags":["dashboard","xy","line","realtime","ui","datapattern","datacleaning"],"description":"Example of a Medical Dashboard with ECG/EKG, blood pressure, flow volume and oxygen saturation.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/**\n * LightningChart JS example showcasing a medical Dashboard.\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst {\n AxisScrollStrategies,\n AxisTickStrategies,\n AutoCursorModes,\n ColorHEX,\n emptyFill,\n SolidFill,\n emptyLine,\n SolidLine,\n lightningChart,\n synchronizeAxisIntervals,\n translatePoint,\n UIOrigins,\n UIElementBuilders,\n UILayoutBuilders,\n Themes,\n} = lcjs;\n\nconst TIME_DOMAIN = 10 * 1000;\nconst SAMPLE_RATE = 1000; // points per s\n\nfetch(\n document.head.baseURI +\n \"examples/assets/0508/medical-data.json\"\n)\n .then((r) => r.json())\n .then((data) => {\n const { ecg, bloodPressure, bloodVolume, bloodOxygenation } = data;\n\n const channels = [\n {\n shortName: \"ECG/EKG\",\n name: \"Electrocardiogram\",\n dataSet: ecg,\n color: \"#00ff00\",\n yStart: -1955,\n yEnd: 1195,\n },\n {\n shortName: \"NIBP\",\n name: \"Blood pressure\",\n dataSet: bloodPressure,\n color: undefined,\n yStart: 0.475,\n yEnd: 0.795,\n },\n {\n shortName: \"BFV\",\n name: \"Blood flow volume\",\n dataSet: bloodVolume,\n color: undefined,\n yStart: 0.155,\n yEnd: 0.445,\n },\n {\n shortName: \"Sp02\",\n name: \"Blood oxygen saturation\",\n dataSet: bloodOxygenation,\n color: undefined,\n yStart: 0.015,\n yEnd: 0.155,\n },\n ];\n const dashboard = lightningChart()\n .Dashboard({\n numberOfRows: channels.length,\n numberOfColumns: 1,\n disableAnimations: true,\n // theme: Themes.darkGold\n })\n .setRowHeight(0, 0.4)\n .setRowHeight(1, 0.3)\n .setRowHeight(2, 0.2)\n .setRowHeight(3, 0.2);\n\n const chartList = channels.map((channel, i) => {\n const chart = dashboard\n .createChartXY({ rowIndex: i, columnIndex: 0 })\n .setPadding({ bottom: 4, top: 4, right: 200, left: 10 })\n .setMouseInteractions(false)\n .setAutoCursorMode(AutoCursorModes.disabled);\n const axisX = chart.getDefaultAxisX().setMouseInteractions(false);\n const axisY = chart\n .getDefaultAxisY()\n .setMouseInteractions(false)\n .setInterval(channel.yStart, channel.yEnd, false, true)\n .setTickStrategy(AxisTickStrategies.Empty)\n .setStrokeStyle(emptyLine);\n if (i > 0) {\n chart.setTitleFillStyle(emptyFill);\n } else {\n chart.setTitle(\"Medical Dashboard\");\n }\n if (i < channels.length - 1) {\n axisX\n .setTickStrategy(AxisTickStrategies.Time, (ticks) =>\n ticks\n .setMajorTickStyle((majorTicks) =>\n majorTicks\n .setLabelFillStyle(emptyFill)\n .setTickStyle(emptyLine)\n .setTickLength(0)\n .setTickPadding(0)\n )\n .setMinorTickStyle((minorTicks) =>\n minorTicks\n .setLabelFillStyle(emptyFill)\n .setTickStyle(emptyLine)\n .setTickLength(0)\n .setTickPadding(0)\n )\n )\n .setStrokeStyle(emptyLine)\n .setScrollStrategy(undefined);\n } else {\n axisX\n .setTickStrategy(AxisTickStrategies.Time)\n .setInterval(-TIME_DOMAIN, 0)\n .setScrollStrategy(AxisScrollStrategies.progressive);\n }\n return chart;\n });\n\n const uiList = chartList.map((chart, i) => {\n const axisX = chart.getDefaultAxisX();\n const axisY = chart.getDefaultAxisY();\n const channel = channels[i];\n const ui = chart\n .addUIElement(UILayoutBuilders.Column)\n .setBackground((background) =>\n background.setFillStyle(emptyFill).setStrokeStyle(emptyLine)\n )\n .setMouseInteractions(false)\n .dispose();\n\n ui.addElement(UIElementBuilders.TextBox).setText(channel.shortName);\n ui.addElement(UIElementBuilders.TextBox)\n .setText(channel.name)\n .setTextFont((font) => font.setSize(10));\n const labelSampleRate = ui\n .addElement(UIElementBuilders.TextBox)\n .setText(\"\")\n .setTextFont((font) => font.setSize(10));\n\n let labelBpmValue\n if (channel.name === 'Electrocardiogram') {\n const labelBpm = ui\n .addElement(UIElementBuilders.TextBox)\n .setMargin({top: 10})\n .setText(\"BPM\")\n\n labelBpmValue = ui\n .addElement(UIElementBuilders.TextBox)\n .setText(\"\")\n .setTextFont((font) => font.setSize(36));\n }\n\n requestAnimationFrame(() => {\n ui.restore()\n .setPosition(\n translatePoint(\n { x: axisX.getInterval().end, y: axisY.getInterval().end },\n { x: axisX, y: axisY },\n chart.uiScale\n )\n )\n .setOrigin(UIOrigins.LeftTop)\n .setMargin({ left: 10 });\n });\n\n return {\n labelSampleRate,\n labelBpmValue,\n };\n });\n\n synchronizeAxisIntervals(\n ...chartList.map((chart) => chart.getDefaultAxisX())\n );\n\n const seriesList = chartList.map((chart, i) => {\n const channel = channels[i];\n const series = chart\n .addLineSeries({\n dataPattern: {\n pattern: \"ProgressiveX\",\n },\n })\n .setName(channel.name)\n .setDataCleaning({ minDataPointCount: 1000 })\n\n if (channel.color) {\n series.setStrokeStyle(stroke => stroke.setFillStyle(new SolidFill({ color: ColorHEX(channel.color) })))\n }\n return series;\n });\n\n let tSamplePos = window.performance.now();\n let iSampleX = 0;\n const addData = () => {\n const tNow = window.performance.now();\n const seriesNewPoints = seriesList.map((_) => []);\n while (tNow > tSamplePos) {\n const x = tSamplePos;\n for (let i = 0; i < seriesList.length; i += 1) {\n const channel = channels[i]\n const dataSet = channel.dataSet;\n const sample = dataSet[iSampleX % dataSet.length];\n seriesNewPoints[i].push({ x, y: sample });\n\n if (channel.name === 'Electrocardiogram') {\n updateBpm(sample)\n }\n }\n tSamplePos += 1000 / SAMPLE_RATE;\n iSampleX += 1;\n }\n seriesList.forEach((series, i) => series.add(seriesNewPoints[i]));\n channelIncomingDataPointsCount += seriesNewPoints[0].length;\n requestAnimationFrame(addData);\n };\n requestAnimationFrame(addData);\n\n let channelIncomingDataPointsCount = 0;\n let channelIncomingDataPointsLastUpdate = window.performance.now();\n setInterval(() => {\n const tNow = window.performance.now();\n const chDataPointsPerSecond = Math.round(\n (channelIncomingDataPointsCount * 1000) /\n (tNow - channelIncomingDataPointsLastUpdate)\n );\n const bpm = beatsCount * 60 * 1000 / (tNow - tStart) \n\n uiList.forEach((ui, i) => {\n ui.labelSampleRate.setText(`${chDataPointsPerSecond} samples / second`)\n if (ui.labelBpmValue) {\n ui.labelBpmValue.setText(`${Math.round(bpm)}`)\n }\n });\n channelIncomingDataPointsCount = 0;\n channelIncomingDataPointsLastUpdate = tNow;\n }, 2000);\n\n const naiveBeatThreshold = 800\n let tStart = window.performance.now()\n let beatsCount = 0\n const updateBpm = (() => {\n let lastY = 0\n return (newSample) => {\n if (lastY < naiveBeatThreshold && newSample > naiveBeatThreshold) {\n // Beat.\n beatsCount += 1\n }\n lastY = newSample\n }\n })()\n\n });\n","url":null,"readme":"A medical dashboard example with LightningChart JS.\n\nIncludes real-time visualization of four data channels:\n\n- ECG/EKG | electrocardiogram\n- NIBP | Non-invasive blood pressure measurement\n- BFV | Blood flow volume\n- Sp02 | Blood oxygen saturation\n\nThis application has 4 channels each with ~1000 Hz sample rate, adding up to a total of 4 000 data samples per second.\n\nFor LightningChart, this is on the low end of performance capabilities.\nIn 2021, the LightningChart team hosted several comparison studies on web charts performance, one of which was directly targeted at [scrolling multichannel line charts](https://www.arction.com/javascript-charts-performance-comparison/) - exactly this type of application.\n\nThe results were shocking, with LightningChart being over 700 times faster than your average \"high performance\" competitor and being able to handle up to 10 000 000 data points per second while keeping display refresh rate over 30 (which is a very good refresh rate).\n\nIn the context of Medical Dashboards, this would mean that you could even monitor up to 10 000 data sources simultaneously, and/or greatly increase the data precision!\n","image":"dashboardMedical.png"},{"id":"lcjs-example-0509-dashboardRealtimeTrading","title":"JavaScript Real-Time Trading Dashboard","tags":["trading","dashboard","xy","line","realtime","ui","datapattern","datacleaning"],"description":"Next-generation intensive trading application example with LightningChart","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/**\n * Next-generation intensive trading application example with LightningChart.\n *\n * 100 charts, each receive 1000 new data points every second that are immediately displayed in real-time.\n *\n * Live analytics are placed inside each chart, displaying the last Y value and visible value change (%).\n */\n\nconst lcjs = require('@arction/lcjs')\nconst xydata = require('@arction/xydata')\nconst {\n lightningChart,\n emptyLine,\n UIElementBuilders,\n UIBackgrounds,\n emptyFill,\n SolidFill,\n SolidLine,\n ColorRGBA,\n AxisTickStrategies,\n AxisScrollStrategies,\n UILayoutBuilders,\n UIOrigins,\n TimeFormattingFunctions,\n UIDraggingModes,\n MouseStyles,\n Themes,\n} = lcjs\nconst { createProgressiveTraceGenerator } = xydata\n\n// Check whether should display 10x10 dashboard (requires large monitor), or smaller 3x3 dashboard (works on all devices nicely).\nconst queryString = window.location.search\nconst urlParams = new URLSearchParams(queryString)\nconst showFullDashboard = urlParams.get('full') === 'true'\n\nconst COLUMNS = showFullDashboard ? 10 : 3\nconst ROWS = showFullDashboard ? 10 : 3\nconst HISTORYMS = 60 * 1000\n\nconst dashboard = lightningChart()\n .Dashboard({\n numberOfColumns: COLUMNS,\n numberOfRows: ROWS + 1,\n disableAnimations: true,\n // theme: Themes.darkGold\n })\n .setSplitterStyle(new SolidLine({thickness: 0}))\n\nconst uiPanel = dashboard.createUIPanel({columnIndex: 0, rowIndex: 0, columnSpan: COLUMNS})\nconst uiPanelHeightPx = showFullDashboard ? 24 : 64\nconst dashboardHeightPx = dashboard.engine.container.getBoundingClientRect().height\ndashboard.setRowHeight(0, ROWS * uiPanelHeightPx / (dashboardHeightPx - uiPanelHeightPx))\n\nconst chartList = []\nfor (let column = 0; column < COLUMNS; column += 1) {\n for (let row = 0; row < ROWS; row += 1) {\n const chart = dashboard\n .createChartXY({\n columnIndex: column,\n rowIndex: row + 1,\n })\n .setTitleFillStyle(emptyFill)\n .setTitleMarginTop(0)\n .setTitleMarginBottom(0)\n .setPadding(0)\n .setMouseInteractions(false)\n .setAutoCursor((autoCursor) => autoCursor.disposeTickMarkerX().disposeTickMarkerY().setAutoFitStrategy(undefined))\n const axisX = chart\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.Empty)\n .setMouseInteractions(false)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(-HISTORYMS, 0)\n const axisY = chart.getDefaultAxisY().setTickStrategy(AxisTickStrategies.Empty).setMouseInteractions(false)\n chartList.push(chart)\n }\n}\n\n// Add title\nuiPanel\n .addUIElement(UIElementBuilders.TextBox.setBackground(UIBackgrounds.None))\n .setText(`${COLUMNS * ROWS} live trading channels (1 ms resolution) 1 minute history`)\n .setMouseInteractions(false)\n .setPosition({x: 50, y: 100})\n .setOrigin(UIOrigins.CenterTop)\n\nif (! showFullDashboard) {\n // Add button that will display the full 10x10 dashboard (for users with large monitors).\n uiPanel.addUIElement(UIElementBuilders.TextBox)\n .setText('Click here to show full 10x10 dashboard')\n .setPosition({x: 50, y: 100})\n .setOrigin(UIOrigins.CenterTop)\n .setMargin(30)\n .setDraggingMode(UIDraggingModes.notDraggable)\n .setMouseStyle(MouseStyles.Point)\n .onMouseClick(() => {\n // Add '?full = true' to URL and reload page.\n let url = window.location.href\n url += (url.split('?')[1] ? '&':'?') + 'full=true'\n window.location.href = url\n })\n}\n\n// Add chart specific UI elements.\nconst chartUiList = chartList.map((chart) => {\n const uiLayout = chart\n .addUIElement(UILayoutBuilders.Column, {x: chart.uiScale, y: chart.getDefaultAxisY()})\n .setOrigin(UIOrigins.LeftTop)\n .setPosition({ x: 0, y: chart.getDefaultAxisY().getInterval().end })\n .setMouseInteractions(false)\n .setBackground((background) => background.setStrokeStyle(emptyLine))\n chart.getDefaultAxisY().onScaleChange((start, end) => uiLayout.setPosition({ x: 0, y: end }))\n uiLayout\n .addElement(UIElementBuilders.TextBox)\n .setText('< Stock name >')\n .setTextFont((font) => font.setSize(8))\n .setMargin({ bottom: -6 })\n const rowLastValue = uiLayout.addElement(UILayoutBuilders.Row).setMargin({ bottom: -6 })\n const rowChange = uiLayout.addElement(UILayoutBuilders.Row)\n rowLastValue\n .addElement(UIElementBuilders.TextBox)\n .setText('Last value:')\n .setTextFont((font) => font.setSize(8))\n const labelLastValue = rowLastValue\n .addElement(UIElementBuilders.TextBox)\n .setText('')\n .setTextFont((font) => font.setSize(8))\n rowChange\n .addElement(UIElementBuilders.TextBox)\n .setText('Change:')\n .setTextFont((font) => font.setSize(8))\n const labelChange = rowChange\n .addElement(UIElementBuilders.TextBox)\n .setText('')\n .setTextFont((font) => font.setSize(8))\n\n return { labelLastValue, labelChange }\n})\n\nconst seriesList = chartList.map((chart, i) => {\n const series = chart\n .addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' -> every X value is larger than previous one.\n pattern: 'ProgressiveX',\n // regularProgressiveStep: true -> step between every X value is always same (1, 2, 3, ...).\n regularProgressiveStep: true,\n },\n // Pass custom supplied index for automatic series coloring.\n automaticColorIndex: i,\n })\n .setName(`< Stock name >`)\n .setStrokeStyle((stroke) => stroke.setThickness(1))\n .setDataCleaning({\n minDataPointCount: 1000,\n })\n .setCursorResultTableFormatter((builder, _, x, y, dataPoint) =>\n builder\n .addRow(series.getName())\n // Display \"age\" of data point, as time passed since current time.\n .addRow(TimeFormattingFunctions.hhmmssmmm(dataPoint.x - window.performance.now()))\n .addRow('Value: ', series.axisY.formatValue(dataPoint.y)),\n )\n return series\n})\n\n// Generate a couple of progressive XY data sets.\n// For saving test data generation time and memory, some channels will display same data set.\nPromise.all(\n new Array(10).fill(0).map((_) =>\n createProgressiveTraceGenerator()\n .setNumberOfPoints(HISTORYMS)\n .generate()\n .toPromise()\n .then((xyTrace) => {\n // Map generated XY trace data set into a more realistic trading data set.\n const baseLine = 10 + Math.random() * 2000\n const variationAmplitude = baseLine * 0.03\n const yMin = xyTrace.reduce((min, cur) => Math.min(min, cur.y), Number.MAX_SAFE_INTEGER)\n const yMax = xyTrace.reduce((max, cur) => Math.max(max, cur.y), -Number.MAX_SAFE_INTEGER)\n const yIntervalHalf = (yMax - yMin) / 2\n const yTraceBaseline = yMin + yIntervalHalf\n return xyTrace.map((xy) => baseLine + ((xy.y - yTraceBaseline) / yIntervalHalf) * variationAmplitude)\n })\n .then((yList) => {\n // Duplicate data set, reverse it and append to original to get infinitely looping effect.\n yList.push(...yList.slice().reverse())\n return yList\n }),\n ),\n).then((dataSets) => {\n const dataSetLength = dataSets[0].length\n // Pair each series with a random data set.\n const seriesDataPair = seriesList.map((series) => ({\n series,\n dataSet: dataSets[Math.round(Math.random() * (dataSets.length - 1))],\n }))\n // Map series and data set pairs to format where each data set has reference to a list of series that use that data set.\n const dataSetsAndSeries = []\n seriesDataPair.forEach((pair) => {\n const existingItem = dataSetsAndSeries.find((existing) => existing.dataSet === pair.dataSet)\n if (existingItem) {\n existingItem.seriesList.push(pair.series)\n return\n }\n dataSetsAndSeries.push({\n dataSet: pair.dataSet,\n seriesList: [pair.series],\n // Extra array that is used to keep memory of actively visible data points. Used for calculating visible change of Y values.\n visibleDataPoints: [],\n })\n })\n const dataSetsCount = dataSetsAndSeries.length\n\n const initialDataVisibleCount = 30 * 1000\n let lastX = -initialDataVisibleCount\n const pushData = () => {\n const tNow = window.performance.now()\n // For each unique data set, prepare list of new XY points to add.\n const dataSetNewPoints = dataSetsAndSeries.map((_) => [])\n for (let x = lastX + 1; x < tNow; x += 1) {\n let iSample = x % dataSetLength\n while (iSample < 0) iSample += dataSetLength\n for (let iDataSet = 0; iDataSet < dataSetsCount; iDataSet += 1) {\n const y = dataSetsAndSeries[iDataSet].dataSet[iSample]\n dataSetNewPoints[iDataSet].push({ x, y })\n }\n lastX = x\n }\n // Push XY points into series.\n dataSetsAndSeries.forEach((item, i) => {\n const newPoints = dataSetNewPoints[i]\n item.seriesList.forEach((series) => {\n series.add(newPoints)\n })\n\n // Update analytics UI for each chart that uses the same data set.\n const lastValue = item.seriesList[0].axisY.formatValue(newPoints[newPoints.length - 1].y)\n\n // Update list of visible data points.\n // NOTE: push ... syntax is known to cause errors with really large arrays, this is just a bit of extra safety to prevent random crashes when chart is hidden to background and opened after a long time.\n if (newPoints.length < 100000) {\n item.visibleDataPoints.push(...newPoints)\n }\n\n // Update chart UI that displays last value.\n item.seriesList.forEach((series) => {\n const chartUi = chartUiList[chartList.indexOf(series.chart)]\n chartUi.labelLastValue.setText(lastValue)\n })\n })\n requestAnimationFrame(pushData)\n }\n pushData()\n\n // Logic for displaying visible value change for each chart.\n const fillStylePositiveChange = new SolidFill({ color: ColorRGBA(0, 255, 0) })\n const fillStyleNegativeChange = new SolidFill({ color: ColorRGBA(255, 0, 0) })\n const updateVisibleChange = () => {\n dataSetsAndSeries.forEach((item, i) => {\n if (item.visibleDataPoints.length > HISTORYMS) {\n item.visibleDataPoints = item.visibleDataPoints.slice(item.visibleDataPoints.length - HISTORYMS)\n }\n const yStart = item.visibleDataPoints[0].y\n const yEnd = item.visibleDataPoints[item.visibleDataPoints.length - 1].y\n const visibleChange =\n yEnd > yStart ? `${((yEnd / yStart - 1) * 100).toFixed(1)}%` : `-${((1 - yEnd / yStart) * 100).toFixed(1)}%`\n\n item.seriesList.forEach((series) => {\n const chartUi = chartUiList[chartList.indexOf(series.chart)]\n chartUi.labelChange\n .setText(visibleChange)\n .setTextFillStyle(yEnd > yStart ? fillStylePositiveChange : fillStyleNegativeChange)\n })\n })\n }\n setInterval(updateVisibleChange, 2000)\n})\n","url":null,"readme":"This example showcases how LightningChart JS can be used to enable next-generation Fintech chart applications.\n\nAs proven in our [2021 line charts performance comparison](https://www.arction.com/javascript-charts-performance-comparison/), LightningChart JS line charts are **over 700 times faster** than other web charts. Especially in real-time applications LightningChart enables the creation of data visualization applications unlike anything seen before in web pages.\n\nBy default, this example will show a small dashboard that displays the price variation of nine imaginary stock trends in real-time.\n\n**However**, the real treat is activated by pressing the \"Click here to show full 10x10 dashboard\" button inside the chart. This is intended for Desktop users, as the complete application requires quite a bit of space.\n\n\n\nIn its full size, the example shows 100 line charts. Each chart is connected to a real-time data source (random data, doesn't reflect any real stock price), the sampling rate is 1 000 data points per second **for every chart**. This sums up to **100 000** processed data points per second.\n\nIn addition to this, every chart has a little embedded statistical panel which displays the newest price and the price change between the newest and oldest visible price.\n\nIn the previously mentioned performance comparison study we tested this kind of applications with the major manufacturers who claim their charts to be **high-performance oriented** or **the fastest**. The results showed that the wide majority of web charts are not applicable to real-time visualization of even as little as 1 000 data points per second.\n\nWhy not? Because the charts spend too much time processing this amount of data. This can be observed by the web page visibly slowing down, preventing users from interacting with their browser.\n\nTo learn more about LightningChart JS and its Fintech capabilities, here are some potentially interesting links:\n\n- [Ultra Precision Fintech Charts](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0024-ultraPrecisionTradingChart.html) (1 microsecond precision!)\n\n- [LC JS Trading + Indicators (Volume, RSI, SMA, EMA) Showcase with real trading data from alphavantage.co](https://arction.github.io/lcjs-showcase-trading/)\n\n- [Candlestick, Area, DateTime features and more](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0502-dashboardTrading.html)\n\n- [Latest news on LC JS performance](https://www.arction.com/high-performance-javascript-charts/)\n","image":"dashboardRealtimeTrading.png"},{"id":"lcjs-example-0510-dashboardDynamic","title":"JavaScript Dynamic Chart Dashboard","tags":["dashboard","xy","ui"],"description":"Example on how a dynamic chart dashboard can be created with LightningChart JS","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/**\n * Example on how a dynamic chart dashboard can be created with LightningChart JS.\n *\n * The use case is an application where charts can be added and removed at users whim to perform different kinds of analysis within a dynamic application setting.\n *\n * This can be achieved out of the box with LightningChart by placing each chart in its own HTML DIV,\n * but this performs slightly worse than if the charts would be inside a Dashboard component.\n *\n * By using a Dashboard, the rendering engine for all Charts can be reused leading to much more faster redrawing and most importantly initial loading speed.\n *\n * Generally, LC JS Dashboards are static sized (for example, 2x2 grid) and size can't be changed afterwards.\n * However, with some creative coding this limitation can be worked around by preallocating the Dashboard for some number of \"maximum charts\"\n * and then programmatically resizing the Dashboard cells which actually have charts in them.\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst xydata = require(\"@arction/xydata\");\nconst { lightningChart, emptyLine, translatePoint, Themes } = lcjs;\nconst { createProgressiveTraceGenerator } = xydata;\n\nconst exampleContainer = document.getElementById(\"chart\") || document.body;\n\nconst mainDiv = document.createElement(\"div\");\nexampleContainer.append(mainDiv);\nmainDiv.style.position = \"absolute\";\nmainDiv.style.width = \"14.5%\";\nmainDiv.style.height = \"auto\";\nmainDiv.style.display = \"flex\";\nmainDiv.style.justifyContent = \"center\";\nmainDiv.style.flexDirection = \"row\";\nmainDiv.style.color = \"black\";\nmainDiv.style.zIndex = \"1\";\n\nconst uiDiv = document.createElement(\"div\");\nmainDiv.append(uiDiv);\nuiDiv.style.display = \"flex\";\nuiDiv.style.flexDirection = \"column\";\nuiDiv.style.backgroundColor = \"transparent\";\nuiDiv.style.color =\n exampleContainer.parentElement &&\n window.getComputedStyle(exampleContainer.parentElement).color;\n\nconst uiDivTitle = document.createElement(\"span\");\nuiDiv.append(uiDivTitle);\nuiDivTitle.innerHTML = \"Click to add graph\";\n\n(async () => {\n for (let i = 0; i < 6; i += 1) {\n const label = `Measurement ${new Date(\n Date.now() - i * 24 * 60 * 60 * 1000\n ).toLocaleDateString()}`;\n const data = await createProgressiveTraceGenerator()\n .setNumberOfPoints(200)\n .generate()\n .toPromise();\n\n const buttonAddChart = document.createElement(\"button\");\n uiDiv.append(buttonAddChart);\n buttonAddChart.innerHTML = label;\n buttonAddChart.style.margin = \"4px 0\";\n buttonAddChart.addEventListener(\"click\", (e) => {\n addGraph(label, data);\n });\n if (i < 3) addGraph(label, data);\n }\n})();\n\n// NOTE: When this is exceeded dashboard would have to be recreated again with all charts and data.\n// There is no existing identified limit for this value though.\nconst maxCellsCount = 5;\n\nconst dashboard = lightningChart()\n .Dashboard({\n numberOfColumns: 2,\n numberOfRows: maxCellsCount,\n disableAnimations: true,\n // theme: Themes.darkGold\n })\n .setSplitterStyle(emptyLine)\n .setSplitterStyleHighlight(emptyLine)\n .setColumnWidth(0, 1)\n .setColumnWidth(1, 6);\n\nconst charts = [];\n\nconst updateDashboardRowHeights = () => {\n for (let row = 0; row < maxCellsCount; row += 1) {\n dashboard.setRowHeight(row, 0.00001);\n }\n charts.forEach((chart) => dashboard.setRowHeight(chart.row, 1));\n};\n\nconst addGraph = (name, data) => {\n const freeRow = new Array(maxCellsCount)\n .fill(0)\n .findIndex(\n (_, row) => charts.find((item) => item.row === row) === undefined\n );\n if (freeRow < 0) {\n // Dashboard has no more row slots.\n alert(`Dashboard is not allocated for more than ${maxCellsCount} graphs`);\n return;\n }\n\n const chart = dashboard\n .createChartXY({\n columnIndex: 1,\n columnSpan: 1,\n rowIndex: freeRow,\n })\n .setTitle(name)\n .setTitleFont((font) => font.setSize(12))\n .setTitleMarginBottom(0)\n .setTitleMarginTop(0)\n .setPadding({ top: 0 });\n\n const buttonRemoveChart = document.createElement(\"button\");\n document.body.append(buttonRemoveChart);\n buttonRemoveChart.innerHTML = \"X\";\n buttonRemoveChart.style.position = \"absolute\";\n buttonRemoveChart.style.zIndex = \"1\";\n\n buttonRemoveChart.addEventListener(\"click\", (e) => {\n chart.dispose();\n document.body.removeChild(buttonRemoveChart);\n charts.splice(\n charts.findIndex((item) => item.chart === chart),\n 1\n );\n updateDashboardRowHeights();\n charts.forEach((item) => item.updateRemoveButtonPosition());\n });\n\n const updateRemoveButtonPosition = () => {\n const posChartEngine = translatePoint(\n { x: 100, y: 100 },\n chart.uiScale,\n chart.engine.scale\n );\n const posChart = chart.engine.engineLocation2Client(\n posChartEngine.x,\n posChartEngine.y\n );\n buttonRemoveChart.style.left = `${\n posChart.x - buttonRemoveChart.offsetWidth\n }px`;\n buttonRemoveChart.style.top = `${posChart.y}px`;\n };\n\n const series = chart\n .addPointLineSeries({\n dataPattern: { pattern: \"ProgressiveX\" },\n })\n .setName(name)\n .add(data);\n\n charts.push({\n row: freeRow,\n chart,\n updateRemoveButtonPosition,\n });\n updateDashboardRowHeights();\n charts.forEach((item) => item.updateRemoveButtonPosition());\n};\n\nwindow.addEventListener(\"resize\", () => {\n requestAnimationFrame(() => {\n charts.forEach((item) => item.updateRemoveButtonPosition());\n });\n});\n","url":null,"readme":"\nExample on how a dynamic chart dashboard can be created with LightningChart JS.\n\nThe use case is an application where charts can be added and removed at users whim to perform different kinds of analysis within a dynamic application setting.\n\nThis can be achieved out of the box with LightningChart by placing each chart in its own HTML DIV in same way as most web charts on the market. However, the purpose of this example is to show how to utilize the LightningChart JS Dashboard component to achieve the same purposes with the absolute best performance.\n\nThe performance problem with placing each chart in its own DIV is that all plotting preparation has to be done separately. LC JS Dashboard was specifically designed to be the answer to this problem - it allows efficient sharing of plotting resources and processes to greatly increase the loading speed of charts (with 10 charts, up to 100% faster) as well as run-time performance.\n\nGenerally, LC JS Dashboards are static sized (for example, 2x2 grid) and size can't be changed afterwards. However, with some creative coding this limitation can be worked around by preallocating the Dashboard for some number of \"maximum charts\" and then programmatically resizing the Dashboard cells which actually have charts in them, which is exactly what we do in this example.","image":"dashboardDynamic.png"},{"id":"lcjs-example-0550-zoomBandChart","title":"JavaScript Zoom Band Chart","tags":["dashboard","ohlc","line","point","zoom band","range","area"],"description":"This example shows the creation of a Zoom Band Chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example that showcases a simple XY line series.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n LegendBoxBuilders,\n Themes\n} = lcjs\n\n// Extract required parts from XYData Generator.\nconst {\n createProgressiveTraceGenerator,\n createOHLCGenerator,\n createProgressiveRandomGenerator\n} = require('@arction/xydata')\n\n// Create a Dashboard, with a single column and two rows.\nconst dashboard = lightningChart().Dashboard({\n // theme: Themes.darkGold \n numberOfColumns: 1,\n numberOfRows: 2\n})\n // Set the row height for the top Cell in Dashboard.\n // As the bottom row is default (1), the top row height will be 3/4 of the\n // available Dashboard height.\n .setRowHeight(0, 3)\n\n// Add XY Chart to top Cell in Dashboard.\nconst chart = dashboard.createChartXY({\n columnIndex: 0,\n columnSpan: 1,\n rowIndex: 0,\n rowSpan: 1\n})\n .setTitle('')\n\n// Add Zoom Band Chart to bottom Cell in Dashboard.\nconst zoomBandChart = dashboard.createZoomBandChart({\n columnIndex: 0,\n columnSpan: 1,\n rowIndex: 1,\n rowSpan: 1,\n // Specify the Axis for the Zoom Band Chart to follow.\n // The Zoom Band Chart will imitate all Series present in that Axis.\n axis: chart.getDefaultAxisX()\n})\n\n// Do not animate Y Axis Scale changes on either Charts.\nchart.getDefaultAxisY()\n .setAnimationScroll(undefined)\nzoomBandChart.getDefaultAxisY()\n .setAnimationScroll(undefined)\nzoomBandChart.band.setValueStart(300)\nzoomBandChart.band.setValueEnd(500)\n\n// Add different Series to the XY Chart.\nconst line = chart.addLineSeries()\nconst ohlc = chart.addOHLCSeries()\nconst points = chart.addPointSeries()\n .setPointSize(2)\nconst areaRange = chart.addAreaRangeSeries()\n\n// Fill the Line Series with arbitrary data.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(1000)\n .generate()\n .toPromise()\n .then((data) => {\n // Offset the Y value of each point, then push to the Series.\n line.add(data.map((point) => ({ x: point.x, y: point.y * .1 + 100 })))\n })\n\n// Fill the OHLC Series with arbitrary data.\ncreateOHLCGenerator()\n .setNumberOfPoints(1000)\n .generate()\n .toPromise()\n .then((data) => {\n ohlc.add(data)\n })\n\n// Fill the Point Series with arbitrary data.\ncreateProgressiveRandomGenerator()\n .setNumberOfPoints(1000)\n .generate()\n .toPromise()\n .then((data) => {\n // Offset the Y value of each point, then push to the Series.\n points.add(data.map((point) => ({ x: point.x, y: point.y * 5 + 95 })))\n })\n\n// Fill the Area Series with arbitrary data. \nPromise.all([\n createProgressiveRandomGenerator()\n .setNumberOfPoints(1000)\n .generate()\n .toPromise(),\n createProgressiveRandomGenerator()\n .setNumberOfPoints(1000)\n .generate()\n .toPromise()\n]).then((data) => {\n // Offset the high and low values for each point, then push to the Series.\n areaRange.add(data[0].map((high, i) => ({\n position: high.x,\n high: high.y + 92,\n low: data[1][i].y + 90\n })))\n})\n\n// Add LegendBox to the XY Chart. Note that hiding a Series in XY Chart will also\n// hide corresponding Series in the Zoom Band Chart.\nchart.addLegendBox(LegendBoxBuilders.VerticalLegendBox)\n .add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n","url":null,"readme":"This example shows the basic usage of a Zoom Band Chart.\n\nThe Zoom Band Chart is attached to an Axis of a separate XY Chart. It will then imitate the Series present in the attached Axis and display them accordingly. The band in Zoom Band Chart can be used to change the view in the XY Chart, making it an easy way to inspect the Series in the Chart.\n\nWhen attaching to an X Axis, the Zoom Band Chart should be placed in a row either above or below the XY Chart it is attached to.\nWhen attaching to a Y Axis, the Zoom Band Chart should be placed in a column next to the XY Chart it is attached to.\n\nThe Zoom Band Chart can only be created as a part of a Dashboard.\n\nThe Zoom Band Chart can be created with few simple lines of code:\n\n```javascript\n// Create a new Dashboard with one column and two rows.\nconst dashboard = lightningChart().Dashboard( {\n numberOfColumns: 1,\n numberOfRows: 2\n} )\n\n// Create a new ChartXY inside the Dashboard.\nconst chart = dashboard.createChartXY( {\n columnIndex: 0,\n columnSpan: 1,\n rowIndex: 0,\n rowSpan: 1\n} )\n\n// Create a new Zoom Band Chart inside the Dashboard, and attach to the X Axis of the XY Chart created before.\nconst zoomBandChart = dashboard.createZoomBandChart( {\n columnIndex: 0,\n columnSpan: 1,\n rowIndex: 1,\n rowSpan: 1,\n axis: chart.getDefaultAxisX()\n} )\n```\n\nThe band of the Zoom Band Chart can be modified by using *ZoomBandChart.band*:\n\n```javascript\n// Change the color of the Band.\nzoomBandChart.band.setFillStyle( new SolidFill( { color: ColorHEX( '#57a2' ) } ) )\n```\n","image":"zoomBandChart.png"},{"id":"lcjs-example-0600-boxPlot","title":"JavaScript Box and Whiskers Chart","tags":["box","whiskers","xy","point","bar","column"],"description":"Example creates a traditional Box and Whiskers Chart using ChartXY, BoxSeries and PointSeries for outliers.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example that showcases the creation and styling of box series.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n emptyTick,\n ColorHEX,\n SolidFill,\n SolidLine,\n AxisTickStrategies,\n AutoCursorModes,\n PointShape,\n UIElementBuilders,\n Themes\n} = lcjs\n\n// ----- Define data for application -----\nconst allData = [\n {\n name: 'Software developer',\n data: {\n lowerExtreme: 17.5,\n lowerQuartile: 19.6,\n median: 21.2,\n upperQuartile: 28.5,\n upperExtreme: 48.1,\n outliers: [\n 50.1\n ]\n }\n },\n {\n name: 'Cashier',\n data: {\n lowerExtreme: 14.0,\n lowerQuartile: 19.5,\n median: 20.1,\n upperQuartile: 26.7,\n upperExtreme: 41.6,\n outliers: [\n 52.2,\n 59.9\n ]\n }\n },\n {\n name: 'Janitor',\n data: {\n lowerExtreme: 15.2,\n lowerQuartile: 18.5,\n median: 22.7,\n upperQuartile: 34.1,\n upperExtreme: 41.0,\n outliers: []\n }\n }\n]\n\n// ----- Create a XY Chart -----\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Age distribution across professions')\n // Disable interactions.\n .setAutoCursorMode(AutoCursorModes.disabled)\n .setMouseInteractions(false)\n\n// ----- Setup axes -----\nconst axisX = chart.getDefaultAxisX()\n .setTitle('Profession')\n // No default ticks.\n .setTickStrategy(AxisTickStrategies.Empty)\n // Disable interactions.\n .setMouseInteractions(false)\n\n// Style the default Y Axis\nconst axisY = chart.getDefaultAxisY()\n .setTitle('Age')\n // Set Y-view manually.\n .setScrollStrategy(undefined)\n .setInterval(10, 63)\n // Disable interactions.\n .setMouseInteractions(false)\n\n// ----- Map over per each data item -----\n\nallData.forEach((profession, i) => {\n const data = profession.data\n // ----- Create series for rendering this data item -----\n // Create BoxSeries.\n const boxSeries = chart.addBoxSeries()\n .setDefaultStyle((figure) => figure\n .setBodyWidth(0.70)\n .setTailWidth(0.70)\n )\n\n // Create PointSeries for outliers.\n const pointSeries = chart.addPointSeries({\n pointShape: PointShape.Circle\n })\n .setPointSize(20)\n\n // ----- Setup shared highlighting between box and point series -----\n boxSeries.onHover((_, cp) => pointSeries.setHighlighted(cp !== undefined))\n pointSeries.onHover((_, cp) => boxSeries.setHighlighted(cp !== undefined))\n\n // ----- Compute X positions for BoxFigure -----\n const start = i * 1\n const end = start + 1\n const middle = (start + end) / 2\n\n // ----- Render BoxFigure -----\n boxSeries.add({\n start,\n end,\n lowerExtreme: data.lowerExtreme,\n lowerQuartile: data.lowerQuartile,\n median: data.median,\n upperQuartile: data.upperQuartile,\n upperExtreme: data.upperExtreme,\n })\n\n // ----- Render outliers -----\n data.outliers.forEach((outlier) => {\n pointSeries.add({\n x: middle,\n y: outlier\n })\n })\n\n // ----- Create CustomTick on X-Axis for displaying name of profession -----\n axisX.addCustomTick(UIElementBuilders.AxisTick)\n .setValue(middle)\n .setTextFormatter(() => profession.name)\n .setGridStrokeLength(0)\n})\n","url":null,"readme":"Example creates a traditional *Box and Whiskers Chart* using *ChartXY*, *BoxSeries* and *PointSeries* for outliers.\n\n*Box and Whiskers Chart* provides a compact way of visually displaying distribution of data through *quartiles*.\n\n## Anatomy\n\nThe lines extending parallel from the boxes are known as the \"whiskers\", which are used to indicate variability outside the upper and lower quartiles.\n\n*Outliers* are sometimes drawn as individual dots that are in-line with the whiskers.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nHere are the types of observations one can make from viewing a *Box And Whiskers Chart*:\n\n- What the key values are, such as: average, median, 25th percentile etc.\n- If there are any *outliers* and what their values are.\n- Is the data symmetrical.\n- How tightly is the data grouped.\n- If the data is skewed and if so, in what direction.\n","image":"boxPlot.png"},{"id":"lcjs-example-0601-boxPlotAndViolin","title":"JavaScript Box And Violin Chart","tags":["box","violin","area","xy","legendbox"],"description":"This example shows usage of BoxSeries in extravagant manner.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example that showcases usage of BoxSeries and RangeSeries to show some made-up statistical graphs.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n emptyLine,\n lightningChart,\n yDimensionStrategy,\n LegendBoxBuilders,\n AxisScrollStrategies,\n AxisTickStrategies,\n AutoCursorModes,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveFunctionGenerator\n} = require('@arction/xydata')\n\n// Utilities for graphing distribution functions.\n//#region\nconst cumulativeDistribution = (\n probabilityDistributionFunction,\n rangeMin,\n rangeMax,\n step\n) => {\n // Simulate values of respective probability density function.\n const probabilityValues = []\n for (let x = rangeMin; x <= rangeMax; x += step)\n probabilityValues.push(probabilityDistributionFunction(x))\n // Normalize probability values and push them to a cached array.\n const probabilitySum = probabilityValues.reduce((prev, cur) => prev + cur, 0)\n const values = []\n let accumulatedNormProb = 0\n for (const probabilityValue of probabilityValues) {\n const normalizedprobabilityValue = probabilityValue / probabilitySum\n accumulatedNormProb += normalizedprobabilityValue\n values.push(accumulatedNormProb)\n }\n // Return function that returns the closest value (by x) from the cached 'values' array.\n return (x) => {\n const xAsIndex = (x - rangeMin) / (rangeMax - rangeMin) * ((rangeMax - rangeMin) / step)\n // Pick closest index (left/right) that exists\n const closestIndex = Math.min(Math.max(Math.round(xAsIndex), 0), values.length - 1)\n return values[closestIndex]\n }\n}\nconst findQuartileX = (\n yToLookFor,\n cumulativeDistributionFunction,\n rangeMin,\n rangeMax,\n step\n) => {\n // Iterate over possible 'X' values and pick the one where resulting 'Y' is closest to 'yToLookFor'\n let bestResult\n for (let x = rangeMin; x <= rangeMax; x += step) {\n const y = cumulativeDistributionFunction(x)\n const delta = Math.abs(y - yToLookFor)\n if (bestResult === undefined || delta < bestResult.delta)\n bestResult = { x, delta }\n else if (bestResult !== undefined && delta > bestResult.delta)\n break\n }\n return bestResult.x\n}\nconst probabilityDistribution = (mean, variance) =>\n (x) =>\n (1 / (variance * Math.sqrt(2 * Math.PI))) * Math.pow(Math.E, -Math.pow((x - mean), 2) / (2 * variance * variance))\n//#endregion\n\n// Make chart with series graphing standard probability density and cumulative distribution functions.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold \n})\n .setTitle('Probability distribution + Simulated accumulation and BoxSeries')\n // Set auto-cursor mode to 'onHover'\n .setAutoCursorMode(AutoCursorModes.onHover)\n .setAutoCursor((cursor) => cursor\n .setResultTableAutoTextStyle(false)\n .setTickMarkerXAutoTextStyle(false)\n .setTickMarkerYAutoTextStyle(false)\n )\n .setPadding({ right: 20 })\n\nconst xBounds = { min: -4, max: 4 }\nconst step = 0.02\n// Setup axes.\nconst axisDistribution = chart.getDefaultAxisY()\nconst axisNormalized = chart.addAxisY()\nconst axisX = chart.getDefaultAxisX()\n .setInterval(xBounds.min, xBounds.max)\n .setScrollStrategy(undefined)\n\n// Set up the Distribution Axis.\naxisDistribution\n .setTitle('Distribution function')\n .setScrollStrategy(AxisScrollStrategies.expansion)\n // Modify the TickStrategy to remove gridLines from this Y Axis.\n .setTickStrategy(\n // Use Numeric TickStrategy as base.\n AxisTickStrategies.Numeric,\n // Use mutator to modify the TickStrategy.\n tickStrategy => tickStrategy\n // Modify Major Tick Style by using a mutator.\n .setMajorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n // Modify Minor Tick Style by using a mutator.\n .setMinorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n )\n\n// Set up the Normalized Axis.\naxisNormalized\n .setTitle('Accumulated distribution (%)')\n .setInterval(0, 1)\n .setScrollStrategy(undefined)\n // Modify the TickStrategy to remove gridLines from this Y Axis.\n .setTickStrategy(\n // Use Numeric TickStrategy as base.\n AxisTickStrategies.Numeric,\n // Use mutator to modify the TickStrategy.\n tickStrategy => tickStrategy\n // Modify Major Tick Style by using a mutator.\n .setMajorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n // Modify Minor Tick Style by using a mutator.\n .setMinorTickStyle(\n tickStyle => tickStyle\n .setGridStrokeStyle(emptyLine)\n )\n )\n\n// Cumulative distribution.\nconst cumulativeDistributionSeries = chart.addAreaSeries({ yAxis: axisNormalized })\n .setName('Simulated Cumulative Distribution')\n\n// Probability distribution.\nconst probabilityDistributionSeries = chart.addAreaSeries({ yAxis: axisDistribution })\n .setName('Probability Distribution')\n\n// 'Violin' series.\nconst violinSeries = chart.addAreaRangeSeries({ yAxis: axisDistribution })\n .setName('Violin')\n\n// Box series.\nconst boxSeries = chart.addBoxSeries({ yAxis: axisDistribution, dimensionStrategy: yDimensionStrategy })\n .setName('Box')\n\n// Drawing logic\n//#region\nconst graphDistribution = (mean, variance) => {\n // Clear points from series.\n cumulativeDistributionSeries.clear()\n probabilityDistributionSeries.clear()\n boxSeries.clear()\n violinSeries.clear()\n\n // Generate and stream points.\n const probabilityDistributionFunction = probabilityDistribution(mean, variance)\n const cumulativeDistributionFunction = cumulativeDistribution(probabilityDistributionFunction, xBounds.min, xBounds.max, step)\n const streamDuration = 1500\n const streamInterval = 30\n\n // Reset interval if user isn't up to something.\n if (!axisDistribution.isStopped())\n axisDistribution.setInterval(0, 1.0)\n\n createProgressiveFunctionGenerator()\n .setSamplingFunction(cumulativeDistributionFunction)\n .setStart(xBounds.min)\n .setEnd(xBounds.max)\n .setStep(step)\n .generate()\n .setStreamBatchSize(1000 * (xBounds.max - xBounds.min) / (step * streamInterval * streamDuration))\n .setStreamInterval(streamInterval)\n .toStream()\n .forEach((point) => cumulativeDistributionSeries.add(point))\n createProgressiveFunctionGenerator()\n .setSamplingFunction(probabilityDistributionFunction)\n .setStart(xBounds.min)\n .setEnd(xBounds.max)\n .setStep(step)\n .generate()\n .setStreamBatchSize(1000 * (xBounds.max - xBounds.min) / (step * streamInterval * streamDuration))\n .setStreamInterval(streamInterval)\n .toStream()\n .forEach((point) => {\n probabilityDistributionSeries.add(point)\n if (point.y >= 0.001)\n // Add mirrored area-point to violin point\n violinSeries.add({\n position: point.x,\n high: 1.0 + point.y / 2,\n low: 1.0 - point.y / 2\n })\n })\n\n // Add box figure after streaming points.\n setTimeout(() => {\n // Find quartile values using cumulative distribution function.\n const q1 = findQuartileX(0.25, cumulativeDistributionFunction, xBounds.min, xBounds.max, step)\n const q2 = findQuartileX(0.50, cumulativeDistributionFunction, xBounds.min, xBounds.max, step)\n const q3 = findQuartileX(0.75, cumulativeDistributionFunction, xBounds.min, xBounds.max, step)\n const iqr = q3 - q1\n const boxSeriesDimensions = {\n // Purely visual 'Y' -dimensions\n start: 0.90,\n end: 1.10,\n // Actual data -dimensions along 'X' -axis\n lowerExtreme: q1 - 1.5 * iqr,\n lowerQuartile: q1,\n median: q2,\n upperQuartile: q3,\n upperExtreme: q3 + 1.5 * iqr\n }\n boxSeries.add(boxSeriesDimensions)\n }, streamDuration)\n}\n//#endregion\n\ngraphDistribution(0, 1)\n\n// Add LegendBox as part of chart.\nconst legend = chart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox )\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\nlegend.add(chart)\n\ncumulativeDistributionSeries.setCursorResultTableFormatter((tableBuilder, rangeSeries, position, high, low) => {\n const x = (position.toFixed(2) == '-0.00') ? '0.00' : position.toFixed(2);\n return tableBuilder\n .addRow('Simulated Cumulative Distribution')\n .addRow('Position ' + x)\n .addRow('High ' + high.toFixed(2))\n .addRow('Base ' + low.toFixed(2))\n})\nprobabilityDistributionSeries.setCursorResultTableFormatter((tableBuilder, rangeSeries, position, high, low) => {\n const x = (position.toFixed(2) == '-0.00') ? '0.00' : position.toFixed(2);\n return tableBuilder\n .addRow('Probability Distribution')\n .addRow('Position ' + x)\n .addRow('Value ' + high.toFixed(2))\n .addRow('Base ' + low.toFixed(2))\n})\nviolinSeries.setCursorResultTableFormatter((tableBuilder, rangeSeries, position, high, low) => {\n const x = (position.toFixed(2) == '-0.00') ? '0.00' : position.toFixed(2);\n return tableBuilder\n .addRow('Violin')\n .addRow('Position ' + x)\n .addRow('Value ' + high.toFixed(2))\n .addRow('Low ' + low.toFixed(2))\n})\n","url":null,"readme":"This example shows usage of BoxSeries in extravagant manner.\n","image":"boxPlotAndViolin.png"},{"id":"lcjs-example-0700-markers","title":"JavaScript Markers","tags":["xy","marker","ui","line"],"description":"This example shows usage of different Markers of the ChartXY environment.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases different XY Markers.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AutoCursorModes,\n UIVisibilityModes,\n MarkerBuilders,\n UIBackgrounds,\n UIDirections,\n UIOrigins,\n UIElementBuilders,\n UIDraggingModes,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\nconst chartTitle = 'Markers'\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold \n})\n .setTitle(chartTitle)\n // Disable AutoCursor just for focusing on Markers.\n .setAutoCursorMode(AutoCursorModes.disabled)\n // Preventing ResultTable from getting cut at the edge\n .setPadding({\n right: 50\n })\n\n// Add a line series.\nconst series = chart.addLineSeries()\n\n// Generate random points using 'xydata'-library.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(100)\n .generate()\n .toPromise()\n .then(data => {\n const axisYAvg = (data[0].y + data[data.length - 1].y) / 2;\n series.add(data)\n // ----- ChartMarker -----\n\n // Add a ChartMarker to the chart.\n const chartMarker = chart.addChartMarkerXY()\n .setPosition({ x: 60, y: axisYAvg })\n\n // Style ChartMarker.\n chartMarker\n .setResultTableVisibility(UIVisibilityModes.always)\n .setResultTable((table) => table\n .setContent([\n ['ChartMarker']\n ])\n )\n .setGridStrokeXVisibility(UIVisibilityModes.whenDragged)\n .setGridStrokeYVisibility(UIVisibilityModes.whenDragged)\n .setTickMarkerXVisibility(UIVisibilityModes.whenDragged)\n .setTickMarkerYVisibility(UIVisibilityModes.whenDragged)\n })\n\n// ----- SeriesMarker -----\n\n// Create a builder for SeriesMarker to allow for full modification of its structure.\nconst SeriesMarkerBuilder = MarkerBuilders.XY\n .setPointMarker(UIBackgrounds.Circle)\n .setResultTableBackground(UIBackgrounds.Pointer)\n .addStyler(marker => marker\n .setPointMarker(point => point\n .setSize({ x: 5, y: 5 })\n )\n .setResultTable(table => table\n .setOrigin(UIOrigins.CenterBottom)\n .setMargin({ bottom: 0 })\n .setBackground(arrow => arrow\n .setDirection(UIDirections.Down)\n .setPointerAngle(80)\n .setPointerLength(20)\n )\n )\n .setGridStrokeXCut(true)\n .setAutoFitStrategy(undefined)\n )\n\n// Add a SeriesMarker to the series.\nconst seriesMarker = series.addMarker(SeriesMarkerBuilder)\n .setPosition({ x: 50, y: 0 })\n\n// Currently the only way to affect the text of Markers ResultTables,\n// is to completely override the series parser for it.\nseries.setCursorResultTableFormatter((tableBuilder, series, x, y) => tableBuilder\n .addRow('SeriesMarker')\n .addRow('X', x.toFixed(1))\n .addRow('Y', y.toFixed(1))\n)\n// ... However, this will also apply to AutoCursor.\n\n// Add download button to save chart frame\nchart.addUIElement(UIElementBuilders.ButtonBox)\n .setPosition({ x: 99, y: 99 })\n .setOrigin(UIOrigins.RightTop)\n .setText('Download PNG Image')\n .setPadding({ top: 5, right: 20, bottom: 5, left: 20 })\n .setButtonOffSize(0)\n .setButtonOnSize(0)\n .setDraggingMode(UIDraggingModes.notDraggable)\n .onMouseClick((event) => {\n chart.saveToFile(chartTitle + ' - Screenshot')\n })\n","url":null,"readme":"This example shows usage of different Markers of the ChartXY environment.\nMarkers are custom UI-elements that can be used to draw custom cursors from user side. There are two types of Markers:\n\n## ChartMarker\n\nThis type of Marker is placed along two arbitrary axes belonging to a ChartXY. It is positioned with axis values, and will look exactly like an AutoCursor. It also has the same capabilities as one - only difference being that it isn't automatically positioned and hidden when needed, users have full power over this logic.\n\n## SeriesMarker\n\nSeriesMarkers are a part of certain series (line-series, OHLC, ...?), that can be created using series-method: *addMarker*. Once again, the SeriesMarker doesn't look any different from other Markers, the only logic which it adds is that it automatically latches to the nearest data-point of its owning series, from its current location (which can be set using method: *setPosition*)\n","image":"markers.png"},{"id":"lcjs-example-0701-bandsConstantlines","title":"JavaScript Chart Bands and Constant lines","tags":["xy","band","constantline","line"],"description":"This example shows usage of Bands and ConstantLines in XY Charts.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases basic usage of Bands and Constantlines.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n Themes\n} = lcjs\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\nconst chartTitle = 'Bands and Constantlines'\n\n// Create a XY Chart.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle(chartTitle)\n\n// Add a line series.\nconst series = chart.addLineSeries()\n\n// Generate random progressive points using 'xydata'-library.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(100)\n .generate()\n .toPromise()\n .then(data => {\n series.add(data)\n })\n\n// Get the default X and Y Axis\nconst xAxis = chart.getDefaultAxisX()\nconst yAxis = chart.getDefaultAxisY()\n // Set the interval for Y Axis.\n .setInterval(-10, 10, true, true)\n\n// Add a Constantline to the X Axis\nconst xAxisConstantline = xAxis.addConstantLine()\n// Position the Constantline in the Axis Scale\nxAxisConstantline.setValue(80)\n// The name of the Constantline will be shown in the LegendBox\nxAxisConstantline.setName('X Axis Constantline')\n\n// Add a Band to the X Axis\nconst xAxisBand = xAxis.addBand()\n// Set the start and end values of the Band.\nxAxisBand\n .setValueStart(10)\n .setValueEnd(25)\n // Set the name of the Band\n .setName('X Axis Band')\n\n// Add Band and ConstantLine to the Y Axis\n\n// If 'false' is given as argument here, the Constantline will be rendered behind\n// all the Series in the Chart.\nconst yAxisConstantLine = yAxis.addConstantLine(false)\nyAxisConstantLine.setName('Y Axis Constantline')\n// Giving 'false' as argument here makes sure the Band is rendered behind all\n// the Series in the Chart.\nconst yAxisBand = yAxis.addBand(false)\nyAxisBand.setName('Y Axis Band')\n\n// Position the Y Axis ConstantLine along the visible Scale of the Axis.\nyAxisConstantLine.setValue(9)\n\n// Position the Y Axis Band along the visible Scale of the Axis.\nyAxisBand\n .setValueEnd(2)\n .setValueStart(-3)\n\n// Add a LegendBox, add the Chart in it.\nchart.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart)\n","url":null,"readme":"Also known as Highlighters.\n\nThis example shows the basic usage of Bands and Constantlines in a XY Chart.\n\nBands and Constantlines are attached to the Axes of a XY Chart.\nBands and Constantlines can be interacted with mouse and touch controls.\n\nDepending where you touch on the band, you can move either end of the Band separately by touching the edge of the Band, or you can move the entire Band by touching the center of the Band.\n\nThey can be easily added to an Axis:\n\n```javascript\n// Add a Constantline to an Axis\nconst constantline = axis.addConstantLine()\n\n//Add a Band to an Axis\nconst band = axis.addBand()\n\n// By default, the Band and Constantline are placed above all Series in the Chart.\n// They can also be placed below all Series by passing *true* as argument when creating one.\nconst constantLline = axis.addConstantLine(false)\n\nconst band = axis.addBand(false)\n```\n\n## Positioning\n\nThe position of a Constantline can be set using the *setValue()* API:\n\n```javascript\n// Set the position of a Constantline\nconstantline.setValue( 50 )\n```\n\nThe position and size of a Band is set by using the *setValueStart()* and *setValueEnd()* API:\n\n```javascript\n// Set the start value of a Band\nband.setValueStart( 20 )\n// Set the end value of a Band\nband.setValueEnd( 40 )\n```\n\n## Styling\n\nConstantlines can be styled by using the *setStrokeStyle()* API:\n\n```javascript\n// Style the Constantline\nconstantline.setStrokeStyle(\n new SolidLine({\n thickness: 5\n fillStyle: new SolidFill({\n color: ColorHEX('#fff')\n })\n })\n)\n```\n\nBands can be styled by using the *setStrokeStyle()* and *setFillStyle()* API accordingly:\n\n```javascript\n// Style the Band border\nband.setStrokeStyle(\n new SolidLine({\n thickness: 5\n fillStyle: new SolidFill({\n color: ColorHEX('#fff')\n })\n })\n)\n// Style the Band's fillStyle\nband.setFillStyle(\n new SolidFill({\n color: ColorHEX('#fff')\n })\n)\n```\n","image":"bandsConstantLines.png"},{"id":"lcjs-example-0702-customCursor","title":"JavaScript Custom Cursor Chart","tags":["xy","cursor","ui","customtick"],"description":"Example showcasing custom cursor implementation with LCJS UI","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases creation of a custom cursor in ChartXY.\n *\n * This variant uses LCJS UI components to display the cursor components. The cursor logic is also implemented using LCJS events and methods.\n */\n\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Import data-generators from 'xydata'-library.\nconst { createProgressiveTraceGenerator } = require(\"@arction/xydata\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AutoCursorModes,\n UIElementBuilders,\n UILayoutBuilders,\n UIOrigins,\n translatePoint,\n Themes,\n} = lcjs;\n\n// Create a XY Chart.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n // Disable native AutoCursor to create custom\n .setAutoCursorMode(AutoCursorModes.disabled)\n .setTitle(\"Custom Cursor using LCJS UI\");\n\n// set title for Y axis\nchart.getDefaultAxisY().setTitle(\"Y-axis\");\n\n// generate data and creating the series\nconst series = new Array(3).fill(0).map((_, iSeries) => {\n const nSeries = chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX'\n }\n })\n\n createProgressiveTraceGenerator()\n .setNumberOfPoints(200)\n .generate()\n .toPromise()\n .then((data) => {\n return nSeries.add(data);\n });\n return nSeries;\n});\n\n// Add Legend.\nconst legend = chart.addLegendBox().add(chart)\n\n// Create UI elements for custom cursor.\nconst resultTable = chart\n .addUIElement(\n UILayoutBuilders.Column,\n {\n x: chart.getDefaultAxisX(),\n y: chart.getDefaultAxisY(),\n }\n )\n .setMouseInteractions(false)\n .setOrigin(UIOrigins.LeftBottom)\n .setMargin(5)\n .setBackground((background) => background\n // Style same as Theme result table.\n .setFillStyle(chart.getTheme().resultTableFillStyle)\n .setStrokeStyle(chart.getTheme().resultTableStrokeStyle)\n );\n\nconst rowX = resultTable\n .addElement(UILayoutBuilders.Row)\n .addElement(UIElementBuilders.TextBox)\n\nconst rowsY = series.map((el, i) => {\n return resultTable\n .addElement(UILayoutBuilders.Row)\n .addElement(UIElementBuilders.TextBox)\n .setTextFillStyle(series[i].getStrokeStyle().getFillStyle());\n});\n\nconst tickX = chart\n .getDefaultAxisX()\n .addCustomTick()\n .setAllocatesAxisSpace(false)\n\nconst ticksY = series.map((el, i) => {\n return chart\n .getDefaultAxisY()\n .addCustomTick()\n .setAllocatesAxisSpace(false)\n .setMarker((marker) => marker\n .setTextFillStyle(series[i].getStrokeStyle().getFillStyle())\n )\n});\n\n// Hide custom cursor components initially.\nresultTable.dispose();\ntickX.dispose();\nticksY.forEach((tick) => tick.dispose());\n\n// Implement custom cursor logic with events.\nchart.onSeriesBackgroundMouseMove((_, event) => {\n const mouseLocationClient = { x: event.clientX, y: event.clientY };\n // Translate mouse location to LCJS coordinate system for solving data points from series, and translating to Axes.\n const mouseLocationEngine = chart.engine.clientLocation2Engine(\n mouseLocationClient.x,\n mouseLocationClient.y\n );\n\n // Translate mouse location to Axis.\n const mouseLocationAxis = translatePoint(\n mouseLocationEngine,\n chart.engine.scale,\n series[0].scale\n );\n\n // Solve nearest data point to the mouse on each series.\n const nearestDataPoints = series.map((el) =>\n el.solveNearestFromScreen(mouseLocationEngine)\n );\n\n // Find the nearest solved data point to the mouse.\n const nearestPoint = nearestDataPoints.reduce((prev, curr, i) => {\n if (!prev) return curr;\n if (!curr) return prev;\n return Math.abs(mouseLocationAxis.y - curr.location.y) <\n Math.abs(mouseLocationAxis.y - prev.location.y)\n ? curr\n : prev;\n });\n\n if (nearestPoint) {\n // Set custom cursor location.\n resultTable.setPosition({\n x: nearestPoint.location.x,\n y: nearestPoint.location.y,\n });\n\n // Change origin of result table based on cursor location.\n if (\n nearestPoint.location.x >\n chart.getDefaultAxisX().getInterval().end / 1.5\n ) {\n if (\n nearestPoint.location.y >\n chart.getDefaultAxisY().getInterval().end / 1.5\n ) {\n resultTable.setOrigin(UIOrigins.RightTop);\n } else {\n resultTable.setOrigin(UIOrigins.RightBottom);\n }\n } else if (\n nearestPoint.location.y >\n chart.getDefaultAxisY().getInterval().end / 1.5\n ) {\n resultTable.setOrigin(UIOrigins.LeftTop);\n } else {\n resultTable.setOrigin(UIOrigins.LeftBottom);\n }\n\n // Format result table text.\n rowX.setText(`X: ${chart.getDefaultAxisX().formatValue(nearestPoint.location.x)}`);\n rowsY.map((rowY, i) => {\n rowY.setText(`Y${i}: ${chart.getDefaultAxisY().formatValue(nearestDataPoints[i].location.y)}`);\n });\n\n // Position custom ticks.\n tickX.setValue(nearestPoint.location.x);\n ticksY.forEach((tick, i) => {\n tick.setValue(nearestDataPoints[i].location.y || 0);\n });\n\n // Display cursor.\n resultTable.restore();\n tickX.restore();\n ticksY.map((el) => el.restore());\n } else {\n // Hide cursor.\n resultTable.dispose();\n tickX.dispose();\n ticksY.map((el) => el.dispose());\n }\n});\n\nchart.onSeriesBackgroundMouseLeave((_, e) => {\n resultTable.dispose();\n tickX.dispose();\n ticksY.map((el) => el.dispose());\n});\n\nchart.onSeriesBackgroundMouseDragStart((_, e) => {\n resultTable.dispose();\n tickX.dispose();\n ticksY.map((el) => el.dispose());\n});\n","url":null,"readme":"This example serves as an example for creating a custom cursor for XY charts.\n\nCustom cursors can be required for different purposes - like major structural changes or very application specific styling requirements.\n\nIf lesser changes to default cursors are required then please see read about different methods of configuring cursor behavior - `ChartXY` API reference has good links and explanations to follow.\n\nCustom cursors are most importantly based on `LCJS` methods that allow solving nearest data points in series from any supplied location.\nCustom user interactions and data point solving require solid understanding of different coordinate systems in web and `LCJS`, which is the primary reason this example exists;\n\n```javascript\n// Add custom action when user moves mouse over series area.\nchart.onSeriesBackgroundMouseMove((_, event) => {\n // `event` is a native JavaScript event, which packs the active mouse location in `clientX` and `clientY` properties.\n const mouseLocationClient = { x: event.clientX, y: event.clientY };\n\n // Before using client coordinates with LCJS, the coordinates have to be translated relative to the LCJS engine.\n const mouseLocationEngine = chart.engine.clientLocation2Engine(\n mouseLocationClient.x,\n mouseLocationClient.y\n );\n\n // Now that the coordinates are in the correct coordinate system, they can be used\n // to solve data points, or further translated to any Axis.\n\n // (1) Translate mouse location an Axis.\n const mouseLocationAxis = translatePoint(\n mouseLocationEngine,\n // Source coordinate system.\n chart.engine.scale,\n // Target coordinate system.\n series[0].scale\n );\n\n // (2) Solve nearest data point from a series to the mouse.\n const nearestDataPoint = series.solveNearestFromScreen(mouseLocationEngine);\n // `nearestDataPoint` is either `undefined`, or an object \n // which contains a collection of information about the solved data point.\n});\n```\n\nIn this example, the custom cursor visual is created with internal `LCJS` user interface components, showcasing a _multi-cursor_ which displays one X coordinate and several Y coordinates at once.\n\n\n\nThe result table is created by combining `LCJS` layout elements with `UITextBox` elements - this allows any kind of value grid to be created.\n\nMore custom cursor examples can be found by looking for \"cursor\" tag in the _Interactive Examples_ gallery - for example, using HTML & CSS for an animated result table or connecting to an UI framework.\n","image":"CustomCursor.png"},{"id":"lcjs-example-0703-customHTMLCursor","title":"JavaScript Custom HTML Cursor Chart","tags":["xy","cursor","ui","html"],"description":"Example showcasing custom cursor implementation with HTML & CSS","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases creation of a custom cursor in ChartXY.\n *\n * This variant uses HTML & CSS to display the cursor components, but the actual cursor logic is implemented using LCJS events and methods.\n */\n\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Import data-generators from 'xydata'-library.\nconst { createProgressiveTraceGenerator } = require(\"@arction/xydata\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AutoCursorModes,\n AxisTickStrategies,\n translatePoint,\n Themes,\n} = lcjs;\n\n// names of the data the series\nconst names = [\"Stock Price A\", \"Stock Price B\", \"Stock Price C\"];\n// define date that matches value of 0 on date time axis.\nconst dateOrigin = new Date(2020, 0, 1);\n// X step between data points.\nconst dataFrequency = 30 * 24 * 60 * 60 * 1000;\n\n// Create a XY Chart.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n // Disable native AutoCursor to create custom\n .setAutoCursorMode(AutoCursorModes.disabled)\n // set title of the chart\n .setTitle(\"Custom Cursor using HTML\");\n\n// Configure X axis as date time.\nchart\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.DateTime, (tickStrategy) =>\n tickStrategy.setDateOrigin(dateOrigin)\n );\n\nchart.getDefaultAxisY().setTitle(\"Stock price variation €\");\n\n// Generate data and create the series.\nconst series = new Array(3).fill(0).map((_, i) => {\n const nSeries = chart\n .addPointLineSeries()\n .setMouseInteractions(false)\n\n createProgressiveTraceGenerator()\n .setNumberOfPoints(20)\n .generate()\n .toPromise()\n .then((data) => {\n return nSeries.setName(names[i]).add(\n data.map((point) => ({\n x: point.x * dataFrequency,\n y: point.y,\n }))\n );\n });\n return nSeries;\n});\n\n// Read back series colors into CSS supported format \"rgba(...)\"\nconst colors = series.map((nSeries) => {\n const fill = nSeries.getStrokeStyle().getFillStyle()\n // NOTE: Assume SolidFill\n const color = fill.getColor()\n return `rgba(${color.getR()},${color.getG()},${color.getB()},${color.getA()})`\n})\n\n// Create custom cursor UI by adding HTML elements to the document.\nconst styleElem = document.head.appendChild(document.createElement(\"style\"));\nconst textBox = document.createElement(\"div\");\ntextBox.id = \"resultTable\";\nconst line = document.createElement(\"div\");\nline.id = \"line\";\nconst line2 = document.createElement(\"div\");\nline2.id = \"line2\";\nconst arrow = document.createElement(\"div\");\narrow.id = \"arrow\";\ntextBox.appendChild(line);\ntextBox.appendChild(line2);\ntextBox.appendChild(arrow);\nchart.engine.container.append(textBox);\n\n// Implement custom cursor logic with events.\n\nchart.onSeriesBackgroundMouseMove((_, event) => {\n const mouseLocationClient = { x: event.clientX, y: event.clientY };\n // Translate mouse location to LCJS coordinate system for solving data points from series, and translating to Axes.\n const mouseLocationEngine = chart.engine.clientLocation2Engine(\n mouseLocationClient.x,\n mouseLocationClient.y\n );\n\n // Translate mouse location to Axis.\n const mouseLocationAxis = translatePoint(\n mouseLocationEngine,\n chart.engine.scale,\n series[0].scale\n );\n\n // Solve nearest data point to the mouse on each series.\n const nearestDataPoints = series.map((el) =>\n el.solveNearestFromScreen(mouseLocationEngine)\n );\n\n // Find the nearest solved data point to the mouse.\n const nearestPoint = nearestDataPoints.reduce((prev, curr, i) => {\n if (!prev) return curr;\n if (!curr) return prev;\n return Math.abs(mouseLocationAxis.y - curr.location.y) <\n Math.abs(mouseLocationAxis.y - prev.location.y)\n ? curr\n : prev;\n });\n\n if (nearestPoint) {\n // Translate data point from Axis to client.\n const nearestPointEngine = translatePoint(\n nearestPoint.location,\n series[0].scale,\n chart.engine.scale\n );\n const nearestPointClient = chart.engine.engineLocation2Client(\n nearestPointEngine.x,\n nearestPointEngine.y\n );\n\n // Position and format custom HTML cursor.\n if (\n nearestPoint.location.x >\n chart.getDefaultAxisX().getInterval().end / 1.5\n ) {\n textBox.style.left = `${Math.round(\n nearestPointClient.x - textBox.clientWidth - 10\n )}px`;\n textBox.style.top = `${Math.round(\n nearestPointClient.y - textBox.clientHeight / 2\n )}px`;\n arrow.style.left = '142px'\n arrow.style.transform = 'translate(-40%, -50%) rotate(-135deg)'\n } else {\n textBox.style.left = `${Math.round(nearestPointClient.x + 10)}px`;\n textBox.style.top = `${Math.round(\n nearestPointClient.y - textBox.clientHeight / 2\n )}px`;\n arrow.style.left = '-1px'\n arrow.style.transform = 'translate(-50%, -50%) rotate(45deg)'\n }\n\n line.innerHTML = `<b>Date: </b> <span id = 'date'>${new Date(\n 2021,\n 0,\n nearestPoint.location.x / (24 * 60 * 60 * 1000) + 1\n ).toLocaleDateString()}</span>`;\n\n const point = nearestDataPoints.map((el) => (el ? el.location.y : 0));\n let rowElement = \"\";\n for (let i = 0; i < series.length; i++) {\n const sign = point[i] > 0 ? \"+\" : \"\";\n rowElement += `<div class='values' style='color: ${\n colors[i]\n }' ><span>${series[i].getName()}:</span> ${\n sign + chart.getDefaultAxisY().formatValue(nearestDataPoints[i].location.y)\n }</div>`;\n }\n line2.innerHTML = rowElement;\n\n textBox.style.opacity = 1;\n } else {\n textBox.style.opacity = 0;\n }\n});\n\nchart.onSeriesBackgroundMouseLeave((_, event) => {\n textBox.style.opacity = 0;\n});\nchart.onSeriesBackgroundMouseDragStart((_, e) => {\n textBox.style.opacity = 0;\n});\n\nchart.getDefaultAxisY().onScaleChange((_, i) => {\n textBox.style.opacity = 0;\n});\nchart.getDefaultAxisX().onScaleChange((_, i) => {\n textBox.style.opacity = 0;\n});\n\n// Add CSS.\nfunction addStyle(styleString) {\n const style = document.createElement(\"style\");\n style.textContent = styleString;\n document.head.append(style);\n}\n\naddStyle(`\n #resultTable {\n background-color: rgba(24, 24, 24, 0.9);\n color: white;\n font-size: 12px;\n border: solid white 2px;\n border-radius: 5px;\n width: 142px;\n // height: 110px;\n height: auto;\n top: 0;\n left: 0;\n position: fixed;\n padding: 0;\n pointer-events:none;\n z-index: 1;\n transition: left 0.2s, top 0.2s, opacity 0.2s;\n opacity: 0.0;\n }\n #arrow {\n position: absolute;\n background-color: rgba(24, 24, 24);\n height: 10px;\n width: 10px;\n top: 49%;\n border-left: solid white 2px;\n border-bottom: solid white 2px;\n box-shadow: 0 0 10px rgba(0, 0, 0, .5);\n transform-origin: center center;\n }\n p {\n margin:0;\n }\n #date {\n text-align: center;\n }\n .values {\n display: flex;\n justify-content: space-between;\n align-items center;\n margin: 5px 0;\n }\n .values span {\n margin-right: 10px \n }\n #line {\n background-color: grey;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n margin: 0;\n padding: 7px;\n font-size: 10px;\n height: 20%;\n font-family: Arial, sans-serif;\n width: auto;\n heigth: 100%;\n }\n #line2 {\n font-size: 13px;\n font-weight: 900;\n padding: 5px 14px\n }\n`);\n","url":null,"readme":"This example serves as an example for creating a custom cursor for XY charts.\n\nCustom cursors can be required for different purposes - like major structural changes or very application specific styling requirements.\n\nIf lesser changes to default cursors are required then please see read about different methods of configuring cursor behavior - `ChartXY` API reference has good links and explanations to follow.\n\nCustom cursors are most importantly based on `LCJS` methods that allow solving nearest data points in series from any supplied location.\nCustom user interactions and data point solving require solid understanding of different coordinate systems in web and `LCJS`, which is the primary reason this example exists;\n\n```javascript\n// Add custom action when user moves mouse over series area.\nchart.onSeriesBackgroundMouseMove((_, event) => {\n // `event` is a native JavaScript event, which packs the active mouse location in `clientX` and `clientY` properties.\n const mouseLocationClient = { x: event.clientX, y: event.clientY };\n\n // Before using client coordinates with LCJS, the coordinates have to be translated relative to the LCJS engine.\n const mouseLocationEngine = chart.engine.clientLocation2Engine(\n mouseLocationClient.x,\n mouseLocationClient.y\n );\n\n // Now that the coordinates are in the correct coordinate system, they can be used\n // to solve data points, or further translated to any Axis.\n\n // (1) Translate mouse location an Axis.\n const mouseLocationAxis = translatePoint(\n mouseLocationEngine,\n // Source coordinate system.\n chart.engine.scale,\n // Target coordinate system.\n series[0].scale\n );\n\n // (2) Solve nearest data point from a series to the mouse.\n const nearestDataPoint = series.solveNearestFromScreen(mouseLocationEngine);\n // `nearestDataPoint` is either `undefined`, or an object \n // which contains a collection of information about the solved data point.\n});\n```\n\nIn this example, the custom cursor visual is created with dynamically injected `HTML` and `CSS`.\n\n**The same approach could be used for interacting with any UI framework**, idea being that `LCJS` is used for solving the data point and translating the location to the document, where any `HTML` element can be absolute positioned with `left` & `top` style.\n\n\n\nThe location and visibility of result table is animated with a `CSS` transition.\n\nMore custom cursor examples can be found by looking for \"cursor\" tag in the _Interactive Examples_ gallery.\n","image":"CustomHTMLCursor.png"},{"id":"lcjs-example-0704-customCursorStackedY","title":"JavaScript Custom Cursor with Stacked Y Dashboard","tags":["xy","dashboard","cursor","ui","customtick"],"description":"Example showcasing custom cursor implementation with stacked Y charts","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChartJS example that showcases custom cursor implementation with stacked Y charts.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n emptyFill,\n emptyLine,\n AxisTickStrategies,\n AutoCursorModes,\n SolidFill,\n ColorRGBA,\n translatePoint,\n UILayoutBuilders,\n UIElementBuilders,\n UIOrigins,\n synchronizeAxisIntervals,\n Themes,\n} = lcjs;\n\n// Import data-generator from 'xydata'-library.\nconst {\n createProgressiveTraceGenerator\n} = require(\"@arction/xydata\");\n\nconst channels = [\"Ch 1\", \"Ch 2\", \"Ch 3\"];\nconst channelCount = channels.length;\n\n// Create Dashboard.\nconst dashboard = lightningChart().Dashboard({\n // theme: Themes.darkGold\n numberOfRows: channelCount,\n numberOfColumns: 1,\n});\n\n// Map XY-charts to Dashboard for each channel.\nconst charts = channels.map((channelName, i) => {\n const chart = dashboard.createChartXY({\n columnIndex: 0,\n rowIndex: i,\n columnSpan: 1,\n rowSpan: 1,\n });\n\n // Disable default auto cursor.\n chart.setAutoCursorMode(AutoCursorModes.disabled);\n\n if (i === 0) {\n chart.setTitle(\"Stacked Y Dashboard with Custom Cursor\");\n } else {\n chart.setTitleFillStyle(emptyFill);\n }\n\n // Only display X ticks for bottom chart.\n if (i !== channelCount - 1) {\n chart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.Empty);\n }\n\n // Align Y axes of stacked charts.\n chart.getDefaultAxisY().setThickness(50)\n\n return chart;\n});\n\n// The bottom X Axis, which shows ticks for all stacked charts.\nconst axisX = charts[charts.length - 1].getDefaultAxisX();\n\n// Add progressive line series to each chart.\nconst seriesList = charts.map((chart, i) =>\n chart.addLineSeries({\n dataPattern: {\n // pattern: 'ProgressiveX' => Each consecutive data point has increased X coordinate.\n pattern: 'ProgressiveX'\n }\n })\n);\n\n// Generate and push data to each line series.\nseriesList.forEach((series, i) =>\n createProgressiveTraceGenerator()\n .setNumberOfPoints(100 * 1000)\n .generate()\n .toPromise()\n .then((data) => {\n series.add(data);\n })\n);\n\n// Code for synchronizing all X Axis intervals in stacked XY charts.\nconst syncedAxes = charts.map(chart => chart.getDefaultAxisX())\nsynchronizeAxisIntervals(...syncedAxes)\n\n// Create UI elements for custom cursor.\nconst resultTable = dashboard\n .addUIElement(\n UILayoutBuilders.Column,\n dashboard.engine.scale\n )\n .setMouseInteractions(false)\n .setOrigin(UIOrigins.LeftBottom)\n .setMargin(5)\n .setBackground((background) => background\n // Style same as Theme result table.\n .setFillStyle(dashboard.getTheme().resultTableFillStyle)\n .setStrokeStyle(dashboard.getTheme().resultTableStrokeStyle)\n );\n\nconst resultTableTextBuilder = UIElementBuilders.TextBox\n // Style same as Theme result table text.\n .addStyler(textBox => textBox\n .setTextFillStyle(dashboard.getTheme().resultTableTextFillStyle)\n )\n\nconst rowX = resultTable\n .addElement(UILayoutBuilders.Row)\n .addElement(resultTableTextBuilder)\n\nconst rowsY = seriesList.map((el, i) => {\n return resultTable\n .addElement(UILayoutBuilders.Row)\n .addElement(resultTableTextBuilder)\n});\n\nconst tickX = charts[channelCount - 1]\n .getDefaultAxisX()\n .addCustomTick()\n .setAllocatesAxisSpace(false)\n\nconst ticksX = [];\ncharts.forEach((chart, i) => {\n if (i !== channelCount - 1) {\n ticksX.push(\n chart\n .getDefaultAxisX()\n .addConstantLine()\n .setValue(0)\n .setMouseInteractions(false)\n // Style according to Theme custom tick grid stroke.\n .setStrokeStyle(chart.getTheme().customTickGridStrokeStyle)\n );\n }\n});\n\nconst ticksY = seriesList.map((el, i) => {\n return charts[i]\n .getDefaultAxisY()\n .addCustomTick()\n .setAllocatesAxisSpace(false)\n});\n\nconst setCustomCursorVisible = (visible) => {\n if (!visible) {\n resultTable.dispose();\n tickX.dispose();\n ticksY.forEach((el) => el.dispose());\n ticksX.forEach((el) => el.dispose());\n } else {\n resultTable.restore();\n tickX.restore();\n ticksY.forEach((el) => el.restore());\n ticksX.forEach((el) => el.restore());\n }\n}\n// Hide custom cursor components initially.\nsetCustomCursorVisible(false)\n\n\n// Implement custom cursor logic with events.\ncharts.forEach((chart, i) => {\n \n const AxisX = chart.getDefaultAxisX()\n\n chart.onSeriesBackgroundMouseMove((_, event) => {\n // mouse location in web page\n const mouseLocationClient = {\n x: event.clientX,\n y: event.clientY,\n };\n // Translate mouse location to LCJS coordinate system for solving data points from series, and translating to Axes.\n const mouseLocationEngine = chart.engine.clientLocation2Engine(\n mouseLocationClient.x,\n mouseLocationClient.y\n );\n\n // Find the nearest data point to the mouse.\n const nearestDataPoints = seriesList.map((el) =>\n el.solveNearestFromScreen(mouseLocationEngine)\n );\n\n // Abort operation if any of solved data points is `undefined`.\n if (nearestDataPoints.includes(undefined)) {\n setCustomCursorVisible(false)\n return\n }\n\n // location of nearest point of current chart\n const nearestPointLocation = nearestDataPoints[i].location\n\n // Translate mouse location to dashboard scale.\n const mouseLocationAxis = translatePoint(\n nearestPointLocation,\n // Source coordinate system.\n seriesList[i].scale,\n // Target coordinate system.\n dashboard.engine.scale\n );\n\n // Set custom cursor location. \n resultTable.setPosition({\n x: mouseLocationAxis.x,\n y: mouseLocationEngine.y,\n });\n\n\n // Change origin of result table based on cursor location.\n if ( nearestPointLocation.x > AxisX.getInterval().end / 1.5 ) {\n resultTable.setOrigin(UIOrigins.RightBottom);\n } else {\n resultTable.setOrigin(UIOrigins.LeftBottom);\n }\n\n // Format result table text.\n rowX.setText(`X: ${axisX.formatValue(nearestDataPoints[i].location.x)}`);\n rowsY.forEach((rowY, i) => {\n rowY.setText(\n `Y${i}: ${charts[i]\n .getDefaultAxisY()\n .formatValue(nearestDataPoints[i].location.y)}`\n );\n });\n\n // Position custom ticks.\n tickX.setValue(nearestDataPoints[i].location.x);\n ticksX.forEach((tick, i) => {\n tick.setValue(tickX.getValue());\n });\n ticksY.forEach((tick, i) => {\n tick.setValue(nearestDataPoints[i].location.y);\n });\n\n // Display cursor.\n setCustomCursorVisible(true)\n });\n\n // hide custom cursor and ticks if mouse leaves chart area\n chart.onSeriesBackgroundMouseLeave((_, e) => {\n setCustomCursorVisible(false)\n });\n\n // hide custom cursor and ticks on Drag\n chart.onSeriesBackgroundMouseDragStart((_, e) => {\n setCustomCursorVisible(false)\n });\n});","url":null,"readme":"This example serves as an example for custom data cursor implementation in _stacked Y charts dashboard_, where there are several XY charts stacked vertically on each other.\n\nCustom cursors can be required for different purposes - like major structural changes or very application specific styling requirements.\n\nIf lesser changes to default cursors are required then please see read about different methods of configuring cursor behavior - `ChartXY` API reference has good links and explanations to follow.\n\nIn this case, the X Axis of each chart are _synchronized_, and when user mouse is above the chart the data of all series `Y` coordinates is shown at the respective `X` coordinate.\n\nEach `LineSeries` contains 100 000 unique data points, coming to a total of **300 000** data points. Regardless, the interaction with cursor is instantaneous.\n\nCustom cursors are most importantly based on `LCJS` methods that allow solving nearest data points in series from any supplied location.\nCustom user interactions and data point solving require solid understanding of different coordinate systems in web and `LCJS`, which is the primary reason this example exists;\n\n```javascript\n// Add custom action when user moves mouse over series area.\nchart.onSeriesBackgroundMouseMove((_, event) => {\n // `event` is a native JavaScript event, which packs the active mouse location in `clientX` and `clientY` properties.\n const mouseLocationClient = { x: event.clientX, y: event.clientY };\n\n // Before using client coordinates with LCJS, the coordinates have to be translated relative to the LCJS engine.\n const mouseLocationEngine = chart.engine.clientLocation2Engine(\n mouseLocationClient.x,\n mouseLocationClient.y\n );\n\n // Now that the coordinates are in the correct coordinate system, they can be used\n // to solve data points, or further translated to any Axis.\n\n // (1) Translate mouse location an Axis.\n const mouseLocationAxis = translatePoint(\n mouseLocationEngine,\n // Source coordinate system.\n chart.engine.scale,\n // Target coordinate system.\n series[0].scale\n );\n\n // (2) Solve nearest data point from a series to the mouse.\n const nearestDataPoint = series.solveNearestFromScreen(mouseLocationEngine);\n // `nearestDataPoint` is either `undefined`, or an object \n // which contains a collection of information about the solved data point.\n});\n```\n\nThe default cursor can only display data from one chart at a time, but using the `LCJS` methods, the cursor can be configured to display data from all independent charts at the same time.\n\nMore custom cursor examples can be found by looking for \"cursor\" tag in the _Interactive Examples_ gallery.\n","image":"customCursorStackedY.png"},{"id":"lcjs-example-0705-customChartBubbles","title":"Customized JavaScript Chart - Bubbles","tags":["bubble","ellipse","xy","ui"],"description":"Using Ellipse Series as tool to create a Bubble Chart. Also known as a Bubble Series, Bubble Chart and Bubble Graph. ","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: JS chart examples, covid-19 tracker chart, racing bar charts, mosaic chart, 2D range bar, grouped bar charts. And more!","src":"/*\n * LightningChartJS example that showcases a extensively customized chart with Bubble-chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n SolidLine,\n ColorRGBA,\n emptyFill,\n FontSettings,\n AutoCursorModes,\n Animator,\n AnimationEasings,\n UIDraggingModes,\n UIOrigins,\n ColorPalettes,\n AxisTickStrategies,\n emptyLine,\n Themes\n} = lcjs\n\n// Custom callback template.\nconst forEachIn = (object, clbk) => { const obj = {}; for (const a in object) obj[a] = clbk(object[a]); return obj }\n\n// Define colors to configure chart and bubbles.\nconst colors = {\n background: ColorRGBA(255, 255, 255),\n graphBackground: ColorRGBA(220, 255, 255),\n title: ColorRGBA(0, 100, 0),\n subTitle: ColorRGBA(0, 100, 0),\n bubbleBorder: ColorRGBA(0, 0, 0),\n bubbleFillPalette: ColorPalettes.fullSpectrum(100)\n}\n\n// Define font settings.\nconst fonts = {\n title: new FontSettings({\n size: 40,\n weight: 400\n })\n}\n// Create and subtitle with the same font settings, except font-size.\nfonts.subTitle = fonts.title.setSize(20)\n\n// Create solid fill styles for defined colors.\nconst solidFillStyles = forEachIn(colors, (color) => new SolidFill({ color }))\n\n// Create chart with customized settings\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold \n })\n .setBackgroundFillStyle(solidFillStyles.background)\n .setSeriesBackgroundFillStyle(solidFillStyles.graphBackground)\n .setTitle('Custom Styled Chart')\n .setTitleFont(fonts.title)\n .setTitleFillStyle(solidFillStyles.title)\n .setTitleMarginTop(6)\n .setTitleMarginBottom(0)\n .setPadding({ left: 5, right: 5, top: 30, bottom: 30 })\n .setAutoCursorMode(AutoCursorModes.disabled)\n .setMouseInteractionRectangleZoom(undefined)\n .setMouseInteractionRectangleFit(undefined)\n .setMouseInteractions(false)\n\n// Get axes.\nconst axes = {\n bottom: chart.getDefaultAxisX(),\n left: chart.getDefaultAxisY(),\n top: chart.addAxisX(true),\n right: chart.addAxisY(true).setChartInteractions(false)\n}\n\nchart.addUIElement(undefined, chart.uiScale)\n .setPosition({ x: 50, y: 93 })\n .setOrigin(UIOrigins.Center)\n .setText('- With Bubbles -')\n .setTextFont(fonts.subTitle)\n .setTextFillStyle(solidFillStyles.subTitle)\n .setDraggingMode(UIDraggingModes.notDraggable)\n .setBackground((bg) => bg\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n\n// Axis mutator.\nconst overrideAxis = (axis) => axis\n .setTickStrategy(AxisTickStrategies.Empty)\n .setTitleMargin(0)\n .setMouseInteractions(undefined)\n\n// Override default configurations of axes.\nfor (const axisPos in axes)\n overrideAxis(axes[axisPos]);\n\n[axes.bottom, axes.left].forEach(axis => axis.setInterval(-100, 100).setScrollStrategy(undefined))\n// Ratio between bubble ellipse width / height.\nconst bubbleWidthHeightRatio = {\n x: window.innerHeight / window.innerWidth,\n y: 1\n}\n\n// Create instance of ellipse series to draw bubbles.\nconst ellipseSeries = chart.addEllipseSeries()\nlet bubbleCount = 0\n\n// Handler of dragging bubbles.\nconst bubbleDragHandler = (figure, event, button, startLocation, delta) => {\n const prevDimensions = figure.getDimensions()\n figure.setDimensions(Object.assign(prevDimensions, {\n x: prevDimensions.x + delta.x * figure.scale.x.getPixelSize(),\n y: prevDimensions.y + delta.y * figure.scale.y.getPixelSize()\n }))\n}\n\n// Create resizeBubble array and sizeArray to store the values separately \nconst resizeBubble = []\nconst sizeArray = []\n\n// Create a single bubble to visualize in specific coordinates and specified size.\nconst addBubble = (pos, size) => {\n const radius = size * 2.5\n const borderThickness = 1 + size * 1.0\n\n const color = colors.bubbleFillPalette(Math.round(Math.random() * 99))\n const fillStyle = new SolidFill({ color })\n const strokeStyle = new SolidLine({ fillStyle: solidFillStyles.bubbleBorder, thickness: borderThickness })\n\n const figure = ellipseSeries.add({\n x: pos.x,\n y: pos.y,\n radiusX: radius * bubbleWidthHeightRatio.x,\n radiusY: radius * bubbleWidthHeightRatio.y\n })\n .setFillStyle(fillStyle)\n .setStrokeStyle(strokeStyle)\n\n // Make draggable by mouse.\n figure.onMouseDrag(bubbleDragHandler)\n bubbleCount++\n return figure\n}\n\n// Create an event to handle the case when user resizes the window, the bubble will be automatically scaled \nchart.onResize(() => {\n for (let i = 0; i < resizeBubble.length; i++) {\n const newBubble = resizeBubble[i].getDimensions()\n resizeBubble[i].setDimensions({\n x: newBubble.x,\n y: newBubble.y,\n radiusX: axes.bottom.scale.getPixelSize() * sizeArray[i] * 10,\n radiusY: axes.left.scale.getPixelSize() * sizeArray[i] * 10\n })\n }\n})\n\n// Create a single bubble to visualize in random coordinates and with random size.\nconst addRandomBubble = () => {\n const pos = {\n x: Math.random() * 200 - 100,\n y: Math.random() * 200 - 100\n }\n const size = 1 + Math.random() * 7.0\n sizeArray.push(size)\n resizeBubble.push(addBubble(pos, size))\n}\n\n// Amount of bubbles to render.\nconst bubbleMaxCount = 100\n\n// Animate bubbles creation.\nAnimator(() => undefined)(2.5 * 1000, AnimationEasings.ease)([[0, bubbleMaxCount]], ([nextBubbleCount]) => {\n while (bubbleCount < nextBubbleCount)\n addRandomBubble()\n})\n","url":null,"readme":"*Also known as a Bubble Series, Bubble Chart and Bubble Graph*\n\nThis example shows extensive customization of a Cartesian Chart to create a Bubble Chart using ***EllipseSeries*** as a tool.\n\nThe ***Bubble chart*** is a variation of a Scatter series where the data points have additional third dimension represented in the size of the markers ( ***bubbles*** ).\n\nThis type of series are often used to present financial or statistical data because they the easiest and well-understood visual comparisons of measures.\n\nThe series typically accepts points in format `{ x: number, y: number, size: number }`.\n","image":"custom.png"},{"id":"lcjs-example-0706-onScreenMenu","title":"JavaScript On Screen Menu","tags":["LineSeries","PointSeries","OnScreenMenuButton","PointShape"],"description":"On Screen Menu showcase","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Scientific Chart examples, Create High-Performance Charts, Medical Charts examples, dashboard charts.","src":"/*\n * LightningChartJS example for rendering a 'Mesh Circle'.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n OnScreenMenuButtonType,\n OnScreenMenuButtonShape,\n Themes,\n ColorRGBA,\n ColorHEX,\n SolidFill,\n PointShape,\n SolidLine\n} = lcjs\n\nconst {\n createProgressiveTraceGenerator,\n createProgressiveRandomGenerator \n} = require('@arction/xydata')\n\n\nconst dashboard = lightningChart().Dashboard({\n numberOfColumns: 1,\n numberOfRows: 3,\n // theme: Themes.darkGold\n})\n\n// Add XY Chart to top Cell in Dashboard.\nconst chart = dashboard.createChartXY({\n columnIndex: 0,\n columnSpan: 1,\n rowIndex: 0,\n rowSpan: 2,\n})\n\n// Add Zoom Band Chart to bottom Cell in Dashboard.\nconst zoomBandChart = dashboard.createZoomBandChart({\n columnIndex: 0,\n columnSpan: 1,\n rowIndex: 2,\n rowSpan: 1,\n axis: chart.getDefaultAxisX(),\n})\n\n// Add LineSeries to the XY Chart.\nconst line = chart.addLineSeries().setMouseInteractions(false)\n\n// Styles for 2nd LineSeries\nconst customStrokeStyle = new SolidLine({ fillStyle: new SolidFill({ color: ColorRGBA(200, 50, 50) }), thickness: 2 })\n\n// Add 2nd LineSeries to the XY Chart.\nconst line2 = chart.addLineSeries().setStrokeStyle(customStrokeStyle).setMouseInteractions(false)\n\n// Add PointSeries to the XY Chart.\nconst point = chart\n .addPointSeries({ pointShape: PointShape.Circle })\n .setPointFillStyle(new SolidFill({ color: ColorRGBA(180, 180, 180) }))\n .setPointSize(10)\n\n\n// Array that keeps data of 1st line series\nconst arr1 = []\n// Flag that dispose or restore PointSeries\nlet checked = false\n// Data of point coordinates\nlet prevPoint\n\n// Fill the Line Series with arbitrary data.\ncreateProgressiveTraceGenerator()\n .setNumberOfPoints(250)\n .generate()\n .toPromise()\n .then((data) => {\n arr1.push(...data)\n line.add(data)\n })\n\n// Stream some random data.\ncreateProgressiveRandomGenerator()\n .setNumberOfPoints(250)\n .generate()\n .setStreamBatchSize(1)\n .setStreamInterval(50)\n .setStreamRepeat(false)\n .toStream()\n .forEach((point) => {\n const y = point.y * (Math.random() * 20) - 10\n line2.add({ x: point.x, y })\n // check intesection of line series\n getIntersection({ x: point.x, y })\n })\n\n// Add On-Screen menu \nchart.addOnScreenMenu(\n [\n [\n // Default buttons\n OnScreenMenuButtonType.ZoomInX,\n OnScreenMenuButtonType.ZoomOutX,\n OnScreenMenuButtonType.ZoomInY,\n OnScreenMenuButtonType.ZoomOutY,\n OnScreenMenuButtonType.ZoomToFit,\n OnScreenMenuButtonType.ToggleAnimations,\n // Custom button\n {\n icon: document.head.baseURI + 'examples/assets/0706/icon.png',\n dimensions: { rows: 1, columns: 1 },\n opacity: '0.8',\n color: 'blue',\n shape: OnScreenMenuButtonShape.RoundedRectangle,\n action: show,\n },\n ],\n ],\n OnScreenMenuButtonShape.RoundedRectangle,\n)\n\n// Function for actions of Custom On Screen Menu Button\nfunction show () {\n if (!checked) {\n point.dispose()\n }else{\n point.restore()\n }\n checked == false ? (checked = true) : (checked = false)\n}\n\n\nfunction getIntersection (currPoint) {\n // Index of last generated point\n const index = currPoint.x\n if (currPoint.x > 0) {\n // Check if lines were intersected\n if (\n (currPoint.y > arr1[index].y && prevPoint.y < arr1[index-1].y) ||\n (currPoint.y < arr1[index].y && prevPoint.y > arr1[index-1].y)\n ) {\n // Find point of intersection\n const interSectionPoint = calculateIntersection(\n currPoint,\n prevPoint,\n arr1[index],\n arr1[index-1],\n )\n point.add(interSectionPoint)\n }\n // Reassign curr point as prev. point\n prevPoint = currPoint\n }else{\n // Assign curr point as prev. point\n prevPoint = currPoint\n }\n}\n\n\n// The explanation of formula can be found in the description below \nfunction calculateIntersection(currPoint1, prevPoint1, currPoint2, prevPoint2) {\n // Expressions of numerator\n const exp1 = currPoint1.x * prevPoint1.y - currPoint1.y * prevPoint1.x \n const exp2 = currPoint2.x * prevPoint2.y - currPoint2.y * prevPoint2.x\n\n const exp3 = currPoint2.x - prevPoint2.x \n const exp4 = currPoint1.x - prevPoint1.x \n const exp5 = currPoint2.y - prevPoint2.y \n const exp6 = currPoint1.y - prevPoint1.y \n\n // Denominator\n const d1 = (currPoint1.x - prevPoint1.x) * (currPoint2.y - prevPoint2.y) \n const d2 = (currPoint1.y - prevPoint1.y) * (currPoint2.x - prevPoint2.x)\n const d = d1 - d2\n\n if (d === 0) {\n throw new Error('Number of intersection points is zero or infinity.')\n }\n \n const px = (exp1 * exp3 - exp4 * exp2) / d\n const py = (exp1 * exp5 - exp6 * exp2) / d\n\n const p = { x: px, y: py }\n\n // Return point\n return p\n}\n","url":null,"readme":"Example showcasing the use of On Screen Menu.\n\nOn-Screen Menu (OSM) is part of UI that can be used to simplify interaction with charts. \nIn this case the default buttons are used along with a custom button that shows/hides the intersection points of lines.\n\n\nThe On-Screen menu can be added this way:\n\n```javascript\n\nconst chart = lightningChart().ChartXY()\n\nchart.addOnScreenMenu(\n [\n [\n // default buttnos\n OnScreenMenuButtonType.ZoomInX,\n OnScreenMenuButtonType.ZoomOutX,\n OnScreenMenuButtonType.ZoomInY,\n OnScreenMenuButtonType.ZoomOutY,\n OnScreenMenuButtonType.ZoomToFit,\n OnScreenMenuButtonType.ToggleAnimations,\n ],\n ],\n OnScreenMenuButtonShape.RoundedRectangle,\n)\n\n```\n\nTo add a custom button parameters must be defined.\n\n```javascript\n\nconst chart = lightningChart().ChartXY()\n\nchart.addOnScreenMenu(\n [\n [\n // cusrom button\n {\n icon: document.head.baseURI + 'examples/assets/9999/icon.png',\n dimensions: { rows: 1, columns: 1 },\n label: '',\n opacity: '0.8',\n color: 'blue',\n shape: OnScreenMenuButtonShape.RoundedRectangle,\n action: show,\n },\n ],\n ],\n)\n\n```\n\n'addOnScreenMenu' takes an array of arrays as a parameter.\nEach sub array adds a new line on the OSM menu.\n\n\n\n\n```javascript\n\nconst chart = lightningChart().ChartXY()\n\nchart.addOnScreenMenu(\n [\n [\n OnScreenMenuButtonType.ZoomInX,\n OnScreenMenuButtonType.ZoomOutX,\n OnScreenMenuButtonType.ZoomInY,\n OnScreenMenuButtonType.ZoomOutY,\n OnScreenMenuButtonType.ZoomIn,\n OnScreenMenuButtonType.ZoomOut,\n ],\n [\n OnScreenMenuButtonType.ZoomToFit,\n OnScreenMenuButtonType.ToggleAnimations,\n ],\n [\n {\n icon: document.head.baseURI + 'examples/assets/9999/icon.png',\n dimensions: { rows: 1, columns: 1 },\n opacity: '0.8',\n color: 'blue',\n shape: OnScreenMenuButtonShape.RoundedRectangle,\n action: show,\n },\n ],\n ],\n)\n\n```\n\n\nFormula of lines intersection\n\n\n\n\n```javascript\n\nfunction calculateIntersection(currPoint1, prevPoint1, currPoint2, prevPoint2) {\n // Expressions of numerator\n const exp1 = currPoint1.x * prevPoint1.y - currPoint1.y * prevPoint1.x // (x1 * y2 - y1 * x2)\n const exp2 = currPoint2.x * prevPoint2.y - currPoint2.y * prevPoint2.x // (x3 * y4 - y3 * x4)\n\n const exp3 = currPoint2.x - prevPoint2.x // (x3 - x4)\n const exp4 = currPoint1.x - prevPoint1.x // (x1 - x2)\n const exp5 = currPoint2.y - prevPoint2.y // (y3 - y4)\n const exp6 = currPoint1.y - prevPoint1.y // (y1 - y2)\n\n // Denominator\n const d1 = (currPoint1.x - prevPoint1.x) * (currPoint2.y - prevPoint2.y) // (x1 - x2) * (y3 - y4)\n const d2 = (currPoint1.y - prevPoint1.y) * (currPoint2.x - prevPoint2.x) // (y1 - y2) * (x3 - x4)\n const d = d1 - d2\n\n if (d === 0) {\n throw new Error('Number of intersection points is zero or infinity.')\n }\n \n const px = (exp1 * exp3 - exp4 * exp2) / d\n const py = (exp1 * exp5 - exp6 * exp2) / d\n\n const p = { x: px, y: py }\n\n // Return point\n return p\n}\n```","image":"osm.png"},{"id":"lcjs-example-0800-heatmapGrid","title":"JavaScript Heatmap Grid Chart","tags":["xy","heatmap","palette"],"description":"Example showcasing simple usage of Heatmap Grid Series.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance heatmaps, scientific data visualization, scrolling heatmap charts, spectrograms as a heatmap.","src":"/*\n * LightningChartJS example that showcases a simple XY line series.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst { lightningChart, PalettedFill, LUT, ColorRGBA, emptyLine, Themes } =\n lcjs;\n\nconst { createWaterDropDataGenerator } = require(\"@arction/xydata\");\n\n// Specify the resolution used for the heatmap.\nconst resolutionX = 1000;\nconst resolutionY = 1000;\n\n// Create a XY Chart.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\n `Heatmap Grid Series ${resolutionX}x${resolutionY} (${(\n (resolutionX * resolutionY) /\n 1000000\n ).toFixed(1)} million data points)`\n )\n .setPadding({ right: 40 });\n\n// Create LUT and FillStyle\nconst palette = new LUT({\n units: \"intensity\",\n steps: [\n { value: 0, color: ColorRGBA(255, 255, 0) },\n { value: 30, color: ColorRGBA(255, 204, 0) },\n { value: 45, color: ColorRGBA(255, 128, 0) },\n { value: 60, color: ColorRGBA(255, 0, 0) },\n ],\n interpolate: false,\n});\n\n// Generate heatmap data.\ncreateWaterDropDataGenerator()\n .setRows(resolutionX)\n .setColumns(resolutionY)\n .generate()\n .then((data) => {\n // Add a Heatmap to the Chart.\n const heatmap = chart\n .addHeatmapGridSeries({\n columns: resolutionX,\n rows: resolutionY,\n start: { x: 0, y: 0 },\n end: { x: resolutionX, y: resolutionY },\n dataOrder: \"columns\",\n })\n // Color Heatmap using previously created color look up table.\n .setFillStyle(new PalettedFill({ lut: palette }))\n .setWireframeStyle(emptyLine)\n .invalidateIntensityValues(data)\n .setMouseInteractions(false);\n\n // Add LegendBox.\n const legend = chart.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart)\n });\n","url":null,"readme":"This example showcases simple usage of `HeatmapGridSeries`, a simple, yet incredibly series type.\n\n`HeatmapGridSeries` visualizes three dimensional data (X, Y, color) of large quantities.\nIt can easily handle data sets in million data points range even on low-end devices.\nWith large amounts of RAM even **billions** of data points can be visualized!\n\nHeatmaps can be created in XY Charts:\n\n```javascript\n// Add heatmap Grid Series to a XY Chart\nchartXY.addHeatmapGridSeries({\n columns: horizontalResolution,\n rows: verticalResolution,\n});\n```\n\nThe data used for the heatmap is created using the WaterdropGenerator function in the example code.\n\n# Heatmap Grid Series options\n\nWhen `HeatmapGridSeries` is created, there are minimum of two properties that have to be specified:\n\n`columns`: amount of data values along X dimension.\n\n`rows`: amount of data values along Y dimension.\n\nConfiguration of these two properties is enough for a fully functioning heatmap grid series.\n\nThe following optional properties can be used for tweaking heatmap behavior for exact application purposes:\n\n`start`: Axis coordinate where heatmap grid begins.\n\n`end`: Axis coordinate where heatmap grid ends.\n\n`step`: Alternate syntax, supplying a `step` value will result in automatic calculation of `end` based on `columns` / `rows` amount.\n\n`dataOrder`: By default incoming intensity data is treated as _list of columns_. This can be flipped by selecting `dataOrder: 'rows'`.\n\n# Heatmap Grid Series data input\n\nThe data set of `HeatmapGridSeries` is defined as a _number matrix_, for example:\n\n```js\n// Example syntax of 3x5 number matrix.\n[\n [0, 1, 0, 1, 0],\n [1, 0, 1, 0, 0],\n [0, 0, 0, 0, 0],\n];\n```\n\nThe data set is specified with `invalidateIntensityValues` method. There are two overrides for this method.\n\n```js\n// Example syntax, invalidate intensity values override #1, specify data from beginning of heatmap.\nheatmap.invalidateIntensityValues([\n // dataOrder: 'columns', columns: 3, rows: 5\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n]);\n```\n\n```js\n// Example syntax, invalidate intensity values override #2, specify data from arbitrary offset.\nheatmap.invalidateIntensityValues({\n iColumn: 10,\n iRow: 0,\n values: [\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n ],\n});\n```\n","image":"heatmapGrid.png"},{"id":"lcjs-example-0801-heatmapMesh","title":"JavaScript Heatmap Mesh Chart","tags":["xy","heatmap","palette"],"description":"Example showcasing simple use-case for Mesh-type Heatmap","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance heatmaps, scientific data visualization, scrolling heatmap charts, spectrograms as a heatmap.","src":"/*\n * LightningChartJS example that showcases a simple XY line series.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n IntensitySeriesTypes,\n IndividualPointFill,\n ColorHSV,\n Themes\n} = lcjs\n\n// Helper function to help turn degrees to radians\nfunction degToRad(angle) {\n return angle * Math.PI / 180\n}\n\n// Resolution of each row/column, specifying how many cells\n// are in the heatmap.\nconst resolution = 20\n\n// Create a new ChartXY.\nconst chart = lightningChart().ChartXY({\n // theme: Themes.darkGold\n})\nchart.setTitle('Heatmap using IntensityMesh')\n\n// Add a heatmap to the chart, as a IntensityMesh\nconst heatmap = chart\n .addHeatmapSeries({\n rows: resolution,\n columns: resolution,\n start: { x: 10, y: 10 },\n end: { x: 1990, y: 1990 },\n pixelate: true,\n type: IntensitySeriesTypes.Mesh\n })\n // Add colors and invalidate the Series based on the colors assigned.\n .invalidateColorsOnly((row, column) => ColorHSV(Math.random() * 70, 0.8))\n // Use IndividualPointFill to apply individual color per cell.\n .setFillStyle(new IndividualPointFill())\n // Edit the geometry and invalidate the Series based on the new geometry.\n .invalidateGeometryOnly((row, column, prev) => ({\n // Compute the geometry for each cell in the heatmap.\n x: prev.x * Math.sin(degToRad(row + 1)),\n y: prev.x * Math.sin(degToRad(column + 1))\n }))\n\n// Add LegendBox to chart.\nconst legend = chart.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart)\n","url":null,"readme":"This example shows a simple use-case scenario for mesh-based Heatmaps.\n\nHeatmaps are a powerful tool for visualizing magnitude in two dimensions. This example focuses on the IntensityMesh-type Heatmap Series. The difference between grid and mesh types is apparent in the naming; whereas grid is always a rectangular shape, the mesh type allows users to modify the geometry of the shape.\n\nHeatmaps can be created in XY Charts:\n```javascript\n// Add heatmap Series to a XY Chart\nchartXY.addHeatmapSeries( {\n rows: verticalResolution,\n columns: horizontalResolution,\n start: { x: 0, y: 0 },\n end: { x: 100, y: 100 },\n pixelate: false,\n // Make sure we're using the Mesh IntensitySeriesType\n type: IntensitySeriesTypes.Mesh\n})\n```\n\nThe *Mesh IntensitySeriesType* has the same API that is available with the *Grid IntensitySeriesType*, but in addition it has the *invalidateGeometryOnly* method:\n\n```javascript\n// Use invalidateGeometryOnly to edit the geometry of the heatmap and invalidate it.\n// This can be done by supplying a Matrix of Points to the method.\nheatmap.invalidateGeometryOnly( vertices: Matrix<Point> )\n// Optionally, the geometry can be modified by supplying the method with a callback\n// which modifies each point.\nheatmap.invalidateGeometryOnly( vertices: UpdateGeometryCallback )\n```\n","image":"heatmapMesh.png"},{"id":"lcjs-example-0802-spectrogram","title":"JavaScript Heatmap Spectrogram Chart","tags":["xy","heatmap","spectrogram","audio","dashboard","palette"],"description":"Example showcasing 2D audio analysis spectrogram with LightningChart JS","metaDescription":"LightningChart JS Interactive Examples. Fastest JavaScript Charts: Create High-Performance Scientific Charts, Precision for Medical Charts, Spectrograms, 2D Charts, 3D charts, Heatmaps as Spectrograms.","src":"/*\n * LightningChartJS 2D audio analysis spectrogram example.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PalettedFill,\n LUT,\n emptyFill,\n emptyLine,\n AxisScrollStrategies,\n AxisTickStrategies,\n ColorHSV,\n synchronizeAxisIntervals,\n Themes,\n} = lcjs;\n\nconst AudioContext = window.AudioContext || window.webkitAudioContext;\n// Create a new audio context,\n// for most part this context is not used for other than creating audiobuffer from audio data\nconst audioCtx = new AudioContext();\n\n// General configuration for common settings\nconst config = {\n /**\n * The resolution of the FFT calculations\n * Higher value means higher resolution decibel domain..\n */\n fftResolution: 4096,\n /**\n * Smoothing value for FFT calculations\n */\n smoothingTimeConstant: 0.1,\n /**\n * The size of processing buffer,\n * determines how often FFT is run\n */\n processorBufferSize: 2048,\n};\n\n// Initialize LightningChart JS\nconst lc = lightningChart();\n\n/**\n * Fetch audio file and create audio buffer from it.\n * @param {string} waveformUrl URL to the WaveForm to load\n * @returns {AudioBuffer} The audio file as an AudioBuffer\n */\nconst loadWaveForm = async (waveformUrl) => {\n // Fetch waveform\n const resp = await fetch(waveformUrl);\n // Convert fetch to array buffer\n const waveDataBuffer = await resp.arrayBuffer();\n // Convert array buffer to audio buffer\n const audioBuffer = await audioCtx.decodeAudioData(waveDataBuffer);\n return audioBuffer;\n};\n\n/**\n * @typedef WaveFormData\n * @type {object}\n * @property {Uint8Array[]} channels FFT Data for each channel\n * @property {number} stride Number of data points in a data block\n * @property {number} rowCount Number of rows of data\n * @property {number} maxFreq Maximum frequency of the data\n * @property {number} duration Audio buffer duration in seconds\n */\n\n/**\n * Process a AudioBuffer and create FFT Data for Spectrogram from it.\n * @param {AudioBuffer} audioBuffer AudioBuffer to process into FFT data.\n * @returns {WaveFormData} Processed data\n */\nconst processWaveForm = async (audioBuffer) => {\n // Create a new OfflineAudioContext with information from the pre-created audioBuffer\n // The OfflineAudioContext can be used to process a audio file as fast as possible.\n // Normal AudioContext would process the file at the speed of playback.\n const offlineCtx = new OfflineAudioContext(\n audioBuffer.numberOfChannels,\n audioBuffer.length,\n audioBuffer.sampleRate\n );\n // Create a new source, in this case we have a AudioBuffer to create it for, so we create a buffer source\n const source = offlineCtx.createBufferSource();\n // Set the buffer to the audio buffer we are using\n source.buffer = audioBuffer;\n // Set source channel count to the audio buffer channel count, if this wasn't set, the source would default to 2 channels.\n source.channelCount = audioBuffer.numberOfChannels;\n\n // We want to create spectrogram for each channel in the buffer, so we need to separate the channels to separate outputs.\n const splitter = offlineCtx.createChannelSplitter(source.channelCount);\n // Create a analyzer node for the full context\n const generalAnalyzer = offlineCtx.createAnalyser();\n generalAnalyzer.fftSize = config.fftResolution;\n generalAnalyzer.smoothingTimeConstant = config.smoothingTimeConstant;\n\n // Prepare buffers and analyzers for each channel\n const channelFFtDataBuffers = [];\n const channelDbRanges = [];\n const analyzers = [];\n for (let i = 0; i < source.channelCount; i += 1) {\n channelFFtDataBuffers[i] = new Uint8Array(\n (audioBuffer.length / config.processorBufferSize) *\n (config.fftResolution / 2)\n );\n // Setup analyzer for this channel\n analyzers[i] = offlineCtx.createAnalyser();\n analyzers[i].smoothingTimeConstant = config.smoothingTimeConstant;\n analyzers[i].fftSize = config.fftResolution;\n // Connect the created analyzer to a single channel from the splitter\n splitter.connect(analyzers[i], i);\n channelDbRanges.push({\n minDecibels: analyzers[i].minDecibels,\n maxDecibels: analyzers[i].maxDecibels,\n });\n }\n // Script processor is used to process all of the audio data in fftSize sized blocks\n // Script processor is a deprecated API but the replacement APIs have really poor browser support\n offlineCtx.createScriptProcessor =\n offlineCtx.createScriptProcessor || offlineCtx.createJavaScriptNode;\n const processor = offlineCtx.createScriptProcessor(\n config.processorBufferSize,\n 1,\n 1\n );\n let offset = 0;\n processor.onaudioprocess = (ev) => {\n // Run FFT for each channel\n for (let i = 0; i < source.channelCount; i += 1) {\n const freqData = new Uint8Array(\n channelFFtDataBuffers[i].buffer,\n offset,\n analyzers[i].frequencyBinCount\n );\n analyzers[i].getByteFrequencyData(freqData);\n }\n offset += generalAnalyzer.frequencyBinCount;\n };\n // Connect source buffer to correct nodes,\n // source feeds to:\n // splitter, to separate the channels\n // processor, to do the actual processing\n // generalAanalyzer, to get collective information\n source.connect(splitter);\n source.connect(processor);\n processor.connect(offlineCtx.destination);\n source.connect(generalAnalyzer);\n // Start the source, other wise start rendering would not process the source\n source.start(0);\n\n // Process the audio buffer\n await offlineCtx.startRendering();\n return {\n channels: channelFFtDataBuffers,\n channelDbRanges,\n stride: config.fftResolution / 2,\n tickCount: Math.ceil(audioBuffer.length / config.processorBufferSize),\n maxFreq: offlineCtx.sampleRate / 2, // max freq is always half the sample rate\n duration: audioBuffer.duration,\n };\n};\n\n/**\n * Create data matrix for heatmap from one dimensional array\n * @param {Uint8Array} data FFT Data\n * @param {number} strideSize Single data block width\n * @param {number} tickCount Data row count\n */\nconst remapDataToTwoDimensionalMatrix = (data, strideSize, tickCount) => {\n /**\n * @type {Array<number>}\n */\n const arr = Array.from(data);\n\n // Map the one dimensional data to two dimensional data where data goes from right to left\n // [1, 2, 3, 4, 5, 6]\n // -> strideSize = 2\n // -> rowCount = 3\n // maps to\n // [1, 4]\n // [2, 5]\n // [3, 6]\n const output = Array.from(Array(strideSize)).map(() =>\n Array.from(Array(tickCount))\n );\n for (let row = 0; row < strideSize; row += 1) {\n for (let col = 0; col < tickCount; col += 1) {\n output[row][col] = arr[col * strideSize + row];\n }\n }\n\n return output;\n};\n\n/**\n * Create a chart for a channel\n * @param {lcjs.Dashboard} dashboard Dashboard to create the chart in\n * @param {number} channelIndex Current channel index\n * @param {number} rows Data row count\n * @param {number} columns Data column count\n * @param {number} maxFreq Maximum frequency for data\n * @param {number} duration Duration in seconds\n * @param {number} minDecibels dB amount that matches value 0 in data (Uint8).\n * @param {number} maxDecibels dB amount that matches value 255 in data (Uint8).\n */\nconst createChannel = (\n dashboard,\n channelIndex,\n rows,\n columns,\n maxFreq,\n duration,\n minDecibels,\n maxDecibels\n) => {\n // Create a new chart in a specified row\n const chart = dashboard\n .createChartXY({\n columnIndex: 0,\n columnSpan: 1,\n rowIndex: channelIndex,\n rowSpan: 1,\n })\n // Hide the chart title\n .setTitleFillStyle(emptyFill);\n\n // Define function that maps Uint8 [0, 255] to Decibels.\n const intensityDataToDb = (intensity) =>\n minDecibels + (intensity / 255) * (maxDecibels - minDecibels);\n\n // Start position of the heatmap\n const start = {\n x: 0,\n y: 0,\n };\n // End position of the heatmap\n const end = {\n x: duration,\n // Use half of the fft data range\n y: Math.ceil(maxFreq / 2),\n };\n // Create the series\n const series = chart\n .addHeatmapGridSeries({\n // Data columns, defines horizontal resolution\n columns: columns,\n // Use half of the fft data range\n rows: Math.ceil(rows / 2),\n // Start position, defines where one of the corners for hetmap is\n start,\n // End position, defines the opposite corner of the start corner\n end,\n dataOrder: \"rows\",\n heatmapDataType: \"intensity\",\n })\n // Use palletted fill style, intensity values define the color for each data point based on the LUT\n .setFillStyle(\n new PalettedFill({\n lut: new LUT({\n steps: [\n {\n value: 0,\n color: ColorHSV(0, 1, 0),\n label: `${Math.round(intensityDataToDb(255 * (0 / 6)))}`,\n },\n {\n value: 255 * (1 / 6),\n color: ColorHSV(270, 0.84, 0.2),\n label: `${Math.round(intensityDataToDb(255 * (1 / 6)))}`,\n },\n {\n value: 255 * (2 / 6),\n color: ColorHSV(289, 0.86, 0.35),\n label: `${Math.round(intensityDataToDb(255 * (2 / 6)))}`,\n },\n {\n value: 255 * (3 / 6),\n color: ColorHSV(324, 0.97, 0.56),\n label: `${Math.round(intensityDataToDb(255 * (3 / 6)))}`,\n },\n {\n value: 255 * (4 / 6),\n color: ColorHSV(1, 1, 1),\n label: `${Math.round(intensityDataToDb(255 * (4 / 6)))}`,\n },\n {\n value: 255 * (5 / 6),\n color: ColorHSV(44, 0.64, 1),\n label: `${Math.round(intensityDataToDb(255 * (5 / 6)))}`,\n },\n {\n value: 255,\n color: ColorHSV(62, 0.32, 1),\n label: `${Math.round(intensityDataToDb(255 * (6 / 6)))}`,\n },\n ],\n units: \"dB\",\n interpolate: true,\n }),\n })\n )\n .setWireframeStyle(emptyLine)\n .setCursorResultTableFormatter((builder, series, dataPoint) =>\n builder\n .addRow(series.getName())\n .addRow(\"X:\", \"\", series.axisX.formatValue(dataPoint.x))\n .addRow(\"Y:\", \"\", series.axisY.formatValue(dataPoint.y))\n .addRow(\"\", intensityDataToDb(dataPoint.intensity).toFixed(1) + \" dB\")\n );\n\n // Set default X axis settings\n series.axisX\n .setInterval(start.x, end.x)\n .setTickStrategy(AxisTickStrategies.Empty)\n .setTitleMargin(0)\n .setScrollStrategy(undefined)\n .setMouseInteractions(false);\n // Set default chart settings\n chart\n .setPadding({ left: 0, top: 8, right: 8, bottom: 1 })\n .setMouseInteractions(false);\n // Set default X axis settings\n series.axisY\n .setInterval(start.y, end.y)\n .setTitle(`Channel ${channelIndex + 1} (Hz)`)\n .setScrollStrategy(AxisScrollStrategies.fitting);\n\n return {\n chart,\n series,\n };\n};\n\n/**\n * Render a spectrogram for given data set\n * @param {WaveFormData} data Data set to render\n */\nconst renderSpectrogram = async (data) => {\n // Create a dashboard with enough rows for the number of channels in data set\n const dashboard = lc\n .Dashboard({\n // theme: Themes.darkGold\n numberOfColumns: 1,\n numberOfRows: data.channels.length,\n })\n // Hide the dashboard splitter\n .setSplitterStyle(emptyLine);\n\n // Collection of created charts\n const charts = [];\n\n // Create channels and set data for each channel\n for (let i = 0; i < data.channels.length; i += 1) {\n // Create a chart for the channel\n const ch = createChannel(\n dashboard,\n i,\n data.stride,\n data.tickCount,\n data.maxFreq,\n data.duration,\n data.channelDbRanges[i].minDecibels,\n data.channelDbRanges[i].maxDecibels\n );\n // Setup the data for the chart\n const remappedData = remapDataToTwoDimensionalMatrix(\n data.channels[i],\n data.stride,\n data.tickCount\n )\n // Slice only first half of data (rest are 0s).\n .slice(0, data.stride / 2);\n\n // Set the heatmap data\n ch.series.invalidateIntensityValues({\n iRow: 0,\n iColumn: 0,\n values: remappedData,\n });\n // Add the created chart and series to collection\n charts.push(ch);\n }\n\n // Style to bottom most chart axis to use it as the common axis for each chart\n charts[charts.length - 1].series.axisX\n .setTickStrategy(AxisTickStrategies.Numeric)\n .setScrollStrategy(AxisScrollStrategies.fitting)\n .setTitle(`Duration (s)`)\n .setMouseInteractions(true);\n\n // Add LegendBox.\n const legend = dashboard\n .addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: \"max-width\",\n maxWidth: 0.3,\n })\n .setPosition({ x: 100, y: 50 })\n .setOrigin({ x: 1, y: 0 });\n charts.forEach((c) => legend.add(c.chart));\n // Link chart X axis scales\n const syncedAxes = charts.map(chart => chart.series.axisX)\n synchronizeAxisIntervals(...syncedAxes)\n\n return dashboard;\n};\n\n(async () => {\n // Remove loading spinner\n document.querySelectorAll(\".loading\").forEach((item) => {\n item.parentElement.removeChild(item);\n });\n const run = async () => {\n // Load waveform from url\n const waveform = await loadWaveForm(\n document.head.baseURI +\n \"examples/assets/0802/Truck_driving_by-Jason_Baker-2112866529_edit.wav\"\n );\n // Process the loaded wave form to prepare it for being added to the chart\n const processed = await processWaveForm(waveform);\n // Create a dashboard from the processed waveform data\n const dashboard = renderSpectrogram(processed);\n };\n // Check if audio context was started\n if (audioCtx.state === \"suspended\") {\n // Show a large play button\n const resumeElement = document.createElement(\"div\");\n resumeElement.style.position = \"absolute\";\n resumeElement.style.top = \"0\";\n resumeElement.style.left = \"0\";\n resumeElement.style.right = \"0\";\n resumeElement.style.bottom = \"0\";\n\n const resumeImg = document.createElement(\"img\");\n resumeImg.crossOrigin = ''\n resumeImg.src =\n document.head.baseURI +\n \"examples/assets/0802/play_circle_outline-24px.svg\";\n resumeImg.style.width = \"100%\";\n resumeImg.style.height = \"100%\";\n\n resumeElement.onclick = () => {\n audioCtx.resume();\n };\n resumeElement.appendChild(resumeImg);\n\n const innerElement = document.querySelector(\".chart\");\n let target;\n if (!innerElement) {\n target = document.createElement(\"div\");\n target.classList.add(\"inner\");\n document.body.appendChild(target);\n }\n const targetElement = innerElement || target;\n targetElement.appendChild(resumeElement);\n\n // Attach a listener to the audio context to remove the play button as soon as the context is running\n audioCtx.onstatechange = () => {\n if (audioCtx.state === \"running\") {\n run();\n audioCtx.onstatechange = void 0;\n targetElement.removeChild(resumeElement);\n }\n };\n } else {\n // Audio context is running so run the example\n run();\n }\n})();\n","url":null,"readme":"This example shows a simple use case for Heatmaps as a spectrogram.\n\nSpectrogram is a visual representation of the spectrum of frequencies. Spectrograms can be used to visualize any wave form. Most often spectrograms are used to display audio signals.\n\nThis example loads a audio file and shows spectrograms for each channel on the audio file.\n\nThe spectrogram shows frequency on one axis (Y Axis) and time on the other (X Axis). The color of a the heatmap at any point is the amplitude of the frequency at the specified time.\n\n## Getting the data\n\nFirst the audio file that will be shown is loaded with [fetch][fetch] and converted into an ArrayBuffer.\n\n```js\nconst response = await fetch('url')\nconst buffer = await response.arrayBuffer()\n```\n\nThis example uses the [Web Audio APIs][web-audio-api] to retrieve the frequency data to display in the heatmap. These APIs make it easy to work with audio files and manipulate the files. For spectrogram use the [AnalyzerNode][analyzer-node] is the most useful part of the API as it provides [getByteFrequencyData][getByteFrequencyData] method which is a implementation of [Fast Fourier Transform][fft].\nThe AudioContext contains method to convert an ArrayBuffer into an [AudioBuffer][AudioBuffer].\n\n```js\nconst audioBuffer = await audioContext.decodeAudioData(buffer)\n```\n\nNow that the audio file is converted into a AudioBuffer it's possible to start extracting data from it.\n\nTo process the full audio buffer as fast as possible, a [OfflineAudioContext][OfflineAudioContext] is used. The OfflineAudioContext doesn't output the data to a audio device, instead it will go through the audio as fast as possible and outputs an AudioBuffer with the processed data. In this example the processed audio buffer is not used, but the processing is used to calculate the FFT data we need to display the intensities for each frequency in the spectrogram. The audio buffer we have created is used as a [buffer source][createBufferSource] for the OfflineAudioContext.\n\nThe buffer source only has a single output but we want to be able to process each channel separately, to do this a [ChannelSplitter][createChannelSplitter] is used with the output count matching the source channel count.\n\n```js\nconst splitter = offlineCtx.createChannelSplitter(source.channelCount)\n```\n\nThis makes it possible to process each channel separately by making it possible to create AnalyzerNodes for each channel and only piping a single channel to each analyzer.\n\nA [ScriptProcessorNode][createScriptProcessor] is used to go through the audio buffer in chuncks. For each chunk, the FFT data is calculated for each channel and stored in large enough buffers to fit the full data.\n\nLast [startRendering()][start-rendering] method is called to render out the audio buffer. This is when all of the FFT calculation is done.\n\n## Showing the data\n\nEach channel of the audio file is shown in it's own chart inside a single dashboard. When the data is calculated, a dashboard is made. This dashboard is then passed to functions that setup the charts inside the dashboard and create the heatmap series based on the script processor buffer size and fft resolution.\n\nThe data from the audio APIs is in wrong format to display in the heatmap without editing it. The heatmap data has to be mapped from the one dimensional array it was generated in to a two dimensional array. This mapping in this example is done with `remapDataToTwoDimensionalMatrix` function, this function maps the data in columns. If the heatmap was displayed vertically, then the mapping would be easier as each stride of data could just be placed as a row.\n\n```js\n// Datamapping for vertical spectrogram\nconst output = Array.from(Array(tickCount)).map(()=> Array.from(Array(strideSize)))\nfor(let row = 0; row < strideSize; row += 1){\n output[row] = arr.slice(row*strideSize, row*strideSize + strideSize)\n}\n```\n\n[web-audio-api]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API\n[analyzer-node]: https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode\n[getByteFrequencyData]: https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getByteFrequencyData\n[fft]: https://en.wikipedia.org/wiki/Fast_Fourier_transform\n[fetch]: https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch\n[AudioBuffer]: https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer\n[OfflineAudioContext]: https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext\n[createBufferSource]: https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createBufferSource\n[createChannelSplitter]: https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createChannelSplitter\n[createSciptProcessor]: https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createScriptProcessor\n[start-rendering]: https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext/startRendering\n","image":"spectrogram.png"},{"id":"lcjs-example-0803-scrollingHeatmap","title":"JavaScript Scrolling Heatmap Chart","tags":["xy","heatmap","realtime","palette"],"description":"Example showcasing simple usage of Scrolling Heatmap Grid Series","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance heatmaps, scientific data visualization, scrolling heatmap charts, spectrograms as a heatmap.","src":"/*\n * LightningChartJS example that showcases simple usage of Scrolling Heatmap Grid Series.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PalettedFill,\n LUT,\n ColorHSV,\n emptyLine,\n AxisScrollStrategies,\n AxisTickStrategies,\n LegendBoxBuilders,\n Themes,\n} = lcjs;\n\nconst { createSpectrumDataGenerator } = require(\"@arction/xydata\");\n\n// Length of single data sample.\nconst dataSampleSize = 512;\n// Sampling rate as samples per second.\nconst sampleRateHz = 100\nconst sampleIntervalMs = 1000 / sampleRateHz\n\n// Setup PalettedFill for dynamically coloring Heatmap by Intensity values.\nconst lut = new LUT({\n steps: [\n { value: 0, label: \"0\", color: ColorHSV(0, 1, 0) },\n { value: 15, label: \"15\", color: ColorHSV(270, 0.84, 0.2) },\n { value: 30, label: \"30\", color: ColorHSV(289, 0.86, 0.35) },\n { value: 45, label: \"45\", color: ColorHSV(324, 0.97, 0.56) },\n { value: 60, label: \"60\", color: ColorHSV(1, 1, 1) },\n { value: 75, label: \"75\", color: ColorHSV(44, 0.64, 1) },\n ],\n units: \"dB\",\n interpolate: true,\n});\nconst paletteFill = new PalettedFill({ lut, lookUpProperty: \"value\" });\n\n// Create ChartXY.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"Scrolling Heatmap Spectrogram\");\nchart\n .getDefaultAxisX()\n .setTitle(\"Time\")\n // Setup progressive scrolling Axis.\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(-10 * 1000, 0)\n .setTickStrategy(AxisTickStrategies.Time);\nchart\n .getDefaultAxisY()\n .setTitle(\"Frequency (Hz)\")\n .setInterval(0, dataSampleSize, false, true);\n\n// Create Scrolling Heatmap Grid Series.\nconst heatmapSeries = chart\n .addHeatmapScrollingGridSeries({\n scrollDimension: \"columns\",\n resolution: dataSampleSize,\n start: { x: 0, y: 0 },\n step: { x: sampleIntervalMs, y: 1 },\n })\n .setFillStyle(paletteFill)\n .setWireframeStyle(emptyLine)\n .setMouseInteractions(false)\n // Configure automatic data cleaning.\n .setDataCleaning({\n // Out of view data can be lazily removed as long as total columns count remains over 1000.\n minDataPointCount: 1000,\n });\n\n// Add LegendBox to chart.\nconst legend = chart\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n .add(chart)\n\n// Stream in continous data.\nlet dataAmount = 0;\ncreateSpectrumDataGenerator()\n .setSampleSize(dataSampleSize)\n .setNumberOfSamples(1000)\n .generate()\n .setStreamRepeat(true)\n .setStreamInterval(25)\n .setStreamBatchSize(1)\n .toStream()\n // Scale Intensity values from [0.0, 1.0] to [0.0, 80]\n .map((sample) => sample.map((intensity) => intensity * 80))\n // Push Intensity values to Surface Grid as Columns.\n .forEach((sample) => {\n pushSample(sample)\n dataAmount += sample.length;\n });\n\n// The following logic ensures a static sampling rate, even if input data might vary.\n// This is done by skipping too frequent samples and duplicating too far apart samples.\n// The precision can be configured by simply changing value of `sampleRateHz`\nlet lastSample\nlet tFirstSample = 0\nconst pushSample = (sample) => {\n const tNow = performance.now()\n if (lastSample === undefined) {\n heatmapSeries.addIntensityValues([sample])\n lastSample = { sample, time: tNow, i: 0 }\n tFirstSample = tNow\n return\n }\n\n let nextSampleIndex = lastSample.i + 1\n let nextSampleTimeExact = tFirstSample + nextSampleIndex * sampleIntervalMs\n let nextSampleTimeRangeMin = nextSampleTimeExact - sampleIntervalMs / 2\n let nextSampleTimeRangeMax = nextSampleTimeExact + sampleIntervalMs / 2\n if (tNow < nextSampleTimeRangeMin) {\n // Too frequent samples must be scrapped. If this results in visual problems then sample rate must be increased.\n // console.warn(`Skipped too frequent sample`)\n return\n }\n if (tNow > nextSampleTimeRangeMax) {\n // At least 1 sample was skipped. In this case, the missing sample slots are filled with the values of the last sample.\n let repeatedSamplesCount = 0\n do {\n heatmapSeries.addIntensityValues([lastSample.sample])\n repeatedSamplesCount += 1\n nextSampleIndex += 1\n nextSampleTimeExact = tFirstSample + nextSampleIndex * sampleIntervalMs\n nextSampleTimeRangeMin = nextSampleTimeExact - sampleIntervalMs / 2\n nextSampleTimeRangeMax = nextSampleTimeExact + sampleIntervalMs / 2\n } while (tNow > nextSampleTimeRangeMax)\n\n heatmapSeries.addIntensityValues([sample])\n lastSample = { sample, time: tNow, i: nextSampleIndex }\n // console.warn(`Filled ${repeatedSamplesCount} samples`)\n return\n }\n // Sample arrived within acceptable, expected time range.\n heatmapSeries.addIntensityValues([sample])\n lastSample = { sample, time: tNow, i: nextSampleIndex }\n}\n\n// Display incoming points amount in Chart title.\nconst title = chart.getTitle();\nlet tStart = Date.now();\nlet lastReset = Date.now();\nconst updateChartTitle = () => {\n // Calculate amount of incoming points / second.\n if (dataAmount > 0 && Date.now() - tStart > 0) {\n const pps = (1000 * dataAmount) / (Date.now() - tStart);\n chart.setTitle(`${title} (${Math.round(pps)} data points / s)`);\n }\n // Reset pps counter every once in a while in case page is frozen, etc.\n if (Date.now() - lastReset >= 5000) {\n tStart = lastReset = Date.now();\n dataAmount = 0;\n }\n};\nsetInterval(updateChartTitle, 1000);\n","url":null,"readme":"This example showcases simple usage of `HeatmapScrollingGridSeries`, a simple, yet incredibly powerful series type.\n\n`HeatmapScrollingGridSeries` visualizes three dimensional data (X, Y, color) of large quantities.\nIt can easily handle data sets in million data points range even on low-end devices.\nWith large amounts of RAM even **billions** of data points can be visualized!\n\nHeatmaps can be created in XY Charts:\n\n```javascript\n// Add heatmap scrolling Grid Series to a XY Chart\nchartXY.addHeatmapScrollingGridSeries({\n resolution: 100,\n});\n```\n\nThe example displays live speed of incoming data as _data points per second_, feel free to try higher data rates by altering `dataSampleSize` in the example code to see how much data `HeatmapScrollingGridSeries` can handle on your machine!\n\nFor reference, on a Lenovo Yoga (average office laptop with no GPU to speak of), there was no visible effort even with `dataSampleSize: 5000` which means **150 000 incoming data points every single second**.\n\nWhat's equally impressive is that thanks to automatic data cleaning, this application can _run indefinitely!_ Read more about automatic data cleaning with `HeatmapScrollingGridSeries` below.\n\n# Heatmap Scrolling Grid Series options\n\nWhen `HeatmapScrollingGridSeries` is created, there is only one property that has to be specified always:\n\n`resolution`: amount of data values along non-scrolling dimension.\n\nWith just this configuration, a fully functional scrolling heatmap grid series capable of handling tens of millions data points is created.\n\nThe following optional properties can be used for tweaking heatmap behavior for exact application purposes:\n\n`start`: Axis coordinate where heatmap grid begins.\n\n`step`: The Axis offset between two heatmap cells.\n\n`scrollDimension`: By default the series is configured to have fixed `rows` (Y) resolution and scroll indefinitely along `columns` (X). This can be flipped by specifying `scrollDimension: rows`.\n\n# Heatmap Scrolling Grid Series data input\n\n`HeatmapScrollingGridSeries` receives data as _append_ operation to push on top of previously pushed data.\n\nData is added using `addIntensityValues` method:\n\n```js\n// Example syntax, append 2 samples to scrolling heatmap grid with resolution: 10\nheatmap.addIntensityValues([\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n]);\n```\n\n# Heatmap Scrolling Grid Series data cleaning\n\nAutomatic data cleaning is essential in streaming applications that run for long times or _even indefinitely_;\n\nIn LightningChart JS, this is configured with the `setDataCleaning` method;\n\n```js\n// Example, configure automatic data cleaning.\nheatmapGridSeries.setDataCleaning({\n // Out of view data can be lazily removed as long as total scrolling columns count remains over 1000.\n minDataPointCount: 1000,\n});\n```\n\nSimple? _- Yes._\n\nPowerful? _- Naturally._\n","image":"scrollingHeatmap.png"},{"id":"lcjs-example-0804-meshCircle","title":"JavaScript Mesh Circle Chart","tags":["xy","heatmap","palette"],"description":"Example shows visualization of intensity in circle-based mesh chart.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance heatmaps, scientific data visualization, scrolling heatmap charts, spectrograms as a heatmap.","src":"/*\n * LightningChartJS example for rendering a 'Mesh Circle'.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n IntensitySeriesTypes,\n PalettedFill,\n LUT,\n ColorRGBA,\n Themes\n} = lcjs\n\nconst lc = lightningChart()\n\nconst chart = lc.ChartXY({\n // theme: Themes.darkGold\n})\n .setTitle('Mesh Circle')\n\nconst axisX = chart.getDefaultAxisX()\n .setInterval(-90, 100, false, true) // interval of X axis \nconst axisY = chart.getDefaultAxisY()\n .setInterval(-50, 50, false, true) // interval of Y axis \n\n\n// Create LUT and FillStyle\nconst lut = new LUT({\n steps: [\n { value: 0, color: ColorRGBA(0, 0, 0, 0) }, // transparent at value 0\n { value: 50, color: ColorRGBA(255, 255, 0) }, // yellow at value 50\n { value: 100, color: ColorRGBA(255, 0, 0) } // red at value 100\n ],\n interpolate: true\n})\nconst paletteFill = new PalettedFill({ lut, lookUpProperty: 'value' })\n\n// Specify the resolution used for the mesh.\nconst rows = 51\nconst columns = rows\n\nconst intensityOptions = {\n rows,\n columns,\n start: { x: 0, y: 0 },\n end: { x: 50, y: 50 },\n pixelate: false, \n type: IntensitySeriesTypes.Mesh \n}\n\nconst meshCircle = chart.addHeatmapSeries(intensityOptions)\n .setFillStyle(paletteFill) // Use created Paletted FillStyle for the Mesh circle.\n .setCursorEnabled(false) //disable cursor interaction\n .invalidateGeometryOnly((row, column, prev) => {\n const angle = row * 2 * Math.PI / (rows - 1.3)\n const radius = column\n return {\n x: Math.sin(angle) * radius,\n y: Math.cos(angle) * radius,\n }\n })\n\n// Add LegendBox to chart.\nchart.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart)\n\nconst data = (rows, columns) => {\n let result = Array.from(Array(columns)).map(() => Array(rows))\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < columns; col++) {\n\n result[col][row] = (100 * Math.cos(col / (0.5 * Math.PI)) + (Math.floor(Math.random() * 10))) // set value for each cell\n }\n }\n return result\n}\n\n// update loop\nsetInterval(() => {\n meshCircle.invalidateValuesOnly(data(rows, columns))\n}, 20);\n","url":null,"readme":"This example shows visualization of intensity in circle-based mesh chart\n\nHeatmaps can be created in XY Charts:\n```javascript\n// Add meshCircle Series to a XY Chart\nchartXY.addHeatmapSeries( {\n rows: verticalResolution,\n columns: horizontalResolution,\n start: { x: 0, y: 0 },\n end: { x: 50, y: 50 },\n pixelate: false,\n // Make sure we're using the Mesh IntensitySeriesType\n type: IntensitySeriesTypes.Mesh\n})\n```\n\nThe *Mesh IntensitySeriesType* has the same API that is available with the *Grid IntensitySeriesType*, but in addition it has the *invalidateGeometryOnly* method:\n\n```javascript\n// Use invalidateGeometryOnly to edit the geometry of the meshSircle and invalidate it.\n// This can be done by supplying a Matrix of Points to the method.\nmeshCircle.invalidateGeometryOnly( vertices )\n// Optionally, the geometry can be modified by supplying the method with a callback\n// which modifies each point.\nmeshCircle.invalidateGeometryOnly( (row, column, current) => ({x: row, y: column}) )\n\n// adding values for mesh is done using invalidateValuesOnly\nmeshCircle.invalidateValuesOnly( values )\n\n// coloring is done using the Palette\nconst lut = new LUT({\n steps: [\n { value: 0, color: ColorRGBA(0, 0, 0, 0) }, // transparent at value 0\n { value: 50, color: ColorRGBA(255, 255, 0) }, // yellow at value 50\n { value: 100, color: ColorRGBA(255, 0, 0) } // red at value 100\n ],\n interpolate: true\n})\nconst paletteFill = new PalettedFill({ lut, lookUpProperty: 'x' })\n```\n","image":"meshCircle.png"},{"id":"lcjs-example-0805-spectrogramProjection","title":"JavaScript Spectrogram XY-Projection Chart","tags":["xy","line","heatmap","palette","dashboard"],"description":"Example for Chart with 2D spectrogram + dynamic projections on mouse interaction.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance heatmaps, scientific data visualization, scrolling heatmap charts, spectrograms as a heatmap.","src":"/*\n * LightningChartJS example for Chart with 2D spectrogram + dynamic projections on mouse interaction.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PalettedFill,\n LUT,\n emptyFill,\n emptyLine,\n AxisScrollStrategies,\n LegendBoxBuilders,\n ColorHSV,\n translatePoint,\n synchronizeAxisIntervals,\n Themes,\n} = lcjs;\n\nconst { createSpectrumDataGenerator } = require(\"@arction/xydata\");\n\nconst spectrogramColumns = 1024;\nconst spectrogramRows = 1024;\n\n// Create charts and series.\n\nconst dashboard = lightningChart()\n .Dashboard({\n // theme: Themes.darkGold,\n numberOfColumns: 2,\n numberOfRows: 2,\n disableAnimations: true,\n })\n .setColumnWidth(0, 1)\n .setColumnWidth(1, 0.2)\n .setRowHeight(0, 1)\n .setRowHeight(1, 0.3);\n\nconst chartSpectrogram = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n })\n .setTitle(\"2D Spectrogram with X & Y projection on mouse hover\");\n\nconst seriesSpectrogram = chartSpectrogram\n .addHeatmapGridSeries({\n columns: spectrogramColumns,\n rows: spectrogramRows,\n })\n .setMouseInteractions(false)\n .setWireframeStyle(emptyLine)\n .setFillStyle(\n new PalettedFill({\n lookUpProperty: \"value\",\n lut: new LUT({\n interpolate: true,\n steps: [\n { value: 0, label: \"0.0\", color: ColorHSV(0, 1, 0) },\n { value: 0.2, label: \"0.2\", color: ColorHSV(270, 0.84, 0.2) },\n { value: 0.4, label: \"0.4\", color: ColorHSV(289, 0.86, 0.35) },\n { value: 0.6, label: \"0.6\", color: ColorHSV(324, 0.97, 0.56) },\n { value: 0.8, label: \"0.8\", color: ColorHSV(1, 1, 1) },\n { value: 1.0, label: \"1.0\", color: ColorHSV(44, 0.64, 1) },\n ],\n }),\n })\n );\n\nconst legend = chartSpectrogram\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n .add(chartSpectrogram);\n\nconst chartProjectionY = dashboard\n .createChartXY({\n columnIndex: 1,\n rowIndex: 0,\n })\n .setTitleFillStyle(emptyFill)\n // NOTE: Hardcoded alignment with Spectrogram chart.\n .setPadding({ top: 44 })\n .setMouseInteractions(false);\n\nchartProjectionY\n .getDefaultAxisY()\n .setScrollStrategy(undefined)\n .setMouseInteractions(false);\n\n// Sync projection Axis with spectogram chart projected axis.\nsynchronizeAxisIntervals(chartSpectrogram.getDefaultAxisY(), chartProjectionY.getDefaultAxisY())\n\nchartProjectionY\n .getDefaultAxisX()\n .setScrollStrategy(AxisScrollStrategies.expansion)\n .setInterval(0, 1)\n .setMouseInteractions(false);\n\nconst seriesProjectionY = chartProjectionY\n .addLineSeries({\n dataPattern: {\n pattern: \"ProgressiveY\",\n regularProgressiveStep: true,\n },\n })\n .setName(\"Projection (Y)\")\n .setCursorSolveBasis(\"nearest-y\");\n\nconst chartProjectionX = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: 1,\n })\n .setTitleFillStyle(emptyFill)\n .setMouseInteractions(false);\nchartProjectionX\n .getDefaultAxisX()\n .setScrollStrategy(undefined)\n .setMouseInteractions(false);\n \n// Sync projection Axis with spectogram chart projected axis.\nsynchronizeAxisIntervals(chartSpectrogram.getDefaultAxisX(), chartProjectionX.getDefaultAxisX())\n\nchartProjectionX\n .getDefaultAxisY()\n .setScrollStrategy(AxisScrollStrategies.expansion)\n .setInterval(0, 1)\n .setMouseInteractions(false);\nconst seriesProjectionX = chartProjectionX\n .addLineSeries({\n dataPattern: {\n pattern: \"ProgressiveX\",\n regularProgressiveStep: true,\n },\n })\n .setName(\"Projection (X)\");\n\n// Align charts nicely.\nchartSpectrogram.getDefaultAxisY().setThickness(50)\nchartProjectionX.getDefaultAxisY().setThickness(50)\nchartSpectrogram.getDefaultAxisX().setThickness(25)\nchartProjectionY.getDefaultAxisX().setThickness(25)\n\n// Generate data.\ncreateSpectrumDataGenerator()\n .setNumberOfSamples(spectrogramColumns)\n .setSampleSize(spectrogramRows)\n .generate()\n .toPromise()\n .then((data) => {\n seriesSpectrogram.invalidateIntensityValues(data);\n\n console.log(seriesSpectrogram);\n // Add custom interaction when mouse is hovered over spectrogram chart.\n chartSpectrogram.onSeriesBackgroundMouseMove((_, event) => {\n // Solve mouse location on Axis.\n const locationAxis = translatePoint(\n chartSpectrogram.engine.clientLocation2Engine(\n event.clientX,\n event.clientY\n ),\n chartSpectrogram.engine.scale,\n seriesSpectrogram.scale\n );\n\n // Calculate spectrogram 1D projections at axis location for both X and Y planes.\n let projectionY;\n try {\n projectionY = data[Math.round(locationAxis.x)].map((value, i) => ({\n x: value,\n y: i,\n }));\n } catch (e) {}\n\n let projectionX;\n try {\n projectionX = [];\n const row = Math.round(locationAxis.y);\n for (let x = 0; x < spectrogramColumns; x += 1) {\n projectionX[x] = {\n x,\n y: data[x][row],\n };\n }\n } catch (e) {}\n\n // Update projection series data.\n seriesProjectionY.clear();\n if (projectionY) {\n seriesProjectionY.add(projectionY);\n }\n\n seriesProjectionX.clear();\n if (projectionX) {\n seriesProjectionX.add(projectionX);\n }\n });\n });\n","url":null,"readme":"This example shows how to create a 2D spectrogram chart with X and Y line projections over last mouse coordinate (custom interaction).\n\nEvery time the user moves mouse over the spectrogram 1024 + 1024 data points are picked from the data set and pushed to X and Y projections line series - this is an expensive operation, but handled really fast with calls to `LineSeries.clear().add(data)`.\n\nThe spectrogram chart contains 1024 x 1024 = ~1 million data points.\n","image":"spectrogramProjection.png"},{"id":"lcjs-example-0806-sweepingHeatmapGrid","title":"JavaScript Sweeping Heatmap Chart","tags":["xy","heatmap","realtime","palette"],"description":"Example for Sweeping Heatmap Chart using HeatmapGridSeries","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance heatmaps, scientific data visualization, scrolling heatmap charts, spectrograms as a heatmap.","src":"/*\n * LightningChartJS example that showcases simple usage of Scrolling Heatmap Grid Series.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PalettedFill,\n LUT,\n ColorHSV,\n emptyLine,\n LegendBoxBuilders,\n LinearGradientFill,\n ColorRGBA,\n Themes,\n} = lcjs;\n\nconst { createSpectrumDataGenerator } = require(\"@arction/xydata\");\n\n// Length of single data sample.\nconst dataSampleSize = 1000;\n// Length of visible sweeping history as columns count.\nconst sweepingHistory = 250;\n\n// Setup PalettedFill for dynamically coloring Heatmap by Intensity values.\nconst lut = new LUT({\n steps: [\n { value: 0, label: \"0\", color: ColorHSV(0, 1, 0) },\n { value: 15, label: \"15\", color: ColorHSV(270, 0.84, 0.2) },\n { value: 30, label: \"30\", color: ColorHSV(289, 0.86, 0.35) },\n { value: 45, label: \"45\", color: ColorHSV(324, 0.97, 0.56) },\n { value: 60, label: \"60\", color: ColorHSV(1, 1, 1) },\n { value: 75, label: \"75\", color: ColorHSV(44, 0.64, 1) },\n ],\n units: \"dB\",\n interpolate: true,\n});\nconst paletteFill = new PalettedFill({ lut, lookUpProperty: \"value\" });\n\n// Create ChartXY.\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n })\n .setTitle(\"Sweeping Heatmap Spectrogram\");\n\nchart\n .getDefaultAxisY()\n .setTitle(\"Frequency (Hz)\")\n .setInterval(0, dataSampleSize, false, true);\n\n// Create heatmap series.\nconst heatmapGridSeries = chart\n .addHeatmapGridSeries({\n columns: sweepingHistory,\n rows: dataSampleSize,\n })\n .setFillStyle(paletteFill)\n .setWireframeStyle(emptyLine)\n .setMouseInteractions(false);\n\n// Create Band for visualizing sweeping update.\nconst band = chart.getDefaultAxisX().addBand(true)\n .setStrokeStyle(emptyLine)\n .setFillStyle(new LinearGradientFill({\n angle: 90,\n stops: [\n {offset: 0, color: ColorRGBA(0, 0, 0, 255)},\n {offset: 1, color: ColorRGBA(0, 0, 0, 0)}\n ]\n }))\n .setMouseInteractions(false)\n\n// Add LegendBox to chart.\nconst legend = chart\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n .add(heatmapGridSeries);\n\n// Stream in sweeping data.\nlet iSample = 0;\nlet dataAmount = 0;\ncreateSpectrumDataGenerator()\n .setSampleSize(dataSampleSize)\n // NOTE: Number of unique samples in example data.\n .setNumberOfSamples(12340)\n .setVariation(15)\n .setFrequencyStability(0.7)\n .generate()\n .setStreamRepeat(true)\n .setStreamInterval(25)\n .setStreamBatchSize(1)\n .toStream()\n // Scale Intensity values from [0.0, 1.0] to [0.0, 80]\n .map((sample) => sample.map((intensity) => intensity * 80))\n .forEach((sample) => {\n // Produce sweeping update effect by pushing new samples in by invalidating previous intensity values with sweeping motion.\n heatmapGridSeries.invalidateIntensityValues({\n iColumn: iSample % sweepingHistory,\n iRow: 0,\n values: [sample],\n });\n\n band\n .setValueStart(iSample % sweepingHistory)\n .setValueEnd(band.getValueStart() + 10)\n\n dataAmount += sample.length;\n iSample += 1;\n });\n\n// Display incoming points amount in Chart title.\nconst title = chart.getTitle();\nlet tStart = Date.now();\nlet lastReset = Date.now();\nconst updateChartTitle = () => {\n // Calculate amount of incoming points / second.\n if (dataAmount > 0 && Date.now() - tStart > 0) {\n const pps = (1000 * dataAmount) / (Date.now() - tStart);\n chart.setTitle(`${title} (${Math.round(pps)} data points / s)`);\n }\n // Reset pps counter every once in a while in case page is frozen, etc.\n if (Date.now() - lastReset >= 5000) {\n tStart = lastReset = Date.now();\n dataAmount = 0;\n }\n};\nsetInterval(updateChartTitle, 1000);\n","url":null,"readme":"This example shows how to create a _sweeping update effect_ in 2D Heatmap Chart with LightningChart JS.\n\nThis is done by using `HeatmapGridSeries` (static size 2D heatmap) and writing on top of previous heatmap values in sweeping motion.\n\nThis behavior is preferred by some users, mostly since the chart gives real-time visualization but at the same time is _immobile_.\n\nFor alternate approach with _scrolling data appending_, see our [scrolling heatmap example](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0803-scrollingHeatmap.html).\n\nScrolling approach is generally encouraged since it interacts much nicer with _scrolling Axis ticks_, which as can be seen from the scrolling heatmap example - looks really nice with _live data_!\n\nPerformance-wise there is not much difference between the two - both operations are optimized to the maximum!\n","image":"sweepingHeatmapGrid.png"},{"id":"lcjs-example-0807-heatmapGridPixelInterpolation","title":"JavaScript Heatmap Bilinear Interpolation Chart","tags":["xy","heatmap","realtime","palette"],"description":"Example that showcases the pixel interpolation mode feature of 2D Heatmaps.","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance heatmaps, scientific data visualization, scrolling heatmap charts, spectrograms as a heatmap.","src":"/*\n * LightningChartJS example that showcases the pixel interpolation mode feature of 2D Heatmaps.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PalettedFill,\n LUT,\n ColorRGBA,\n LegendBoxBuilders,\n emptyFill,\n UIOrigins,\n Themes,\n} = lcjs;\n\nconst { createWaterDropDataGenerator } = require(\"@arction/xydata\");\n\n// Define heatmap intensity data.\nconst heatmapColumns = 20;\nconst heatmapRows = 40;\n\n// Define color look up table.\nconst palette = new PalettedFill({\n lookUpProperty: \"value\",\n lut: new LUT({\n interpolate: true,\n steps: [\n { value: 0, color: ColorRGBA(255, 215, 0) },\n { value: 100, color: ColorRGBA(255, 0, 0) },\n ],\n }),\n});\n\n// Create Dashboard with two charts and two Heatmap Grid Series.\nconst dashboard = lightningChart().Dashboard({\n numberOfColumns: 2,\n numberOfRows: 1,\n});\n\nconst chart0 = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n })\n .setTitleFillStyle(emptyFill)\n .setPadding({ top: 80 });\n\nconst heatmap0 = chart0\n .addHeatmapGridSeries({\n columns: heatmapColumns,\n rows: heatmapRows,\n dataOrder: \"rows\",\n })\n .setFillStyle(palette)\n .setMouseInteractions(false)\n .setPixelInterpolationMode(\"bilinear\")\n .setCursorInterpolationEnabled(true);\n\nconst legend0 = chart0\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.50,\n })\n .add(chart0)\n .setPosition({ x: 100, y: 100 })\n .setOrigin(UIOrigins.RightTop);\n\nconst chart1 = dashboard\n .createChartXY({\n columnIndex: 1,\n rowIndex: 0,\n })\n .setTitleFillStyle(emptyFill)\n .setPadding({ top: 80 });\n\nconst heatmap1 = chart1\n .addHeatmapGridSeries({\n columns: heatmapColumns,\n rows: heatmapRows,\n dataOrder: \"rows\",\n })\n .setFillStyle(palette)\n .setMouseInteractions(false)\n .setPixelInterpolationMode(\"disabled\")\n .setCursorInterpolationEnabled(false);\n\nconst legend1 = chart1\n .addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.50,\n })\n .add(chart1)\n .setPosition({ x: 100, y: 100 })\n .setOrigin(UIOrigins.RightTop);\n\n// Generate test data.\ncreateWaterDropDataGenerator()\n .setColumns(heatmapColumns)\n .setRows(heatmapRows)\n .generate()\n .then((data) => {\n heatmap0.invalidateIntensityValues(data);\n heatmap1.invalidateIntensityValues(data);\n });\n","url":null,"readme":"This example showcases the _pixel interpolation mode_ feature of `HeatmapGridSeries`.\n\n`HeatmapGridSeries` comes with powerful _per-pixel bilinear interpolation_ which smooths the data visualization by automatically interpolating intensity values and adjusting dynamic coloring accordingly.\n_Bilinear interpolation_ is a standard, well-known method in _data analysis_ - and it also looks cool!\n\nThis example shows _two_ `HeatmapGridSeries` side by side with the same data, the series on left has bilinear interpolation enabled (default) and on right it is disabled.\n\nAs can be seen, the _heatmap_ with bilinear interpolation looks much more detailed and convincing.\nHowever, it can be useful to disable this if you need to always be sure that what you're seeing is the exact data you supplied - not some interpolated value.\n\n```js\n// Example syntax for specifying heatmap pixel interpolation mode.\n\nheatmapSeries.setPixelInterpolationMode(\"disabled\");\n\nheatmapSeries.setPixelInterpolationMode(\"bilinear\");\n```\n\n_Pixel interpolation mode has no significant effect on performance._\n\nThe Heatmap on the left also showcases _auto cursor interpolation_, which can be enabled per-heatmap series with `setCursorInterpolationEnabled(true)`.\n","image":"heatmapGridPixelInterpolation.png"},{"id":"lcjs-example-0900-3dScatter","title":"JavaScript 3D Scatter Chart","tags":["scatter","point","3d"],"description":"Example showcasing the use of 3D point series. Also known as scatter plot.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChartJS example that showcases PointSeries in a 3D Chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SolidFill,\n ColorRGBA,\n PointStyle3D,\n Themes\n} = lcjs\n\n// Extract required parts from xyData.\nconst {\n createWaterDropDataGenerator\n} = require('@arction/xydata')\n\n// Initiate chart\nconst chart3D = lightningChart().Chart3D({\n disableAnimations: true,\n // theme: Themes.darkGold\n})\n .setTitle('3D Scatter Chart')\n\n// Set Axis titles\nchart3D.getDefaultAxisX().setTitle('Axis X')\nchart3D.getDefaultAxisY().setTitle('Axis Y')\nchart3D.getDefaultAxisZ().setTitle('Axis Z')\n\n// Create Point Series for rendering max Y coords.\nconst pointSeriesMaxCoords = chart3D.addPointSeries()\n .setPointStyle(new PointStyle3D.Triangulated({\n fillStyle: new SolidFill({ color: ColorRGBA(224, 152, 0) }),\n size: 10,\n shape: 'sphere'\n }))\n .setName('Max coords')\n\n// Create another Point Series for rendering other Y coords than Max.\nconst pointSeriesOtherCoords = chart3D.addPointSeries()\n .setPointStyle(new PointStyle3D.Triangulated({\n fillStyle: new SolidFill({ color: ColorRGBA(255, 0, 0) }),\n size: 5,\n shape: 'cube'\n }))\n .setName('Below Max')\n\n// Add LegendBox to chart.\nchart3D.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart3D)\n\n// Generate heatmap data for depicting amount of scattered points along the XZ plane.\nlet totalPointsAmount = 0\nconst rows = 40\nconst columns = 60\ncreateWaterDropDataGenerator()\n .setRows( rows )\n .setColumns( columns )\n .generate()\n .then( data => {\n // 'data' is a number Matrix number[][], that can be read as data[row][column].\n for ( let row = 0; row < rows; row ++ ) {\n for ( let column = 0; column < columns; column ++ ) {\n const value = data[row][column]\n // Generate 'value' amount of points along this XZ coordinate,\n // with the Y coordinate range based on 'value'.\n const pointsAmount = Math.ceil( value / 100 )\n const yMin = 0\n const yMax = value\n for ( let iPoint = 0; iPoint < pointsAmount; iPoint ++ ) {\n const y = yMin + Math.random() * (yMax - yMin)\n pointSeriesOtherCoords.add({ x: row, z: column, y })\n totalPointsAmount ++\n }\n pointSeriesMaxCoords.add({ x: row, z: column, y: yMax })\n totalPointsAmount ++\n }\n }\n\n chart3D.setTitle(chart3D.getTitle() + ` (${totalPointsAmount} data points)`)\n // Set explicit Y Axis interval.\n chart3D.getDefaultAxisY().setInterval(0, 150, 2000, true)\n })\n\n","url":null,"readme":"*Also known as a Scatter Graph, Scatter Series, Point Graph, Scatter diagram or Scattergram*\n\nThis example shows a simple 3D Point Graph with points drawn using 3D PointSeries for a visual representation of the data points 'markers'. The point graph is a type of chart or mathematical diagram drawn on a Cartesian coordinate system and represents the relationship between two variables.\n\nThis type of series does not contain the visual representation of lines for the connection of data points but only data 'markers'.\n\nThe chart can be created with few simple lines of code:\n\n```javascript\n// Create a new ChartXY.\nconst chart3D = lightningChart().Chart3D()\n\n// Add a line series using default X, Y and Z axes.\nconst series = chart3D.addPointSeries()\n```\n\nThe series accepts points in format `{ x: number, y: number, z:number }`. Any number of points can be added with a single call.\n\n```javascript\n// Single point.\nseries.add({ x: 50, y: 60, z: 40 })\n\n// Multiple points at once.\nseries.add([\n { x: 55, y: 60, z:40 },\n { x: 60, y: 62, z:40 },\n { x: 65, y: 65, z:50 }\n])\n```\n","image":"3dScatter.png"},{"id":"lcjs-example-0901-3dLineSeries","title":"JavaScript 3D Line Series","tags":["line","3d"],"description":"Example showcasing the use of 3D Line Series.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChartJS example that showcases LineSeries in a 3D Chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n Themes\n} = lcjs\n\n// Extract required parts from xyData.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Initiate chart\nconst chart3D = lightningChart().Chart3D({\n // theme: Themes.darkGold\n})\n // Set 3D bounding box dimensions to highlight X Axis. \n .setBoundingBox({ x: 1.0, y: 0.5, z: 0.4 })\n\n// Set Axis titles\nchart3D.getDefaultAxisX().setTitle('Axis X')\nchart3D.getDefaultAxisY().setTitle('Axis Y')\nchart3D.getDefaultAxisZ().setTitle('')\n\n// Disable Z Axis ticks as it doesn't represent any actual data dimension (only visual perspective).\nchart3D.getDefaultAxisZ().setTickStrategy( AxisTickStrategies.Empty )\n\n// Define Series configuration for simplified example modification.\nconst seriesConf = [\n {\n name: 'Series A',\n dataAmount: 50,\n },\n {\n name: 'Series B',\n dataAmount: 50\n },\n {\n name: 'Series C',\n dataAmount: 50\n },\n]\n\n// Set X Axis interval immediately (before all data is streamed).\nchart3D.getDefaultAxisX().setInterval(0, seriesConf.reduce((prev, cur) => Math.max(prev, cur.dataAmount), 0), false, true)\n\n// Set Z Axis interval immediately.\nchart3D.getDefaultAxisZ().setInterval(-1, 1+seriesConf.reduce((prev, cur, i) => Math.max(prev, i), 0), false, true)\n\n// Create Series and generate test data.\nlet totalDataAmount = 0\nseriesConf.forEach((conf, iSeries) => {\n const seriesName = conf.name || ''\n const seriesDataAmount = conf.dataAmount || 100\n const seriesZ = conf.z || iSeries\n \n const series = chart3D.addPointLineSeries()\n .setName(seriesName)\n\n createProgressiveTraceGenerator()\n .setNumberOfPoints(seriesDataAmount)\n .generate()\n .toPromise()\n .then((data) => {\n // Map XY data to XYZ data.\n return data.map((xy) => ({\n x: xy.x,\n y: xy.y,\n z: seriesZ\n }))\n })\n .then((data) => {\n // Stream data into series very quickly.\n setInterval(() => {\n const batch = data.splice(0, 3)\n if (batch.length > 0) {\n series.add(batch)\n totalDataAmount += batch.length\n chart3D.setTitle(`3D Line Series (${totalDataAmount} data points)`)\n }\n }, 30)\n })\n})\n\n// Add LegendBox to chart.\nconst legend = chart3D.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart3D)\n","url":null,"readme":"*Also known as a Line Graph or Line Chart*\n\nThis example shows the basic usage of a 3D line series. The line series is drawn on a Cartesian coordinate system and represents the relationship between two variables. Line series display information as a series of data points connected by straight line segments. They are most often used to visualize the changes in data or reveal trends in a dataset.\n\nThis type of series does not contain the visual representation of 'markers' for the data points but only continuously connected line between all of them. Additionally, it allows drawing lines in any direction.\n\nThe chart can be created with few simple lines of code:\n\n```javascript\n// Create a new ChartXY.\nconst chart3D = lightningChart().Chart3D()\n\n// Add a line series using default X, Y and Z axes.\nconst series = chart3D.addLineSeries()\n```\n\nThe series accepts points in format `{ x: number, y: number, z:number }`. Any number of points can be added with a single call.\n\n```javascript\n// Single point.\nseries.add({ x: 50, y: 60, z: 40 })\n\n// Multiple points at once.\nseries.add([\n { x: 55, y: 60, z: 60 },\n { x: 60, y: 62, z: 50 },\n { x: 65, y: 65, z: 60 }\n])\n```\n","image":"3dLine.png"},{"id":"lcjs-example-0904-3dSpectrogramBox","title":"JavaScript Spectrogram Box Series 3D","tags":["3d","box","spectrogram","palette"],"description":"Example showcasing the use of BoxSeries3D to render a scrolling 3D spectrogram.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChartJS example that showcases Box Series 3D to render a 3D spectrogram.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n ColorRGBA,\n LUT,\n PalettedFill,\n AxisScrollStrategies,\n UIElementBuilders,\n UIOrigins,\n UILayoutBuilders,\n UIBackgrounds,\n Themes\n} = lcjs\n\nconst {\n createSpectrumDataGenerator\n} = require('@arction/xydata')\n\n// Length of single data sample.\nconst dataSampleSize = 60\n\n// Length of data history.\nconst dataHistoryLength = 120\n\n// Initial camera location.\nconst initialCameraLocation = {x: 0.10, y: 0.08, z: 1.2}\n\n\n// Setup PalettedFill for dynamically coloring Boxes by an associated 'value' property.\nconst lut = new LUT( {\n steps: [\n { value: 15, color: ColorRGBA( 0, 0, 0 ) },\n { value: 30, color: ColorRGBA( 255, 255, 0 ) },\n { value: 45, color: ColorRGBA( 255, 204, 0 ) },\n { value: 60, color: ColorRGBA( 255, 128, 0 ) },\n { value: 100, color: ColorRGBA( 255, 0, 0 ) }\n ],\n units: 'dB',\n interpolate: true\n} )\nconst paletteFill = new PalettedFill( { lut, lookUpProperty: 'y' } )\n\n\n// Create Chart3D and configure Axes.\nconst chart3D = lightningChart().Chart3D({\n disableAnimations: true,\n // theme: Themes.darkGold\n})\n .setTitle( '3D Box Series Spectrogram' )\n .setBoundingBox( { x: 1, y: 1, z: 2 } )\nchart3D.setCameraLocation( initialCameraLocation )\nchart3D.getDefaultAxisY()\n .setScrollStrategy( AxisScrollStrategies.expansion )\n .setInterval( 0, 100 )\n .setTitle( 'Power spectrum P(f)' )\nchart3D.getDefaultAxisX()\n .setTitle( 'Frequency (Hz)' )\nchart3D.getDefaultAxisZ()\n .setTitle( 'Time' )\n .setInterval( 0, -dataHistoryLength )\n .setScrollStrategy( AxisScrollStrategies.progressive )\n\n\n// Create Box Series 3D.\nconst boxSeries = chart3D.addBoxSeries()\n .setFillStyle( paletteFill )\n .setRoundedEdges( undefined )\n .setName('Spectrogram (box)')\n\n\n\n// Create a data grid of Boxes which we can mutate without needing to create new Boxes for best performance.\nconst boxGrid = []\nfor ( let sampleIndex = 0; sampleIndex < dataHistoryLength; sampleIndex++ ) {\n const sampleBoxIDs = []\n for ( let i = 0; i < dataSampleSize; i++ ) {\n const id = sampleIndex * dataSampleSize + i\n // Add empty Box to series.\n boxSeries.invalidateData( [{\n id,\n yMin: 0,\n yMax: 0,\n zMin: 0,\n zMax: 0,\n // Box X coordinates don't have to change afterwards.\n xMin: i,\n xMax: i + 1.0\n }] )\n sampleBoxIDs.push( id )\n }\n boxGrid.push( sampleBoxIDs )\n}\n\n// Add LegendBox to chart.\nconst legend = chart3D.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart3D)\n\n\nlet sampleIndex = 0\ncreateSpectrumDataGenerator()\n .setSampleSize( dataSampleSize )\n .setNumberOfSamples( dataHistoryLength )\n .setVariation( 5.0 )\n .generate()\n .setStreamRepeat( true )\n .setStreamInterval( 1000 / 60 )\n .setStreamBatchSize( 1 )\n .toStream()\n // Scale Y values from [0.0, 1.0] to [0.0, 80]\n .map( sample => sample.map( y => y * 80 ) )\n // Map Y values to a Row of Boxes.\n .forEach( sample => {\n const infiniteStreamingDataEnabled = toggleStreamingCheckBox.getOn()\n const addSample = infiniteStreamingDataEnabled || sampleIndex < dataHistoryLength\n\n if ( addSample ) {\n // Instead of making new Boxes each sample (slow), get the oldest row of Boxes that were created beforehand.\n const rowIndex = sampleIndex % dataHistoryLength\n const boxIDs = boxGrid[rowIndex]\n\n // Map Y values to BoxDataBounds format.\n const boxesData = sample.map( ( y, i ) => ( {\n id: boxIDs[i],\n yMin: 0,\n yMax: y,\n zMin: sampleIndex,\n zMax: sampleIndex + 1.0,\n } ) )\n boxSeries.invalidateData( boxesData )\n\n sampleIndex++\n }\n } )\n\n\n// Animate Camera movement from file.\n;(async () => {\n const cameraAnimationData = await (\n fetch( document.head.baseURI + 'examples/assets/0904/camera.json' )\n .then( r => r.json() )\n )\n if ( ! cameraAnimationData ) {\n console.log(`No Camera animation data.`)\n return\n }\n console.log(`Loaded Camera animation data.`)\n let frame = 0\n const nextFrame = () => {\n if ( cameraAnimationEnabledCheckbox.getOn() ) {\n const { cameraLocation } = cameraAnimationData.frames[Math.floor(frame) % cameraAnimationData.frames.length]\n chart3D.setCameraLocation( cameraLocation )\n frame += 2\n }\n requestAnimationFrame( nextFrame )\n }\n requestAnimationFrame( nextFrame )\n})()\n\n\n\n// * UI controls *\nconst group = chart3D.addUIElement( UILayoutBuilders.Column\n .setBackground( UIBackgrounds.Rectangle )\n)\ngroup\n .setPosition( { x: 0, y: 100 } )\n .setOrigin( UIOrigins.LeftTop )\n .setMargin( 10 )\n .setPadding( 4 )\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-height',\n maxHeight: 0.30,\n })\n\n// Add UI control for toggling between infinite streaming data and static data amount.\nconst handleStreamingToggled = ( state ) => {\n toggleStreamingCheckBox.setText( state ? 'Disable infinite streaming data' : 'Enable infinite streaming data' )\n if ( toggleStreamingCheckBox.getOn() !== state ) {\n toggleStreamingCheckBox.setOn( state )\n }\n}\nconst toggleStreamingCheckBox = group.addElement( UIElementBuilders.CheckBox )\ntoggleStreamingCheckBox.onSwitch(( _, state ) => handleStreamingToggled( state ) )\nhandleStreamingToggled( true )\n\n// Add UI control for toggling camera animation.\nconst handleCameraAnimationToggled = ( state ) => {\n cameraAnimationEnabledCheckbox.setText( state ? 'Disable camera animation' : 'Enable camera animation' )\n if ( cameraAnimationEnabledCheckbox.getOn() !== state ) {\n cameraAnimationEnabledCheckbox.setOn( state )\n }\n}\nconst cameraAnimationEnabledCheckbox = group.addElement( UIElementBuilders.CheckBox )\ncameraAnimationEnabledCheckbox.onSwitch((_, state) => handleCameraAnimationToggled( state ))\nhandleCameraAnimationToggled( true )\nchart3D.onBackgroundMouseDrag(() => {\n handleCameraAnimationToggled( false )\n})\n","url":null,"readme":"This example shows a use case for 3D Box Series as a 3D *spectrogram*\n\nSpectrogram is a visual representation of the spectrum of frequencies. Spectrograms can be used to visualize any wave form. Most often spectrograms are used to display audio signals.\n\nThe spectrogram shows frequency on one axis (X Axis) and time on the other (Z Axis). The amplitude of the frequency is displayed both by the Y coordinate as well as the dynamically applied *color*.\n","image":"3dSpectrogramBox.png"},{"id":"lcjs-example-0906-3dSimpleSurfaceMesh","title":"JavaScript 3D Simple Surface Mesh","tags":["3d","surface","mesh","palette"],"description":"Example showcasing simple usage of 3D Surface Mesh Series","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChartJS example that showcases LineSeries in a 3D Chart.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n SurfaceSeriesTypes3D,\n ColorHSV,\n ColorRGBA,\n IndividualPointFill,\n PalettedFill,\n SolidFill,\n LUT,\n UIOrigins,\n UIBackgrounds,\n UIElementBuilders,\n UILayoutBuilders,\n emptyFill,\n Themes\n} = lcjs\n\nconst {\n createWaterDropDataGenerator\n} = require('@arction/xydata')\n\n\n\nconst chart3D = lightningChart().Chart3D( {\n disableAnimations: true,\n // theme: Themes.darkGold\n} )\n .setTitle( 'Simple 3D Surface Mesh' )\n\n\nchart3D.getDefaultAxisX().setInterval( -3.55, 3.55 )\nchart3D.getDefaultAxisY().setInterval( -3.55, 3.55 )\nchart3D.getDefaultAxisZ().setInterval( -3.55, 3.55 )\n\n\n\n// Create color Look-Up-Tables for dynamic colouring.\nconst paletteY = new LUT( {\n steps: [\n { value: -1.5, color: ColorRGBA( 0, 0, 255 ) },\n { value: -0.2, color: ColorRGBA( 255, 255, 255 ) }\n ],\n interpolate: true\n} )\nconst paletteValue = new LUT( {\n steps: [\n { value: 0, color: ColorRGBA( 0, 0, 0 ) },\n { value: 30, color: ColorRGBA( 255, 255, 0 ) },\n { value: 45, color: ColorRGBA( 255, 204, 0 ) },\n { value: 60, color: ColorRGBA( 255, 128, 0 ) },\n { value: 100, color: ColorRGBA( 255, 0, 0 ) }\n ],\n interpolate: true\n} )\n\n\nconst rows = 150\nconst columns = rows\nconst surface = chart3D.addSurfaceSeries( {\n type: SurfaceSeriesTypes3D.Mesh,\n rows,\n columns,\n start: { x: 0, z: 0 },\n end: { x: 100, z: 100 },\n pixelate: true\n} )\n\n\n\n// Assign a Value to each coordinate of the Grid to be used when colouring by look up value.\ncreateWaterDropDataGenerator()\n .setRows( rows )\n .setColumns( columns )\n .setWaterDrops([\n { rowNormalized: 0.2, columnNormalized: 0.6, amplitude: 23 },\n { rowNormalized: 0.5, columnNormalized: 0.5, amplitude: 74 },\n { rowNormalized: 0.7, columnNormalized: 0.3, amplitude: 16 }\n ])\n .setOffsetLevel( 58 )\n .setVolatility( 25 )\n .generate()\n .then( intensityData => {\n surface.invalidateValuesOnly( intensityData )\n } )\n\n\n\n// Assign a Color to each coordinate of the Grid to be used when colouring by individual color.\n// Leave some blanks to showcase fall back color.\nsurface.invalidateColorsOnly( ( row, column ) => Math.random() >= 0.80 ? ColorRGBA( 255, 0, 0 ) : undefined )\n\n\n\n// Define Mesh geometry as a function of: (row, column) => { x, y, z }\nconst y1 = ( t ) => .3 * Math.sin( t * 4 * Math.PI / columns )\nconst y2 = ( t ) => 2.5 + Math.cos( t * 4 * Math.PI / columns )\nsurface.invalidateGeometryOnly( ( row, column, prev ) => {\n const angle = row * 2 * Math.PI / ( rows - 1 )\n const radius = Math.abs( y2( column ) - y1( column ) )\n return {\n x: Math.sin( angle ) * radius,\n y: Math.cos( angle ) * radius,\n z: column\n }\n} )\n\n\n\n// Animate Camera movement from file.\n;(async () => {\n const cameraAnimationData = await (\n fetch( document.head.baseURI + 'examples/assets/0906/camera.json' )\n .then( r => r.json() )\n )\n if ( ! cameraAnimationData ) {\n console.log(`No Camera animation data.`)\n return\n }\n console.log(`Loaded Camera animation data.`)\n let frame = 0\n const nextFrame = () => {\n if ( cameraAnimationEnabledCheckbox.getOn() ) {\n const { cameraLocation } = cameraAnimationData.frames[Math.floor(frame) % cameraAnimationData.frames.length]\n chart3D.setCameraLocation( cameraLocation )\n frame += 1.5\n }\n requestAnimationFrame( nextFrame )\n }\n requestAnimationFrame( nextFrame )\n})()\n\n\n\n// * UI controls *\nconst group = chart3D.addUIElement( UILayoutBuilders.Column\n .setBackground( UIBackgrounds.Rectangle )\n)\ngroup\n .setPosition( { x: 0, y: 100 } )\n .setOrigin( UIOrigins.LeftTop )\n .setMargin( 10 )\n .setPadding( 4 )\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-height',\n maxHeight: 0.30,\n })\n\n\n// Add UI for selecting surface style\nconst options = []\nconst addOption = ( label, onEnabled, defaultSelection = false ) => {\n const checkBox = group.addElement( UIElementBuilders.CheckBox )\n .setText( label )\n\n if ( defaultSelection ) {\n checkBox.setOn( true )\n onEnabled()\n }\n\n checkBox.onSwitch( ( _, state ) => {\n if ( state ) {\n onEnabled()\n checkBox.setMouseInteractions( false )\n // Set all other check boxes off.\n options.forEach( option => option.checkBox !== checkBox && option.checkBox.setOn( false ).setMouseInteractions( true ) )\n }\n } )\n\n options.push( { checkBox } )\n}\n\naddOption( 'Color look up by Y', () =>\n // Look up data point color from LUT by Y coordinate\n surface.setFillStyle( new PalettedFill( { lut: paletteY, lookUpProperty: 'y' } ) )\n)\naddOption( 'Color look up by Value', () =>\n // Look up data point color from LUT by number Value associated with it (assigned by user)\n surface.setFillStyle( new PalettedFill( { lut: paletteValue, lookUpProperty: 'value' } ) )\n , true\n)\naddOption( 'Individual Color', () =>\n // Color data points by Colors assigned to each data point.\n surface.setFillStyle( new IndividualPointFill()\n // Specify Color to be used for data points that haven't been assigned a Color.\n .setFallbackColor( ColorRGBA( 0, 255, 0 ) )\n )\n)\naddOption( 'Solid color', () =>\n // Single solid color.\n surface.setFillStyle( new SolidFill( { color: ColorHSV( Math.random() * 360 ) } ) )\n)\n\n\n// Add UI for toggling wireframe.\nconst handleWireframeToggled = ( state ) => {\n // Set Wireframe style.\n surface.setWireframeStyle( state ?\n new SolidFill( { color: ColorRGBA( 0, 0, 0, 50 ) } ) :\n emptyFill\n )\n wireframeCheckbox.setText( state ? 'Hide wireframe' : 'Show wireframe' )\n} \nconst wireframeCheckbox = group.addElement( UIElementBuilders.CheckBox )\nwireframeCheckbox.onSwitch((_, state) => handleWireframeToggled( state ))\nwireframeCheckbox.setOn( true )\n\n\n// Add UI control for toggling camera animation.\nconst handleCameraAnimationToggled = ( state ) => {\n cameraAnimationEnabledCheckbox.setText( state ? 'Disable camera animation' : 'Enable camera animation' )\n if ( cameraAnimationEnabledCheckbox.getOn() !== state ) {\n cameraAnimationEnabledCheckbox.setOn( state )\n }\n}\nconst cameraAnimationEnabledCheckbox = group.addElement( UIElementBuilders.CheckBox )\ncameraAnimationEnabledCheckbox.onSwitch((_, state) => handleCameraAnimationToggled( state ))\nhandleCameraAnimationToggled( true )\nchart3D.onBackgroundMouseDrag(() => {\n handleCameraAnimationToggled( false )\n})\n\n// Add LegendBox to chart.\nconst legend = chart3D.addLegendBox().add(chart3D)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })","url":null,"readme":"This example shows a 3D Mesh surface with various different dynamic styles selectable from the User Interface.\n\nThe Chart is rendered using SurfaceMeshSeries3D, a series type that renders a continous 3D mesh, with each individual data point configurable with its own color (which can also be looked up dynamically from an attached Color table).\n\nThe Mesh geometry is defined by warping a data point matrix into XYZ coordinates.\nIn this example, the imaginary matrixes *rows* are warped into an *angle* on the YX plane and *columns* into Z coordinate as well as a radius, forming a 3D tube.\n\nThe Mesh in the example has 150*150 (22 500) data points.\n\n## SurfaceMeshSeries3D data format\n\n`SurfaceMeshSeries3D` stores 3 kinds of user modifiable data.\nEach type of data has its own invalidation method. All these methods can be called either with:\n- callback function.\n * Called back for each data point of the mesh.\n * Function then returns the value to be associated with that data point.\n\n- data matrix.\n * Multidimensional array of data values.\n\nIt is also possible to not invalidate the whole mesh, but only a section of it. This is done by appending a second parameter, which specifies the range of modification (`GridRangeOptions`).\n\n\n### Geometry map\n\nEach data point on the mesh is associated with a 3D coordinate (`Point3D`).\n\nGeometry coordinates are invalidated with `SurfaceMeshSeries3D.invalidateGeometryOnly`\n```typescript\n// Invalidate full meshes geometry coordinates by callback.\nSurfaceMeshSeries3D.invalidateGeometryOnly(( row, column, prev ) => ({\n x: row,\n y: column,\n z: Math.pow(row + column * rowsAmount, 2) / (rowsAmount * columnsAmount)\n}))\n```\n\n### Look-Up-Value map\n\nEach data point on the mesh can be associated with a numeric look-up value (`Number`).\n\nThis can be used to dynamically color each data point based on an attached Color look-up table (`LUT`).\nNote that coloring by the look-up values needs to be enabled by setting the Series' *FillStyle* as `PalettedFill`.\n\nLook-Up-Values are invalidated with `SurfaceMeshSeries3D.invalidateValuesOnly`\n```typescript\n// Define Color Look-Up-Table.\nconst lut = new LUT( {\n steps: [\n { value: 0, color: ColorRGBA( 0, 0, 0 ) },\n { value: 50, color: ColorRGBA( 255, 0, 0 ) }\n ],\n interpolate: true\n} )\n\n// Invalidate Look-Up-Values by data matrix.\nSurfaceMeshSeries3D.invalidateValuesOnly(\n [\n // First row.\n [0,0,0,0,0],\n // Second row.\n [10,10,10,10,10],\n // and so forth...\n [20,20,20,20,20],\n [30,30,30,30,30],\n [40,40,40,40,40],\n ]\n)\n\n// Configure Series fill style as look up from table.\nSurfaceMeshSeries3D.setFillStyle( new PalettedFill({ lut }) )\n```\n\n### Color map\n\nEach data point on the mesh can be associated with a `Color`.\n\nThis can be used to color each data point with its own Color.\nNote that coloring by the individual Colors needs to be enabled by setting the Series' *FillStyle* as `IndividualPointFill`.\n\nColor values are invalidated with `SurfaceMeshSeries3D.invalidateColorsOnly`\n```typescript\n// Invalidate first row of Colors by callback.\nSurfaceMeshSeries3D.invalidateColorsOnly(\n ( row, column, prev ) => new ColorHSV( column * 10 ),\n {\n row: { start: 0, end: 1 },\n column: { start: 0, end: numberOfColumns }\n }\n)\n\n// Configure Series fill style as individual colors.\nSurfaceMeshSeries3D.setFillStyle( new IndividualPointFill() )\n```\n","image":"3dSimpleSurfaceMesh.png"},{"id":"lcjs-example-0907-3dBoxRounded","title":"JavaScript 3D Box Series rounded edges","tags":["3d","box","palette"],"description":"Example showcasing simple usage of BoxSeries3D and the rounded edges feature.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChartJS example that showcases BoxSeries3D with rounded edges.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisScrollStrategies,\n PalettedFill,\n ColorRGBA,\n LUT,\n UILayoutBuilders,\n UIOrigins,\n UIElementBuilders,\n Themes\n} = lcjs\n\nconst {\n createWaterDropDataGenerator\n} = require('@arction/xydata')\n\n\n\nconst chart3D = lightningChart().Chart3D( {\n disableAnimations: true,\n // theme: Themes.darkGold\n} )\n .setTitle( 'BoxSeries3D with rounded edges enabled' )\n\nchart3D.getDefaultAxisY()\n .setScrollStrategy( AxisScrollStrategies.expansion )\n .setTitle( 'Height' )\n\nchart3D.getDefaultAxisX()\n .setTitle( 'X' )\n\nchart3D.getDefaultAxisZ()\n .setTitle( 'Z' )\n\nconst boxSeries = chart3D.addBoxSeries()\nconst resolution = 10\n\n// Create Color Look-Up-Table and FillStyle\nconst lut = new LUT( {\n steps: [\n { value: 0, color: ColorRGBA( 0, 0, 0 ) },\n { value: 30, color: ColorRGBA( 255, 255, 0 ) },\n { value: 45, color: ColorRGBA( 255, 204, 0 ) },\n { value: 60, color: ColorRGBA( 255, 128, 0 ) },\n { value: 100, color: ColorRGBA( 255, 0, 0 ) }\n ],\n interpolate: true\n} )\n\nboxSeries\n .setFillStyle( new PalettedFill( { lut, lookUpProperty: 'y' } ) )\n // Specify edge roundness.\n // For applications with massive amounts of small Boxes, it is wise to disable for performance benefits.\n .setRoundedEdges( 0.4 )\n\n// Add LegendBox to chart.\nconst legend = chart3D.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(chart3D)\n\n// Generate height map data.\ncreateWaterDropDataGenerator()\n .setRows( resolution )\n .setColumns( resolution )\n .generate()\n .then( waterdropData => {\n let t = 0\n const step = () => {\n const result = []\n for ( let x = 0; x < resolution; x++ ) {\n for ( let y = 0; y < resolution; y++ ) {\n const s = 1\n const height = Math.max(\n waterdropData[y][x] +\n 50 * Math.sin( ( t + x * .50 ) * Math.PI / resolution ) +\n 20 * Math.sin( ( t + y * 1.0 ) * Math.PI / resolution ), 0 )\n const box = {\n xCenter: x,\n yCenter: height / 2,\n zCenter: y,\n xSize: s,\n ySize: height,\n zSize: s,\n // Specify an ID for each Box in order to modify it during later frames, instead of making new Boxes.\n id: String( result.length ),\n }\n result.push( box )\n }\n }\n \n boxSeries\n .invalidateData( result )\n \n t += 0.1\n requestAnimationFrame( step )\n }\n step()\n })\n\n\n\n// Animate Camera movement from file.\n;(async () => {\n const cameraAnimationData = await (\n fetch( document.head.baseURI + 'examples/assets/0907/camera.json' )\n .then( r => r.json() )\n )\n if ( ! cameraAnimationData ) {\n console.log(`No Camera animation data.`)\n return\n }\n console.log(`Loaded Camera animation data.`)\n let frame = 0\n const nextFrame = () => {\n if ( cameraAnimationEnabledCheckbox.getOn() ) {\n const { cameraLocation } = cameraAnimationData.frames[Math.floor(frame) % cameraAnimationData.frames.length]\n chart3D.setCameraLocation( cameraLocation )\n frame += 1.5\n }\n requestAnimationFrame( nextFrame )\n }\n requestAnimationFrame( nextFrame )\n})()\n\n\n\n// * UI controls *\nconst group = chart3D.addUIElement(UILayoutBuilders.Column)\ngroup\n .setPosition( { x: 0, y: 100 } )\n .setOrigin( UIOrigins.LeftTop )\n .setMargin( 10 )\n .setPadding( 4 )\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-height',\n maxHeight: 0.30,\n })\n\n\n// Add UI control for toggling camera animation.\nconst handleCameraAnimationToggled = ( state ) => {\n cameraAnimationEnabledCheckbox.setText( state ? 'Disable camera animation' : 'Enable camera animation' )\n if ( cameraAnimationEnabledCheckbox.getOn() !== state ) {\n cameraAnimationEnabledCheckbox.setOn( state )\n }\n}\nconst cameraAnimationEnabledCheckbox = group.addElement( UIElementBuilders.CheckBox )\ncameraAnimationEnabledCheckbox.onSwitch((_, state) => handleCameraAnimationToggled( state ))\nhandleCameraAnimationToggled( true )\nchart3D.onBackgroundMouseDrag(() => {\n handleCameraAnimationToggled( false )\n})\n","url":null,"readme":"This example shows an animated 3D Bar Chart with bars coloured dynamically based on their height.\n\nThe Chart is rendered using ``BoxSeries3D``, a series type capable of rendering any number of Boxes as well as allowing individual full level modification (location, size, color) at any point during runtime.\n\nThe example also showcases the rounded edges feature. While enabled by default, it can be adjusted and disabled at any time with ``BoxSeries3D.setRoundedEdges``\n\n## BoxSeries3D data format\n\n`BoxSeries3D` supports input data in two different formats, namely:\n- `BoxDataCentered` (specify Box center coordinate and size)\n- `BoxDataBounds` (specify Box start and end coordinates)\n\nOn top of this *geometry* information, one can also supply the following optional properties:\n\n- **id**:\n * By supplying an ID, the Boxes' properties can be modified later (by passing the same *id*).\n * When modifying a previously added Box, **all** properties (other than *id*) are optional (supplied properties are overridden).\n```typescript\n// Initial Box definition (BoxDataCentered format).\nBoxSeries3D.invalidateData([{\n xCenter: 0,\n yCenter: 0,\n zCenter: 0,\n xSize: 1,\n ySize: 1,\n zSize: 1,\n id: 'box-#0'\n}])\n// Modify 'yCenter' property only.\nBoxSeries3D.invalidateData([{\n id: 'box-#0',\n yCenter: 5\n}])\n```\n\n- **color**:\n * Assigns a *Color* to the Box to be used when individual coloring mode is enabled.\n```typescript\n// Add Boxes with individual Colors.\nBoxSeries3D.invalidateData([{\n ...,\n color: ColorRGBA( 255, 0, 0 )\n}])\n// Enable individual coloring mode.\nBoxSeries3D.setFillStyle( new IndividualPointFill() )\n```\n\n- **value**:\n * Assigns a *look-up value* to the Box to be used when look-up coloring mode is enabled.\n```typescript\n// Define Color Look-Up-Table.\nconst lut = new LUT( {\n steps: [\n { value: 0, color: ColorRGBA( 0, 0, 0 ) },\n { value: 100, color: ColorRGBA( 255, 0, 0 ) }\n ],\n interpolate: true\n} )\n// Add Boxes with look up values.\nBoxSeries3D.invalidateData([{\n ...,\n value: 50\n}])\n// Enable look up coloring mode\nBoxSeries3D.setFillStyle( new PalettedFill({ lut }) )\n```\n","image":"3dBoxRounded.png"},{"id":"lcjs-example-0908-3dRealtimePoints","title":"JavaScript 3D Realtime Scatter Chart","tags":["scatter","point","3d","realtime","point"],"description":"Example showcasing the use of 3D point series in a high performance application, with constantly changing data.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChartJS example that showcases PointSeries3D in a realtime application (continuous high speed data input)\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PointSeriesTypes3D,\n Themes\n} = lcjs\n\n// Initiate chart\nconst chart3D = lightningChart().Chart3D({\n // theme: Themes.darkGold\n})\n\n// Set Axis titles\nchart3D.getDefaultAxisX().setTitle('Axis X')\nchart3D.getDefaultAxisY().setTitle('Axis Y')\nchart3D.getDefaultAxisZ().setTitle('Axis Z')\n\n// Set static Axis intervals.\nchart3D.getDefaultAxisX().setInterval( 0, 100, false, true )\nchart3D.getDefaultAxisY().setInterval( 0, 100, false, true )\nchart3D.getDefaultAxisZ().setInterval( 0, 100, false, true )\n\n// Create Point Cloud Series (variant optimized for rendering minimal detail geometry)\nconst pointSeries3D = chart3D.addPointSeries({ type: PointSeriesTypes3D.Pixelated })\n .setPointStyle((style) => style.setSize(5))\n\n// : Example data generation configuration :\n// Amount of data visible at a time.\nconst pointBatchSize = 10000\n// Amount of unique data sets.\nconst uniqueDataSetsCount = 5\n// Visible duration of each data set in milliseconds.\nconst frameDurationMs = 100\n\n// Set Chart title\nchart3D.setTitle(`3D Realtime Point Series (${pointBatchSize} data points per frame)`)\n\n// Generate data.\nnew Promise((resolve, reject) => {\n const dataSets = []\n for (let iDataset = 0; iDataset < uniqueDataSetsCount; iDataset ++) {\n const dataSet = []\n dataSets.push(dataSet)\n for (let iPoint = 0; iPoint < pointBatchSize; iPoint ++) {\n const x = Math.random() * 100\n const y = Math.random() * 100\n const z = Math.random() * 100\n dataSet.push({ x, y, z })\n }\n }\n resolve(dataSets)\n})\n .then((dataSets) => {\n // Alternate visible dataset at regular intervals.\n let iDataSet = 0\n let lastSwitch\n const switchDataSet = () => {\n iDataSet = (iDataSet + 1) % uniqueDataSetsCount\n const data = dataSets[iDataSet]\n pointSeries3D\n // Clear previous data.\n .clear()\n // Add new data.\n .add(data)\n lastSwitch = Date.now()\n }\n switchDataSet()\n const checkRegularDataSetSwitch = () => {\n if (Date.now() - lastSwitch >= frameDurationMs) {\n switchDataSet()\n }\n requestAnimationFrame(checkRegularDataSetSwitch)\n }\n checkRegularDataSetSwitch()\n })\n","url":null,"readme":"Example showcasing the use of 3D point series in a high performance application, with constantly changing data.\n","image":"3dRealtimePoints.png"},{"id":"lcjs-example-0909-3dRealtimeLine","title":"JavaScript 3D Realtime Line Chart","tags":["line","3d","realtime"],"description":"Example showcasing the use of 3D line series in a high performance application, with constantly changing data.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChartJS example that showcases LineSeries3D in a realtime application (continuous high speed data input).\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n AxisTickStrategies,\n AxisScrollStrategies,\n Themes\n} = lcjs\n\n// Extract required parts from xyData.\nconst {\n createProgressiveTraceGenerator\n} = require('@arction/xydata')\n\n// Initiate chart\nconst chart3D = lightningChart().Chart3D({\n disableAnimations: true,\n // theme: Themes.darkGold\n})\n // Set 3D bounding box dimensions to highlight X Axis. \n .setBoundingBox({ x: 1.0, y: 0.5, z: 0.4 })\n .setTitle('3D Realtime Line Series')\n\n// Set Axis titles\nchart3D.getDefaultAxisX().setTitle('Axis X')\nchart3D.getDefaultAxisY().setTitle('Axis Y')\nchart3D.getDefaultAxisZ().setTitle('')\n\n// Disable Z Axis ticks as it doesn't represent any actual data dimension (only visual perspective).\nchart3D.getDefaultAxisZ().setTickStrategy( AxisTickStrategies.Empty )\n\n// Define Series configuration for simplified example modification.\nconst seriesConf = [\n {\n name: 'Series A'\n },\n {\n name: 'Series B'\n },\n {\n name: 'Series C'\n },\n {\n name: 'Series D'\n },\n {\n name: 'Series E'\n },\n]\n\n// Configure Progressive X Axis.\nchart3D.getDefaultAxisX().setInterval(-1000, 0).setScrollStrategy(AxisScrollStrategies.progressive)\n\n// Set Z Axis interval immediately.\nchart3D.getDefaultAxisZ().setInterval(-1, 1+seriesConf.reduce((prev, cur, i) => Math.max(prev, i), 0), false, true)\n\n// : Create Series and generate test data :\n// Amount of unique data points per Series (looped indefinitely along the X plane)\nconst seriesUniqueDataAmount = 2500\n// Amount of new data points pushed each frame to EACH series.\nconst pointsPerFrame = 5\n\nPromise.all(\n seriesConf.map((conf, iSeries) => {\n const seriesName = conf.name || ''\n const seriesZ = conf.z || iSeries\n \n const series = chart3D.addLineSeries()\n .setName(seriesName)\n \n // Generate a static YZ data-set for this series that repeats indefinitely along the X plane.\n return createProgressiveTraceGenerator()\n .setNumberOfPoints(seriesUniqueDataAmount / 2)\n .generate()\n .toPromise()\n .then((data) => {\n // Map XY data to YZ data.\n return data.map((xy) => ({\n y: xy.y,\n z: seriesZ\n }))\n })\n .then((data) => {\n // Repeat data set so that it can be looped indefinitely.\n return {\n series,\n data: data.concat(data.slice(1, -1).reverse())\n }\n })\n })\n).then(( seriesAndData ) => {\n // Add LegendBox to chart (after series were created).\n const legend = chart3D.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.20,\n })\n .add(chart3D)\n\n // Setup streaming to all series.\n let tStart = Date.now()\n let dataAmount = 0\n let xPos = 0\n // Keep track of data currently in each series.\n seriesAndData.forEach(( item ) => item.currentData = [])\n\n const pushNewData = () => {\n for ( let iNewPoint = 0; iNewPoint < pointsPerFrame; iNewPoint ++ ) {\n for ( const { series, data, currentData } of seriesAndData ) {\n // Pick YZ coordinates from data set.\n const yz = data[xPos % data.length]\n const point = {\n x: xPos,\n y: yz.y,\n z: yz.z\n }\n series.add(point)\n currentData.push(point)\n dataAmount ++\n }\n xPos ++\n }\n // Schedule next batch of data.\n requestAnimationFrame(pushNewData)\n }\n pushNewData()\n\n // Schedule cleaning of old data.\n const checkCleanupOldData = () => {\n const minPointsToKeep = 1000\n for ( let i = 0; i < seriesAndData.length; i ++ ) {\n const { series, data, currentData } = seriesAndData[i]\n if (currentData.length < minPointsToKeep)\n continue\n const spliceStart = currentData.length - minPointsToKeep\n const spliceCount = Math.min(minPointsToKeep, currentData.length - spliceStart)\n const pointsToKeep = currentData.splice(spliceStart, spliceCount)\n series.clear().add(pointsToKeep)\n seriesAndData[i].currentData = pointsToKeep\n }\n }\n setInterval(checkCleanupOldData, 1000)\n\n // Display incoming points amount in Chart title.\n const title = chart3D.getTitle()\n let lastReset = Date.now()\n const updateChartTitle = () => {\n // Calculate amount of incoming points / second.\n if (dataAmount > 0 && Date.now() - tStart > 0) {\n const pps = (1000 * dataAmount) / (Date.now() - tStart)\n chart3D.setTitle(`${title} (${Math.round(pps)} data points / s)`)\n }\n // Reset pps counter every once in a while in case page is frozen, etc.\n if (Date.now() - lastReset >= 5000) {\n tStart = lastReset = Date.now()\n dataAmount = 0\n }\n }\n setInterval(updateChartTitle, 1000)\n})\n\n","url":null,"readme":"Example showcasing the use of 3D line series in a high performance application, with constantly changing data.\n","image":"3dRealtimeLine.png"},{"id":"lcjs-example-0910-3dLiDARPark","title":"3D LiDAR Park Visualization","tags":["lidar","3d","point","scatter"],"description":"Example showcasing visualization of a 3D LiDAR scanned park with over million data points","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChart JS example showcasing visualization of a LiDAR scanned park\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PointSeriesTypes3D,\n PointStyle3D,\n ColorRGBA,\n SolidFill,\n IndividualPointFill,\n AxisTickStrategies,\n emptyLine,\n emptyFill,\n Themes,\n} = lcjs\n\n\n// Create 3D chart\nconst chart = lightningChart().Chart3D({\n // theme: Themes.darkGold\n})\n .setTitle(`LiDAR Point Cloud`)\n .setSeriesBackgroundFillStyle(emptyFill)\n\nconst legend = chart.addLegendBox()\n\n// Setup static axis intervals.\nchart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine).setInterval(-11000, 19000, false, true)\nchart.getDefaultAxisY().setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine).setInterval(-5, 8500, false, true)\nchart.getDefaultAxisZ().setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine).setInterval(-14000, 12500, false, true)\n\nlet totalPointsCount = 0\n\nconst loadBinaryLidarFile = async (assetName, isColored) => {\n // Load LiDAR data as custom formatted binary file (contains total number of data points + each point X, Y, Z, R, G, B values)\n const result = await fetch( document.head.baseURI + `examples/assets/0910/${assetName}`)\n const blob = await result.blob()\n const arrayBuffer = await blob.arrayBuffer()\n // Read number of points as first Uint32 value.\n let arrayBufferBytePos = 0\n const pointsCount = new Uint32Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + 4))[0]\n arrayBufferBytePos += 4\n // Read binary data into XYZRGB points.\n const dataPoints = new Array(pointsCount).fill(0).map(_ => ({}))\n // X values in order.\n const xValuesByteLength = pointsCount * 2\n const xValues = new Int16Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + xValuesByteLength))\n arrayBufferBytePos += xValuesByteLength\n xValues.forEach((x, i) => dataPoints[i].x = x)\n // Y values in order.\n const yValuesByteLength = pointsCount * 2\n const yValues = new Int16Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + yValuesByteLength))\n arrayBufferBytePos += yValuesByteLength\n yValues.forEach((y, i) => dataPoints[i].y = y)\n // Z values in order.\n const zValuesByteLength = pointsCount * 2 \n const zValues = new Int16Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + zValuesByteLength))\n arrayBufferBytePos += zValuesByteLength\n zValues.forEach((z, i) => dataPoints[i].z = z)\n\n if(isColored){\n // R values in order.\n const rValuesByteLength = pointsCount * 1\n const rValues = new Uint8Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + rValuesByteLength))\n arrayBufferBytePos += rValuesByteLength\n // G values in order.\n const gValuesByteLength = pointsCount * 1\n const gValues = new Uint8Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + rValuesByteLength))\n arrayBufferBytePos += gValuesByteLength\n // B values in order.\n const bValuesByteLength = pointsCount * 1\n const bValues = new Uint8Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + rValuesByteLength))\n arrayBufferBytePos += bValuesByteLength\n \n rValues.forEach((r, i) => {\n dataPoints[i].color = ColorRGBA(r, gValues[i], bValues[i])\n })\n }\n \n // Add Point Series with lidar point cloud data.\n const series = chart\n .addPointSeries({\n type: PointSeriesTypes3D.Pixelated,\n individualPointColorEnabled: isColored,\n })\n .add(dataPoints)\n\n totalPointsCount += pointsCount\n chart.setTitle(`LiDAR Point Cloud | ${totalPointsCount} data points`)\n\n return series\n}\n\nloadBinaryLidarFile('buildings.bin', false)\n .then(series => {\n series\n .setName('Buildings')\n .setPointStyle(new PointStyle3D.Pixelated({\n size: 1,\n fillStyle: new SolidFill({ color: ColorRGBA(220, 220, 220) }) \n }))\n\n legend.add(series)\n })\n\nloadBinaryLidarFile('green.bin', true)\n .then(series => {\n series\n .setName('Vegetation')\n .setPointStyle(new PointStyle3D.Pixelated({\n size: 1,\n fillStyle: new IndividualPointFill()\n }))\n\n legend.add(series)\n })\n","url":null,"readme":"This example shows visualization of a LiDAR scanned 3D object with LightningChart JS 3D Charts.\n\nThis is LiDAR data of a Niemeyer Edifício Copan park in Brasil with 1.437.912 points\n \nLightningChart JS is suitable for really fast visualization of LiDAR data sets in range of tens of millions samples, with 3D points or 3D surface. This example shows the approach with points.\n\nThe LiDAR data points are classified in the source data set between buildings and vegetation, which allows us to separate them into different series. In this example, the building series is colored as solid white colour, while the vegetation is coloured with individual Red, Green and Blue values.\n\nLidar data from: [Philipp Urech](https://sketchfab.com/3d-models/parque-copan-ddfa8cf8aafa4d619e429d9e653ffe81) - Licensed under Creative Commons Attribute. ","image":"NiemeyerCopan.png"},{"id":"lcjs-example-0911-3dLiDARLand","title":"3D LiDAR Topography Visualization","tags":["lidar","3d","point","scatter","palette"],"description":"Example showcasing the visualization of LiDAR scanned 3D topography","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/*\n * LightningChart JS example showcasing visualization of LiDAR scanned 3D typography\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n PointSeriesTypes3D,\n PointStyle3D,\n ColorRGBA,\n PalettedFill,\n LUT,\n AxisTickStrategies,\n emptyLine,\n emptyFill,\n Themes,\n} = lcjs\n\n\n// Create 3D chart\nconst chart = lightningChart().Chart3D({\n disableAnimations: true,\n // theme: Themes.darkGold\n})\n .setTitle(`LiDAR Point Cloud`)\n .setSeriesBackgroundFillStyle(emptyFill)\n\nchart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine)\nchart.getDefaultAxisY().setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine).setInterval(-111, 2500, false, true)\nchart.getDefaultAxisZ().setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine)\nchart.setCameraLocation({ x: -1.5, y: .5, z: .8 })\n\nconst legend = chart.addLegendBox()\n\nlet totalPointsCount = 0\n\nconst loadBinaryLidarFile = async (assetName) => {\n // Load LiDAR data as custom formatted binary file (contains total number of data points + each point X, Y, Z values)\n const result = await fetch( document.head.baseURI + `examples/assets/0911/${assetName}`)\n const blob = await result.blob()\n const arrayBuffer = await blob.arrayBuffer()\n // Read number of points as first Uint32 value.\n let arrayBufferBytePos = 0\n const pointsCount = new Uint32Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + 4))[0]\n arrayBufferBytePos += 4\n // Read binary data into XYZRGB points.\n const dataPoints = new Array(pointsCount).fill(0).map(_ => ({}))\n // X values in order.\n const xValuesByteLength = pointsCount * 2\n const xValues = new Int16Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + xValuesByteLength))\n arrayBufferBytePos += xValuesByteLength\n xValues.forEach((x, i) => dataPoints[i].x = x)\n // Y values in order.\n const yValuesByteLength = pointsCount * 2\n const yValues = new Int16Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + yValuesByteLength))\n arrayBufferBytePos += yValuesByteLength\n yValues.forEach((y, i) => dataPoints[i].y = y)\n // Z values in order.\n const zValuesByteLength = pointsCount * 2 \n const zValues = new Int16Array(arrayBuffer.slice(arrayBufferBytePos, arrayBufferBytePos + zValuesByteLength))\n arrayBufferBytePos += zValuesByteLength\n zValues.forEach((z, i) => dataPoints[i].z = z)\n\n // Add Point Series with lidar point cloud data.\n const series = chart\n .addPointSeries({\n type: PointSeriesTypes3D.Pixelated,\n individualPointColorEnabled: true,\n })\n .add(dataPoints)\n .setPointStyle(\n new PointStyle3D.Pixelated({\n fillStyle: new PalettedFill({\n lookUpProperty: 'y',\n lut: new LUT({\n units: 'Elevation (m)',\n interpolate: false,\n steps: [\n { value: -100, color: ColorRGBA(30, 144, 255) },\n { value: 0, color: ColorRGBA(49, 201, 60) },\n { value: 200, color: ColorRGBA(255, 87, 0) },\n { value: 400, color: ColorRGBA(202, 22, 80) },\n { value: 600, color: ColorRGBA(148, 18, 18) },\n { value: 800, color: ColorRGBA(178, 0, 255) },\n { value: 1000, color: ColorRGBA(225, 122, 239) }\n ],\n }),\n }),\n size: 1,\n }),\n )\n\n legend.add(series)\n\n totalPointsCount += pointsCount\n chart.setTitle(`LiDAR Point Cloud | ${totalPointsCount} data points`)\n\n return series\n}\n\nloadBinaryLidarFile('NEWLAND.bin')\n .then(series => {\n series.setName('Badwater Basin')\n })\n\n","url":null,"readme":"This example shows visualization of a LiDAR scanned 3D object with LightningChart JS 3D Charts\n\nThis is LiDAR data of Badwater Basin in Death Valley National Park, Inyo County, California with 1.139.662 points\n \nLightningChart JS is suitable for really fast visualization of LiDAR data sets in range of tens of millions samples, with 3D points or 3D surface. This example shows the approach with points. In this example, each point is coloured dynamically by their Y coordinate according to a value -> color lookup table.\n\nLidar data from: [Philipp Urech](https://sketchfab.com/3d-models/badwater-basin-30-sections-across-a-wash-ca8eebf6798d4b0a967336e16f066754) - Licensed under Creative Commons Attribute. ","image":"LidarLand.png"},{"id":"lcjs-example-0912-surfaceGrid","title":"JavaScript 3D Surface Grid Chart","tags":["3d","surface","palette"],"description":"Example showcasing the Surface Grid Series feature of LightningChart JS.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/**\n * Example showcasing the Surface Grid Series feature of LightningChart JS.\n */\n\nconst lcjs = require('@arction/lcjs')\nconst xydata = require('@arction/xydata')\nconst {\n lightningChart,\n LUT,\n ColorRGBA,\n PalettedFill,\n emptyLine,\n ColorShadingStyles,\n LegendBoxBuilders,\n UIElementBuilders,\n UIOrigins,\n UIDraggingModes,\n Themes\n} = lcjs\nconst { createWaterDropDataGenerator } = xydata\n\nconst HEATMAP_COLUMNS = 1024\nconst HEATMAP_ROWS = 1024\n\n// Initialize empty Dashboard and charts.\nconst dashboard = lightningChart().Dashboard({\n numberOfColumns: 2,\n numberOfRows: 1,\n // theme: Themes.darkGold\n})\n .setColumnWidth(0, 1.0)\n .setColumnWidth(1, 1.8)\n\nconst chart2D = dashboard.createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n})\n .setTitle('Generating test data ...')\n\nconst chart3D = dashboard.createChart3D({\n columnIndex: 1,\n rowIndex: 0,\n})\n .setTitle('Generating test data ...')\n\n// Generate example data.\ncreateWaterDropDataGenerator()\n .setColumns(HEATMAP_COLUMNS)\n .setRows(HEATMAP_ROWS)\n .generate()\n .then(data => {\n chart2D.setTitle(`2D Heatmap Grid ${HEATMAP_COLUMNS}x${HEATMAP_ROWS}`)\n chart3D.setTitle(`3D Surface Grid ${HEATMAP_COLUMNS}x${HEATMAP_ROWS} color by Y`)\n\n // Define value -> color lookup table.\n const lut = new LUT({\n interpolate: true,\n steps: [\n { value: 0, color: ColorRGBA(0, 0, 0) },\n { value: 40, color: ColorRGBA(255, 215, 0) },\n { value: 60, color: ColorRGBA(255, 0, 0) },\n { value: 80, color: ColorRGBA(0, 0, 255) },\n ],\n })\n\n // Create series for both 2D and 3D heatmap data visualization and push data in.\n const heatmapSeries2D = chart2D.addHeatmapGridSeries({\n columns: HEATMAP_COLUMNS,\n rows: HEATMAP_ROWS,\n })\n .setFillStyle(new PalettedFill({ lut }))\n .setWireframeStyle(emptyLine)\n .invalidateIntensityValues(data)\n\n const surfaceSeries3D = chart3D.addSurfaceGridSeries({\n columns: HEATMAP_COLUMNS,\n rows: HEATMAP_ROWS,\n })\n .setFillStyle(new PalettedFill({ lut, lookUpProperty: 'y' }))\n .setWireframeStyle(emptyLine)\n .invalidateHeightMap(data)\n\n // Add selector to see difference between Simple and Phong 3D color shading style in Surface grid series.\n const selectorColorShadingStyle = chart3D.addUIElement(UIElementBuilders.CheckBox)\n .setPosition({ x: 100, y: 100 })\n .setOrigin(UIOrigins.RightTop)\n .setMargin({top: 40, right: 8})\n .setDraggingMode(UIDraggingModes.notDraggable)\n selectorColorShadingStyle.onSwitch((_, state) => {\n surfaceSeries3D.setColorShadingStyle(state ? new ColorShadingStyles.Phong() : new ColorShadingStyles.Simple())\n selectorColorShadingStyle.setText(`Color shading style: ${state ? 'Phong' : 'Simple'}`)\n })\n selectorColorShadingStyle.setOn(false)\n\n // Add legend with color look up table to chart.\n const legend = chart3D.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n .add(chart2D)\n .add(chart3D)\n })\n","url":null,"readme":"This example showcases the `SurfaceGridSeries` feature of LightningChart JS.\n\nSurface Grid Series is used to visualize a data set in form of a grid. To interpret the data, imagine a grid that is layed on the plane between X and Z axes.\n\nSimilarly to Heatmap Grid Series, Surface Grids are split into a number of **columns** (X axis) and **rows** (Z axis). For each intersection between a column and row, there is a **data point** in the surface grid series.\n\nIn this example, the surface grid has 1024 columns and 1024 rows, summing up to a total of 1 048 576 data points. Each of this data points is associated with a **height** (Y axis) value. Additionally, the surface is colored dynamically based on each data points Y value.\n\nTo highlight the similarity, a 2D Heatmap Grid Series with the same data set and palette is displayed on the left side.\n\nFinally, this example also showcases the available selection of _3D color shading style_ (simple or _Phong_). By default, surface series use simple color shading, which displays all colors as they are. To improve depth perception, _phong_ shading can be enabled to simulate the behavior of light in the scene.\n\n# About Performance\n\n`SurfaceGridSeries` is one of the latest additions to LightningChart JS, and as such it enjoys from the very latest optimizations. Surface Grid Series is very well optimized for memory consumption and CPU usage, usual maximum data set sizes with good PC's are in range of billions of data points.\n\nThis is ground breaking performance, as traditionally surface charts are really expensive components with the size limit being around 10 000 data points (100 000x smaller).\n\nLarge Surface Grid Series are very GPU intensive which shows as slow redrawing. When developing applications that utilize them, it is best to avoid unnecessary redraws to maintain good refresh rate with weak devices, such as laptops and phones.\n\n# More Surface Examples\n\n- [Chunked Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0916-surfaceChunkLoad.html) | This example shows how surface grid series can be split into sub sections which are loaded individually for better performance and response time.\n\n- [Intensity Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0914-surfaceIntensityGrid.html) | This example showcases how surface grid series can be colored based on a different data set than the height map used in this example.\n\n- [Real-Time Audio Spectrum Surface Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0913-surfaceScrollingGrid.html) | This example showcases using real-time data source with surface series.\n\n- [All Surface Examples](https://www.arction.com/lightningchart-js-interactive-examples/search.html?t=surface)\n","image":"surfaceGrid.png"},{"id":"lcjs-example-0913-surfaceScrollingGrid","title":"JavaScript Audio Spectrogram 2D & 3D Chart","tags":["3d","surface","palette","realtime"],"description":"Example showcasing the Surface Scrolling Grid Series feature of LightningChart JS.","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/**\n * Example showcasing the Surface Scrolling Grid Series feature of LightningChart JS.\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst {\n lightningChart,\n LUT,\n ColorHSV,\n PalettedFill,\n emptyLine,\n AxisScrollStrategies,\n AxisTickStrategies,\n Themes,\n} = lcjs;\n\nconst historyMs = 27 * 1000;\n// Sampling rate as samples per second.\nconst sampleRateHz = 35\nconst sampleIntervalMs = 1000 / sampleRateHz\n\n// Create empty dashboard and charts.\nconst dashboard = lightningChart()\n .Dashboard({\n numberOfColumns: 2,\n numberOfRows: 2,\n // theme: Themes.darkGold\n })\n .setRowHeight(0, 1)\n .setRowHeight(1, 2);\n\nlet labelLoading = dashboard.addUIElement().setText(\"Loading example data ...\");\n\n// Load example data from file.\nfetch(\n document.head.baseURI +\n \"examples/assets/0913/audio2ch.json\"\n)\n .then((r) => r.json())\n .then((data) => {\n labelLoading.dispose();\n labelLoading = undefined;\n\n // Define value -> color lookup table.\n const lut = new LUT({\n steps: [\n {\n value: 0,\n color: ColorHSV(0, 1, 0),\n label: `-100`,\n },\n {\n value: 255 * (1 / 6),\n color: ColorHSV(270, 0.84, 0.2),\n label: `-88`,\n },\n {\n value: 255 * (2 / 6),\n color: ColorHSV(289, 0.86, 0.35),\n label: `-77`,\n },\n {\n value: 255 * (3 / 6),\n color: ColorHSV(324, 0.97, 0.56),\n label: `-65`,\n },\n {\n value: 255 * (4 / 6),\n color: ColorHSV(1, 1, 1),\n label: `-53`,\n },\n {\n value: 255 * (5 / 6),\n color: ColorHSV(44, 0.64, 1),\n label: `-42`,\n },\n {\n value: 255,\n color: ColorHSV(62, 0.32, 1),\n label: `-30`,\n },\n ],\n units: \"dB\",\n interpolate: true,\n });\n\n const rowStep = 40;\n const intensityValueToDb = (value) => -100 + (value / 255) * (-30 - -100);\n\n let channelList = [\n {\n name: \"Channel 1\",\n data: data.ch1,\n columnIndex: 0,\n },\n {\n name: \"Channel 2\",\n data: data.ch2,\n columnIndex: 1,\n },\n ];\n\n channelList = channelList.map((channel) => {\n const rows = channel.data[0].length;\n const chart2D = dashboard\n .createChartXY({\n columnIndex: channel.columnIndex,\n rowIndex: 0,\n })\n .setTitle(`${channel.name} | 2D audio spectrogram`);\n chart2D\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.Time)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(-historyMs, 0);\n chart2D.getDefaultAxisY().setTitle(\"Frequency (Hz)\");\n\n const chart3D = dashboard\n .createChart3D({\n columnIndex: channel.columnIndex,\n rowIndex: 1,\n })\n .setTitle(`${channel.name} | 3D audio spectrogram`)\n\n chart3D\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.Time)\n .setScrollStrategy(AxisScrollStrategies.progressive)\n .setInterval(-historyMs, 0);\n chart3D\n .getDefaultAxisY()\n .setTitle(\"Intensity (Db)\")\n .setTickStrategy(AxisTickStrategies.Numeric, (ticks) =>\n ticks.setFormattingFunction((y) => intensityValueToDb(y).toFixed(0))\n );\n chart3D.getDefaultAxisZ().setTitle(\"Frequency (Hz)\");\n\n const heatmapSeries2D = chart2D\n .addHeatmapScrollingGridSeries({\n scrollDimension: \"columns\",\n resolution: rows,\n step: { x: sampleIntervalMs, y: rowStep },\n })\n .setFillStyle(new PalettedFill({ lut }))\n .setWireframeStyle(emptyLine)\n .setDataCleaning({ maxDataPointCount: 10000 });\n\n const surfaceSeries3D = chart3D\n .addSurfaceScrollingGridSeries({\n scrollDimension: \"columns\",\n columns: Math.ceil(historyMs / sampleIntervalMs),\n rows,\n step: { x: sampleIntervalMs, z: rowStep },\n })\n .setFillStyle(new PalettedFill({ lut, lookUpProperty: \"y\" }))\n .setWireframeStyle(emptyLine);\n\n return { ...channel, chart2D, chart3D, heatmapSeries2D, surfaceSeries3D };\n });\n\n // Setup infinite streaming from static data set.\n let iSample = 0;\n setInterval(() => {\n // Push 1 new sample to all channels and series.\n const samples = channelList.map(channel => channel.data[iSample % channel.data.length])\n iSample += 1\n bufferIncomingSamples(samples, (appendSamples) => {\n channelList.forEach((channel, i) => {\n channel.heatmapSeries2D.addIntensityValues([appendSamples[i]]);\n channel.surfaceSeries3D.addValues({ yValues: [appendSamples[i]] });\n });\n })\n }, sampleIntervalMs)\n\n // The following logic ensures a static sampling rate, even if input data might vary.\n // This is done by skipping too frequent samples and duplicating too far apart samples.\n // The precision can be configured by simply changing value of `sampleRateHz`\n let lastSample\n let tFirstSample = 0\n const bufferIncomingSamples = (sample, clbk) => {\n const tNow = performance.now()\n if (lastSample === undefined) {\n clbk(sample)\n lastSample = { sample, time: tNow, i: 0 }\n tFirstSample = tNow\n return\n }\n\n let nextSampleIndex = lastSample.i + 1\n let nextSampleTimeExact = tFirstSample + nextSampleIndex * sampleIntervalMs\n let nextSampleTimeRangeMin = nextSampleTimeExact - sampleIntervalMs / 2\n let nextSampleTimeRangeMax = nextSampleTimeExact + sampleIntervalMs / 2\n if (tNow < nextSampleTimeRangeMin) {\n // Too frequent samples must be scrapped. If this results in visual problems then sample rate must be increased.\n // console.warn(`Skipped too frequent sample`)\n return\n }\n if (tNow > nextSampleTimeRangeMax) {\n // At least 1 sample was skipped. In this case, the missing sample slots are filled with the values of the last sample.\n let repeatedSamplesCount = 0\n do {\n clbk(lastSample.sample)\n repeatedSamplesCount += 1\n nextSampleIndex += 1\n nextSampleTimeExact = tFirstSample + nextSampleIndex * sampleIntervalMs\n nextSampleTimeRangeMin = nextSampleTimeExact - sampleIntervalMs / 2\n nextSampleTimeRangeMax = nextSampleTimeExact + sampleIntervalMs / 2\n } while (tNow > nextSampleTimeRangeMax)\n\n clbk(sample)\n lastSample = { sample, time: tNow, i: nextSampleIndex }\n // console.warn(`Filled ${repeatedSamplesCount} samples`)\n return\n }\n // Sample arrived within acceptable, expected time range.\n clbk(sample)\n lastSample = { sample, time: tNow, i: nextSampleIndex }\n }\n });\n","url":null,"readme":"This example showcases the `SurfaceScrollingGridSeries` feature of LightningChart JS.\n\nThis works otherwise same as `SurfaceGridSeries`, except that it is designed explicitly for applications that are based on pushing new samples in, while shifting old samples out. For this reason, its data modification API is different.\n\n`SurfaceScrollingGridSeries` is the 3D variant of [`HeatmapScrollingGridSeries`](https://www.arction.com/lightningchart-js-api-documentation/v3.2.0/classes/heatmapscrollinggridseries.html). This is highlighted in this example, by displaying the same data in both 2D and 3D at the same time on top of another.\n\nThis example visualizes the frequency spectrum of a short audio clip (about 9 seconds long) of a truck driving. The visualization is done in real-time, simulating applications that measure, analyse and display audio metrics in real-time. One such application is the [LightningChart Audio analysis showcase](https://arction.github.io/lcjs-showcase-audio/).\n\nEach spectrogram in this application displays ~35 samples per second, each sample having 308 data points. With 4 spectrograms, this sums to about 10 000 data points per second.\n\n# About Performance\n\n`SurfaceScrollingGridSeries` is one of the latest additions to LightningChart JS, and as such it enjoys from the very latest optimizations. Surface Grid Series is very well optimized for memory consumption and CPU usage.\n\nContrary to traditional data visualization tools, which perform a full update whenever data is changed, the scrolling grid series append operation is truly lightning fast due to it being designed specifically for this kind of applications. The data input rate of scrolling grid series is virtually unlimited, performing well with even **tens of millions of incoming data points per second**.\n\nThe performance bottleneck in scrolling spectrogram applications is generally axis ticks (surprisingly), and if the surface grid is large (several million data points and more) then the render time can start to limit the refresh rate. This is alleviated by using a better Graphics Processing Unit.\n\n# More Surface Examples\n\n- [Static Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0912-surfaceGrid.html) | This example showcases the most simple usage of surface grid series, and also has a bit more detailed description of the related terms.\n\n- [Chunked Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0916-surfaceChunkLoad.html) | This example shows how surface grid series can be split into sub sections which are loaded individually for better performance and response time.\n\n- [Intensity Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0914-surfaceIntensityGrid.html) | This example showcases how surface grid series can be colored based on a different data set than the height map used in this example.\n\n- [All Surface Examples](https://www.arction.com/lightningchart-js-interactive-examples/search.html?t=surface)\n","image":"surfaceScrollingGrid.png"},{"id":"lcjs-example-0914-surfaceIntensityGrid","title":"JavaScript Intensity Surface Grid Chart","tags":["3d","surface","palette"],"description":"Example showcasing the Surface Grid Series feature of LightningChart JS with separate data sets for height and Intensity","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/**\n * Example showcasing the Surface Grid Series feature of LightningChart JS with separate data sets for height and Intensity\n */\n\nconst lcjs = require('@arction/lcjs')\nconst xydata = require('@arction/xydata')\nconst {\n lightningChart,\n LUT,\n PalettedFill,\n ColorShadingStyles,\n ColorRGBA,\n LegendBoxBuilders,\n UIElementBuilders,\n UIOrigins,\n UIDraggingModes,\n emptyFill,\n emptyLine,\n UILayoutBuilders,\n Themes\n} = lcjs\nconst {\n createWaterDropDataGenerator\n} = xydata\n\nconst COLUMNS = 100\nconst ROWS = 100\n\nconst chart = lightningChart().Chart3D({\n disableAnimations: true,\n // theme: Themes.darkGold\n})\n .setTitle('Generating example data ...')\n\nPromise.all([\n // Generate Height map data set.\n createWaterDropDataGenerator()\n .setColumns(COLUMNS)\n .setRows(ROWS)\n .setWaterDrops([\n {\n rowNormalized: 0.5,\n columnNormalized: 0.5,\n amplitude: 20,\n },\n ])\n .generate(),\n // Generate intensity data set.\n createWaterDropDataGenerator()\n .setColumns(COLUMNS)\n .setRows(ROWS)\n .setVolatility(10)\n .setWaterDrops([\n {\n columnNormalized: 0.22,\n rowNormalized: 0.2,\n amplitude: 80,\n },\n {\n columnNormalized: 0.4,\n rowNormalized: 0.7,\n amplitude: 70,\n },\n {\n columnNormalized: 0.8,\n rowNormalized: 0.3,\n amplitude: 100,\n },\n ])\n .generate()\n])\n .then((dataSets) => {\n chart.setTitle('Rendering data ...')\n requestAnimationFrame(() => {\n const tStart = performance.now()\n const heightDataSet = dataSets[0]\n const intensityDataSet = dataSets[1]\n\n const surfaceGrid = chart\n .addSurfaceGridSeries({\n dataOrder: 'rows',\n columns: COLUMNS,\n rows: ROWS,\n })\n .setIntensityInterpolation('bilinear')\n .invalidateHeightMap(heightDataSet)\n .invalidateIntensityValues(intensityDataSet)\n\n requestAnimationFrame(() => {\n const tNow = performance.now()\n const tLoadupMs = tNow - tStart\n chart.setTitle(`Intensity Surface Grid ${COLUMNS}x${ROWS} (${((COLUMNS*ROWS)/10**3).toFixed(1)} thousand data points) | Ready in ${(tLoadupMs/1000).toFixed(2)} s`)\n \n // Add selector to see difference between Simple and Phong 3D color shading style in Surface grid series.\n const layout = chart.addUIElement(UILayoutBuilders.Column)\n .setPosition({ x: 100, y: 100 })\n .setOrigin(UIOrigins.RightTop)\n .setMargin({top: 40, right: 8})\n .setDraggingMode(UIDraggingModes.notDraggable)\n const selectorColorShadingStyle = layout.addElement(UIElementBuilders.CheckBox)\n selectorColorShadingStyle.onSwitch((_, state) => {\n surfaceGrid.setColorShadingStyle(state ? new ColorShadingStyles.Phong() : new ColorShadingStyles.Simple())\n selectorColorShadingStyle.setText(`Color shading style: ${state ? 'Phong' : 'Simple'}`)\n })\n selectorColorShadingStyle.setOn(false)\n\n // Add selector for wireframe only style.\n const defaultWireframeStyle = surfaceGrid.getWireframeStyle()\n const selectorWireframe = layout.addElement(UIElementBuilders.CheckBox)\n selectorWireframe.onSwitch((_, state) => {\n if (state) {\n surfaceGrid\n .setFillStyle(emptyFill)\n .setWireframeStyle(defaultStrokeStyle.setThickness(0.1))\n } else {\n surfaceGrid\n .setFillStyle(\n new PalettedFill({\n lookUpProperty: 'value',\n lut: new LUT({\n interpolate: true,\n steps: [\n { value: 0, color: ColorRGBA(255, 215, 0) },\n { value: 100, color: ColorRGBA(255, 0, 0) },\n { value: 200, color: ColorRGBA(0, 0, 255) },\n ],\n }),\n }),\n )\n .setWireframeStyle(defaultWireframeStyle)\n }\n selectorWireframe.setText(state ? `Wireframe only` : 'Fill + Wireframe')\n })\n selectorWireframe.setOn(false)\n\n // Add legend.\n const legend = chart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox).add(chart)\n })\n })\n })\n\nlet tempLineSeries = chart.addLineSeries()\nconst defaultStrokeStyle = tempLineSeries.getStrokeStyle()\ntempLineSeries.dispose()\ntempLineSeries = undefined","url":null,"readme":"This example showcases the `SurfaceGridSeries` feature of LightningChart JS and more specifically its ability to process two different data sets:\n\n- Height data set\n- Intensity data set\n\nBoth of these data sets are structured similarly (one value for each column & row combination in surface grid), but serve different purposes. Height data set is used to alter the visible shape of the series, while the Intensity data set can **optionally** be used for coloring the series.\n\nSee [Surface Grid Chart Example](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0912-surfaceGrid.html) for a usage scenario, which only uses the Height data set.\n\nThis example generates a different data set for Height and Intensity data, and colors the surface according to the Intensity data set, effectively forming a 4-dimensional data visualization (X, Y, Z, Color).\n\n# More Surface Examples\n\n- [Surface Grid Chart (only Y data)](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0912-surfaceGrid.html) | This example showcases the most simple usage of surface grid series, and also has a bit more detailed description of the related terms.\n\n- [Chunked Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0916-surfaceChunkLoad.html) | This example shows how surface grid series can be split into sub sections which are loaded individually for better performance and response time.\n\n- [Real-Time Audio Spectrum Surface Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0913-surfaceScrollingGrid.html) | This example showcases using real-time data source with surface series.\n\n- [All Surface Examples](https://www.arction.com/lightningchart-js-interactive-examples/search.html?t=surface)\n","image":"surfaceIntensityGrid.png"},{"id":"lcjs-example-0915-surfaceGridPartialInvalidation","title":"JavaScript Surface Partial Invalidation Chart","tags":["3d","surface","palette","realtime"],"description":"Example showcasing the partial data invalidation feature of Surface Grid Series","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/**\n * Example showcasing the partial data invalidation feature of Surface Grid Series\n */\n\n const lcjs = require('@arction/lcjs')\n const {\n lightningChart,\n LUT,\n ColorRGBA,\n PalettedFill,\n emptyLine,\n ColorShadingStyles,\n LegendBoxBuilders,\n AxisScrollStrategies,\n PointStyle3D,\n Themes\n } = lcjs\n \n const COLUMNS = 200\n const ROWS = 200\n \n const chart3D = lightningChart({\n warnings: false,\n }).Chart3D({\n disableAnimations: true,\n // theme: Themes.darkGold\n })\n\nchart3D.getDefaultAxisY().setScrollStrategy(AxisScrollStrategies.expansion).setInterval(0, 100)\n \nchart3D.setTitle(`3D Surface Grid ${COLUMNS}x${ROWS} | partial invalidation`)\n\n// Define value -> color lookup table.\nconst lut = new LUT({\n interpolate: true,\n steps: [\n { value: 0, color: ColorRGBA(255, 215, 0) },\n { value: 50, color: ColorRGBA(255, 0, 0) },\n { value: 100, color: ColorRGBA(0, 0, 255) },\n ],\n})\n\nconst heightData = new Array(COLUMNS).fill(0).map(_ => new Array(ROWS).fill(0))\n\nconst surfaceSeries3D = chart3D.addSurfaceGridSeries({\n columns: COLUMNS,\n rows: ROWS,\n})\n .setFillStyle(new PalettedFill({ lut, lookUpProperty: 'y' }))\n .setWireframeStyle(emptyLine)\n .invalidateHeightMap(heightData)\n .setColorShadingStyle(new ColorShadingStyles.Phong())\n\n// Add legend with color look up table to chart.\nconst legend = chart3D.addLegendBox(LegendBoxBuilders.HorizontalLegendBox)\n .add(chart3D)\n\n// Animate surface invalidation over a moving \"update location\". The goal here is to showcase the partial data update feature of LC JS heatmaps and surfaces.\nconst tStart = window.performance.now()\nconst updateMaskRadius = 5\nconst updateMask = []\nfor (let column = -updateMaskRadius; column <= updateMaskRadius; column += 1) {\n for (let row = -updateMaskRadius; row <= updateMaskRadius; row += 1) {\n const d = Math.sqrt((column) ** 2 + (row) ** 2)\n if (d <= updateMaskRadius) {\n updateMask.push({ column, row })\n }\n }\n}\nconst random = (() => {\n const len = 123512\n const pattern = new Array(len).fill(0).map(_ => Math.random())\n let i = 0\n return () => {\n const next = pattern[i]\n i = (i + 1) % len\n return next\n }\n})()\nconst points = chart3D.addPointSeries()\n .setColorShadingStyle(new ColorShadingStyles.Simple())\n .setAutoScrollingEnabled(false)\npoints.setPointStyle(new PointStyle3D.Triangulated({\n fillStyle: points.getPointStyle().getFillStyle(),\n shape: 'sphere',\n size: { x: updateMaskRadius * 2, y: .1, z: updateMaskRadius * 2 }\n}))\n\nconst updateMaskValues = new Array(updateMaskRadius * 2 + 1).fill(0).map((_) => new Array(updateMaskRadius * 2 + 1).fill(0))\n\nconst updateAnimation = () => {\n const t = window.performance.now() - tStart\n const updateLoc_angle = t * .0005\n const updateLoc_radius = 40 + 30 * Math.sin(t * .0003) + 10 * Math.cos(t * .001)\n const updateLoc = {\n x: Math.round(COLUMNS / 2 + Math.cos(updateLoc_angle) * updateLoc_radius),\n z: Math.round(ROWS / 2 + Math.sin(updateLoc_angle) * updateLoc_radius),\n y: 0,\n }\n for (let iMask = 0; iMask < updateMask.length; iMask += 1) {\n const mask = updateMask[iMask]\n const column = updateLoc.x + mask.column\n const row = updateLoc.z + mask.row\n if (column < heightData.length && column >= 0 && row < heightData[0].length && row >= 0) {\n heightData[column][row] += random()\n }\n }\n for (let col = 0; col < updateMaskRadius * 2 + 1; col += 1) {\n for (let row = 0; row < updateMaskRadius * 2 + 1; row += 1) {\n const colData = updateLoc.x + col - updateMaskRadius\n const rowData = updateLoc.z + row - updateMaskRadius\n if (colData < heightData.length && colData >= 0 && rowData < heightData[0].length && rowData >= 0) {\n updateMaskValues[col][row] = heightData[colData][rowData]\n }\n }\n }\n surfaceSeries3D.invalidateHeightMap({\n iColumn: Math.round(updateLoc.x - updateMaskRadius),\n iRow: Math.round(updateLoc.z - updateMaskRadius),\n values: updateMaskValues,\n })\n\n points.clear().add(updateLoc)\n\n requestAnimationFrame(updateAnimation)\n}\nupdateAnimation()\n ","url":null,"readme":"This example showcases the _partial data update_ feature of `SurfaceGridSeries`.\n\nSurface Grid Series allows updating any rectangular sub-section of grid data without affecting any additional data. LightningChart JS has optimized this particular use case really well, whereas most traditional data visualization tools would have to prepare the entire visualization again even if only a small section of data needs to be updated.\n\nIn this example, there is a small focus area which is moving periodically along the XZ plane. Every frame, the height data within this focus area is changed.\n\n\n\nMore commonly, the partial data update feature is used to load large data sets in several smaller \"chunks\", as showcased in the [Chunked Surface Grid Chart Example](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0916-surfaceChunkLoad.html).\n\n# More Surface Examples\n\n- [Chunked Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0916-surfaceChunkLoad.html) | This example shows how surface grid series can be split into sub sections which are loaded individually for better performance and response time.\n\n- [Intensity Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0914-surfaceIntensityGrid.html) | This example showcases how surface grid series can be colored based on a different data set than the height map used in this example.\n\n- [Real-Time Audio Spectrum Surface Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0913-surfaceScrollingGrid.html) | This example showcases using real-time data source with surface series.\n\n- [All Surface Examples](https://www.arction.com/lightningchart-js-interactive-examples/search.html?t=surface)\n","image":"surfaceGridPartialInvalidation.png"},{"id":"lcjs-example-0916-surfaceChunkLoad","title":"JavaScript Chunked Surface Grid Chart","tags":["3d","surface","palette"],"description":"Example showcasing how large Surface Charts can be loaded in several small parts instead of 1 large data set","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/**\n * Example showcasing how large Surface Charts can be loaded in several small parts instead of 1 large data set\n */\n\nconst lcjs = require('@arction/lcjs')\nconst xydata = require('@arction/xydata')\nconst {\n lightningChart,\n LUT,\n ColorRGBA,\n PalettedFill,\n emptyLine,\n LegendBoxBuilders,\n ColorShadingStyles,\n Themes\n} = lcjs\nconst { createWaterDropDataGenerator } = xydata\n\nconst COLUMNS = 2000\nconst ROWS = 2000\nconst CHUNK_SIZE = 1000\n\n// Create chart and series.\nconst chart = lightningChart().Chart3D({\n disableAnimations: true,\n // theme: Themes.darkGold\n})\n\nconst surfaceGrid = chart.addSurfaceGridSeries({\n columns: COLUMNS,\n rows: ROWS,\n})\n .setColorShadingStyle(new ColorShadingStyles.Phong())\n .setFillStyle(\n new PalettedFill({\n lookUpProperty: 'y',\n lut: new LUT({\n interpolate: false,\n steps: [\n { value: 0, label: '0', color: ColorRGBA(0, 0, 0) },\n { value: 15, label: '15', color: ColorRGBA(0, 255, 0) },\n { value: 30, label: '30', color: ColorRGBA(255, 0, 0) },\n { value: 40, label: '40', color: ColorRGBA(0, 0, 255) },\n { value: 50, label: '50', color: ColorRGBA(255, 255, 0) },\n { value: 75, label: '75', color: ColorRGBA(0, 255, 255) },\n ],\n }),\n }),\n )\n .setWireframeStyle(emptyLine)\n\nconst legend = chart.addLegendBox(LegendBoxBuilders.HorizontalLegendBox).add(chart)\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.80,\n })\n\n// Load data set one \"chunk\" at a time. Chunk refers to a smaller sub set of the entire data set.\n// Loading large data sets in parts is extremely efficient in terms of memory usage and application usability.\n;(async () => {\n const chunks = []\n for (let column = 0; column < COLUMNS; column += CHUNK_SIZE) {\n for (let row = 0; row < ROWS; row += CHUNK_SIZE) {\n chunks.push({column, row})\n }\n }\n\n chart.setTitle(`Loading data in chunks ... (0 / ${chunks.length})`)\n for (let iChunk = 0; iChunk < chunks.length; iChunk += 1) {\n const chunk = chunks[iChunk]\n\n const rand = (min, max) => min + Math.random() * (max - min)\n const waterDropsCount = Math.round(rand(1, 5))\n const waterdropOptions = new Array(waterDropsCount).fill(0).map((_) => ({\n rowNormalized: rand(0.0, 1.0),\n columnNormalized: rand(0.0, 1.0),\n amplitude: rand(5, 60),\n }))\n const chunkData = await createWaterDropDataGenerator()\n .setColumns(CHUNK_SIZE)\n .setRows(CHUNK_SIZE)\n .setWaterDrops(waterdropOptions)\n .generate()\n\n surfaceGrid.invalidateHeightMap({\n iColumn: chunk.column,\n iRow: chunk.row,\n values: chunkData,\n })\n\n chart.setTitle(`Loading data in chunks ... (${iChunk + 1} / ${chunks.length})`)\n\n await new Promise(resolve => setTimeout(resolve, 2000))\n }\n\n chart.setTitle(`Surface Grid ${COLUMNS}x${ROWS} (total ${((COLUMNS*ROWS)/10**6).toFixed(1)} million data points)`)\n\n})();\n","url":null,"readme":"This example showcases how to load a large surface grid chart (several millions and up to billions data points) in small sub sections, instead of one massive interaction.\n\nThis is made possible by the _partial data invalidation_ syntax of `invalidateHeightMap` method (also possible with intensity data), which allows updating any rectangular sub section of the heatmap without having to update any extra data.\n\nLoading data in chunks is especially great for memory usage, because in web applications loading large data sets into memory comes with the risk of the browser crashing because there is not enough memory available. By separating the process into chunks, applications can work significantly increased reliability. \n\n# More Surface Examples\n\n- [Surface Grid Chart (only Y data)](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0912-surfaceGrid.html) | This example showcases the most simple usage of surface grid series, and also has a bit more detailed description of the related terms.\n\n- [Intensity Surface Grid Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0914-surfaceIntensityGrid.html) | This example showcases how surface grid series can be colored based on a different data set than the height map used in this example.\n\n- [Real-Time Audio Spectrum Surface Chart](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-0913-surfaceScrollingGrid.html) | This example showcases using real-time data source with surface series.\n\n- [All Surface Examples](https://www.arction.com/lightningchart-js-interactive-examples/search.html?t=surface)\n","image":"surfaceChunkLoad.png"},{"id":"lcjs-example-0917-confidenceEllipsoid3d","title":"JavaScript 3D Confidence Ellipsoid Chart","tags":["3d","point"],"description":"Example showcasing 3D variant of popular 2D statistics data visualization method of confidence ellipses","metaDescription":"LightningChart JS Interactive Examples. High-performance 3D JavaScript Charts: Fast 3D Charts, Scientific charts for real-time monitoring. Many 3D JavaScript chart examples with API-links.","src":"/**\n * Example showcasing 3D variant of popular 2D statistics data visualization method of confidence ellipses\n */\n\nconst lcjs = require('@arction/lcjs')\nconst {\n lightningChart,\n PointStyle3D,\n ColorShadingStyles,\n Themes\n} = lcjs\n\nconst chart3D = lightningChart().Chart3D({\n // theme: Themes.darkGold\n}).setTitle('3D scatter data set and confidence ellipsoid')\nchart3D.forEachAxis((axis) => axis.setInterval(-1.8, 1.8, false, true))\n\nconst scatterSeries = chart3D.addPointSeries().setName('Scatter series')\nconst confidenceEllipsoidSeries = chart3D.addPointSeries().setName('Confidence ellipsoid')\n\nconst xSize = 1.2\nconst ySize = 1.2\nconst zSize = 1.5\nconst pi2 = Math.PI * 2\nconst data = new Array(1000).fill(0).map((_) => {\n // https://karthikkaranth.me/blog/generating-random-points-in-a-sphere/\n const u = Math.random()\n const v = Math.random()\n const theta = u * pi2\n const phi = Math.acos(2.0 * v - 1.0)\n const r = Math.cbrt(Math.random())\n const sinTheta = Math.sin(theta)\n const cosTheta = Math.cos(theta)\n const sinPhi = Math.sin(phi)\n const cosPhi = Math.cos(phi)\n const x = xSize * r * sinPhi * cosTheta\n const y = ySize * r * sinPhi * sinTheta\n const z = zSize * r * cosPhi\n return { x, y, z }\n})\nscatterSeries.add(data)\n\nconfidenceEllipsoidSeries\n .setDepthTestEnabled(false)\n .setColorShadingStyle(new ColorShadingStyles.Simple())\n .setPointStyle(\n new PointStyle3D.Triangulated({\n // Ellipsoid is rendered as sphere with individual sizes along X, Y and Z axes.\n shape: 'sphere',\n size: { x: xSize * 2, y: ySize * 2, z: zSize * 2 },\n fillStyle: scatterSeries.getPointStyle().getFillStyle().setA(50),\n }),\n )\n .add({ x: 0, y: 0, z: 0 })\n\nconst legend = chart3D.addLegendBox().add(chart3D)\n","url":null,"readme":"Example showcasing the 3D variant of a common statistical data visualization method: confidence ellipses.\n\nConfidence ellipses are used especially with statistic chart applications. A common usage, for example, is the 95% confidence ellipse, which visualizes the area that contains 95% of samples, which makes it easier for the user to understand which points are _outliers_.\n\nThe same can be done in more complex 3D scatter data set visualizations, in which case the ellipse becomes an *ellipsoid*.\n\nProgrammatically, this can be implemented by drawing the ellipsoid as a *sphere* with different sizes along the X, Y and Z axes.\n\n```ts\nconst ellipsoidSeries = chart3D.addPointSeries()\n // Specify ellipsoid center coordinate.\n .add({ x: 0, y: 0, z: 0 })\n .setPointStyle(new PointStyle3D.Triangulated({\n // Specify ellipsoid dimensions.\n size: { x: 1, y: 2, z: 1.5 }\n }))\n```","image":"confidenceEllipsoid3d.png"},{"id":"lcjs-example-1001-polarMicrophoneSensitivity","title":"Polar Microphone Sensitivity JavaScript Chart","tags":["polar","line"],"description":"PolarChart showcase with LineSeries","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Polar Charts, Scientific Charts, High-Performance Charts, Medical Charts, Area Charts, Line Series.","src":"/*\n * LightningChartJS example showcasing PolarChart and PolarLineSeries in a microphone sensitivity visualization application.\n *\n * Also shows configuration of PolarAxes.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n Themes\n} = lcjs\n\nconst app = (data) => {\n // Create a polar chart.\n const polar = lightningChart().Polar({\n // theme: Themes.darkGold\n })\n .setTitle('Microphone sensitivity 360 degrees')\n\n // Configure Polar Axes.\n const radialAxis = polar.getRadialAxis()\n // 0 = North, Clockwise direction.\n .setNorth(0)\n .setClockwise(true)\n\n const amplitudeAxis = polar.getAmplitudeAxis()\n // Set amplitude interval manually.\n // [-39 dB, 0 dB]\n .setInterval(-39, 0)\n .setTitle('Sensitivity (dB)')\n\n // Create series for each data set.\n const series = data.map(( info, i ) => {\n const { name, hex } = info\n const polarLineSeries = polar.addLineSeries()\n .setName( name )\n .setMouseInteractions(false)\n .setCursorResultTableFormatter((builder, series, angleDeg, amplitude, format) => builder\n .addRow(`${series.getName()} signal`)\n .addRow('Angle', '', `${Math.round(angleDeg)} °`)\n .addRow('Sensitivity', '', `${format(amplitude)} dB`)\n )\n\n // Set series data.\n const polarPoints = data[i].data\n const polarPointsWithStatic = polarPoints.map( polarPoint => ({\n angle: polarPoint.angle,\n amplitude: polarPoint.amplitude + (Math.random() * 2 - 1) * 0.2\n }))\n polarLineSeries.setData(polarPointsWithStatic)\n \n return polarLineSeries\n })\n\n // Add LegendBox.\n const legendBox = polar.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.20,\n })\n legendBox.add(polar)\n}\n\napp([\n {\n name: '150Hz',\n data:[{\"angle\":0,\"amplitude\":0},{\"angle\":0.5,\"amplitude\":0},{\"angle\":0.8,\"amplitude\":0},{\"angle\":1.1,\"amplitude\":0},{\"angle\":2.1,\"amplitude\":0},{\"angle\":2.4,\"amplitude\":0},{\"angle\":2.9,\"amplitude\":0},{\"angle\":3,\"amplitude\":0},{\"angle\":3.4,\"amplitude\":0},{\"angle\":4.6,\"amplitude\":0},{\"angle\":6.1,\"amplitude\":0},{\"angle\":6.6,\"amplitude\":0},{\"angle\":7.2,\"amplitude\":0},{\"angle\":7.5,\"amplitude\":-0.40000000000000036},{\"angle\":8.3,\"amplitude\":-0.40000000000000036},{\"angle\":8.4,\"amplitude\":-0.40000000000000036},{\"angle\":9,\"amplitude\":-0.40000000000000036},{\"angle\":9.4,\"amplitude\":-0.40000000000000036},{\"angle\":9.5,\"amplitude\":-0.40000000000000036},{\"angle\":10.1,\"amplitude\":-0.40000000000000036},{\"angle\":10.7,\"amplitude\":-0.40000000000000036},{\"angle\":11.2,\"amplitude\":-0.40000000000000036},{\"angle\":11.3,\"amplitude\":-0.40000000000000036},{\"angle\":11.8,\"amplitude\":-0.40000000000000036},{\"angle\":12.1,\"amplitude\":-0.40000000000000036},{\"angle\":12.4,\"amplitude\":-0.40000000000000036},{\"angle\":12.8,\"amplitude\":-0.40000000000000036},{\"angle\":12.9,\"amplitude\":-0.40000000000000036},{\"angle\":13.5,\"amplitude\":-0.40000000000000036},{\"angle\":13.7,\"amplitude\":-0.40000000000000036},{\"angle\":14,\"amplitude\":-0.40000000000000036},{\"angle\":14.5,\"amplitude\":0},{\"angle\":15,\"amplitude\":0},{\"angle\":15.3,\"amplitude\":0},{\"angle\":16,\"amplitude\":0},{\"angle\":16.3,\"amplitude\":0},{\"angle\":16.5,\"amplitude\":0},{\"angle\":16.6,\"amplitude\":0},{\"angle\":16.9,\"amplitude\":0},{\"angle\":17,\"amplitude\":0},{\"angle\":17.2,\"amplitude\":0},{\"angle\":17.6,\"amplitude\":0},{\"angle\":17.8,\"amplitude\":0},{\"angle\":18.1,\"amplitude\":0},{\"angle\":18.3,\"amplitude\":-0.40000000000000036},{\"angle\":18.7,\"amplitude\":-0.40000000000000036},{\"angle\":18.9,\"amplitude\":-0.40000000000000036},{\"angle\":19.1,\"amplitude\":-0.40000000000000036},{\"angle\":19.5,\"amplitude\":-0.40000000000000036},{\"angle\":20.1,\"amplitude\":-0.40000000000000036},{\"angle\":20.5,\"amplitude\":-0.40000000000000036},{\"angle\":20.7,\"amplitude\":-0.8000000000000007},{\"angle\":20.9,\"amplitude\":-0.8000000000000007},{\"angle\":21.8,\"amplitude\":-0.8000000000000007},{\"angle\":21.9,\"amplitude\":-0.8000000000000007},{\"angle\":22,\"amplitude\":-0.8000000000000007},{\"angle\":22.1,\"amplitude\":-0.8000000000000007},{\"angle\":22.5,\"amplitude\":-0.8000000000000007},{\"angle\":22.6,\"amplitude\":-0.8000000000000007},{\"angle\":22.7,\"amplitude\":-0.8000000000000007},{\"angle\":23,\"amplitude\":-0.8000000000000007},{\"angle\":23.3,\"amplitude\":-0.8000000000000007},{\"angle\":23.8,\"amplitude\":-0.8000000000000007},{\"angle\":25.2,\"amplitude\":-1.200000000000001},{\"angle\":25.5,\"amplitude\":-0.8000000000000007},{\"angle\":26.1,\"amplitude\":-1.200000000000001},{\"angle\":26.4,\"amplitude\":-1.200000000000001},{\"angle\":26.9,\"amplitude\":-1.200000000000001},{\"angle\":27,\"amplitude\":-1.200000000000001},{\"angle\":27.6,\"amplitude\":-1.200000000000001},{\"angle\":27.8,\"amplitude\":-1.200000000000001},{\"angle\":28.1,\"amplitude\":-1.200000000000001},{\"angle\":28.3,\"amplitude\":-1.200000000000001},{\"angle\":28.8,\"amplitude\":-1.200000000000001},{\"angle\":28.9,\"amplitude\":-1.200000000000001},{\"angle\":29.6,\"amplitude\":-1.200000000000001},{\"angle\":29.8,\"amplitude\":-1.200000000000001},{\"angle\":30.1,\"amplitude\":-1.200000000000001},{\"angle\":30.3,\"amplitude\":-1.6000000000000014},{\"angle\":30.5,\"amplitude\":-1.6000000000000014},{\"angle\":31,\"amplitude\":-1.6000000000000014},{\"angle\":31.5,\"amplitude\":-1.6000000000000014},{\"angle\":31.8,\"amplitude\":-1.6000000000000014},{\"angle\":32.5,\"amplitude\":-1.6000000000000014},{\"angle\":33.7,\"amplitude\":-1.6000000000000014},{\"angle\":33.8,\"amplitude\":-1.6000000000000014},{\"angle\":34,\"amplitude\":-1.6000000000000014},{\"angle\":34.3,\"amplitude\":-1.6000000000000014},{\"angle\":34.5,\"amplitude\":-2.0000000000000018},{\"angle\":36.5,\"amplitude\":-2.400000000000002},{\"angle\":36.7,\"amplitude\":-2.400000000000002},{\"angle\":36.9,\"amplitude\":-2.400000000000002},{\"angle\":37.6,\"amplitude\":-2.799999999999998},{\"angle\":37.7,\"amplitude\":-2.799999999999998},{\"angle\":37.9,\"amplitude\":-2.799999999999998},{\"angle\":39.1,\"amplitude\":-3.1999999999999984},{\"angle\":39.6,\"amplitude\":-3.1999999999999984},{\"angle\":39.9,\"amplitude\":-3.1999999999999984},{\"angle\":40.2,\"amplitude\":-3.1999999999999984},{\"angle\":40.7,\"amplitude\":-3.5999999999999988},{\"angle\":41.6,\"amplitude\":-3.5999999999999988},{\"angle\":41.7,\"amplitude\":-3.5999999999999988},{\"angle\":41.9,\"amplitude\":-3.5999999999999988},{\"angle\":42.1,\"amplitude\":-3.5999999999999988},{\"angle\":42.3,\"amplitude\":-3.5999999999999988},{\"angle\":42.8,\"amplitude\":-3.999999999999999},{\"angle\":43.9,\"amplitude\":-3.999999999999999},{\"angle\":44.2,\"amplitude\":-3.999999999999999},{\"angle\":44.5,\"amplitude\":-4.3999999999999995},{\"angle\":44.8,\"amplitude\":-3.999999999999999},{\"angle\":45.1,\"amplitude\":-3.999999999999999},{\"angle\":45.3,\"amplitude\":-4.3999999999999995},{\"angle\":46,\"amplitude\":-4.3999999999999995},{\"angle\":46.3,\"amplitude\":-4.3999999999999995},{\"angle\":47.1,\"amplitude\":-4.3999999999999995},{\"angle\":47.4,\"amplitude\":-4.3999999999999995},{\"angle\":47.7,\"amplitude\":-4.3999999999999995},{\"angle\":49.2,\"amplitude\":-4.8},{\"angle\":49.6,\"amplitude\":-4.8},{\"angle\":49.8,\"amplitude\":-4.8},{\"angle\":50.4,\"amplitude\":-4.8},{\"angle\":50.6,\"amplitude\":-4.8},{\"angle\":50.9,\"amplitude\":-4.8},{\"angle\":51.7,\"amplitude\":-4.8},{\"angle\":51.9,\"amplitude\":-4.8},{\"angle\":52.4,\"amplitude\":-4.8},{\"angle\":52.5,\"amplitude\":-4.8},{\"angle\":52.7,\"amplitude\":-4.8},{\"angle\":53.2,\"amplitude\":-4.8},{\"angle\":54.1,\"amplitude\":-5.2},{\"angle\":54.4,\"amplitude\":-5.2},{\"angle\":54.5,\"amplitude\":-5.2},{\"angle\":54.6,\"amplitude\":-5.2},{\"angle\":55.9,\"amplitude\":-5.2},{\"angle\":56.3,\"amplitude\":-5.6000000000000005},{\"angle\":56.7,\"amplitude\":-5.6000000000000005},{\"angle\":57,\"amplitude\":-5.6000000000000005},{\"angle\":57.2,\"amplitude\":-5.6000000000000005},{\"angle\":57.6,\"amplitude\":-5.6000000000000005},{\"angle\":58,\"amplitude\":-5.6000000000000005},{\"angle\":59.5,\"amplitude\":-6.000000000000001},{\"angle\":59.9,\"amplitude\":-6.000000000000001},{\"angle\":60.2,\"amplitude\":-6.000000000000001},{\"angle\":60.8,\"amplitude\":-6.400000000000001},{\"angle\":61.1,\"amplitude\":-6.400000000000001},{\"angle\":61.7,\"amplitude\":-6.400000000000001},{\"angle\":61.8,\"amplitude\":-6.400000000000001},{\"angle\":62.1,\"amplitude\":-6.400000000000001},{\"angle\":62.4,\"amplitude\":-6.400000000000001},{\"angle\":64.7,\"amplitude\":-6.800000000000002},{\"angle\":65,\"amplitude\":-6.800000000000002},{\"angle\":65.6,\"amplitude\":-6.800000000000002},{\"angle\":65.8,\"amplitude\":-6.800000000000002},{\"angle\":66.3,\"amplitude\":-6.800000000000002},{\"angle\":66.5,\"amplitude\":-6.800000000000002},{\"angle\":67.3,\"amplitude\":-6.800000000000002},{\"angle\":67.8,\"amplitude\":-6.800000000000002},{\"angle\":67.9,\"amplitude\":-6.800000000000002},{\"angle\":68.2,\"amplitude\":-7.200000000000002},{\"angle\":68.4,\"amplitude\":-7.200000000000002},{\"angle\":68.6,\"amplitude\":-6.800000000000002},{\"angle\":68.9,\"amplitude\":-6.800000000000002},{\"angle\":69.2,\"amplitude\":-7.200000000000002},{\"angle\":70.2,\"amplitude\":-7.200000000000002},{\"angle\":70.4,\"amplitude\":-7.200000000000002},{\"angle\":70.9,\"amplitude\":-7.200000000000002},{\"angle\":71.2,\"amplitude\":-7.200000000000002},{\"angle\":72.1,\"amplitude\":-7.599999999999998},{\"angle\":72.2,\"amplitude\":-7.599999999999998},{\"angle\":72.4,\"amplitude\":-7.599999999999998},{\"angle\":73.5,\"amplitude\":-7.599999999999998},{\"angle\":73.6,\"amplitude\":-7.599999999999998},{\"angle\":73.9,\"amplitude\":-7.599999999999998},{\"angle\":74.6,\"amplitude\":-7.999999999999998},{\"angle\":74.7,\"amplitude\":-7.999999999999998},{\"angle\":75.2,\"amplitude\":-7.999999999999998},{\"angle\":75.4,\"amplitude\":-7.999999999999998},{\"angle\":76,\"amplitude\":-7.999999999999998},{\"angle\":76.8,\"amplitude\":-7.999999999999998},{\"angle\":77.1,\"amplitude\":-7.999999999999998},{\"angle\":77.5,\"amplitude\":-8.399999999999999},{\"angle\":77.8,\"amplitude\":-8.399999999999999},{\"angle\":78,\"amplitude\":-8.399999999999999},{\"angle\":78.1,\"amplitude\":-8.399999999999999},{\"angle\":78.4,\"amplitude\":-8.399999999999999},{\"angle\":79.4,\"amplitude\":-8.399999999999999},{\"angle\":79.8,\"amplitude\":-8.399999999999999},{\"angle\":80.1,\"amplitude\":-8.799999999999999},{\"angle\":80.6,\"amplitude\":-8.799999999999999},{\"angle\":81.1,\"amplitude\":-8.799999999999999},{\"angle\":81.2,\"amplitude\":-8.799999999999999},{\"angle\":82.7,\"amplitude\":-8.799999999999999},{\"angle\":83.2,\"amplitude\":-8.799999999999999},{\"angle\":83.4,\"amplitude\":-8.799999999999999},{\"angle\":83.7,\"amplitude\":-8.799999999999999},{\"angle\":84.1,\"amplitude\":-9.2},{\"angle\":84.4,\"amplitude\":-9.2},{\"angle\":84.7,\"amplitude\":-9.2},{\"angle\":85.3,\"amplitude\":-9.2},{\"angle\":85.4,\"amplitude\":-9.2},{\"angle\":85.9,\"amplitude\":-9.2},{\"angle\":86.6,\"amplitude\":-9.2},{\"angle\":86.8,\"amplitude\":-9.2},{\"angle\":87.1,\"amplitude\":-9.2},{\"angle\":89.2,\"amplitude\":-9.6},{\"angle\":89.3,\"amplitude\":-9.6},{\"angle\":89.9,\"amplitude\":-9.6},{\"angle\":90,\"amplitude\":-10},{\"angle\":90.6,\"amplitude\":-10},{\"angle\":90.7,\"amplitude\":-10},{\"angle\":91.3,\"amplitude\":-10},{\"angle\":91.5,\"amplitude\":-10},{\"angle\":92,\"amplitude\":-10},{\"angle\":92.2,\"amplitude\":-10.4},{\"angle\":93.1,\"amplitude\":-10.4},{\"angle\":93.6,\"amplitude\":-10.4},{\"angle\":93.8,\"amplitude\":-10.4},{\"angle\":94.3,\"amplitude\":-10.4},{\"angle\":94.9,\"amplitude\":-10.8},{\"angle\":95.8,\"amplitude\":-10.8},{\"angle\":96.4,\"amplitude\":-11.200000000000001},{\"angle\":96.6,\"amplitude\":-11.200000000000001},{\"angle\":96.8,\"amplitude\":-11.200000000000001},{\"angle\":97.4,\"amplitude\":-11.200000000000001},{\"angle\":97.6,\"amplitude\":-11.200000000000001},{\"angle\":99,\"amplitude\":-11.600000000000001},{\"angle\":99.6,\"amplitude\":-11.600000000000001},{\"angle\":99.8,\"amplitude\":-11.600000000000001},{\"angle\":101.5,\"amplitude\":-12.000000000000002},{\"angle\":101.7,\"amplitude\":-12.000000000000002},{\"angle\":102.1,\"amplitude\":-12.400000000000002},{\"angle\":102.3,\"amplitude\":-12.400000000000002},{\"angle\":102.9,\"amplitude\":-12.400000000000002},{\"angle\":103.2,\"amplitude\":-12.400000000000002},{\"angle\":103.9,\"amplitude\":-12.799999999999997},{\"angle\":104.1,\"amplitude\":-12.799999999999997},{\"angle\":104.2,\"amplitude\":-12.799999999999997},{\"angle\":104.3,\"amplitude\":-12.799999999999997},{\"angle\":104.8,\"amplitude\":-12.799999999999997},{\"angle\":106.2,\"amplitude\":-13.599999999999998},{\"angle\":106.4,\"amplitude\":-13.599999999999998},{\"angle\":107,\"amplitude\":-13.599999999999998},{\"angle\":107.7,\"amplitude\":-14},{\"angle\":108.1,\"amplitude\":-14},{\"angle\":108.3,\"amplitude\":-14.399999999999999},{\"angle\":108.8,\"amplitude\":-14.399999999999999},{\"angle\":108.9,\"amplitude\":-14.8},{\"angle\":109.6,\"amplitude\":-14.8},{\"angle\":109.9,\"amplitude\":-14.8},{\"angle\":110.1,\"amplitude\":-15.2},{\"angle\":110.3,\"amplitude\":-15.2},{\"angle\":110.7,\"amplitude\":-15.2},{\"angle\":111,\"amplitude\":-15.600000000000001},{\"angle\":111.7,\"amplitude\":-15.600000000000001},{\"angle\":111.8,\"amplitude\":-16},{\"angle\":112.4,\"amplitude\":-16},{\"angle\":112.5,\"amplitude\":-16},{\"angle\":112.7,\"amplitude\":-16},{\"angle\":113.3,\"amplitude\":-16.400000000000002},{\"angle\":114,\"amplitude\":-16.8},{\"angle\":114.1,\"amplitude\":-16.8},{\"angle\":114.6,\"amplitude\":-16.8},{\"angle\":115.5,\"amplitude\":-17.200000000000003},{\"angle\":115.9,\"amplitude\":-17.200000000000003},{\"angle\":116.4,\"amplitude\":-17.200000000000003},{\"angle\":116.9,\"amplitude\":-17.200000000000003},{\"angle\":117.2,\"amplitude\":-17.599999999999998},{\"angle\":118.9,\"amplitude\":-18},{\"angle\":119.3,\"amplitude\":-18},{\"angle\":119.7,\"amplitude\":-18.4},{\"angle\":120.1,\"amplitude\":-18.4},{\"angle\":121.6,\"amplitude\":-18.799999999999997},{\"angle\":121.7,\"amplitude\":-18.799999999999997},{\"angle\":122.1,\"amplitude\":-19.2},{\"angle\":123.2,\"amplitude\":-19.6},{\"angle\":123.9,\"amplitude\":-20},{\"angle\":124.2,\"amplitude\":-20},{\"angle\":124.6,\"amplitude\":-20.4},{\"angle\":125.4,\"amplitude\":-20.8},{\"angle\":126.1,\"amplitude\":-21.200000000000003},{\"angle\":127.5,\"amplitude\":-21.200000000000003},{\"angle\":127.9,\"amplitude\":-21.6},{\"angle\":128.4,\"amplitude\":-21.6},{\"angle\":129,\"amplitude\":-22},{\"angle\":129.9,\"amplitude\":-22.400000000000002},{\"angle\":130.5,\"amplitude\":-22.400000000000002},{\"angle\":131.6,\"amplitude\":-23.200000000000003},{\"angle\":131.8,\"amplitude\":-23.200000000000003},{\"angle\":132.2,\"amplitude\":-23.6},{\"angle\":132.4,\"amplitude\":-23.6},{\"angle\":132.6,\"amplitude\":-24},{\"angle\":134,\"amplitude\":-24.8},{\"angle\":134.2,\"amplitude\":-24.8},{\"angle\":135,\"amplitude\":-24.8},{\"angle\":135.2,\"amplitude\":-25.2},{\"angle\":135.7,\"amplitude\":-25.2},{\"angle\":136.5,\"amplitude\":-25.6},{\"angle\":137.1,\"amplitude\":-26},{\"angle\":137.4,\"amplitude\":-26},{\"angle\":137.7,\"amplitude\":-26.4},{\"angle\":138.3,\"amplitude\":-26.799999999999997},{\"angle\":138.6,\"amplitude\":-26.799999999999997},{\"angle\":139.9,\"amplitude\":-27.199999999999996},{\"angle\":140.3,\"amplitude\":-27.199999999999996},{\"angle\":141,\"amplitude\":-27.599999999999998},{\"angle\":141.4,\"amplitude\":-28},{\"angle\":142.2,\"amplitude\":-28},{\"angle\":143,\"amplitude\":-28.4},{\"angle\":144.2,\"amplitude\":-28.799999999999997},{\"angle\":144.9,\"amplitude\":-29.2},{\"angle\":145.7,\"amplitude\":-29.2},{\"angle\":146.2,\"amplitude\":-29.2},{\"angle\":147.5,\"amplitude\":-29.6},{\"angle\":148.5,\"amplitude\":-30},{\"angle\":149.4,\"amplitude\":-30},{\"angle\":149.6,\"amplitude\":-30.4},{\"angle\":150,\"amplitude\":-30.4},{\"angle\":150.5,\"amplitude\":-30.4},{\"angle\":152,\"amplitude\":-30.8},{\"angle\":152.2,\"amplitude\":-30.8},{\"angle\":153.5,\"amplitude\":-30.8},{\"angle\":154.6,\"amplitude\":-31.200000000000003},{\"angle\":154.9,\"amplitude\":-31.6},{\"angle\":155.5,\"amplitude\":-31.6},{\"angle\":156.4,\"amplitude\":-32},{\"angle\":157,\"amplitude\":-32},{\"angle\":158,\"amplitude\":-32},{\"angle\":158.6,\"amplitude\":-32},{\"angle\":159.2,\"amplitude\":-32},{\"angle\":160.2,\"amplitude\":-32.400000000000006},{\"angle\":162.2,\"amplitude\":-32.400000000000006},{\"angle\":162.9,\"amplitude\":-32.800000000000004},{\"angle\":163.4,\"amplitude\":-32.800000000000004},{\"angle\":164.4,\"amplitude\":-32.800000000000004},{\"angle\":164.9,\"amplitude\":-33.199999999999996},{\"angle\":166.6,\"amplitude\":-33.6},{\"angle\":167.4,\"amplitude\":-33.6},{\"angle\":169.6,\"amplitude\":-33.6},{\"angle\":170.4,\"amplitude\":-33.6},{\"angle\":171.2,\"amplitude\":-33.6},{\"angle\":173.6,\"amplitude\":-33.6},{\"angle\":176,\"amplitude\":-34},{\"angle\":176.9,\"amplitude\":-34},{\"angle\":179.5,\"amplitude\":-34},{\"angle\":180.4,\"amplitude\":-34},{\"amplitude\":-34,\"angle\":179.6},{\"amplitude\":-34,\"angle\":180.5},{\"amplitude\":-34,\"angle\":183.1},{\"amplitude\":-34,\"angle\":184},{\"amplitude\":-33.6,\"angle\":186.4},{\"amplitude\":-33.6,\"angle\":188.8},{\"amplitude\":-33.6,\"angle\":189.6},{\"amplitude\":-33.6,\"angle\":190.4},{\"amplitude\":-33.6,\"angle\":192.6},{\"amplitude\":-33.6,\"angle\":193.4},{\"amplitude\":-33.199999999999996,\"angle\":195.1},{\"amplitude\":-32.800000000000004,\"angle\":195.6},{\"amplitude\":-32.800000000000004,\"angle\":196.6},{\"amplitude\":-32.800000000000004,\"angle\":197.1},{\"amplitude\":-32.400000000000006,\"angle\":197.8},{\"amplitude\":-32.400000000000006,\"angle\":199.8},{\"amplitude\":-32,\"angle\":200.8},{\"amplitude\":-32,\"angle\":201.4},{\"amplitude\":-32,\"angle\":202},{\"amplitude\":-32,\"angle\":203},{\"amplitude\":-32,\"angle\":203.6},{\"amplitude\":-31.6,\"angle\":204.5},{\"amplitude\":-31.6,\"angle\":205.1},{\"amplitude\":-31.200000000000003,\"angle\":205.4},{\"amplitude\":-30.8,\"angle\":206.5},{\"amplitude\":-30.8,\"angle\":207.8},{\"amplitude\":-30.8,\"angle\":208},{\"amplitude\":-30.4,\"angle\":209.5},{\"amplitude\":-30.4,\"angle\":210},{\"amplitude\":-30.4,\"angle\":210.4},{\"amplitude\":-30,\"angle\":210.6},{\"amplitude\":-30,\"angle\":211.5},{\"amplitude\":-29.6,\"angle\":212.5},{\"amplitude\":-29.2,\"angle\":213.8},{\"amplitude\":-29.2,\"angle\":214.3},{\"amplitude\":-29.2,\"angle\":215.1},{\"amplitude\":-28.799999999999997,\"angle\":215.8},{\"amplitude\":-28.4,\"angle\":217},{\"amplitude\":-28,\"angle\":217.8},{\"amplitude\":-28,\"angle\":218.6},{\"amplitude\":-27.599999999999998,\"angle\":219},{\"amplitude\":-27.199999999999996,\"angle\":219.7},{\"amplitude\":-27.199999999999996,\"angle\":220.1},{\"amplitude\":-26.799999999999997,\"angle\":221.4},{\"amplitude\":-26.799999999999997,\"angle\":221.7},{\"amplitude\":-26.4,\"angle\":222.3},{\"amplitude\":-26,\"angle\":222.6},{\"amplitude\":-26,\"angle\":222.9},{\"amplitude\":-25.6,\"angle\":223.5},{\"amplitude\":-25.2,\"angle\":224.3},{\"amplitude\":-25.2,\"angle\":224.8},{\"amplitude\":-24.8,\"angle\":225},{\"amplitude\":-24.8,\"angle\":225.8},{\"amplitude\":-24.8,\"angle\":226},{\"amplitude\":-24,\"angle\":227.4},{\"amplitude\":-23.6,\"angle\":227.6},{\"amplitude\":-23.6,\"angle\":227.8},{\"amplitude\":-23.200000000000003,\"angle\":228.2},{\"amplitude\":-23.200000000000003,\"angle\":228.4},{\"amplitude\":-22.400000000000002,\"angle\":229.5},{\"amplitude\":-22.400000000000002,\"angle\":230.1},{\"amplitude\":-22,\"angle\":231},{\"amplitude\":-21.6,\"angle\":231.6},{\"amplitude\":-21.6,\"angle\":232.1},{\"amplitude\":-21.200000000000003,\"angle\":232.5},{\"amplitude\":-21.200000000000003,\"angle\":233.9},{\"amplitude\":-20.8,\"angle\":234.6},{\"amplitude\":-20.4,\"angle\":235.4},{\"amplitude\":-20,\"angle\":235.8},{\"amplitude\":-20,\"angle\":236.1},{\"amplitude\":-19.6,\"angle\":236.8},{\"amplitude\":-19.2,\"angle\":237.9},{\"amplitude\":-18.799999999999997,\"angle\":238.3},{\"amplitude\":-18.799999999999997,\"angle\":238.4},{\"amplitude\":-18.4,\"angle\":239.9},{\"amplitude\":-18.4,\"angle\":240.3},{\"amplitude\":-18,\"angle\":240.7},{\"amplitude\":-18,\"angle\":241.1},{\"amplitude\":-17.599999999999998,\"angle\":242.8},{\"amplitude\":-17.200000000000003,\"angle\":243.1},{\"amplitude\":-17.200000000000003,\"angle\":243.6},{\"amplitude\":-17.200000000000003,\"angle\":244.1},{\"amplitude\":-17.200000000000003,\"angle\":244.5},{\"amplitude\":-16.8,\"angle\":245.4},{\"amplitude\":-16.8,\"angle\":245.9},{\"amplitude\":-16.8,\"angle\":246},{\"amplitude\":-16.400000000000002,\"angle\":246.7},{\"amplitude\":-16,\"angle\":247.3},{\"amplitude\":-16,\"angle\":247.5},{\"amplitude\":-16,\"angle\":247.6},{\"amplitude\":-16,\"angle\":248.2},{\"amplitude\":-15.600000000000001,\"angle\":248.3},{\"amplitude\":-15.600000000000001,\"angle\":249},{\"amplitude\":-15.2,\"angle\":249.3},{\"amplitude\":-15.2,\"angle\":249.7},{\"amplitude\":-15.2,\"angle\":249.9},{\"amplitude\":-14.8,\"angle\":250.1},{\"amplitude\":-14.8,\"angle\":250.4},{\"amplitude\":-14.8,\"angle\":251.1},{\"amplitude\":-14.399999999999999,\"angle\":251.2},{\"amplitude\":-14.399999999999999,\"angle\":251.7},{\"amplitude\":-14,\"angle\":251.9},{\"amplitude\":-14,\"angle\":252.3},{\"amplitude\":-13.599999999999998,\"angle\":253},{\"amplitude\":-13.599999999999998,\"angle\":253.6},{\"amplitude\":-13.599999999999998,\"angle\":253.8},{\"amplitude\":-12.799999999999997,\"angle\":255.2},{\"amplitude\":-12.799999999999997,\"angle\":255.7},{\"amplitude\":-12.799999999999997,\"angle\":255.8},{\"amplitude\":-12.799999999999997,\"angle\":255.9},{\"amplitude\":-12.799999999999997,\"angle\":256.1},{\"amplitude\":-12.400000000000002,\"angle\":256.8},{\"amplitude\":-12.400000000000002,\"angle\":257.1},{\"amplitude\":-12.400000000000002,\"angle\":257.7},{\"amplitude\":-12.400000000000002,\"angle\":257.9},{\"amplitude\":-12.000000000000002,\"angle\":258.3},{\"amplitude\":-12.000000000000002,\"angle\":258.5},{\"amplitude\":-11.600000000000001,\"angle\":260.2},{\"amplitude\":-11.600000000000001,\"angle\":260.4},{\"amplitude\":-11.600000000000001,\"angle\":261},{\"amplitude\":-11.200000000000001,\"angle\":262.4},{\"amplitude\":-11.200000000000001,\"angle\":262.6},{\"amplitude\":-11.200000000000001,\"angle\":263.2},{\"amplitude\":-11.200000000000001,\"angle\":263.4},{\"amplitude\":-11.200000000000001,\"angle\":263.6},{\"amplitude\":-10.8,\"angle\":264.2},{\"amplitude\":-10.8,\"angle\":265.1},{\"amplitude\":-10.4,\"angle\":265.7},{\"amplitude\":-10.4,\"angle\":266.2},{\"amplitude\":-10.4,\"angle\":266.4},{\"amplitude\":-10.4,\"angle\":266.9},{\"amplitude\":-10.4,\"angle\":267.8},{\"amplitude\":-10,\"angle\":268},{\"amplitude\":-10,\"angle\":268.5},{\"amplitude\":-10,\"angle\":268.7},{\"amplitude\":-10,\"angle\":269.3},{\"amplitude\":-10,\"angle\":269.4},{\"amplitude\":-10,\"angle\":270},{\"amplitude\":-9.6,\"angle\":270.1},{\"amplitude\":-9.6,\"angle\":270.7},{\"amplitude\":-9.6,\"angle\":270.8},{\"amplitude\":-9.2,\"angle\":272.9},{\"amplitude\":-9.2,\"angle\":273.2},{\"amplitude\":-9.2,\"angle\":273.4},{\"amplitude\":-9.2,\"angle\":274.1},{\"amplitude\":-9.2,\"angle\":274.6},{\"amplitude\":-9.2,\"angle\":274.7},{\"amplitude\":-9.2,\"angle\":275.3},{\"amplitude\":-9.2,\"angle\":275.6},{\"amplitude\":-9.2,\"angle\":275.9},{\"amplitude\":-8.799999999999999,\"angle\":276.3},{\"amplitude\":-8.799999999999999,\"angle\":276.6},{\"amplitude\":-8.799999999999999,\"angle\":276.8},{\"amplitude\":-8.799999999999999,\"angle\":277.3},{\"amplitude\":-8.799999999999999,\"angle\":278.8},{\"amplitude\":-8.799999999999999,\"angle\":278.9},{\"amplitude\":-8.799999999999999,\"angle\":279.4},{\"amplitude\":-8.799999999999999,\"angle\":279.9},{\"amplitude\":-8.399999999999999,\"angle\":280.2},{\"amplitude\":-8.399999999999999,\"angle\":280.6},{\"amplitude\":-8.399999999999999,\"angle\":281.6},{\"amplitude\":-8.399999999999999,\"angle\":281.9},{\"amplitude\":-8.399999999999999,\"angle\":282},{\"amplitude\":-8.399999999999999,\"angle\":282.2},{\"amplitude\":-8.399999999999999,\"angle\":282.5},{\"amplitude\":-7.999999999999998,\"angle\":282.9},{\"amplitude\":-7.999999999999998,\"angle\":283.2},{\"amplitude\":-7.999999999999998,\"angle\":284},{\"amplitude\":-7.999999999999998,\"angle\":284.6},{\"amplitude\":-7.999999999999998,\"angle\":284.8},{\"amplitude\":-7.999999999999998,\"angle\":285.3},{\"amplitude\":-7.999999999999998,\"angle\":285.4},{\"amplitude\":-7.599999999999998,\"angle\":286.1},{\"amplitude\":-7.599999999999998,\"angle\":286.4},{\"amplitude\":-7.599999999999998,\"angle\":286.5},{\"amplitude\":-7.599999999999998,\"angle\":287.6},{\"amplitude\":-7.599999999999998,\"angle\":287.8},{\"amplitude\":-7.599999999999998,\"angle\":287.9},{\"amplitude\":-7.200000000000002,\"angle\":288.8},{\"amplitude\":-7.200000000000002,\"angle\":289.1},{\"amplitude\":-7.200000000000002,\"angle\":289.6},{\"amplitude\":-7.200000000000002,\"angle\":289.8},{\"amplitude\":-7.200000000000002,\"angle\":290.8},{\"amplitude\":-6.800000000000002,\"angle\":291.1},{\"amplitude\":-6.800000000000002,\"angle\":291.4},{\"amplitude\":-7.200000000000002,\"angle\":291.6},{\"amplitude\":-7.200000000000002,\"angle\":291.8},{\"amplitude\":-6.800000000000002,\"angle\":292.1},{\"amplitude\":-6.800000000000002,\"angle\":292.2},{\"amplitude\":-6.800000000000002,\"angle\":292.7},{\"amplitude\":-6.800000000000002,\"angle\":293.5},{\"amplitude\":-6.800000000000002,\"angle\":293.7},{\"amplitude\":-6.800000000000002,\"angle\":294.2},{\"amplitude\":-6.800000000000002,\"angle\":294.4},{\"amplitude\":-6.800000000000002,\"angle\":295},{\"amplitude\":-6.800000000000002,\"angle\":295.3},{\"amplitude\":-6.400000000000001,\"angle\":297.6},{\"amplitude\":-6.400000000000001,\"angle\":297.9},{\"amplitude\":-6.400000000000001,\"angle\":298.2},{\"amplitude\":-6.400000000000001,\"angle\":298.3},{\"amplitude\":-6.400000000000001,\"angle\":298.9},{\"amplitude\":-6.400000000000001,\"angle\":299.2},{\"amplitude\":-6.000000000000001,\"angle\":299.8},{\"amplitude\":-6.000000000000001,\"angle\":300.1},{\"amplitude\":-6.000000000000001,\"angle\":300.5},{\"amplitude\":-5.6000000000000005,\"angle\":302},{\"amplitude\":-5.6000000000000005,\"angle\":302.4},{\"amplitude\":-5.6000000000000005,\"angle\":302.8},{\"amplitude\":-5.6000000000000005,\"angle\":303},{\"amplitude\":-5.6000000000000005,\"angle\":303.3},{\"amplitude\":-5.6000000000000005,\"angle\":303.7},{\"amplitude\":-5.2,\"angle\":304.1},{\"amplitude\":-5.2,\"angle\":305.4},{\"amplitude\":-5.2,\"angle\":305.5},{\"amplitude\":-5.2,\"angle\":305.6},{\"amplitude\":-5.2,\"angle\":305.9},{\"amplitude\":-4.8,\"angle\":306.8},{\"amplitude\":-4.8,\"angle\":307.3},{\"amplitude\":-4.8,\"angle\":307.5},{\"amplitude\":-4.8,\"angle\":307.6},{\"amplitude\":-4.8,\"angle\":308.1},{\"amplitude\":-4.8,\"angle\":308.3},{\"amplitude\":-4.8,\"angle\":309.1},{\"amplitude\":-4.8,\"angle\":309.4},{\"amplitude\":-4.8,\"angle\":309.6},{\"amplitude\":-4.8,\"angle\":310.2},{\"amplitude\":-4.8,\"angle\":310.4},{\"amplitude\":-4.8,\"angle\":310.8},{\"amplitude\":-4.3999999999999995,\"angle\":312.3},{\"amplitude\":-4.3999999999999995,\"angle\":312.6},{\"amplitude\":-4.3999999999999995,\"angle\":312.9},{\"amplitude\":-4.3999999999999995,\"angle\":313.7},{\"amplitude\":-4.3999999999999995,\"angle\":314},{\"amplitude\":-4.3999999999999995,\"angle\":314.7},{\"amplitude\":-3.999999999999999,\"angle\":314.9},{\"amplitude\":-3.999999999999999,\"angle\":315.2},{\"amplitude\":-4.3999999999999995,\"angle\":315.5},{\"amplitude\":-3.999999999999999,\"angle\":315.8},{\"amplitude\":-3.999999999999999,\"angle\":316.1},{\"amplitude\":-3.999999999999999,\"angle\":317.2},{\"amplitude\":-3.5999999999999988,\"angle\":317.7},{\"amplitude\":-3.5999999999999988,\"angle\":317.9},{\"amplitude\":-3.5999999999999988,\"angle\":318.1},{\"amplitude\":-3.5999999999999988,\"angle\":318.3},{\"amplitude\":-3.5999999999999988,\"angle\":318.4},{\"amplitude\":-3.5999999999999988,\"angle\":319.3},{\"amplitude\":-3.1999999999999984,\"angle\":319.8},{\"amplitude\":-3.1999999999999984,\"angle\":320.1},{\"amplitude\":-3.1999999999999984,\"angle\":320.4},{\"amplitude\":-3.1999999999999984,\"angle\":320.9},{\"amplitude\":-2.799999999999998,\"angle\":322.1},{\"amplitude\":-2.799999999999998,\"angle\":322.3},{\"amplitude\":-2.799999999999998,\"angle\":322.4},{\"amplitude\":-2.400000000000002,\"angle\":323.1},{\"amplitude\":-2.400000000000002,\"angle\":323.3},{\"amplitude\":-2.400000000000002,\"angle\":323.5},{\"amplitude\":-2.0000000000000018,\"angle\":325.5},{\"amplitude\":-1.6000000000000014,\"angle\":325.7},{\"amplitude\":-1.6000000000000014,\"angle\":326},{\"amplitude\":-1.6000000000000014,\"angle\":326.2},{\"amplitude\":-1.6000000000000014,\"angle\":326.3},{\"amplitude\":-1.6000000000000014,\"angle\":327.5},{\"amplitude\":-1.6000000000000014,\"angle\":328.2},{\"amplitude\":-1.6000000000000014,\"angle\":328.5},{\"amplitude\":-1.6000000000000014,\"angle\":329},{\"amplitude\":-1.6000000000000014,\"angle\":329.5},{\"amplitude\":-1.6000000000000014,\"angle\":329.7},{\"amplitude\":-1.200000000000001,\"angle\":329.9},{\"amplitude\":-1.200000000000001,\"angle\":330.2},{\"amplitude\":-1.200000000000001,\"angle\":330.4},{\"amplitude\":-1.200000000000001,\"angle\":331.1},{\"amplitude\":-1.200000000000001,\"angle\":331.2},{\"amplitude\":-1.200000000000001,\"angle\":331.7},{\"amplitude\":-1.200000000000001,\"angle\":331.9},{\"amplitude\":-1.200000000000001,\"angle\":332.2},{\"amplitude\":-1.200000000000001,\"angle\":332.4},{\"amplitude\":-1.200000000000001,\"angle\":333},{\"amplitude\":-1.200000000000001,\"angle\":333.1},{\"amplitude\":-1.200000000000001,\"angle\":333.6},{\"amplitude\":-1.200000000000001,\"angle\":333.9},{\"amplitude\":-0.8000000000000007,\"angle\":334.5},{\"amplitude\":-1.200000000000001,\"angle\":334.8},{\"amplitude\":-0.8000000000000007,\"angle\":336.2},{\"amplitude\":-0.8000000000000007,\"angle\":336.7},{\"amplitude\":-0.8000000000000007,\"angle\":337},{\"amplitude\":-0.8000000000000007,\"angle\":337.3},{\"amplitude\":-0.8000000000000007,\"angle\":337.4},{\"amplitude\":-0.8000000000000007,\"angle\":337.5},{\"amplitude\":-0.8000000000000007,\"angle\":337.9},{\"amplitude\":-0.8000000000000007,\"angle\":338},{\"amplitude\":-0.8000000000000007,\"angle\":338.1},{\"amplitude\":-0.8000000000000007,\"angle\":338.2},{\"amplitude\":-0.8000000000000007,\"angle\":339.1},{\"amplitude\":-0.8000000000000007,\"angle\":339.3},{\"amplitude\":-0.40000000000000036,\"angle\":339.5},{\"amplitude\":-0.40000000000000036,\"angle\":339.9},{\"amplitude\":-0.40000000000000036,\"angle\":340.5},{\"amplitude\":-0.40000000000000036,\"angle\":340.9},{\"amplitude\":-0.40000000000000036,\"angle\":341.1},{\"amplitude\":-0.40000000000000036,\"angle\":341.3},{\"amplitude\":-0.40000000000000036,\"angle\":341.7},{\"amplitude\":0,\"angle\":341.9},{\"amplitude\":0,\"angle\":342.2},{\"amplitude\":0,\"angle\":342.4},{\"amplitude\":0,\"angle\":342.8},{\"amplitude\":0,\"angle\":343},{\"amplitude\":0,\"angle\":343.1},{\"amplitude\":0,\"angle\":343.4},{\"amplitude\":0,\"angle\":343.5},{\"amplitude\":0,\"angle\":343.7},{\"amplitude\":0,\"angle\":344},{\"amplitude\":0,\"angle\":344.7},{\"amplitude\":0,\"angle\":345},{\"amplitude\":0,\"angle\":345.5},{\"amplitude\":-0.40000000000000036,\"angle\":346},{\"amplitude\":-0.40000000000000036,\"angle\":346.3},{\"amplitude\":-0.40000000000000036,\"angle\":346.5},{\"amplitude\":-0.40000000000000036,\"angle\":347.1},{\"amplitude\":-0.40000000000000036,\"angle\":347.2},{\"amplitude\":-0.40000000000000036,\"angle\":347.6},{\"amplitude\":-0.40000000000000036,\"angle\":347.9},{\"amplitude\":-0.40000000000000036,\"angle\":348.2},{\"amplitude\":-0.40000000000000036,\"angle\":348.7},{\"amplitude\":-0.40000000000000036,\"angle\":348.8},{\"amplitude\":-0.40000000000000036,\"angle\":349.3},{\"amplitude\":-0.40000000000000036,\"angle\":349.9},{\"amplitude\":-0.40000000000000036,\"angle\":350.5},{\"amplitude\":-0.40000000000000036,\"angle\":350.6},{\"amplitude\":-0.40000000000000036,\"angle\":351},{\"amplitude\":-0.40000000000000036,\"angle\":351.6},{\"amplitude\":-0.40000000000000036,\"angle\":351.7},{\"amplitude\":-0.40000000000000036,\"angle\":352.5},{\"amplitude\":0,\"angle\":352.8},{\"amplitude\":0,\"angle\":353.4},{\"amplitude\":0,\"angle\":353.9},{\"amplitude\":0,\"angle\":355.4},{\"amplitude\":0,\"angle\":356.6},{\"amplitude\":0,\"angle\":357},{\"amplitude\":0,\"angle\":357.1},{\"amplitude\":0,\"angle\":357.6},{\"amplitude\":0,\"angle\":357.9},{\"amplitude\":0,\"angle\":358.9},{\"amplitude\":0,\"angle\":359.2},{\"amplitude\":0,\"angle\":359.5},{\"amplitude\":0,\"angle\":360}]\n\n },\n {\n name: '1KHz',\n data: [{\"angle\":0,\"amplitude\":-0.40000000000000036},{\"angle\":0.9,\"amplitude\":-0.40000000000000036},{\"angle\":1.5,\"amplitude\":-0.40000000000000036},{\"angle\":1.9,\"amplitude\":-0.40000000000000036},{\"angle\":2,\"amplitude\":-0.40000000000000036},{\"angle\":2.4,\"amplitude\":0},{\"angle\":2.7,\"amplitude\":0},{\"angle\":2.9,\"amplitude\":0},{\"angle\":3.1,\"amplitude\":0},{\"angle\":3.2,\"amplitude\":0},{\"angle\":3.5,\"amplitude\":0},{\"angle\":3.6,\"amplitude\":-0.40000000000000036},{\"angle\":4,\"amplitude\":-0.40000000000000036},{\"angle\":4.3,\"amplitude\":-0.40000000000000036},{\"angle\":4.7,\"amplitude\":-0.40000000000000036},{\"angle\":5.2,\"amplitude\":-0.40000000000000036},{\"angle\":6.4,\"amplitude\":-0.40000000000000036},{\"angle\":7,\"amplitude\":-0.40000000000000036},{\"angle\":7.4,\"amplitude\":-0.40000000000000036},{\"angle\":7.5,\"amplitude\":-0.8000000000000007},{\"angle\":7.9,\"amplitude\":-0.40000000000000036},{\"angle\":8.1,\"amplitude\":-0.8000000000000007},{\"angle\":8.4,\"amplitude\":-0.8000000000000007},{\"angle\":8.5,\"amplitude\":-0.8000000000000007},{\"angle\":8.9,\"amplitude\":-0.8000000000000007},{\"angle\":9.1,\"amplitude\":-0.8000000000000007},{\"angle\":9.2,\"amplitude\":-0.8000000000000007},{\"angle\":9.6,\"amplitude\":-0.8000000000000007},{\"angle\":10,\"amplitude\":-0.8000000000000007},{\"angle\":10.4,\"amplitude\":-0.8000000000000007},{\"angle\":10.8,\"amplitude\":-0.8000000000000007},{\"angle\":11.2,\"amplitude\":-0.8000000000000007},{\"angle\":11.3,\"amplitude\":-0.8000000000000007},{\"angle\":11.4,\"amplitude\":-0.8000000000000007},{\"angle\":11.7,\"amplitude\":-0.8000000000000007},{\"angle\":11.8,\"amplitude\":-0.8000000000000007},{\"angle\":12,\"amplitude\":-0.8000000000000007},{\"angle\":12.4,\"amplitude\":-0.8000000000000007},{\"angle\":12.8,\"amplitude\":-0.8000000000000007},{\"angle\":13.1,\"amplitude\":-0.8000000000000007},{\"angle\":13.5,\"amplitude\":-0.8000000000000007},{\"angle\":13.9,\"amplitude\":-0.8000000000000007},{\"angle\":14.2,\"amplitude\":-0.8000000000000007},{\"angle\":14.5,\"amplitude\":-0.8000000000000007},{\"angle\":14.7,\"amplitude\":-0.8000000000000007},{\"angle\":15.1,\"amplitude\":-0.8000000000000007},{\"angle\":15.6,\"amplitude\":-0.8000000000000007},{\"angle\":16,\"amplitude\":-0.40000000000000036},{\"angle\":16.1,\"amplitude\":-0.40000000000000036},{\"angle\":16.5,\"amplitude\":-0.40000000000000036},{\"angle\":16.6,\"amplitude\":-0.40000000000000036},{\"angle\":16.7,\"amplitude\":-0.40000000000000036},{\"angle\":17.1,\"amplitude\":-0.40000000000000036},{\"angle\":17.3,\"amplitude\":-0.40000000000000036},{\"angle\":17.7,\"amplitude\":-0.40000000000000036},{\"angle\":18.2,\"amplitude\":-0.40000000000000036},{\"angle\":18.8,\"amplitude\":-0.40000000000000036},{\"angle\":19,\"amplitude\":-0.40000000000000036},{\"angle\":19.1,\"amplitude\":-0.40000000000000036},{\"angle\":19.5,\"amplitude\":-0.40000000000000036},{\"angle\":19.7,\"amplitude\":-0.40000000000000036},{\"angle\":20,\"amplitude\":-0.40000000000000036},{\"angle\":20.2,\"amplitude\":-0.40000000000000036},{\"angle\":20.6,\"amplitude\":-0.40000000000000036},{\"angle\":20.7,\"amplitude\":-0.40000000000000036},{\"angle\":20.8,\"amplitude\":-0.40000000000000036},{\"angle\":21.3,\"amplitude\":-0.40000000000000036},{\"angle\":21.9,\"amplitude\":-0.8000000000000007},{\"angle\":22,\"amplitude\":-0.8000000000000007},{\"angle\":22.3,\"amplitude\":-0.40000000000000036},{\"angle\":22.5,\"amplitude\":-0.40000000000000036},{\"angle\":22.8,\"amplitude\":-0.40000000000000036},{\"angle\":23.2,\"amplitude\":-0.8000000000000007},{\"angle\":23.4,\"amplitude\":-0.40000000000000036},{\"angle\":23.6,\"amplitude\":-0.8000000000000007},{\"angle\":23.7,\"amplitude\":-0.40000000000000036},{\"angle\":24,\"amplitude\":-0.40000000000000036},{\"angle\":24.3,\"amplitude\":-0.8000000000000007},{\"angle\":24.4,\"amplitude\":-0.8000000000000007},{\"angle\":24.8,\"amplitude\":-0.8000000000000007},{\"angle\":25.2,\"amplitude\":-0.8000000000000007},{\"angle\":26,\"amplitude\":-0.8000000000000007},{\"angle\":26.2,\"amplitude\":-0.8000000000000007},{\"angle\":26.7,\"amplitude\":-0.8000000000000007},{\"angle\":26.8,\"amplitude\":-0.8000000000000007},{\"angle\":27.1,\"amplitude\":-0.8000000000000007},{\"angle\":27.3,\"amplitude\":-0.8000000000000007},{\"angle\":27.4,\"amplitude\":-0.8000000000000007},{\"angle\":27.8,\"amplitude\":-0.8000000000000007},{\"angle\":28,\"amplitude\":-0.8000000000000007},{\"angle\":28.1,\"amplitude\":-0.8000000000000007},{\"angle\":28.2,\"amplitude\":-1.200000000000001},{\"angle\":28.7,\"amplitude\":-1.200000000000001},{\"angle\":28.8,\"amplitude\":-0.8000000000000007},{\"angle\":29,\"amplitude\":-1.200000000000001},{\"angle\":29.4,\"amplitude\":-1.200000000000001},{\"angle\":29.6,\"amplitude\":-1.200000000000001},{\"angle\":29.7,\"amplitude\":-1.200000000000001},{\"angle\":30.2,\"amplitude\":-1.200000000000001},{\"angle\":30.8,\"amplitude\":-1.6000000000000014},{\"angle\":31,\"amplitude\":-1.6000000000000014},{\"angle\":31.1,\"amplitude\":-1.6000000000000014},{\"angle\":31.3,\"amplitude\":-1.6000000000000014},{\"angle\":31.4,\"amplitude\":-1.6000000000000014},{\"angle\":31.8,\"amplitude\":-2.0000000000000018},{\"angle\":32.3,\"amplitude\":-2.0000000000000018},{\"angle\":32.7,\"amplitude\":-2.0000000000000018},{\"angle\":33,\"amplitude\":-2.400000000000002},{\"angle\":33.2,\"amplitude\":-2.400000000000002},{\"angle\":33.8,\"amplitude\":-2.400000000000002},{\"angle\":34.1,\"amplitude\":-2.400000000000002},{\"angle\":34.4,\"amplitude\":-2.400000000000002},{\"angle\":34.5,\"amplitude\":-2.400000000000002},{\"angle\":34.8,\"amplitude\":-2.799999999999998},{\"angle\":35.1,\"amplitude\":-2.799999999999998},{\"angle\":35.6,\"amplitude\":-2.799999999999998},{\"angle\":35.8,\"amplitude\":-2.799999999999998},{\"angle\":35.9,\"amplitude\":-2.799999999999998},{\"angle\":36.3,\"amplitude\":-2.799999999999998},{\"angle\":36.7,\"amplitude\":-3.1999999999999984},{\"angle\":36.9,\"amplitude\":-3.1999999999999984},{\"angle\":37.2,\"amplitude\":-3.1999999999999984},{\"angle\":37.4,\"amplitude\":-3.1999999999999984},{\"angle\":37.6,\"amplitude\":-3.1999999999999984},{\"angle\":37.8,\"amplitude\":-3.1999999999999984},{\"angle\":38.2,\"amplitude\":-3.1999999999999984},{\"angle\":38.4,\"amplitude\":-3.1999999999999984},{\"angle\":39,\"amplitude\":-3.1999999999999984},{\"angle\":39.1,\"amplitude\":-3.5999999999999988},{\"angle\":39.3,\"amplitude\":-3.5999999999999988},{\"angle\":39.5,\"amplitude\":-3.5999999999999988},{\"angle\":39.6,\"amplitude\":-3.5999999999999988},{\"angle\":39.9,\"amplitude\":-3.5999999999999988},{\"angle\":40.1,\"amplitude\":-3.5999999999999988},{\"angle\":40.7,\"amplitude\":-3.5999999999999988},{\"angle\":41.3,\"amplitude\":-3.5999999999999988},{\"angle\":41.8,\"amplitude\":-3.5999999999999988},{\"angle\":42.1,\"amplitude\":-3.5999999999999988},{\"angle\":42.4,\"amplitude\":-3.5999999999999988},{\"angle\":42.6,\"amplitude\":-3.5999999999999988},{\"angle\":42.8,\"amplitude\":-3.5999999999999988},{\"angle\":43,\"amplitude\":-3.5999999999999988},{\"angle\":43.1,\"amplitude\":-3.999999999999999},{\"angle\":43.3,\"amplitude\":-3.5999999999999988},{\"angle\":43.5,\"amplitude\":-3.999999999999999},{\"angle\":43.6,\"amplitude\":-3.999999999999999},{\"angle\":43.7,\"amplitude\":-3.999999999999999},{\"angle\":44,\"amplitude\":-3.999999999999999},{\"angle\":44.2,\"amplitude\":-3.999999999999999},{\"angle\":44.7,\"amplitude\":-3.999999999999999},{\"angle\":45.1,\"amplitude\":-3.999999999999999},{\"angle\":45.3,\"amplitude\":-4.3999999999999995},{\"angle\":45.6,\"amplitude\":-4.3999999999999995},{\"angle\":45.8,\"amplitude\":-4.3999999999999995},{\"angle\":46.1,\"amplitude\":-4.3999999999999995},{\"angle\":46.3,\"amplitude\":-4.3999999999999995},{\"angle\":46.8,\"amplitude\":-4.3999999999999995},{\"angle\":47,\"amplitude\":-4.3999999999999995},{\"angle\":47.2,\"amplitude\":-4.3999999999999995},{\"angle\":47.4,\"amplitude\":-4.3999999999999995},{\"angle\":47.8,\"amplitude\":-4.3999999999999995},{\"angle\":48.2,\"amplitude\":-4.3999999999999995},{\"angle\":48.4,\"amplitude\":-4.3999999999999995},{\"angle\":49.2,\"amplitude\":-4.3999999999999995},{\"angle\":49.6,\"amplitude\":-4.8},{\"angle\":50,\"amplitude\":-4.8},{\"angle\":50.3,\"amplitude\":-4.8},{\"angle\":50.7,\"amplitude\":-4.8},{\"angle\":50.9,\"amplitude\":-4.3999999999999995},{\"angle\":51.2,\"amplitude\":-4.3999999999999995},{\"angle\":51.5,\"amplitude\":-4.8},{\"angle\":51.9,\"amplitude\":-4.8},{\"angle\":52,\"amplitude\":-4.8},{\"angle\":52.6,\"amplitude\":-4.8},{\"angle\":52.7,\"amplitude\":-4.8},{\"angle\":52.9,\"amplitude\":-4.3999999999999995},{\"angle\":53,\"amplitude\":-4.8},{\"angle\":53.3,\"amplitude\":-4.8},{\"angle\":53.5,\"amplitude\":-4.8},{\"angle\":53.8,\"amplitude\":-4.3999999999999995},{\"angle\":54.3,\"amplitude\":-4.8},{\"angle\":55,\"amplitude\":-4.8},{\"angle\":55.2,\"amplitude\":-4.8},{\"angle\":55.7,\"amplitude\":-4.8},{\"angle\":56,\"amplitude\":-4.8},{\"angle\":56.4,\"amplitude\":-4.8},{\"angle\":56.9,\"amplitude\":-4.8},{\"angle\":57.7,\"amplitude\":-4.8},{\"angle\":57.8,\"amplitude\":-4.8},{\"angle\":57.9,\"amplitude\":-4.8},{\"angle\":58.5,\"amplitude\":-4.8},{\"angle\":58.9,\"amplitude\":-4.8},{\"angle\":59.2,\"amplitude\":-4.8},{\"angle\":59.5,\"amplitude\":-4.8},{\"angle\":59.8,\"amplitude\":-5.2},{\"angle\":60.1,\"amplitude\":-5.2},{\"angle\":60.2,\"amplitude\":-5.2},{\"angle\":60.4,\"amplitude\":-5.2},{\"angle\":60.6,\"amplitude\":-5.2},{\"angle\":60.9,\"amplitude\":-5.2},{\"angle\":61.3,\"amplitude\":-5.2},{\"angle\":61.6,\"amplitude\":-5.2},{\"angle\":61.9,\"amplitude\":-5.2},{\"angle\":62.2,\"amplitude\":-5.6000000000000005},{\"angle\":62.5,\"amplitude\":-5.6000000000000005},{\"angle\":62.6,\"amplitude\":-5.6000000000000005},{\"angle\":63.1,\"amplitude\":-5.6000000000000005},{\"angle\":63.2,\"amplitude\":-5.6000000000000005},{\"angle\":63.6,\"amplitude\":-6.000000000000001},{\"angle\":63.9,\"amplitude\":-6.000000000000001},{\"angle\":64,\"amplitude\":-5.6000000000000005},{\"angle\":64.3,\"amplitude\":-6.000000000000001},{\"angle\":64.5,\"amplitude\":-5.6000000000000005},{\"angle\":64.7,\"amplitude\":-6.000000000000001},{\"angle\":64.9,\"amplitude\":-6.000000000000001},{\"angle\":65.1,\"amplitude\":-6.000000000000001},{\"angle\":65.2,\"amplitude\":-6.000000000000001},{\"angle\":65.6,\"amplitude\":-6.000000000000001},{\"angle\":65.7,\"amplitude\":-6.000000000000001},{\"angle\":66,\"amplitude\":-6.000000000000001},{\"angle\":66.3,\"amplitude\":-6.000000000000001},{\"angle\":66.4,\"amplitude\":-6.000000000000001},{\"angle\":66.9,\"amplitude\":-6.000000000000001},{\"angle\":67,\"amplitude\":-6.000000000000001},{\"angle\":67.2,\"amplitude\":-6.000000000000001},{\"angle\":67.5,\"amplitude\":-6.000000000000001},{\"angle\":68,\"amplitude\":-6.400000000000001},{\"angle\":68.3,\"amplitude\":-6.400000000000001},{\"angle\":68.8,\"amplitude\":-6.400000000000001},{\"angle\":69.4,\"amplitude\":-6.400000000000001},{\"angle\":69.6,\"amplitude\":-6.400000000000001},{\"angle\":70,\"amplitude\":-6.800000000000002},{\"angle\":70.6,\"amplitude\":-6.800000000000002},{\"angle\":70.8,\"amplitude\":-6.800000000000002},{\"angle\":71.1,\"amplitude\":-6.800000000000002},{\"angle\":71.2,\"amplitude\":-6.800000000000002},{\"angle\":71.4,\"amplitude\":-6.800000000000002},{\"angle\":71.7,\"amplitude\":-6.800000000000002},{\"angle\":71.8,\"amplitude\":-6.800000000000002},{\"angle\":72,\"amplitude\":-7.200000000000002},{\"angle\":72.3,\"amplitude\":-7.200000000000002},{\"angle\":72.6,\"amplitude\":-7.200000000000002},{\"angle\":73.2,\"amplitude\":-7.200000000000002},{\"angle\":73.8,\"amplitude\":-7.200000000000002},{\"angle\":74.1,\"amplitude\":-7.200000000000002},{\"angle\":74.8,\"amplitude\":-7.200000000000002},{\"angle\":75,\"amplitude\":-7.200000000000002},{\"angle\":75.5,\"amplitude\":-7.200000000000002},{\"angle\":75.6,\"amplitude\":-7.599999999999998},{\"angle\":75.8,\"amplitude\":-7.599999999999998},{\"angle\":76.1,\"amplitude\":-7.599999999999998},{\"angle\":76.3,\"amplitude\":-7.599999999999998},{\"angle\":76.4,\"amplitude\":-7.599999999999998},{\"angle\":76.8,\"amplitude\":-7.599999999999998},{\"angle\":76.9,\"amplitude\":-7.599999999999998},{\"angle\":77.4,\"amplitude\":-7.599999999999998},{\"angle\":77.6,\"amplitude\":-7.599999999999998},{\"angle\":78,\"amplitude\":-7.599999999999998},{\"angle\":78.2,\"amplitude\":-7.599999999999998},{\"angle\":78.4,\"amplitude\":-7.599999999999998},{\"angle\":78.7,\"amplitude\":-7.599999999999998},{\"angle\":78.8,\"amplitude\":-7.599999999999998},{\"angle\":79.3,\"amplitude\":-7.599999999999998},{\"angle\":79.5,\"amplitude\":-7.999999999999998},{\"angle\":79.6,\"amplitude\":-7.999999999999998},{\"angle\":80.1,\"amplitude\":-7.999999999999998},{\"angle\":80.3,\"amplitude\":-7.999999999999998},{\"angle\":80.6,\"amplitude\":-7.999999999999998},{\"angle\":80.9,\"amplitude\":-7.999999999999998},{\"angle\":81.3,\"amplitude\":-7.999999999999998},{\"angle\":81.4,\"amplitude\":-7.999999999999998},{\"angle\":81.6,\"amplitude\":-7.999999999999998},{\"angle\":81.9,\"amplitude\":-7.999999999999998},{\"angle\":82.2,\"amplitude\":-7.999999999999998},{\"angle\":82.6,\"amplitude\":-7.999999999999998},{\"angle\":82.9,\"amplitude\":-7.999999999999998},{\"angle\":83.2,\"amplitude\":-7.999999999999998},{\"angle\":83.4,\"amplitude\":-7.999999999999998},{\"angle\":83.6,\"amplitude\":-7.999999999999998},{\"angle\":83.9,\"amplitude\":-7.999999999999998},{\"angle\":84.2,\"amplitude\":-7.999999999999998},{\"angle\":84.7,\"amplitude\":-8.399999999999999},{\"angle\":84.9,\"amplitude\":-8.399999999999999},{\"angle\":85.2,\"amplitude\":-8.399999999999999},{\"angle\":85.5,\"amplitude\":-8.399999999999999},{\"angle\":86,\"amplitude\":-8.399999999999999},{\"angle\":86.2,\"amplitude\":-8.399999999999999},{\"angle\":86.5,\"amplitude\":-8.399999999999999},{\"angle\":86.8,\"amplitude\":-8.399999999999999},{\"angle\":87.2,\"amplitude\":-8.799999999999999},{\"angle\":87.5,\"amplitude\":-8.799999999999999},{\"angle\":87.8,\"amplitude\":-8.799999999999999},{\"angle\":88.2,\"amplitude\":-8.799999999999999},{\"angle\":88.7,\"amplitude\":-9.2},{\"angle\":88.8,\"amplitude\":-9.2},{\"angle\":89.4,\"amplitude\":-9.2},{\"angle\":89.5,\"amplitude\":-9.2},{\"angle\":89.9,\"amplitude\":-9.6},{\"angle\":90.2,\"amplitude\":-9.6},{\"angle\":90.7,\"amplitude\":-9.6},{\"angle\":90.9,\"amplitude\":-9.6},{\"angle\":91.4,\"amplitude\":-10},{\"angle\":92,\"amplitude\":-10},{\"angle\":92.2,\"amplitude\":-10},{\"angle\":92.7,\"amplitude\":-10.4},{\"angle\":92.9,\"amplitude\":-10.4},{\"angle\":93.1,\"amplitude\":-10.4},{\"angle\":93.4,\"amplitude\":-10.4},{\"angle\":93.6,\"amplitude\":-10.4},{\"angle\":93.8,\"amplitude\":-10.4},{\"angle\":94.2,\"amplitude\":-10.4},{\"angle\":94.3,\"amplitude\":-10.4},{\"angle\":94.5,\"amplitude\":-10.4},{\"angle\":94.9,\"amplitude\":-10.4},{\"angle\":95.1,\"amplitude\":-10.8},{\"angle\":95.3,\"amplitude\":-10.8},{\"angle\":95.7,\"amplitude\":-10.8},{\"angle\":96.1,\"amplitude\":-11.200000000000001},{\"angle\":96.4,\"amplitude\":-11.200000000000001},{\"angle\":96.8,\"amplitude\":-11.200000000000001},{\"angle\":97.6,\"amplitude\":-11.600000000000001},{\"angle\":98,\"amplitude\":-11.600000000000001},{\"angle\":98.3,\"amplitude\":-11.600000000000001},{\"angle\":98.5,\"amplitude\":-11.600000000000001},{\"angle\":98.8,\"amplitude\":-11.600000000000001},{\"angle\":99.2,\"amplitude\":-11.600000000000001},{\"angle\":99.7,\"amplitude\":-12.000000000000002},{\"angle\":100.1,\"amplitude\":-12.000000000000002},{\"angle\":100.6,\"amplitude\":-12.000000000000002},{\"angle\":100.8,\"amplitude\":-12.400000000000002},{\"angle\":101,\"amplitude\":-12.400000000000002},{\"angle\":101.7,\"amplitude\":-12.400000000000002},{\"angle\":101.8,\"amplitude\":-12.799999999999997},{\"angle\":102,\"amplitude\":-12.799999999999997},{\"angle\":102.4,\"amplitude\":-12.799999999999997},{\"angle\":102.6,\"amplitude\":-12.799999999999997},{\"angle\":103.2,\"amplitude\":-12.799999999999997},{\"angle\":103.3,\"amplitude\":-13.2},{\"angle\":103.5,\"amplitude\":-13.2},{\"angle\":103.7,\"amplitude\":-13.2},{\"angle\":104.2,\"amplitude\":-13.2},{\"angle\":104.4,\"amplitude\":-13.2},{\"angle\":104.7,\"amplitude\":-13.599999999999998},{\"angle\":105.2,\"amplitude\":-13.599999999999998},{\"angle\":105.5,\"amplitude\":-13.599999999999998},{\"angle\":105.7,\"amplitude\":-13.599999999999998},{\"angle\":106.2,\"amplitude\":-14},{\"angle\":106.5,\"amplitude\":-14},{\"angle\":106.8,\"amplitude\":-14},{\"angle\":107.5,\"amplitude\":-14.399999999999999},{\"angle\":108.3,\"amplitude\":-14.399999999999999},{\"angle\":108.9,\"amplitude\":-14.8},{\"angle\":109.6,\"amplitude\":-14.8},{\"angle\":110,\"amplitude\":-14.8},{\"angle\":110.1,\"amplitude\":-14.8},{\"angle\":110.7,\"amplitude\":-15.2},{\"angle\":110.9,\"amplitude\":-15.2},{\"angle\":111.2,\"amplitude\":-15.2},{\"angle\":111.9,\"amplitude\":-15.600000000000001},{\"angle\":112.5,\"amplitude\":-15.600000000000001},{\"angle\":112.6,\"amplitude\":-15.600000000000001},{\"angle\":113.5,\"amplitude\":-16},{\"angle\":113.6,\"amplitude\":-16},{\"angle\":113.8,\"amplitude\":-16},{\"angle\":114.6,\"amplitude\":-16.400000000000002},{\"angle\":114.8,\"amplitude\":-16.400000000000002},{\"angle\":115.6,\"amplitude\":-16.8},{\"angle\":115.7,\"amplitude\":-16.8},{\"angle\":116.7,\"amplitude\":-16.8},{\"angle\":117,\"amplitude\":-17.200000000000003},{\"angle\":117.4,\"amplitude\":-17.200000000000003},{\"angle\":118.1,\"amplitude\":-17.599999999999998},{\"angle\":118.7,\"amplitude\":-17.599999999999998},{\"angle\":118.8,\"amplitude\":-17.599999999999998},{\"angle\":118.9,\"amplitude\":-18},{\"angle\":119.4,\"amplitude\":-18},{\"angle\":119.5,\"amplitude\":-18},{\"angle\":119.6,\"amplitude\":-18},{\"angle\":120.7,\"amplitude\":-18.4},{\"angle\":120.9,\"amplitude\":-18.4},{\"angle\":121,\"amplitude\":-18.799999999999997},{\"angle\":121.3,\"amplitude\":-18.799999999999997},{\"angle\":121.4,\"amplitude\":-18.799999999999997},{\"angle\":122.1,\"amplitude\":-19.2},{\"angle\":122.5,\"amplitude\":-19.2},{\"angle\":122.8,\"amplitude\":-19.6},{\"angle\":123.1,\"amplitude\":-19.6},{\"angle\":123.2,\"amplitude\":-19.6},{\"angle\":123.4,\"amplitude\":-20},{\"angle\":123.7,\"amplitude\":-20},{\"angle\":123.8,\"amplitude\":-20},{\"angle\":124.3,\"amplitude\":-20.4},{\"angle\":124.9,\"amplitude\":-20.8},{\"angle\":125.2,\"amplitude\":-20.8},{\"angle\":125.5,\"amplitude\":-20.8},{\"angle\":125.8,\"amplitude\":-21.200000000000003},{\"angle\":126.2,\"amplitude\":-21.200000000000003},{\"angle\":126.5,\"amplitude\":-21.200000000000003},{\"angle\":127,\"amplitude\":-21.6},{\"angle\":127.2,\"amplitude\":-21.6},{\"angle\":127.5,\"amplitude\":-21.6},{\"angle\":127.7,\"amplitude\":-22},{\"angle\":127.9,\"amplitude\":-22},{\"angle\":128.3,\"amplitude\":-22},{\"angle\":128.4,\"amplitude\":-22},{\"angle\":128.6,\"amplitude\":-22.400000000000002},{\"angle\":129,\"amplitude\":-22.400000000000002},{\"angle\":129.2,\"amplitude\":-22.400000000000002},{\"angle\":129.4,\"amplitude\":-22.400000000000002},{\"angle\":129.8,\"amplitude\":-22.800000000000004},{\"angle\":130.2,\"amplitude\":-22.800000000000004},{\"angle\":130.6,\"amplitude\":-22.800000000000004},{\"angle\":131.2,\"amplitude\":-23.200000000000003},{\"angle\":131.6,\"amplitude\":-23.6},{\"angle\":132,\"amplitude\":-23.6},{\"angle\":132.1,\"amplitude\":-24},{\"angle\":133,\"amplitude\":-24.4},{\"angle\":133.2,\"amplitude\":-24.8},{\"angle\":133.5,\"amplitude\":-24.8},{\"angle\":133.9,\"amplitude\":-25.2},{\"angle\":134.2,\"amplitude\":-25.6},{\"angle\":134.7,\"amplitude\":-25.6},{\"angle\":136.3,\"amplitude\":-26},{\"angle\":136.9,\"amplitude\":-26.4},{\"angle\":137.2,\"amplitude\":-26.4},{\"angle\":137.5,\"amplitude\":-26.799999999999997},{\"angle\":137.8,\"amplitude\":-27.199999999999996},{\"angle\":138.2,\"amplitude\":-27.199999999999996},{\"angle\":138.9,\"amplitude\":-27.599999999999998},{\"angle\":139.6,\"amplitude\":-28},{\"angle\":139.7,\"amplitude\":-28.4},{\"angle\":140.1,\"amplitude\":-28.4},{\"angle\":140.2,\"amplitude\":-28.4},{\"angle\":140.5,\"amplitude\":-28.799999999999997},{\"angle\":141.3,\"amplitude\":-28.799999999999997},{\"angle\":142,\"amplitude\":-28.799999999999997},{\"angle\":142.5,\"amplitude\":-29.2},{\"angle\":142.9,\"amplitude\":-29.2},{\"angle\":143.4,\"amplitude\":-29.2},{\"angle\":143.5,\"amplitude\":-29.6},{\"angle\":144.8,\"amplitude\":-29.6},{\"angle\":145.2,\"amplitude\":-29.6},{\"angle\":145.6,\"amplitude\":-30},{\"angle\":146,\"amplitude\":-30},{\"angle\":146.5,\"amplitude\":-30.4},{\"angle\":147.4,\"amplitude\":-30.4},{\"angle\":147.6,\"amplitude\":-30.4},{\"angle\":148.4,\"amplitude\":-30.8},{\"angle\":148.6,\"amplitude\":-30.8},{\"angle\":148.8,\"amplitude\":-31.200000000000003},{\"angle\":149.2,\"amplitude\":-31.200000000000003},{\"angle\":149.4,\"amplitude\":-31.200000000000003},{\"angle\":149.9,\"amplitude\":-31.6},{\"angle\":150.6,\"amplitude\":-32},{\"angle\":152.1,\"amplitude\":-32},{\"angle\":152.6,\"amplitude\":-32},{\"angle\":152.9,\"amplitude\":-32},{\"angle\":154.1,\"amplitude\":-32.400000000000006},{\"angle\":154.2,\"amplitude\":-32.400000000000006},{\"angle\":154.8,\"amplitude\":-32.400000000000006},{\"angle\":155.8,\"amplitude\":-32.800000000000004},{\"angle\":156.5,\"amplitude\":-32.800000000000004},{\"angle\":156.8,\"amplitude\":-32.800000000000004},{\"angle\":157.7,\"amplitude\":-33.199999999999996},{\"angle\":158.4,\"amplitude\":-33.199999999999996},{\"angle\":158.8,\"amplitude\":-33.199999999999996},{\"angle\":160.3,\"amplitude\":-33.199999999999996},{\"angle\":161,\"amplitude\":-33.199999999999996},{\"angle\":161.5,\"amplitude\":-33.6},{\"angle\":162.6,\"amplitude\":-33.6},{\"angle\":163.4,\"amplitude\":-33.6},{\"angle\":165.4,\"amplitude\":-34},{\"angle\":166.2,\"amplitude\":-34},{\"angle\":166.7,\"amplitude\":-34},{\"angle\":168.5,\"amplitude\":-34.4},{\"angle\":169.4,\"amplitude\":-34.4},{\"angle\":170.1,\"amplitude\":-34.4},{\"angle\":172,\"amplitude\":-34.4},{\"angle\":173.7,\"amplitude\":-34.4},{\"angle\":175.6,\"amplitude\":-34.4},{\"angle\":176.6,\"amplitude\":-34.4},{\"angle\":177.5,\"amplitude\":-34.4},{\"angle\":179.5,\"amplitude\":-34.4},{\"angle\":181.4,\"amplitude\":-34.8},{\"amplitude\":-34.8,\"angle\":178.6},{\"amplitude\":-34.4,\"angle\":180.5},{\"amplitude\":-34.4,\"angle\":182.5},{\"amplitude\":-34.4,\"angle\":183.4},{\"amplitude\":-34.4,\"angle\":184.4},{\"amplitude\":-34.4,\"angle\":186.3},{\"amplitude\":-34.4,\"angle\":188},{\"amplitude\":-34.4,\"angle\":189.9},{\"amplitude\":-34.4,\"angle\":190.6},{\"amplitude\":-34.4,\"angle\":191.5},{\"amplitude\":-34,\"angle\":193.3},{\"amplitude\":-34,\"angle\":193.8},{\"amplitude\":-34,\"angle\":194.6},{\"amplitude\":-33.6,\"angle\":196.6},{\"amplitude\":-33.6,\"angle\":197.4},{\"amplitude\":-33.6,\"angle\":198.5},{\"amplitude\":-33.199999999999996,\"angle\":199},{\"amplitude\":-33.199999999999996,\"angle\":199.7},{\"amplitude\":-33.199999999999996,\"angle\":201.2},{\"amplitude\":-33.199999999999996,\"angle\":201.6},{\"amplitude\":-33.199999999999996,\"angle\":202.3},{\"amplitude\":-32.800000000000004,\"angle\":203.2},{\"amplitude\":-32.800000000000004,\"angle\":203.5},{\"amplitude\":-32.800000000000004,\"angle\":204.2},{\"amplitude\":-32.400000000000006,\"angle\":205.2},{\"amplitude\":-32.400000000000006,\"angle\":205.8},{\"amplitude\":-32.400000000000006,\"angle\":205.9},{\"amplitude\":-32,\"angle\":207.1},{\"amplitude\":-32,\"angle\":207.4},{\"amplitude\":-32,\"angle\":207.9},{\"amplitude\":-32,\"angle\":209.4},{\"amplitude\":-31.6,\"angle\":210.1},{\"amplitude\":-31.200000000000003,\"angle\":210.6},{\"amplitude\":-31.200000000000003,\"angle\":210.8},{\"amplitude\":-31.200000000000003,\"angle\":211.2},{\"amplitude\":-30.8,\"angle\":211.4},{\"amplitude\":-30.8,\"angle\":211.6},{\"amplitude\":-30.4,\"angle\":212.4},{\"amplitude\":-30.4,\"angle\":212.6},{\"amplitude\":-30.4,\"angle\":213.5},{\"amplitude\":-30,\"angle\":214},{\"amplitude\":-30,\"angle\":214.4},{\"amplitude\":-29.6,\"angle\":214.8},{\"amplitude\":-29.6,\"angle\":215.2},{\"amplitude\":-29.6,\"angle\":216.5},{\"amplitude\":-29.2,\"angle\":216.6},{\"amplitude\":-29.2,\"angle\":217.1},{\"amplitude\":-29.2,\"angle\":217.5},{\"amplitude\":-28.799999999999997,\"angle\":218},{\"amplitude\":-28.799999999999997,\"angle\":218.7},{\"amplitude\":-28.799999999999997,\"angle\":219.5},{\"amplitude\":-28.4,\"angle\":219.8},{\"amplitude\":-28.4,\"angle\":219.9},{\"amplitude\":-28.4,\"angle\":220.3},{\"amplitude\":-28,\"angle\":220.4},{\"amplitude\":-27.599999999999998,\"angle\":221.1},{\"amplitude\":-27.199999999999996,\"angle\":221.8},{\"amplitude\":-27.199999999999996,\"angle\":222.2},{\"amplitude\":-26.799999999999997,\"angle\":222.5},{\"amplitude\":-26.4,\"angle\":222.8},{\"amplitude\":-26.4,\"angle\":223.1},{\"amplitude\":-26,\"angle\":223.7},{\"amplitude\":-25.6,\"angle\":225.3},{\"amplitude\":-25.6,\"angle\":225.8},{\"amplitude\":-25.2,\"angle\":226.1},{\"amplitude\":-24.8,\"angle\":226.5},{\"amplitude\":-24.8,\"angle\":226.8},{\"amplitude\":-24.4,\"angle\":227},{\"amplitude\":-24,\"angle\":227.9},{\"amplitude\":-23.6,\"angle\":228},{\"amplitude\":-23.6,\"angle\":228.4},{\"amplitude\":-23.200000000000003,\"angle\":228.8},{\"amplitude\":-22.800000000000004,\"angle\":229.4},{\"amplitude\":-22.800000000000004,\"angle\":229.8},{\"amplitude\":-22.800000000000004,\"angle\":230.2},{\"amplitude\":-22.400000000000002,\"angle\":230.6},{\"amplitude\":-22.400000000000002,\"angle\":230.8},{\"amplitude\":-22.400000000000002,\"angle\":231},{\"amplitude\":-22.400000000000002,\"angle\":231.4},{\"amplitude\":-22,\"angle\":231.6},{\"amplitude\":-22,\"angle\":231.7},{\"amplitude\":-22,\"angle\":232.1},{\"amplitude\":-22,\"angle\":232.3},{\"amplitude\":-21.6,\"angle\":232.5},{\"amplitude\":-21.6,\"angle\":232.8},{\"amplitude\":-21.6,\"angle\":233},{\"amplitude\":-21.200000000000003,\"angle\":233.5},{\"amplitude\":-21.200000000000003,\"angle\":233.8},{\"amplitude\":-21.200000000000003,\"angle\":234.2},{\"amplitude\":-20.8,\"angle\":234.5},{\"amplitude\":-20.8,\"angle\":234.8},{\"amplitude\":-20.8,\"angle\":235.1},{\"amplitude\":-20.4,\"angle\":235.7},{\"amplitude\":-20,\"angle\":236.2},{\"amplitude\":-20,\"angle\":236.3},{\"amplitude\":-20,\"angle\":236.6},{\"amplitude\":-19.6,\"angle\":236.8},{\"amplitude\":-19.6,\"angle\":236.9},{\"amplitude\":-19.6,\"angle\":237.2},{\"amplitude\":-19.2,\"angle\":237.5},{\"amplitude\":-19.2,\"angle\":237.9},{\"amplitude\":-18.799999999999997,\"angle\":238.6},{\"amplitude\":-18.799999999999997,\"angle\":238.7},{\"amplitude\":-18.799999999999997,\"angle\":239},{\"amplitude\":-18.4,\"angle\":239.1},{\"amplitude\":-18.4,\"angle\":239.3},{\"amplitude\":-18,\"angle\":240.4},{\"amplitude\":-18,\"angle\":240.5},{\"amplitude\":-18,\"angle\":240.6},{\"amplitude\":-18,\"angle\":241.1},{\"amplitude\":-17.599999999999998,\"angle\":241.2},{\"amplitude\":-17.599999999999998,\"angle\":241.3},{\"amplitude\":-17.599999999999998,\"angle\":241.9},{\"amplitude\":-17.200000000000003,\"angle\":242.6},{\"amplitude\":-17.200000000000003,\"angle\":243},{\"amplitude\":-16.8,\"angle\":243.3},{\"amplitude\":-16.8,\"angle\":244.3},{\"amplitude\":-16.8,\"angle\":244.4},{\"amplitude\":-16.400000000000002,\"angle\":245.2},{\"amplitude\":-16.400000000000002,\"angle\":245.4},{\"amplitude\":-16,\"angle\":246.2},{\"amplitude\":-16,\"angle\":246.4},{\"amplitude\":-16,\"angle\":246.5},{\"amplitude\":-15.600000000000001,\"angle\":247.4},{\"amplitude\":-15.600000000000001,\"angle\":247.5},{\"amplitude\":-15.600000000000001,\"angle\":248.1},{\"amplitude\":-15.2,\"angle\":248.8},{\"amplitude\":-15.2,\"angle\":249.1},{\"amplitude\":-15.2,\"angle\":249.3},{\"amplitude\":-14.8,\"angle\":249.9},{\"amplitude\":-14.8,\"angle\":250},{\"amplitude\":-14.8,\"angle\":250.4},{\"amplitude\":-14.8,\"angle\":251.1},{\"amplitude\":-14.399999999999999,\"angle\":251.7},{\"amplitude\":-14.399999999999999,\"angle\":252.5},{\"amplitude\":-14,\"angle\":253.2},{\"amplitude\":-14,\"angle\":253.5},{\"amplitude\":-14,\"angle\":253.8},{\"amplitude\":-13.599999999999998,\"angle\":254.3},{\"amplitude\":-13.599999999999998,\"angle\":254.5},{\"amplitude\":-13.599999999999998,\"angle\":254.8},{\"amplitude\":-13.599999999999998,\"angle\":255.3},{\"amplitude\":-13.2,\"angle\":255.6},{\"amplitude\":-13.2,\"angle\":255.8},{\"amplitude\":-13.2,\"angle\":256.3},{\"amplitude\":-13.2,\"angle\":256.5},{\"amplitude\":-13.2,\"angle\":256.7},{\"amplitude\":-12.799999999999997,\"angle\":256.8},{\"amplitude\":-12.799999999999997,\"angle\":257.4},{\"amplitude\":-12.799999999999997,\"angle\":257.6},{\"amplitude\":-12.799999999999997,\"angle\":258},{\"amplitude\":-12.799999999999997,\"angle\":258.2},{\"amplitude\":-12.400000000000002,\"angle\":258.3},{\"amplitude\":-12.400000000000002,\"angle\":259},{\"amplitude\":-12.400000000000002,\"angle\":259.2},{\"amplitude\":-12.000000000000002,\"angle\":259.4},{\"amplitude\":-12.000000000000002,\"angle\":259.9},{\"amplitude\":-12.000000000000002,\"angle\":260.3},{\"amplitude\":-11.600000000000001,\"angle\":260.8},{\"amplitude\":-11.600000000000001,\"angle\":261.2},{\"amplitude\":-11.600000000000001,\"angle\":261.5},{\"amplitude\":-11.600000000000001,\"angle\":261.7},{\"amplitude\":-11.600000000000001,\"angle\":262},{\"amplitude\":-11.600000000000001,\"angle\":262.4},{\"amplitude\":-11.200000000000001,\"angle\":263.2},{\"amplitude\":-11.200000000000001,\"angle\":263.6},{\"amplitude\":-11.200000000000001,\"angle\":263.9},{\"amplitude\":-10.8,\"angle\":264.3},{\"amplitude\":-10.8,\"angle\":264.7},{\"amplitude\":-10.8,\"angle\":264.9},{\"amplitude\":-10.4,\"angle\":265.1},{\"amplitude\":-10.4,\"angle\":265.5},{\"amplitude\":-10.4,\"angle\":265.7},{\"amplitude\":-10.4,\"angle\":265.8},{\"amplitude\":-10.4,\"angle\":266.2},{\"amplitude\":-10.4,\"angle\":266.4},{\"amplitude\":-10.4,\"angle\":266.6},{\"amplitude\":-10.4,\"angle\":266.9},{\"amplitude\":-10.4,\"angle\":267.1},{\"amplitude\":-10.4,\"angle\":267.3},{\"amplitude\":-10,\"angle\":267.8},{\"amplitude\":-10,\"angle\":268},{\"amplitude\":-10,\"angle\":268.6},{\"amplitude\":-9.6,\"angle\":269.1},{\"amplitude\":-9.6,\"angle\":269.3},{\"amplitude\":-9.6,\"angle\":269.8},{\"amplitude\":-9.6,\"angle\":270.1},{\"amplitude\":-9.2,\"angle\":270.5},{\"amplitude\":-9.2,\"angle\":270.6},{\"amplitude\":-9.2,\"angle\":271.2},{\"amplitude\":-9.2,\"angle\":271.3},{\"amplitude\":-8.799999999999999,\"angle\":271.8},{\"amplitude\":-8.799999999999999,\"angle\":272.2},{\"amplitude\":-8.799999999999999,\"angle\":272.5},{\"amplitude\":-8.799999999999999,\"angle\":272.8},{\"amplitude\":-8.399999999999999,\"angle\":273.2},{\"amplitude\":-8.399999999999999,\"angle\":273.5},{\"amplitude\":-8.399999999999999,\"angle\":273.8},{\"amplitude\":-8.399999999999999,\"angle\":274},{\"amplitude\":-8.399999999999999,\"angle\":274.5},{\"amplitude\":-8.399999999999999,\"angle\":274.8},{\"amplitude\":-8.399999999999999,\"angle\":275.1},{\"amplitude\":-8.399999999999999,\"angle\":275.3},{\"amplitude\":-7.999999999999998,\"angle\":275.8},{\"amplitude\":-7.999999999999998,\"angle\":276.1},{\"amplitude\":-7.999999999999998,\"angle\":276.4},{\"amplitude\":-7.999999999999998,\"angle\":276.6},{\"amplitude\":-7.999999999999998,\"angle\":276.8},{\"amplitude\":-7.999999999999998,\"angle\":277.1},{\"amplitude\":-7.999999999999998,\"angle\":277.4},{\"amplitude\":-7.999999999999998,\"angle\":277.8},{\"amplitude\":-7.999999999999998,\"angle\":278.1},{\"amplitude\":-7.999999999999998,\"angle\":278.4},{\"amplitude\":-7.999999999999998,\"angle\":278.6},{\"amplitude\":-7.999999999999998,\"angle\":278.7},{\"amplitude\":-7.999999999999998,\"angle\":279.1},{\"amplitude\":-7.999999999999998,\"angle\":279.4},{\"amplitude\":-7.999999999999998,\"angle\":279.7},{\"amplitude\":-7.999999999999998,\"angle\":279.9},{\"amplitude\":-7.999999999999998,\"angle\":280.4},{\"amplitude\":-7.999999999999998,\"angle\":280.5},{\"amplitude\":-7.599999999999998,\"angle\":280.7},{\"amplitude\":-7.599999999999998,\"angle\":281.2},{\"amplitude\":-7.599999999999998,\"angle\":281.3},{\"amplitude\":-7.599999999999998,\"angle\":281.6},{\"amplitude\":-7.599999999999998,\"angle\":281.8},{\"amplitude\":-7.599999999999998,\"angle\":282},{\"amplitude\":-7.599999999999998,\"angle\":282.4},{\"amplitude\":-7.599999999999998,\"angle\":282.6},{\"amplitude\":-7.599999999999998,\"angle\":283.1},{\"amplitude\":-7.599999999999998,\"angle\":283.2},{\"amplitude\":-7.599999999999998,\"angle\":283.6},{\"amplitude\":-7.599999999999998,\"angle\":283.7},{\"amplitude\":-7.599999999999998,\"angle\":283.9},{\"amplitude\":-7.599999999999998,\"angle\":284.2},{\"amplitude\":-7.599999999999998,\"angle\":284.4},{\"amplitude\":-7.200000000000002,\"angle\":284.5},{\"amplitude\":-7.200000000000002,\"angle\":285},{\"amplitude\":-7.200000000000002,\"angle\":285.2},{\"amplitude\":-7.200000000000002,\"angle\":285.9},{\"amplitude\":-7.200000000000002,\"angle\":286.2},{\"amplitude\":-7.200000000000002,\"angle\":286.8},{\"amplitude\":-7.200000000000002,\"angle\":287.4},{\"amplitude\":-7.200000000000002,\"angle\":287.7},{\"amplitude\":-7.200000000000002,\"angle\":288},{\"amplitude\":-6.800000000000002,\"angle\":288.2},{\"amplitude\":-6.800000000000002,\"angle\":288.3},{\"amplitude\":-6.800000000000002,\"angle\":288.6},{\"amplitude\":-6.800000000000002,\"angle\":288.8},{\"amplitude\":-6.800000000000002,\"angle\":288.9},{\"amplitude\":-6.800000000000002,\"angle\":289.2},{\"amplitude\":-6.800000000000002,\"angle\":289.4},{\"amplitude\":-6.800000000000002,\"angle\":290},{\"amplitude\":-6.400000000000001,\"angle\":290.4},{\"amplitude\":-6.400000000000001,\"angle\":290.6},{\"amplitude\":-6.400000000000001,\"angle\":291.2},{\"amplitude\":-6.400000000000001,\"angle\":291.7},{\"amplitude\":-6.400000000000001,\"angle\":292},{\"amplitude\":-6.000000000000001,\"angle\":292.5},{\"amplitude\":-6.000000000000001,\"angle\":292.8},{\"amplitude\":-6.000000000000001,\"angle\":293},{\"amplitude\":-6.000000000000001,\"angle\":293.1},{\"amplitude\":-6.000000000000001,\"angle\":293.6},{\"amplitude\":-6.000000000000001,\"angle\":293.7},{\"amplitude\":-6.000000000000001,\"angle\":294},{\"amplitude\":-6.000000000000001,\"angle\":294.3},{\"amplitude\":-6.000000000000001,\"angle\":294.4},{\"amplitude\":-6.000000000000001,\"angle\":294.8},{\"amplitude\":-6.000000000000001,\"angle\":294.9},{\"amplitude\":-6.000000000000001,\"angle\":295.1},{\"amplitude\":-6.000000000000001,\"angle\":295.3},{\"amplitude\":-5.6000000000000005,\"angle\":295.5},{\"amplitude\":-6.000000000000001,\"angle\":295.7},{\"amplitude\":-5.6000000000000005,\"angle\":296},{\"amplitude\":-6.000000000000001,\"angle\":296.1},{\"amplitude\":-6.000000000000001,\"angle\":296.4},{\"amplitude\":-5.6000000000000005,\"angle\":296.8},{\"amplitude\":-5.6000000000000005,\"angle\":296.9},{\"amplitude\":-5.6000000000000005,\"angle\":297.4},{\"amplitude\":-5.6000000000000005,\"angle\":297.5},{\"amplitude\":-5.6000000000000005,\"angle\":297.8},{\"amplitude\":-5.2,\"angle\":298.1},{\"amplitude\":-5.2,\"angle\":298.4},{\"amplitude\":-5.2,\"angle\":298.7},{\"amplitude\":-5.2,\"angle\":299.1},{\"amplitude\":-5.2,\"angle\":299.4},{\"amplitude\":-5.2,\"angle\":299.6},{\"amplitude\":-5.2,\"angle\":299.8},{\"amplitude\":-5.2,\"angle\":299.9},{\"amplitude\":-5.2,\"angle\":300.2},{\"amplitude\":-4.8,\"angle\":300.5},{\"amplitude\":-4.8,\"angle\":300.8},{\"amplitude\":-4.8,\"angle\":301.1},{\"amplitude\":-4.8,\"angle\":301.5},{\"amplitude\":-4.8,\"angle\":302.1},{\"amplitude\":-4.8,\"angle\":302.2},{\"amplitude\":-4.8,\"angle\":302.3},{\"amplitude\":-4.8,\"angle\":303.1},{\"amplitude\":-4.8,\"angle\":303.6},{\"amplitude\":-4.8,\"angle\":304},{\"amplitude\":-4.8,\"angle\":304.3},{\"amplitude\":-4.8,\"angle\":304.8},{\"amplitude\":-4.8,\"angle\":305},{\"amplitude\":-4.8,\"angle\":305.7},{\"amplitude\":-4.3999999999999995,\"angle\":306.2},{\"amplitude\":-4.8,\"angle\":306.5},{\"amplitude\":-4.8,\"angle\":306.7},{\"amplitude\":-4.8,\"angle\":307},{\"amplitude\":-4.3999999999999995,\"angle\":307.1},{\"amplitude\":-4.8,\"angle\":307.3},{\"amplitude\":-4.8,\"angle\":307.4},{\"amplitude\":-4.8,\"angle\":308},{\"amplitude\":-4.8,\"angle\":308.1},{\"amplitude\":-4.8,\"angle\":308.5},{\"amplitude\":-4.3999999999999995,\"angle\":308.8},{\"amplitude\":-4.3999999999999995,\"angle\":309.1},{\"amplitude\":-4.8,\"angle\":309.3},{\"amplitude\":-4.8,\"angle\":309.7},{\"amplitude\":-4.8,\"angle\":310},{\"amplitude\":-4.8,\"angle\":310.4},{\"amplitude\":-4.3999999999999995,\"angle\":310.8},{\"amplitude\":-4.3999999999999995,\"angle\":311.6},{\"amplitude\":-4.3999999999999995,\"angle\":311.8},{\"amplitude\":-4.3999999999999995,\"angle\":312.2},{\"amplitude\":-4.3999999999999995,\"angle\":312.6},{\"amplitude\":-4.3999999999999995,\"angle\":312.8},{\"amplitude\":-4.3999999999999995,\"angle\":313},{\"amplitude\":-4.3999999999999995,\"angle\":313.2},{\"amplitude\":-4.3999999999999995,\"angle\":313.7},{\"amplitude\":-4.3999999999999995,\"angle\":313.9},{\"amplitude\":-4.3999999999999995,\"angle\":314.2},{\"amplitude\":-4.3999999999999995,\"angle\":314.4},{\"amplitude\":-4.3999999999999995,\"angle\":314.7},{\"amplitude\":-3.999999999999999,\"angle\":314.9},{\"amplitude\":-3.999999999999999,\"angle\":315.3},{\"amplitude\":-3.999999999999999,\"angle\":315.8},{\"amplitude\":-3.999999999999999,\"angle\":316},{\"amplitude\":-3.999999999999999,\"angle\":316.3},{\"amplitude\":-3.999999999999999,\"angle\":316.4},{\"amplitude\":-3.999999999999999,\"angle\":316.5},{\"amplitude\":-3.5999999999999988,\"angle\":316.7},{\"amplitude\":-3.999999999999999,\"angle\":316.9},{\"amplitude\":-3.5999999999999988,\"angle\":317},{\"amplitude\":-3.5999999999999988,\"angle\":317.2},{\"amplitude\":-3.5999999999999988,\"angle\":317.4},{\"amplitude\":-3.5999999999999988,\"angle\":317.6},{\"amplitude\":-3.5999999999999988,\"angle\":317.9},{\"amplitude\":-3.5999999999999988,\"angle\":318.2},{\"amplitude\":-3.5999999999999988,\"angle\":318.7},{\"amplitude\":-3.5999999999999988,\"angle\":319.3},{\"amplitude\":-3.5999999999999988,\"angle\":319.9},{\"amplitude\":-3.5999999999999988,\"angle\":320.1},{\"amplitude\":-3.5999999999999988,\"angle\":320.4},{\"amplitude\":-3.5999999999999988,\"angle\":320.5},{\"amplitude\":-3.5999999999999988,\"angle\":320.7},{\"amplitude\":-3.5999999999999988,\"angle\":320.9},{\"amplitude\":-3.1999999999999984,\"angle\":321},{\"amplitude\":-3.1999999999999984,\"angle\":321.6},{\"amplitude\":-3.1999999999999984,\"angle\":321.8},{\"amplitude\":-3.1999999999999984,\"angle\":322.2},{\"amplitude\":-3.1999999999999984,\"angle\":322.4},{\"amplitude\":-3.1999999999999984,\"angle\":322.6},{\"amplitude\":-3.1999999999999984,\"angle\":322.8},{\"amplitude\":-3.1999999999999984,\"angle\":323.1},{\"amplitude\":-3.1999999999999984,\"angle\":323.3},{\"amplitude\":-2.799999999999998,\"angle\":323.7},{\"amplitude\":-2.799999999999998,\"angle\":324.1},{\"amplitude\":-2.799999999999998,\"angle\":324.2},{\"amplitude\":-2.799999999999998,\"angle\":324.4},{\"amplitude\":-2.799999999999998,\"angle\":324.9},{\"amplitude\":-2.799999999999998,\"angle\":325.2},{\"amplitude\":-2.400000000000002,\"angle\":325.5},{\"amplitude\":-2.400000000000002,\"angle\":325.6},{\"amplitude\":-2.400000000000002,\"angle\":325.9},{\"amplitude\":-2.400000000000002,\"angle\":326.2},{\"amplitude\":-2.400000000000002,\"angle\":326.8},{\"amplitude\":-2.400000000000002,\"angle\":327},{\"amplitude\":-2.0000000000000018,\"angle\":327.3},{\"amplitude\":-2.0000000000000018,\"angle\":327.7},{\"amplitude\":-2.0000000000000018,\"angle\":328.2},{\"amplitude\":-1.6000000000000014,\"angle\":328.6},{\"amplitude\":-1.6000000000000014,\"angle\":328.7},{\"amplitude\":-1.6000000000000014,\"angle\":328.9},{\"amplitude\":-1.6000000000000014,\"angle\":329},{\"amplitude\":-1.6000000000000014,\"angle\":329.2},{\"amplitude\":-1.200000000000001,\"angle\":329.8},{\"amplitude\":-1.200000000000001,\"angle\":330.3},{\"amplitude\":-1.200000000000001,\"angle\":330.4},{\"amplitude\":-1.200000000000001,\"angle\":330.6},{\"amplitude\":-1.200000000000001,\"angle\":331},{\"amplitude\":-0.8000000000000007,\"angle\":331.2},{\"amplitude\":-1.200000000000001,\"angle\":331.3},{\"amplitude\":-1.200000000000001,\"angle\":331.8},{\"amplitude\":-0.8000000000000007,\"angle\":331.9},{\"amplitude\":-0.8000000000000007,\"angle\":332},{\"amplitude\":-0.8000000000000007,\"angle\":332.2},{\"amplitude\":-0.8000000000000007,\"angle\":332.6},{\"amplitude\":-0.8000000000000007,\"angle\":332.7},{\"amplitude\":-0.8000000000000007,\"angle\":332.9},{\"amplitude\":-0.8000000000000007,\"angle\":333.2},{\"amplitude\":-0.8000000000000007,\"angle\":333.3},{\"amplitude\":-0.8000000000000007,\"angle\":333.8},{\"amplitude\":-0.8000000000000007,\"angle\":334},{\"amplitude\":-0.8000000000000007,\"angle\":334.8},{\"amplitude\":-0.8000000000000007,\"angle\":335.2},{\"amplitude\":-0.8000000000000007,\"angle\":335.6},{\"amplitude\":-0.8000000000000007,\"angle\":335.7},{\"amplitude\":-0.40000000000000036,\"angle\":336},{\"amplitude\":-0.40000000000000036,\"angle\":336.3},{\"amplitude\":-0.8000000000000007,\"angle\":336.4},{\"amplitude\":-0.40000000000000036,\"angle\":336.6},{\"amplitude\":-0.8000000000000007,\"angle\":336.8},{\"amplitude\":-0.40000000000000036,\"angle\":337.2},{\"amplitude\":-0.40000000000000036,\"angle\":337.5},{\"amplitude\":-0.40000000000000036,\"angle\":337.7},{\"amplitude\":-0.8000000000000007,\"angle\":338},{\"amplitude\":-0.8000000000000007,\"angle\":338.1},{\"amplitude\":-0.40000000000000036,\"angle\":338.7},{\"amplitude\":-0.40000000000000036,\"angle\":339.2},{\"amplitude\":-0.40000000000000036,\"angle\":339.3},{\"amplitude\":-0.40000000000000036,\"angle\":339.4},{\"amplitude\":-0.40000000000000036,\"angle\":339.8},{\"amplitude\":-0.40000000000000036,\"angle\":340},{\"amplitude\":-0.40000000000000036,\"angle\":340.3},{\"amplitude\":-0.40000000000000036,\"angle\":340.5},{\"amplitude\":-0.40000000000000036,\"angle\":340.9},{\"amplitude\":-0.40000000000000036,\"angle\":341},{\"amplitude\":-0.40000000000000036,\"angle\":341.2},{\"amplitude\":-0.40000000000000036,\"angle\":341.8},{\"amplitude\":-0.40000000000000036,\"angle\":342.3},{\"amplitude\":-0.40000000000000036,\"angle\":342.7},{\"amplitude\":-0.40000000000000036,\"angle\":342.9},{\"amplitude\":-0.40000000000000036,\"angle\":343.3},{\"amplitude\":-0.40000000000000036,\"angle\":343.4},{\"amplitude\":-0.40000000000000036,\"angle\":343.5},{\"amplitude\":-0.40000000000000036,\"angle\":343.9},{\"amplitude\":-0.40000000000000036,\"angle\":344},{\"amplitude\":-0.8000000000000007,\"angle\":344.4},{\"amplitude\":-0.8000000000000007,\"angle\":344.9},{\"amplitude\":-0.8000000000000007,\"angle\":345.3},{\"amplitude\":-0.8000000000000007,\"angle\":345.5},{\"amplitude\":-0.8000000000000007,\"angle\":345.8},{\"amplitude\":-0.8000000000000007,\"angle\":346.1},{\"amplitude\":-0.8000000000000007,\"angle\":346.5},{\"amplitude\":-0.8000000000000007,\"angle\":346.9},{\"amplitude\":-0.8000000000000007,\"angle\":347.2},{\"amplitude\":-0.8000000000000007,\"angle\":347.6},{\"amplitude\":-0.8000000000000007,\"angle\":348},{\"amplitude\":-0.8000000000000007,\"angle\":348.2},{\"amplitude\":-0.8000000000000007,\"angle\":348.3},{\"amplitude\":-0.8000000000000007,\"angle\":348.6},{\"amplitude\":-0.8000000000000007,\"angle\":348.7},{\"amplitude\":-0.8000000000000007,\"angle\":348.8},{\"amplitude\":-0.8000000000000007,\"angle\":349.2},{\"amplitude\":-0.8000000000000007,\"angle\":349.6},{\"amplitude\":-0.8000000000000007,\"angle\":350},{\"amplitude\":-0.8000000000000007,\"angle\":350.4},{\"amplitude\":-0.8000000000000007,\"angle\":350.8},{\"amplitude\":-0.8000000000000007,\"angle\":350.9},{\"amplitude\":-0.8000000000000007,\"angle\":351.1},{\"amplitude\":-0.8000000000000007,\"angle\":351.5},{\"amplitude\":-0.8000000000000007,\"angle\":351.6},{\"amplitude\":-0.8000000000000007,\"angle\":351.9},{\"amplitude\":-0.40000000000000036,\"angle\":352.1},{\"amplitude\":-0.8000000000000007,\"angle\":352.5},{\"amplitude\":-0.40000000000000036,\"angle\":352.6},{\"amplitude\":-0.40000000000000036,\"angle\":353},{\"amplitude\":-0.40000000000000036,\"angle\":353.6},{\"amplitude\":-0.40000000000000036,\"angle\":354.8},{\"amplitude\":-0.40000000000000036,\"angle\":355.3},{\"amplitude\":-0.40000000000000036,\"angle\":355.7},{\"amplitude\":-0.40000000000000036,\"angle\":356},{\"amplitude\":-0.40000000000000036,\"angle\":356.4},{\"amplitude\":0,\"angle\":356.5},{\"amplitude\":0,\"angle\":356.8},{\"amplitude\":0,\"angle\":356.9},{\"amplitude\":0,\"angle\":357.1},{\"amplitude\":0,\"angle\":357.3},{\"amplitude\":0,\"angle\":357.6},{\"amplitude\":-0.40000000000000036,\"angle\":358},{\"amplitude\":-0.40000000000000036,\"angle\":358.1},{\"amplitude\":-0.40000000000000036,\"angle\":358.5},{\"amplitude\":-0.40000000000000036,\"angle\":359.1},{\"amplitude\":-0.40000000000000036,\"angle\":360},{\"amplitude\":-0.40000000000000036,\"angle\":0},{\"amplitude\":-0.40000000000000036,\"angle\":0.8999999999999773},{\"amplitude\":-0.40000000000000036,\"angle\":1.5},{\"amplitude\":-0.40000000000000036,\"angle\":1.8999999999999773},{\"amplitude\":-0.40000000000000036,\"angle\":2},{\"amplitude\":0,\"angle\":2.3999999999999773},{\"amplitude\":0,\"angle\":2.6999999999999886},{\"amplitude\":0,\"angle\":2.8999999999999773},{\"amplitude\":0,\"angle\":3.1000000000000227},{\"amplitude\":0,\"angle\":3.1999999999999886},{\"amplitude\":0,\"angle\":3.5},{\"amplitude\":-0.40000000000000036,\"angle\":3.6000000000000227},{\"amplitude\":-0.40000000000000036,\"angle\":4},{\"amplitude\":-0.40000000000000036,\"angle\":4.300000000000011},{\"amplitude\":-0.40000000000000036,\"angle\":4.699999999999989},{\"amplitude\":-0.40000000000000036,\"angle\":5.199999999999989},{\"amplitude\":-0.40000000000000036,\"angle\":6.399999999999977},{\"amplitude\":-0.40000000000000036,\"angle\":7},{\"amplitude\":-0.40000000000000036,\"angle\":7.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":7.5},{\"amplitude\":-0.40000000000000036,\"angle\":7.899999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":8.100000000000023},{\"amplitude\":-0.8000000000000007,\"angle\":8.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":8.5},{\"amplitude\":-0.8000000000000007,\"angle\":8.899999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":9.100000000000023},{\"amplitude\":-0.8000000000000007,\"angle\":9.199999999999989},{\"amplitude\":-0.8000000000000007,\"angle\":9.600000000000023},{\"amplitude\":-0.8000000000000007,\"angle\":10},{\"amplitude\":-0.8000000000000007,\"angle\":10.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":10.800000000000011},{\"amplitude\":-0.8000000000000007,\"angle\":11.199999999999989},{\"amplitude\":-0.8000000000000007,\"angle\":11.300000000000011},{\"amplitude\":-0.8000000000000007,\"angle\":11.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":11.699999999999989},{\"amplitude\":-0.8000000000000007,\"angle\":11.800000000000011},{\"amplitude\":-0.8000000000000007,\"angle\":12},{\"amplitude\":-0.8000000000000007,\"angle\":12.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":12.800000000000011},{\"amplitude\":-0.8000000000000007,\"angle\":13.100000000000023},{\"amplitude\":-0.8000000000000007,\"angle\":13.5},{\"amplitude\":-0.8000000000000007,\"angle\":13.899999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":14.199999999999989},{\"amplitude\":-0.8000000000000007,\"angle\":14.5},{\"amplitude\":-0.8000000000000007,\"angle\":14.699999999999989},{\"amplitude\":-0.8000000000000007,\"angle\":15.100000000000023},{\"amplitude\":-0.8000000000000007,\"angle\":15.600000000000023},{\"amplitude\":-0.40000000000000036,\"angle\":16},{\"amplitude\":-0.40000000000000036,\"angle\":16.100000000000023},{\"amplitude\":-0.40000000000000036,\"angle\":16.5},{\"amplitude\":-0.40000000000000036,\"angle\":16.600000000000023},{\"amplitude\":-0.40000000000000036,\"angle\":16.69999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":17.100000000000023},{\"amplitude\":-0.40000000000000036,\"angle\":17.30000000000001},{\"amplitude\":-0.40000000000000036,\"angle\":17.69999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":18.19999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":18.80000000000001},{\"amplitude\":-0.40000000000000036,\"angle\":19},{\"amplitude\":-0.40000000000000036,\"angle\":19.100000000000023},{\"amplitude\":-0.40000000000000036,\"angle\":19.5},{\"amplitude\":-0.40000000000000036,\"angle\":19.69999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":20},{\"amplitude\":-0.40000000000000036,\"angle\":20.19999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":20.600000000000023},{\"amplitude\":-0.40000000000000036,\"angle\":20.69999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":20.80000000000001},{\"amplitude\":-0.40000000000000036,\"angle\":21.30000000000001},{\"amplitude\":-0.8000000000000007,\"angle\":21.899999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":22},{\"amplitude\":-0.40000000000000036,\"angle\":22.30000000000001},{\"amplitude\":-0.40000000000000036,\"angle\":22.5},{\"amplitude\":-0.40000000000000036,\"angle\":22.80000000000001},{\"amplitude\":-0.8000000000000007,\"angle\":23.19999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":23.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":23.600000000000023},{\"amplitude\":-0.40000000000000036,\"angle\":23.69999999999999},{\"amplitude\":-0.40000000000000036,\"angle\":24},{\"amplitude\":-0.8000000000000007,\"angle\":24.30000000000001},{\"amplitude\":-0.8000000000000007,\"angle\":24.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":24.80000000000001},{\"amplitude\":-0.8000000000000007,\"angle\":25.19999999999999},{\"amplitude\":-0.8000000000000007,\"angle\":26},{\"amplitude\":-0.8000000000000007,\"angle\":26.19999999999999},{\"amplitude\":-0.8000000000000007,\"angle\":26.69999999999999},{\"amplitude\":-0.8000000000000007,\"angle\":26.80000000000001},{\"amplitude\":-0.8000000000000007,\"angle\":27.100000000000023},{\"amplitude\":-0.8000000000000007,\"angle\":27.30000000000001},{\"amplitude\":-0.8000000000000007,\"angle\":27.399999999999977},{\"amplitude\":-0.8000000000000007,\"angle\":27.80000000000001},{\"amplitude\":-0.8000000000000007,\"angle\":28},{\"amplitude\":-0.8000000000000007,\"angle\":28.100000000000023},{\"amplitude\":-1.200000000000001,\"angle\":28.19999999999999},{\"amplitude\":-1.200000000000001,\"angle\":28.69999999999999},{\"amplitude\":-0.8000000000000007,\"angle\":28.80000000000001},{\"amplitude\":-1.200000000000001,\"angle\":29},{\"amplitude\":-1.200000000000001,\"angle\":29.399999999999977},{\"amplitude\":-1.200000000000001,\"angle\":29.600000000000023},{\"amplitude\":-1.200000000000001,\"angle\":29.69999999999999},{\"amplitude\":-1.200000000000001,\"angle\":30.19999999999999},{\"amplitude\":-1.6000000000000014,\"angle\":30.80000000000001},{\"amplitude\":-1.6000000000000014,\"angle\":31},{\"amplitude\":-1.6000000000000014,\"angle\":31.100000000000023},{\"amplitude\":-1.6000000000000014,\"angle\":31.30000000000001},{\"amplitude\":-1.6000000000000014,\"angle\":31.399999999999977},{\"amplitude\":-2.0000000000000018,\"angle\":31.80000000000001},{\"amplitude\":-2.0000000000000018,\"angle\":32.30000000000001},{\"amplitude\":-2.0000000000000018,\"angle\":32.69999999999999},{\"amplitude\":-2.400000000000002,\"angle\":33},{\"amplitude\":-2.400000000000002,\"angle\":33.19999999999999},{\"amplitude\":-2.400000000000002,\"angle\":33.80000000000001},{\"amplitude\":-2.400000000000002,\"angle\":34.10000000000002},{\"amplitude\":-2.400000000000002,\"angle\":34.39999999999998},{\"amplitude\":-2.400000000000002,\"angle\":34.5},{\"amplitude\":-2.799999999999998,\"angle\":34.80000000000001},{\"amplitude\":-2.799999999999998,\"angle\":35.10000000000002},{\"amplitude\":-2.799999999999998,\"angle\":35.60000000000002},{\"amplitude\":-2.799999999999998,\"angle\":35.80000000000001},{\"amplitude\":-2.799999999999998,\"angle\":35.89999999999998},{\"amplitude\":-2.799999999999998,\"angle\":36.30000000000001},{\"amplitude\":-3.1999999999999984,\"angle\":36.69999999999999},{\"amplitude\":-3.1999999999999984,\"angle\":36.89999999999998},{\"amplitude\":-3.1999999999999984,\"angle\":37.19999999999999},{\"amplitude\":-3.1999999999999984,\"angle\":37.39999999999998},{\"amplitude\":-3.1999999999999984,\"angle\":37.60000000000002},{\"amplitude\":-3.1999999999999984,\"angle\":37.80000000000001},{\"amplitude\":-3.1999999999999984,\"angle\":38.19999999999999},{\"amplitude\":-3.1999999999999984,\"angle\":38.39999999999998},{\"amplitude\":-3.1999999999999984,\"angle\":39},{\"amplitude\":-3.5999999999999988,\"angle\":39.10000000000002},{\"amplitude\":-3.5999999999999988,\"angle\":39.30000000000001},{\"amplitude\":-3.5999999999999988,\"angle\":39.5},{\"amplitude\":-3.5999999999999988,\"angle\":39.60000000000002},{\"amplitude\":-3.5999999999999988,\"angle\":39.89999999999998},{\"amplitude\":-3.5999999999999988,\"angle\":40.10000000000002},{\"amplitude\":-3.5999999999999988,\"angle\":40.69999999999999},{\"amplitude\":-3.5999999999999988,\"angle\":41.30000000000001},{\"amplitude\":-3.5999999999999988,\"angle\":41.80000000000001},{\"amplitude\":-3.5999999999999988,\"angle\":42.10000000000002},{\"amplitude\":-3.5999999999999988,\"angle\":42.39999999999998},{\"amplitude\":-3.5999999999999988,\"angle\":42.60000000000002},{\"amplitude\":-3.5999999999999988,\"angle\":42.80000000000001},{\"amplitude\":-3.5999999999999988,\"angle\":43},{\"amplitude\":-3.999999999999999,\"angle\":43.10000000000002},{\"amplitude\":-3.5999999999999988,\"angle\":43.30000000000001},{\"amplitude\":-3.999999999999999,\"angle\":43.5},{\"amplitude\":-3.999999999999999,\"angle\":43.60000000000002},{\"amplitude\":-3.999999999999999,\"angle\":43.69999999999999},{\"amplitude\":-3.999999999999999,\"angle\":44},{\"amplitude\":-3.999999999999999,\"angle\":44.19999999999999},{\"amplitude\":-3.999999999999999,\"angle\":44.69999999999999},{\"amplitude\":-3.999999999999999,\"angle\":45.10000000000002},{\"amplitude\":-4.3999999999999995,\"angle\":45.30000000000001},{\"amplitude\":-4.3999999999999995,\"angle\":45.60000000000002},{\"amplitude\":-4.3999999999999995,\"angle\":45.80000000000001},{\"amplitude\":-4.3999999999999995,\"angle\":46.10000000000002},{\"amplitude\":-4.3999999999999995,\"angle\":46.30000000000001},{\"amplitude\":-4.3999999999999995,\"angle\":46.80000000000001},{\"amplitude\":-4.3999999999999995,\"angle\":47},{\"amplitude\":-4.3999999999999995,\"angle\":47.19999999999999},{\"amplitude\":-4.3999999999999995,\"angle\":47.39999999999998},{\"amplitude\":-4.3999999999999995,\"angle\":47.80000000000001},{\"amplitude\":-4.3999999999999995,\"angle\":48.19999999999999},{\"amplitude\":-4.3999999999999995,\"angle\":48.39999999999998},{\"amplitude\":-4.3999999999999995,\"angle\":49.19999999999999},{\"amplitude\":-4.8,\"angle\":49.60000000000002},{\"amplitude\":-4.8,\"angle\":50},{\"amplitude\":-4.8,\"angle\":50.30000000000001},{\"amplitude\":-4.8,\"angle\":50.69999999999999},{\"amplitude\":-4.3999999999999995,\"angle\":50.89999999999998},{\"amplitude\":-4.3999999999999995,\"angle\":51.19999999999999},{\"amplitude\":-4.8,\"angle\":51.5},{\"amplitude\":-4.8,\"angle\":51.89999999999998},{\"amplitude\":-4.8,\"angle\":52},{\"amplitude\":-4.8,\"angle\":52.60000000000002},{\"amplitude\":-4.8,\"angle\":52.69999999999999},{\"amplitude\":-4.3999999999999995,\"angle\":52.89999999999998},{\"amplitude\":-4.8,\"angle\":53},{\"amplitude\":-4.8,\"angle\":53.30000000000001},{\"amplitude\":-4.8,\"angle\":53.5},{\"amplitude\":-4.3999999999999995,\"angle\":53.80000000000001},{\"amplitude\":-4.8,\"angle\":54.30000000000001},{\"amplitude\":-4.8,\"angle\":55},{\"amplitude\":-4.8,\"angle\":55.19999999999999},{\"amplitude\":-4.8,\"angle\":55.69999999999999},{\"amplitude\":-4.8,\"angle\":56},{\"amplitude\":-4.8,\"angle\":56.39999999999998},{\"amplitude\":-4.8,\"angle\":56.89999999999998},{\"amplitude\":-4.8,\"angle\":57.69999999999999},{\"amplitude\":-4.8,\"angle\":57.80000000000001},{\"amplitude\":-4.8,\"angle\":57.89999999999998},{\"amplitude\":-4.8,\"angle\":58.5},{\"amplitude\":-4.8,\"angle\":58.89999999999998},{\"amplitude\":-4.8,\"angle\":59.19999999999999},{\"amplitude\":-4.8,\"angle\":59.5},{\"amplitude\":-5.2,\"angle\":59.80000000000001},{\"amplitude\":-5.2,\"angle\":60.10000000000002},{\"amplitude\":-5.2,\"angle\":60.19999999999999},{\"amplitude\":-5.2,\"angle\":60.39999999999998},{\"amplitude\":-5.2,\"angle\":60.60000000000002},{\"amplitude\":-5.2,\"angle\":60.89999999999998},{\"amplitude\":-5.2,\"angle\":61.30000000000001},{\"amplitude\":-5.2,\"angle\":61.60000000000002},{\"amplitude\":-5.2,\"angle\":61.89999999999998},{\"amplitude\":-5.6000000000000005,\"angle\":62.19999999999999},{\"amplitude\":-5.6000000000000005,\"angle\":62.5},{\"amplitude\":-5.6000000000000005,\"angle\":62.60000000000002},{\"amplitude\":-5.6000000000000005,\"angle\":63.10000000000002},{\"amplitude\":-5.6000000000000005,\"angle\":63.19999999999999},{\"amplitude\":-6.000000000000001,\"angle\":63.60000000000002},{\"amplitude\":-6.000000000000001,\"angle\":63.89999999999998},{\"amplitude\":-5.6000000000000005,\"angle\":64},{\"amplitude\":-6.000000000000001,\"angle\":64.30000000000001},{\"amplitude\":-5.6000000000000005,\"angle\":64.5},{\"amplitude\":-6.000000000000001,\"angle\":64.69999999999999},{\"amplitude\":-6.000000000000001,\"angle\":64.89999999999998},{\"amplitude\":-6.000000000000001,\"angle\":65.10000000000002},{\"amplitude\":-6.000000000000001,\"angle\":65.19999999999999},{\"amplitude\":-6.000000000000001,\"angle\":65.60000000000002},{\"amplitude\":-6.000000000000001,\"angle\":65.69999999999999},{\"amplitude\":-6.000000000000001,\"angle\":66},{\"amplitude\":-6.000000000000001,\"angle\":66.30000000000001},{\"amplitude\":-6.000000000000001,\"angle\":66.39999999999998},{\"amplitude\":-6.000000000000001,\"angle\":66.89999999999998},{\"amplitude\":-6.000000000000001,\"angle\":67},{\"amplitude\":-6.000000000000001,\"angle\":67.19999999999999},{\"amplitude\":-6.000000000000001,\"angle\":67.5},{\"amplitude\":-6.400000000000001,\"angle\":68},{\"amplitude\":-6.400000000000001,\"angle\":68.30000000000001},{\"amplitude\":-6.400000000000001,\"angle\":68.80000000000001},{\"amplitude\":-6.400000000000001,\"angle\":69.39999999999998},{\"amplitude\":-6.400000000000001,\"angle\":69.60000000000002},{\"amplitude\":-6.800000000000002,\"angle\":70},{\"amplitude\":-6.800000000000002,\"angle\":70.60000000000002},{\"amplitude\":-6.800000000000002,\"angle\":70.80000000000001},{\"amplitude\":-6.800000000000002,\"angle\":71.10000000000002},{\"amplitude\":-6.800000000000002,\"angle\":71.19999999999999},{\"amplitude\":-6.800000000000002,\"angle\":71.39999999999998},{\"amplitude\":-6.800000000000002,\"angle\":71.69999999999999},{\"amplitude\":-6.800000000000002,\"angle\":71.80000000000001},{\"amplitude\":-7.200000000000002,\"angle\":72},{\"amplitude\":-7.200000000000002,\"angle\":72.30000000000001},{\"amplitude\":-7.200000000000002,\"angle\":72.60000000000002},{\"amplitude\":-7.200000000000002,\"angle\":73.19999999999999},{\"amplitude\":-7.200000000000002,\"angle\":73.80000000000001},{\"amplitude\":-7.200000000000002,\"angle\":74.10000000000002},{\"amplitude\":-7.200000000000002,\"angle\":74.80000000000001},{\"amplitude\":-7.200000000000002,\"angle\":75},{\"amplitude\":-7.200000000000002,\"angle\":75.5},{\"amplitude\":-7.599999999999998,\"angle\":75.60000000000002},{\"amplitude\":-7.599999999999998,\"angle\":75.80000000000001},{\"amplitude\":-7.599999999999998,\"angle\":76.10000000000002},{\"amplitude\":-7.599999999999998,\"angle\":76.30000000000001},{\"amplitude\":-7.599999999999998,\"angle\":76.39999999999998},{\"amplitude\":-7.599999999999998,\"angle\":76.80000000000001},{\"amplitude\":-7.599999999999998,\"angle\":76.89999999999998},{\"amplitude\":-7.599999999999998,\"angle\":77.39999999999998},{\"amplitude\":-7.599999999999998,\"angle\":77.60000000000002},{\"amplitude\":-7.599999999999998,\"angle\":78},{\"amplitude\":-7.599999999999998,\"angle\":78.19999999999999},{\"amplitude\":-7.599999999999998,\"angle\":78.39999999999998},{\"amplitude\":-7.599999999999998,\"angle\":78.69999999999999},{\"amplitude\":-7.599999999999998,\"angle\":78.80000000000001},{\"amplitude\":-7.599999999999998,\"angle\":79.30000000000001},{\"amplitude\":-7.999999999999998,\"angle\":79.5},{\"amplitude\":-7.999999999999998,\"angle\":79.60000000000002},{\"amplitude\":-7.999999999999998,\"angle\":80.10000000000002},{\"amplitude\":-7.999999999999998,\"angle\":80.30000000000001},{\"amplitude\":-7.999999999999998,\"angle\":80.60000000000002},{\"amplitude\":-7.999999999999998,\"angle\":80.89999999999998},{\"amplitude\":-7.999999999999998,\"angle\":81.30000000000001},{\"amplitude\":-7.999999999999998,\"angle\":81.39999999999998},{\"amplitude\":-7.999999999999998,\"angle\":81.60000000000002},{\"amplitude\":-7.999999999999998,\"angle\":81.89999999999998},{\"amplitude\":-7.999999999999998,\"angle\":82.19999999999999},{\"amplitude\":-7.999999999999998,\"angle\":82.60000000000002},{\"amplitude\":-7.999999999999998,\"angle\":82.89999999999998},{\"amplitude\":-7.999999999999998,\"angle\":83.19999999999999},{\"amplitude\":-7.999999999999998,\"angle\":83.39999999999998},{\"amplitude\":-7.999999999999998,\"angle\":83.60000000000002},{\"amplitude\":-7.999999999999998,\"angle\":83.89999999999998},{\"amplitude\":-7.999999999999998,\"angle\":84.19999999999999},{\"amplitude\":-8.399999999999999,\"angle\":84.69999999999999},{\"amplitude\":-8.399999999999999,\"angle\":84.89999999999998},{\"amplitude\":-8.399999999999999,\"angle\":85.19999999999999},{\"amplitude\":-8.399999999999999,\"angle\":85.5},{\"amplitude\":-8.399999999999999,\"angle\":86},{\"amplitude\":-8.399999999999999,\"angle\":86.19999999999999},{\"amplitude\":-8.399999999999999,\"angle\":86.5},{\"amplitude\":-8.399999999999999,\"angle\":86.80000000000001},{\"amplitude\":-8.799999999999999,\"angle\":87.19999999999999},{\"amplitude\":-8.799999999999999,\"angle\":87.5},{\"amplitude\":-8.799999999999999,\"angle\":87.80000000000001},{\"amplitude\":-8.799999999999999,\"angle\":88.19999999999999},{\"amplitude\":-9.2,\"angle\":88.69999999999999},{\"amplitude\":-9.2,\"angle\":88.80000000000001},{\"amplitude\":-9.2,\"angle\":89.39999999999998},{\"amplitude\":-9.2,\"angle\":89.5},{\"amplitude\":-9.6,\"angle\":89.89999999999998},{\"amplitude\":-9.6,\"angle\":90.19999999999999},{\"amplitude\":-9.6,\"angle\":90.69999999999999},{\"amplitude\":-9.6,\"angle\":90.89999999999998},{\"amplitude\":-10,\"angle\":91.39999999999998},{\"amplitude\":-10,\"angle\":92},{\"amplitude\":-10,\"angle\":92.19999999999999},{\"amplitude\":-10.4,\"angle\":92.69999999999999},{\"amplitude\":-10.4,\"angle\":92.89999999999998},{\"amplitude\":-10.4,\"angle\":93.10000000000002},{\"amplitude\":-10.4,\"angle\":93.39999999999998},{\"amplitude\":-10.4,\"angle\":93.60000000000002},{\"amplitude\":-10.4,\"angle\":93.80000000000001},{\"amplitude\":-10.4,\"angle\":94.19999999999999},{\"amplitude\":-10.4,\"angle\":94.30000000000001},{\"amplitude\":-10.4,\"angle\":94.5},{\"amplitude\":-10.4,\"angle\":94.89999999999998},{\"amplitude\":-10.8,\"angle\":95.10000000000002},{\"amplitude\":-10.8,\"angle\":95.30000000000001},{\"amplitude\":-10.8,\"angle\":95.69999999999999},{\"amplitude\":-11.200000000000001,\"angle\":96.10000000000002},{\"amplitude\":-11.200000000000001,\"angle\":96.39999999999998},{\"amplitude\":-11.200000000000001,\"angle\":96.80000000000001},{\"amplitude\":-11.600000000000001,\"angle\":97.60000000000002},{\"amplitude\":-11.600000000000001,\"angle\":98},{\"amplitude\":-11.600000000000001,\"angle\":98.30000000000001},{\"amplitude\":-11.600000000000001,\"angle\":98.5},{\"amplitude\":-11.600000000000001,\"angle\":98.80000000000001},{\"amplitude\":-11.600000000000001,\"angle\":99.19999999999999},{\"amplitude\":-12.000000000000002,\"angle\":99.69999999999999},{\"amplitude\":-12.000000000000002,\"angle\":100.10000000000002},{\"amplitude\":-12.000000000000002,\"angle\":100.60000000000002},{\"amplitude\":-12.400000000000002,\"angle\":100.80000000000001},{\"amplitude\":-12.400000000000002,\"angle\":101},{\"amplitude\":-12.400000000000002,\"angle\":101.69999999999999},{\"amplitude\":-12.799999999999997,\"angle\":101.80000000000001},{\"amplitude\":-12.799999999999997,\"angle\":102},{\"amplitude\":-12.799999999999997,\"angle\":102.39999999999998},{\"amplitude\":-12.799999999999997,\"angle\":102.60000000000002},{\"amplitude\":-12.799999999999997,\"angle\":103.19999999999999},{\"amplitude\":-13.2,\"angle\":103.30000000000001},{\"amplitude\":-13.2,\"angle\":103.5},{\"amplitude\":-13.2,\"angle\":103.69999999999999},{\"amplitude\":-13.2,\"angle\":104.19999999999999},{\"amplitude\":-13.2,\"angle\":104.4},{\"amplitude\":-13.599999999999998,\"angle\":104.69999999999999},{\"amplitude\":-13.599999999999998,\"angle\":105.19999999999999},{\"amplitude\":-13.599999999999998,\"angle\":105.5},{\"amplitude\":-13.599999999999998,\"angle\":105.69999999999999},{\"amplitude\":-14,\"angle\":106.19999999999999},{\"amplitude\":-14,\"angle\":106.5},{\"amplitude\":-14,\"angle\":106.80000000000001},{\"amplitude\":-14.399999999999999,\"angle\":107.5},{\"amplitude\":-14.399999999999999,\"angle\":108.30000000000001},{\"amplitude\":-14.8,\"angle\":108.9},{\"amplitude\":-14.8,\"angle\":109.6},{\"amplitude\":-14.8,\"angle\":110},{\"amplitude\":-14.8,\"angle\":110.1},{\"amplitude\":-15.2,\"angle\":110.69999999999999},{\"amplitude\":-15.2,\"angle\":110.9},{\"amplitude\":-15.2,\"angle\":111.19999999999999},{\"amplitude\":-15.600000000000001,\"angle\":111.9},{\"amplitude\":-15.600000000000001,\"angle\":112.5},{\"amplitude\":-15.600000000000001,\"angle\":112.6},{\"amplitude\":-16,\"angle\":113.5},{\"amplitude\":-16,\"angle\":113.6},{\"amplitude\":-16,\"angle\":113.80000000000001},{\"amplitude\":-16.400000000000002,\"angle\":114.6},{\"amplitude\":-16.400000000000002,\"angle\":114.80000000000001},{\"amplitude\":-16.8,\"angle\":115.6},{\"amplitude\":-16.8,\"angle\":115.69999999999999},{\"amplitude\":-16.8,\"angle\":116.69999999999999},{\"amplitude\":-17.200000000000003,\"angle\":117},{\"amplitude\":-17.200000000000003,\"angle\":117.4},{\"amplitude\":-17.599999999999998,\"angle\":118.1},{\"amplitude\":-17.599999999999998,\"angle\":118.69999999999999},{\"amplitude\":-17.599999999999998,\"angle\":118.80000000000001},{\"amplitude\":-18,\"angle\":118.9},{\"amplitude\":-18,\"angle\":119.4},{\"amplitude\":-18,\"angle\":119.5},{\"amplitude\":-18,\"angle\":119.6},{\"amplitude\":-18.4,\"angle\":120.69999999999999},{\"amplitude\":-18.4,\"angle\":120.9},{\"amplitude\":-18.799999999999997,\"angle\":121},{\"amplitude\":-18.799999999999997,\"angle\":121.30000000000001},{\"amplitude\":-18.799999999999997,\"angle\":121.4},{\"amplitude\":-19.2,\"angle\":122.1},{\"amplitude\":-19.2,\"angle\":122.5},{\"amplitude\":-19.6,\"angle\":122.80000000000001},{\"amplitude\":-19.6,\"angle\":123.1},{\"amplitude\":-19.6,\"angle\":123.19999999999999},{\"amplitude\":-20,\"angle\":123.4},{\"amplitude\":-20,\"angle\":123.69999999999999},{\"amplitude\":-20,\"angle\":123.80000000000001},{\"amplitude\":-20.4,\"angle\":124.30000000000001},{\"amplitude\":-20.8,\"angle\":124.9},{\"amplitude\":-20.8,\"angle\":125.19999999999999},{\"amplitude\":-20.8,\"angle\":125.5},{\"amplitude\":-21.200000000000003,\"angle\":125.80000000000001},{\"amplitude\":-21.200000000000003,\"angle\":126.19999999999999},{\"amplitude\":-21.200000000000003,\"angle\":126.5},{\"amplitude\":-21.6,\"angle\":127},{\"amplitude\":-21.6,\"angle\":127.19999999999999},{\"amplitude\":-21.6,\"angle\":127.5},{\"amplitude\":-22,\"angle\":127.69999999999999},{\"amplitude\":-22,\"angle\":127.9},{\"amplitude\":-22,\"angle\":128.3},{\"amplitude\":-22,\"angle\":128.4},{\"amplitude\":-22.400000000000002,\"angle\":128.6},{\"amplitude\":-22.400000000000002,\"angle\":129},{\"amplitude\":-22.400000000000002,\"angle\":129.2},{\"amplitude\":-22.400000000000002,\"angle\":129.4},{\"amplitude\":-22.800000000000004,\"angle\":129.8},{\"amplitude\":-22.800000000000004,\"angle\":130.2},{\"amplitude\":-22.800000000000004,\"angle\":130.6},{\"amplitude\":-23.200000000000003,\"angle\":131.2},{\"amplitude\":-23.6,\"angle\":131.6},{\"amplitude\":-23.6,\"angle\":132},{\"amplitude\":-24,\"angle\":132.1},{\"amplitude\":-24.4,\"angle\":133},{\"amplitude\":-24.8,\"angle\":133.2},{\"amplitude\":-24.8,\"angle\":133.5},{\"amplitude\":-25.2,\"angle\":133.9},{\"amplitude\":-25.6,\"angle\":134.2},{\"amplitude\":-25.6,\"angle\":134.7},{\"amplitude\":-26,\"angle\":136.3},{\"amplitude\":-26.4,\"angle\":136.9},{\"amplitude\":-26.4,\"angle\":137.2},{\"amplitude\":-26.799999999999997,\"angle\":137.5},{\"amplitude\":-27.199999999999996,\"angle\":137.8},{\"amplitude\":-27.199999999999996,\"angle\":138.2},{\"amplitude\":-27.599999999999998,\"angle\":138.9},{\"amplitude\":-28,\"angle\":139.6},{\"amplitude\":-28.4,\"angle\":139.7},{\"amplitude\":-28.4,\"angle\":140.1},{\"amplitude\":-28.4,\"angle\":140.2},{\"amplitude\":-28.799999999999997,\"angle\":140.5},{\"amplitude\":-28.799999999999997,\"angle\":141.3},{\"amplitude\":-28.799999999999997,\"angle\":142},{\"amplitude\":-29.2,\"angle\":142.5},{\"amplitude\":-29.2,\"angle\":142.9},{\"amplitude\":-29.2,\"angle\":143.4},{\"amplitude\":-29.6,\"angle\":143.5},{\"amplitude\":-29.6,\"angle\":144.8},{\"amplitude\":-29.6,\"angle\":145.2},{\"amplitude\":-30,\"angle\":145.6},{\"amplitude\":-30,\"angle\":146},{\"amplitude\":-30.4,\"angle\":146.5},{\"amplitude\":-30.4,\"angle\":147.4},{\"amplitude\":-30.4,\"angle\":147.6},{\"amplitude\":-30.8,\"angle\":148.4},{\"amplitude\":-30.8,\"angle\":148.6},{\"amplitude\":-31.200000000000003,\"angle\":148.8},{\"amplitude\":-31.200000000000003,\"angle\":149.2},{\"amplitude\":-31.200000000000003,\"angle\":149.4},{\"amplitude\":-31.6,\"angle\":149.9},{\"amplitude\":-32,\"angle\":150.6},{\"amplitude\":-32,\"angle\":152.1},{\"amplitude\":-32,\"angle\":152.6},{\"amplitude\":-32,\"angle\":152.9},{\"amplitude\":-32.400000000000006,\"angle\":154.1},{\"amplitude\":-32.400000000000006,\"angle\":154.2},{\"amplitude\":-32.400000000000006,\"angle\":154.8},{\"amplitude\":-32.800000000000004,\"angle\":155.8},{\"amplitude\":-32.800000000000004,\"angle\":156.5},{\"amplitude\":-32.800000000000004,\"angle\":156.8},{\"amplitude\":-33.199999999999996,\"angle\":157.7},{\"amplitude\":-33.199999999999996,\"angle\":158.4},{\"amplitude\":-33.199999999999996,\"angle\":158.8},{\"amplitude\":-33.199999999999996,\"angle\":160.3},{\"amplitude\":-33.199999999999996,\"angle\":161},{\"amplitude\":-33.6,\"angle\":161.5},{\"amplitude\":-33.6,\"angle\":162.6},{\"amplitude\":-33.6,\"angle\":163.4},{\"amplitude\":-34,\"angle\":165.4},{\"amplitude\":-34,\"angle\":166.2},{\"amplitude\":-34,\"angle\":166.7},{\"amplitude\":-34.4,\"angle\":168.5},{\"amplitude\":-34.4,\"angle\":169.4},{\"amplitude\":-34.4,\"angle\":170.1},{\"amplitude\":-34.4,\"angle\":172},{\"amplitude\":-34.4,\"angle\":173.7},{\"amplitude\":-34.4,\"angle\":175.6},{\"amplitude\":-34.4,\"angle\":176.6},{\"amplitude\":-34.4,\"angle\":177.5},{\"amplitude\":-34.4,\"angle\":179.5},{\"amplitude\":-34.8,\"angle\":181.4},{\"amplitude\":-34.8,\"angle\":178.6},{\"amplitude\":-34.4,\"angle\":180.5},{\"amplitude\":-34.4,\"angle\":182.5},{\"amplitude\":-34.4,\"angle\":183.4},{\"amplitude\":-34.4,\"angle\":184.4},{\"amplitude\":-34.4,\"angle\":186.3},{\"amplitude\":-34.4,\"angle\":188},{\"amplitude\":-34.4,\"angle\":189.9},{\"amplitude\":-34.4,\"angle\":190.6},{\"amplitude\":-34.4,\"angle\":191.5},{\"amplitude\":-34,\"angle\":193.3},{\"amplitude\":-34,\"angle\":193.8},{\"amplitude\":-34,\"angle\":194.6},{\"amplitude\":-33.6,\"angle\":196.6},{\"amplitude\":-33.6,\"angle\":197.4},{\"amplitude\":-33.6,\"angle\":198.5},{\"amplitude\":-33.199999999999996,\"angle\":199},{\"amplitude\":-33.199999999999996,\"angle\":199.7},{\"amplitude\":-33.199999999999996,\"angle\":201.2},{\"amplitude\":-33.199999999999996,\"angle\":201.6},{\"amplitude\":-33.199999999999996,\"angle\":202.3},{\"amplitude\":-32.800000000000004,\"angle\":203.2},{\"amplitude\":-32.800000000000004,\"angle\":203.5},{\"amplitude\":-32.800000000000004,\"angle\":204.2},{\"amplitude\":-32.400000000000006,\"angle\":205.2},{\"amplitude\":-32.400000000000006,\"angle\":205.8},{\"amplitude\":-32.400000000000006,\"angle\":205.9},{\"amplitude\":-32,\"angle\":207.1},{\"amplitude\":-32,\"angle\":207.4},{\"amplitude\":-32,\"angle\":207.9},{\"amplitude\":-32,\"angle\":209.4},{\"amplitude\":-31.6,\"angle\":210.1},{\"amplitude\":-31.200000000000003,\"angle\":210.6},{\"amplitude\":-31.200000000000003,\"angle\":210.8},{\"amplitude\":-31.200000000000003,\"angle\":211.2},{\"amplitude\":-30.8,\"angle\":211.4},{\"amplitude\":-30.8,\"angle\":211.6},{\"amplitude\":-30.4,\"angle\":212.4},{\"amplitude\":-30.4,\"angle\":212.6},{\"amplitude\":-30.4,\"angle\":213.5},{\"amplitude\":-30,\"angle\":214},{\"amplitude\":-30,\"angle\":214.4},{\"amplitude\":-29.6,\"angle\":214.8},{\"amplitude\":-29.6,\"angle\":215.2},{\"amplitude\":-29.6,\"angle\":216.5},{\"amplitude\":-29.2,\"angle\":216.6},{\"amplitude\":-29.2,\"angle\":217.1},{\"amplitude\":-29.2,\"angle\":217.5},{\"amplitude\":-28.799999999999997,\"angle\":218},{\"amplitude\":-28.799999999999997,\"angle\":218.7},{\"amplitude\":-28.799999999999997,\"angle\":219.5},{\"amplitude\":-28.4,\"angle\":219.8},{\"amplitude\":-28.4,\"angle\":219.9},{\"amplitude\":-28.4,\"angle\":220.3},{\"amplitude\":-28,\"angle\":220.4},{\"amplitude\":-27.599999999999998,\"angle\":221.1},{\"amplitude\":-27.199999999999996,\"angle\":221.8},{\"amplitude\":-27.199999999999996,\"angle\":222.2},{\"amplitude\":-26.799999999999997,\"angle\":222.5},{\"amplitude\":-26.4,\"angle\":222.8},{\"amplitude\":-26.4,\"angle\":223.1},{\"amplitude\":-26,\"angle\":223.7},{\"amplitude\":-25.6,\"angle\":225.3},{\"amplitude\":-25.6,\"angle\":225.8},{\"amplitude\":-25.2,\"angle\":226.1},{\"amplitude\":-24.8,\"angle\":226.5},{\"amplitude\":-24.8,\"angle\":226.8},{\"amplitude\":-24.4,\"angle\":227},{\"amplitude\":-24,\"angle\":227.9},{\"amplitude\":-23.6,\"angle\":228},{\"amplitude\":-23.6,\"angle\":228.4},{\"amplitude\":-23.200000000000003,\"angle\":228.8},{\"amplitude\":-22.800000000000004,\"angle\":229.4},{\"amplitude\":-22.800000000000004,\"angle\":229.8},{\"amplitude\":-22.800000000000004,\"angle\":230.2},{\"amplitude\":-22.400000000000002,\"angle\":230.6},{\"amplitude\":-22.400000000000002,\"angle\":230.8},{\"amplitude\":-22.400000000000002,\"angle\":231},{\"amplitude\":-22.400000000000002,\"angle\":231.4},{\"amplitude\":-22,\"angle\":231.6},{\"amplitude\":-22,\"angle\":231.7},{\"amplitude\":-22,\"angle\":232.1},{\"amplitude\":-22,\"angle\":232.3},{\"amplitude\":-21.6,\"angle\":232.5},{\"amplitude\":-21.6,\"angle\":232.8},{\"amplitude\":-21.6,\"angle\":233},{\"amplitude\":-21.200000000000003,\"angle\":233.5},{\"amplitude\":-21.200000000000003,\"angle\":233.8},{\"amplitude\":-21.200000000000003,\"angle\":234.2},{\"amplitude\":-20.8,\"angle\":234.5},{\"amplitude\":-20.8,\"angle\":234.8},{\"amplitude\":-20.8,\"angle\":235.1},{\"amplitude\":-20.4,\"angle\":235.7},{\"amplitude\":-20,\"angle\":236.2},{\"amplitude\":-20,\"angle\":236.3},{\"amplitude\":-20,\"angle\":236.6},{\"amplitude\":-19.6,\"angle\":236.8},{\"amplitude\":-19.6,\"angle\":236.9},{\"amplitude\":-19.6,\"angle\":237.2},{\"amplitude\":-19.2,\"angle\":237.5},{\"amplitude\":-19.2,\"angle\":237.9},{\"amplitude\":-18.799999999999997,\"angle\":238.6},{\"amplitude\":-18.799999999999997,\"angle\":238.7},{\"amplitude\":-18.799999999999997,\"angle\":239},{\"amplitude\":-18.4,\"angle\":239.1},{\"amplitude\":-18.4,\"angle\":239.3},{\"amplitude\":-18,\"angle\":240.4},{\"amplitude\":-18,\"angle\":240.5},{\"amplitude\":-18,\"angle\":240.6},{\"amplitude\":-18,\"angle\":241.1},{\"amplitude\":-17.599999999999998,\"angle\":241.2},{\"amplitude\":-17.599999999999998,\"angle\":241.3},{\"amplitude\":-17.599999999999998,\"angle\":241.9},{\"amplitude\":-17.200000000000003,\"angle\":242.6},{\"amplitude\":-17.200000000000003,\"angle\":243},{\"amplitude\":-16.8,\"angle\":243.3},{\"amplitude\":-16.8,\"angle\":244.3},{\"amplitude\":-16.8,\"angle\":244.4},{\"amplitude\":-16.400000000000002,\"angle\":245.2},{\"amplitude\":-16.400000000000002,\"angle\":245.4},{\"amplitude\":-16,\"angle\":246.2},{\"amplitude\":-16,\"angle\":246.4},{\"amplitude\":-16,\"angle\":246.5},{\"amplitude\":-15.600000000000001,\"angle\":247.4},{\"amplitude\":-15.600000000000001,\"angle\":247.5},{\"amplitude\":-15.600000000000001,\"angle\":248.1},{\"amplitude\":-15.2,\"angle\":248.8},{\"amplitude\":-15.2,\"angle\":249.1},{\"amplitude\":-15.2,\"angle\":249.3},{\"amplitude\":-14.8,\"angle\":249.9},{\"amplitude\":-14.8,\"angle\":250},{\"amplitude\":-14.8,\"angle\":250.4},{\"amplitude\":-14.8,\"angle\":251.1},{\"amplitude\":-14.399999999999999,\"angle\":251.7},{\"amplitude\":-14.399999999999999,\"angle\":252.5},{\"amplitude\":-14,\"angle\":253.2},{\"amplitude\":-14,\"angle\":253.5},{\"amplitude\":-14,\"angle\":253.8},{\"amplitude\":-13.599999999999998,\"angle\":254.3},{\"amplitude\":-13.599999999999998,\"angle\":254.5},{\"amplitude\":-13.599999999999998,\"angle\":254.8},{\"amplitude\":-13.599999999999998,\"angle\":255.3},{\"amplitude\":-13.2,\"angle\":255.6},{\"amplitude\":-13.2,\"angle\":255.8},{\"amplitude\":-13.2,\"angle\":256.3},{\"amplitude\":-13.2,\"angle\":256.5},{\"amplitude\":-13.2,\"angle\":256.7},{\"amplitude\":-12.799999999999997,\"angle\":256.8},{\"amplitude\":-12.799999999999997,\"angle\":257.4},{\"amplitude\":-12.799999999999997,\"angle\":257.6},{\"amplitude\":-12.799999999999997,\"angle\":258},{\"amplitude\":-12.799999999999997,\"angle\":258.2},{\"amplitude\":-12.400000000000002,\"angle\":258.3},{\"amplitude\":-12.400000000000002,\"angle\":259},{\"amplitude\":-12.400000000000002,\"angle\":259.2},{\"amplitude\":-12.000000000000002,\"angle\":259.4},{\"amplitude\":-12.000000000000002,\"angle\":259.9},{\"amplitude\":-12.000000000000002,\"angle\":260.3},{\"amplitude\":-11.600000000000001,\"angle\":260.8},{\"amplitude\":-11.600000000000001,\"angle\":261.2},{\"amplitude\":-11.600000000000001,\"angle\":261.5},{\"amplitude\":-11.600000000000001,\"angle\":261.7},{\"amplitude\":-11.600000000000001,\"angle\":262},{\"amplitude\":-11.600000000000001,\"angle\":262.4},{\"amplitude\":-11.200000000000001,\"angle\":263.2},{\"amplitude\":-11.200000000000001,\"angle\":263.6},{\"amplitude\":-11.200000000000001,\"angle\":263.9},{\"amplitude\":-10.8,\"angle\":264.3},{\"amplitude\":-10.8,\"angle\":264.7},{\"amplitude\":-10.8,\"angle\":264.9},{\"amplitude\":-10.4,\"angle\":265.1},{\"amplitude\":-10.4,\"angle\":265.5},{\"amplitude\":-10.4,\"angle\":265.7},{\"amplitude\":-10.4,\"angle\":265.8},{\"amplitude\":-10.4,\"angle\":266.2},{\"amplitude\":-10.4,\"angle\":266.4},{\"amplitude\":-10.4,\"angle\":266.6},{\"amplitude\":-10.4,\"angle\":266.9},{\"amplitude\":-10.4,\"angle\":267.1},{\"amplitude\":-10.4,\"angle\":267.3},{\"amplitude\":-10,\"angle\":267.8},{\"amplitude\":-10,\"angle\":268},{\"amplitude\":-10,\"angle\":268.6},{\"amplitude\":-9.6,\"angle\":269.1},{\"amplitude\":-9.6,\"angle\":269.3},{\"amplitude\":-9.6,\"angle\":269.8},{\"amplitude\":-9.6,\"angle\":270.1},{\"amplitude\":-9.2,\"angle\":270.5},{\"amplitude\":-9.2,\"angle\":270.6},{\"amplitude\":-9.2,\"angle\":271.2},{\"amplitude\":-9.2,\"angle\":271.3},{\"amplitude\":-8.799999999999999,\"angle\":271.8},{\"amplitude\":-8.799999999999999,\"angle\":272.2},{\"amplitude\":-8.799999999999999,\"angle\":272.5},{\"amplitude\":-8.799999999999999,\"angle\":272.8},{\"amplitude\":-8.399999999999999,\"angle\":273.2},{\"amplitude\":-8.399999999999999,\"angle\":273.5},{\"amplitude\":-8.399999999999999,\"angle\":273.8},{\"amplitude\":-8.399999999999999,\"angle\":274},{\"amplitude\":-8.399999999999999,\"angle\":274.5},{\"amplitude\":-8.399999999999999,\"angle\":274.8},{\"amplitude\":-8.399999999999999,\"angle\":275.1},{\"amplitude\":-8.399999999999999,\"angle\":275.3},{\"amplitude\":-7.999999999999998,\"angle\":275.8},{\"amplitude\":-7.999999999999998,\"angle\":276.1},{\"amplitude\":-7.999999999999998,\"angle\":276.4},{\"amplitude\":-7.999999999999998,\"angle\":276.6},{\"amplitude\":-7.999999999999998,\"angle\":276.8},{\"amplitude\":-7.999999999999998,\"angle\":277.1},{\"amplitude\":-7.999999999999998,\"angle\":277.4},{\"amplitude\":-7.999999999999998,\"angle\":277.8},{\"amplitude\":-7.999999999999998,\"angle\":278.1},{\"amplitude\":-7.999999999999998,\"angle\":278.4},{\"amplitude\":-7.999999999999998,\"angle\":278.6},{\"amplitude\":-7.999999999999998,\"angle\":278.7},{\"amplitude\":-7.999999999999998,\"angle\":279.1},{\"amplitude\":-7.999999999999998,\"angle\":279.4},{\"amplitude\":-7.999999999999998,\"angle\":279.7},{\"amplitude\":-7.999999999999998,\"angle\":279.9},{\"amplitude\":-7.999999999999998,\"angle\":280.4},{\"amplitude\":-7.999999999999998,\"angle\":280.5},{\"amplitude\":-7.599999999999998,\"angle\":280.7},{\"amplitude\":-7.599999999999998,\"angle\":281.2},{\"amplitude\":-7.599999999999998,\"angle\":281.3},{\"amplitude\":-7.599999999999998,\"angle\":281.6},{\"amplitude\":-7.599999999999998,\"angle\":281.8},{\"amplitude\":-7.599999999999998,\"angle\":282},{\"amplitude\":-7.599999999999998,\"angle\":282.4},{\"amplitude\":-7.599999999999998,\"angle\":282.6},{\"amplitude\":-7.599999999999998,\"angle\":283.1},{\"amplitude\":-7.599999999999998,\"angle\":283.2},{\"amplitude\":-7.599999999999998,\"angle\":283.6},{\"amplitude\":-7.599999999999998,\"angle\":283.7},{\"amplitude\":-7.599999999999998,\"angle\":283.9},{\"amplitude\":-7.599999999999998,\"angle\":284.2},{\"amplitude\":-7.599999999999998,\"angle\":284.4},{\"amplitude\":-7.200000000000002,\"angle\":284.5},{\"amplitude\":-7.200000000000002,\"angle\":285},{\"amplitude\":-7.200000000000002,\"angle\":285.2},{\"amplitude\":-7.200000000000002,\"angle\":285.9},{\"amplitude\":-7.200000000000002,\"angle\":286.2},{\"amplitude\":-7.200000000000002,\"angle\":286.8},{\"amplitude\":-7.200000000000002,\"angle\":287.4},{\"amplitude\":-7.200000000000002,\"angle\":287.7},{\"amplitude\":-7.200000000000002,\"angle\":288},{\"amplitude\":-6.800000000000002,\"angle\":288.2},{\"amplitude\":-6.800000000000002,\"angle\":288.3},{\"amplitude\":-6.800000000000002,\"angle\":288.6},{\"amplitude\":-6.800000000000002,\"angle\":288.8},{\"amplitude\":-6.800000000000002,\"angle\":288.9},{\"amplitude\":-6.800000000000002,\"angle\":289.2},{\"amplitude\":-6.800000000000002,\"angle\":289.4},{\"amplitude\":-6.800000000000002,\"angle\":290},{\"amplitude\":-6.400000000000001,\"angle\":290.4},{\"amplitude\":-6.400000000000001,\"angle\":290.6},{\"amplitude\":-6.400000000000001,\"angle\":291.2},{\"amplitude\":-6.400000000000001,\"angle\":291.7},{\"amplitude\":-6.400000000000001,\"angle\":292},{\"amplitude\":-6.000000000000001,\"angle\":292.5},{\"amplitude\":-6.000000000000001,\"angle\":292.8},{\"amplitude\":-6.000000000000001,\"angle\":293},{\"amplitude\":-6.000000000000001,\"angle\":293.1},{\"amplitude\":-6.000000000000001,\"angle\":293.6},{\"amplitude\":-6.000000000000001,\"angle\":293.7},{\"amplitude\":-6.000000000000001,\"angle\":294},{\"amplitude\":-6.000000000000001,\"angle\":294.3},{\"amplitude\":-6.000000000000001,\"angle\":294.4},{\"amplitude\":-6.000000000000001,\"angle\":294.8},{\"amplitude\":-6.000000000000001,\"angle\":294.9},{\"amplitude\":-6.000000000000001,\"angle\":295.1},{\"amplitude\":-6.000000000000001,\"angle\":295.3},{\"amplitude\":-5.6000000000000005,\"angle\":295.5},{\"amplitude\":-6.000000000000001,\"angle\":295.7},{\"amplitude\":-5.6000000000000005,\"angle\":296},{\"amplitude\":-6.000000000000001,\"angle\":296.1},{\"amplitude\":-6.000000000000001,\"angle\":296.4},{\"amplitude\":-5.6000000000000005,\"angle\":296.8},{\"amplitude\":-5.6000000000000005,\"angle\":296.9},{\"amplitude\":-5.6000000000000005,\"angle\":297.4},{\"amplitude\":-5.6000000000000005,\"angle\":297.5},{\"amplitude\":-5.6000000000000005,\"angle\":297.8},{\"amplitude\":-5.2,\"angle\":298.1},{\"amplitude\":-5.2,\"angle\":298.4},{\"amplitude\":-5.2,\"angle\":298.7},{\"amplitude\":-5.2,\"angle\":299.1},{\"amplitude\":-5.2,\"angle\":299.4},{\"amplitude\":-5.2,\"angle\":299.6},{\"amplitude\":-5.2,\"angle\":299.8},{\"amplitude\":-5.2,\"angle\":299.9},{\"amplitude\":-5.2,\"angle\":300.2},{\"amplitude\":-4.8,\"angle\":300.5},{\"amplitude\":-4.8,\"angle\":300.8},{\"amplitude\":-4.8,\"angle\":301.1},{\"amplitude\":-4.8,\"angle\":301.5},{\"amplitude\":-4.8,\"angle\":302.1},{\"amplitude\":-4.8,\"angle\":302.2},{\"amplitude\":-4.8,\"angle\":302.3},{\"amplitude\":-4.8,\"angle\":303.1},{\"amplitude\":-4.8,\"angle\":303.6},{\"amplitude\":-4.8,\"angle\":304},{\"amplitude\":-4.8,\"angle\":304.3},{\"amplitude\":-4.8,\"angle\":304.8},{\"amplitude\":-4.8,\"angle\":305},{\"amplitude\":-4.8,\"angle\":305.7},{\"amplitude\":-4.3999999999999995,\"angle\":306.2},{\"amplitude\":-4.8,\"angle\":306.5},{\"amplitude\":-4.8,\"angle\":306.7},{\"amplitude\":-4.8,\"angle\":307},{\"amplitude\":-4.3999999999999995,\"angle\":307.1},{\"amplitude\":-4.8,\"angle\":307.3},{\"amplitude\":-4.8,\"angle\":307.4},{\"amplitude\":-4.8,\"angle\":308},{\"amplitude\":-4.8,\"angle\":308.1},{\"amplitude\":-4.8,\"angle\":308.5},{\"amplitude\":-4.3999999999999995,\"angle\":308.8},{\"amplitude\":-4.3999999999999995,\"angle\":309.1},{\"amplitude\":-4.8,\"angle\":309.3},{\"amplitude\":-4.8,\"angle\":309.7},{\"amplitude\":-4.8,\"angle\":310},{\"amplitude\":-4.8,\"angle\":310.4},{\"amplitude\":-4.3999999999999995,\"angle\":310.8},{\"amplitude\":-4.3999999999999995,\"angle\":311.6},{\"amplitude\":-4.3999999999999995,\"angle\":311.8},{\"amplitude\":-4.3999999999999995,\"angle\":312.2},{\"amplitude\":-4.3999999999999995,\"angle\":312.6},{\"amplitude\":-4.3999999999999995,\"angle\":312.8},{\"amplitude\":-4.3999999999999995,\"angle\":313},{\"amplitude\":-4.3999999999999995,\"angle\":313.2},{\"amplitude\":-4.3999999999999995,\"angle\":313.7},{\"amplitude\":-4.3999999999999995,\"angle\":313.9},{\"amplitude\":-4.3999999999999995,\"angle\":314.2},{\"amplitude\":-4.3999999999999995,\"angle\":314.4},{\"amplitude\":-4.3999999999999995,\"angle\":314.7},{\"amplitude\":-3.999999999999999,\"angle\":314.9},{\"amplitude\":-3.999999999999999,\"angle\":315.3},{\"amplitude\":-3.999999999999999,\"angle\":315.8},{\"amplitude\":-3.999999999999999,\"angle\":316},{\"amplitude\":-3.999999999999999,\"angle\":316.3},{\"amplitude\":-3.999999999999999,\"angle\":316.4},{\"amplitude\":-3.999999999999999,\"angle\":316.5},{\"amplitude\":-3.5999999999999988,\"angle\":316.7},{\"amplitude\":-3.999999999999999,\"angle\":316.9},{\"amplitude\":-3.5999999999999988,\"angle\":317},{\"amplitude\":-3.5999999999999988,\"angle\":317.2},{\"amplitude\":-3.5999999999999988,\"angle\":317.4},{\"amplitude\":-3.5999999999999988,\"angle\":317.6},{\"amplitude\":-3.5999999999999988,\"angle\":317.9},{\"amplitude\":-3.5999999999999988,\"angle\":318.2},{\"amplitude\":-3.5999999999999988,\"angle\":318.7},{\"amplitude\":-3.5999999999999988,\"angle\":319.3},{\"amplitude\":-3.5999999999999988,\"angle\":319.9},{\"amplitude\":-3.5999999999999988,\"angle\":320.1},{\"amplitude\":-3.5999999999999988,\"angle\":320.4},{\"amplitude\":-3.5999999999999988,\"angle\":320.5},{\"amplitude\":-3.5999999999999988,\"angle\":320.7},{\"amplitude\":-3.5999999999999988,\"angle\":320.9},{\"amplitude\":-3.1999999999999984,\"angle\":321},{\"amplitude\":-3.1999999999999984,\"angle\":321.6},{\"amplitude\":-3.1999999999999984,\"angle\":321.8},{\"amplitude\":-3.1999999999999984,\"angle\":322.2},{\"amplitude\":-3.1999999999999984,\"angle\":322.4},{\"amplitude\":-3.1999999999999984,\"angle\":322.6},{\"amplitude\":-3.1999999999999984,\"angle\":322.8},{\"amplitude\":-3.1999999999999984,\"angle\":323.1},{\"amplitude\":-3.1999999999999984,\"angle\":323.3},{\"amplitude\":-2.799999999999998,\"angle\":323.7},{\"amplitude\":-2.799999999999998,\"angle\":324.1},{\"amplitude\":-2.799999999999998,\"angle\":324.2},{\"amplitude\":-2.799999999999998,\"angle\":324.4},{\"amplitude\":-2.799999999999998,\"angle\":324.9},{\"amplitude\":-2.799999999999998,\"angle\":325.2},{\"amplitude\":-2.400000000000002,\"angle\":325.5},{\"amplitude\":-2.400000000000002,\"angle\":325.6},{\"amplitude\":-2.400000000000002,\"angle\":325.9},{\"amplitude\":-2.400000000000002,\"angle\":326.2},{\"amplitude\":-2.400000000000002,\"angle\":326.8},{\"amplitude\":-2.400000000000002,\"angle\":327},{\"amplitude\":-2.0000000000000018,\"angle\":327.3},{\"amplitude\":-2.0000000000000018,\"angle\":327.7},{\"amplitude\":-2.0000000000000018,\"angle\":328.2},{\"amplitude\":-1.6000000000000014,\"angle\":328.6},{\"amplitude\":-1.6000000000000014,\"angle\":328.7},{\"amplitude\":-1.6000000000000014,\"angle\":328.9},{\"amplitude\":-1.6000000000000014,\"angle\":329},{\"amplitude\":-1.6000000000000014,\"angle\":329.2},{\"amplitude\":-1.200000000000001,\"angle\":329.8},{\"amplitude\":-1.200000000000001,\"angle\":330.3},{\"amplitude\":-1.200000000000001,\"angle\":330.4},{\"amplitude\":-1.200000000000001,\"angle\":330.6},{\"amplitude\":-1.200000000000001,\"angle\":331},{\"amplitude\":-0.8000000000000007,\"angle\":331.2},{\"amplitude\":-1.200000000000001,\"angle\":331.3},{\"amplitude\":-1.200000000000001,\"angle\":331.8},{\"amplitude\":-0.8000000000000007,\"angle\":331.9},{\"amplitude\":-0.8000000000000007,\"angle\":332},{\"amplitude\":-0.8000000000000007,\"angle\":332.2},{\"amplitude\":-0.8000000000000007,\"angle\":332.6},{\"amplitude\":-0.8000000000000007,\"angle\":332.7},{\"amplitude\":-0.8000000000000007,\"angle\":332.9},{\"amplitude\":-0.8000000000000007,\"angle\":333.2},{\"amplitude\":-0.8000000000000007,\"angle\":333.3},{\"amplitude\":-0.8000000000000007,\"angle\":333.8},{\"amplitude\":-0.8000000000000007,\"angle\":334},{\"amplitude\":-0.8000000000000007,\"angle\":334.8},{\"amplitude\":-0.8000000000000007,\"angle\":335.2},{\"amplitude\":-0.8000000000000007,\"angle\":335.6},{\"amplitude\":-0.8000000000000007,\"angle\":335.7},{\"amplitude\":-0.40000000000000036,\"angle\":336},{\"amplitude\":-0.40000000000000036,\"angle\":336.3},{\"amplitude\":-0.8000000000000007,\"angle\":336.4},{\"amplitude\":-0.40000000000000036,\"angle\":336.6},{\"amplitude\":-0.8000000000000007,\"angle\":336.8},{\"amplitude\":-0.40000000000000036,\"angle\":337.2},{\"amplitude\":-0.40000000000000036,\"angle\":337.5},{\"amplitude\":-0.40000000000000036,\"angle\":337.7},{\"amplitude\":-0.8000000000000007,\"angle\":338},{\"amplitude\":-0.8000000000000007,\"angle\":338.1},{\"amplitude\":-0.40000000000000036,\"angle\":338.7},{\"amplitude\":-0.40000000000000036,\"angle\":339.2},{\"amplitude\":-0.40000000000000036,\"angle\":339.3},{\"amplitude\":-0.40000000000000036,\"angle\":339.4},{\"amplitude\":-0.40000000000000036,\"angle\":339.8},{\"amplitude\":-0.40000000000000036,\"angle\":340},{\"amplitude\":-0.40000000000000036,\"angle\":340.3},{\"amplitude\":-0.40000000000000036,\"angle\":340.5},{\"amplitude\":-0.40000000000000036,\"angle\":340.9},{\"amplitude\":-0.40000000000000036,\"angle\":341},{\"amplitude\":-0.40000000000000036,\"angle\":341.2},{\"amplitude\":-0.40000000000000036,\"angle\":341.8},{\"amplitude\":-0.40000000000000036,\"angle\":342.3},{\"amplitude\":-0.40000000000000036,\"angle\":342.7},{\"amplitude\":-0.40000000000000036,\"angle\":342.9},{\"amplitude\":-0.40000000000000036,\"angle\":343.3},{\"amplitude\":-0.40000000000000036,\"angle\":343.4},{\"amplitude\":-0.40000000000000036,\"angle\":343.5},{\"amplitude\":-0.40000000000000036,\"angle\":343.9},{\"amplitude\":-0.40000000000000036,\"angle\":344},{\"amplitude\":-0.8000000000000007,\"angle\":344.4},{\"amplitude\":-0.8000000000000007,\"angle\":344.9},{\"amplitude\":-0.8000000000000007,\"angle\":345.3},{\"amplitude\":-0.8000000000000007,\"angle\":345.5},{\"amplitude\":-0.8000000000000007,\"angle\":345.8},{\"amplitude\":-0.8000000000000007,\"angle\":346.1},{\"amplitude\":-0.8000000000000007,\"angle\":346.5},{\"amplitude\":-0.8000000000000007,\"angle\":346.9},{\"amplitude\":-0.8000000000000007,\"angle\":347.2},{\"amplitude\":-0.8000000000000007,\"angle\":347.6},{\"amplitude\":-0.8000000000000007,\"angle\":348},{\"amplitude\":-0.8000000000000007,\"angle\":348.2},{\"amplitude\":-0.8000000000000007,\"angle\":348.3},{\"amplitude\":-0.8000000000000007,\"angle\":348.6},{\"amplitude\":-0.8000000000000007,\"angle\":348.7},{\"amplitude\":-0.8000000000000007,\"angle\":348.8},{\"amplitude\":-0.8000000000000007,\"angle\":349.2},{\"amplitude\":-0.8000000000000007,\"angle\":349.6},{\"amplitude\":-0.8000000000000007,\"angle\":350},{\"amplitude\":-0.8000000000000007,\"angle\":350.4},{\"amplitude\":-0.8000000000000007,\"angle\":350.8},{\"amplitude\":-0.8000000000000007,\"angle\":350.9},{\"amplitude\":-0.8000000000000007,\"angle\":351.1},{\"amplitude\":-0.8000000000000007,\"angle\":351.5},{\"amplitude\":-0.8000000000000007,\"angle\":351.6},{\"amplitude\":-0.8000000000000007,\"angle\":351.9},{\"amplitude\":-0.40000000000000036,\"angle\":352.1},{\"amplitude\":-0.8000000000000007,\"angle\":352.5},{\"amplitude\":-0.40000000000000036,\"angle\":352.6},{\"amplitude\":-0.40000000000000036,\"angle\":353},{\"amplitude\":-0.40000000000000036,\"angle\":353.6},{\"amplitude\":-0.40000000000000036,\"angle\":354.8},{\"amplitude\":-0.40000000000000036,\"angle\":355.3},{\"amplitude\":-0.40000000000000036,\"angle\":355.7},{\"amplitude\":-0.40000000000000036,\"angle\":356},{\"amplitude\":-0.40000000000000036,\"angle\":356.4},{\"amplitude\":0,\"angle\":356.5},{\"amplitude\":0,\"angle\":356.8},{\"amplitude\":0,\"angle\":356.9},{\"amplitude\":0,\"angle\":357.1},{\"amplitude\":0,\"angle\":357.3},{\"amplitude\":0,\"angle\":357.6},{\"amplitude\":-0.40000000000000036,\"angle\":358},{\"amplitude\":-0.40000000000000036,\"angle\":358.1},{\"amplitude\":-0.40000000000000036,\"angle\":358.5},{\"amplitude\":-0.40000000000000036,\"angle\":359.1},{\"amplitude\":-0.40000000000000036,\"angle\":360}]\n\n },\n {\n name: '4KHz',\n data: [{\"angle\":0,\"amplitude\":0},{\"angle\":0.8,\"amplitude\":0},{\"angle\":0.9,\"amplitude\":0},{\"angle\":1.5,\"amplitude\":0},{\"angle\":2,\"amplitude\":0},{\"angle\":2.4,\"amplitude\":0},{\"angle\":2.5,\"amplitude\":0},{\"angle\":2.7,\"amplitude\":0},{\"angle\":2.9,\"amplitude\":-0.40000000000000036},{\"angle\":3.1,\"amplitude\":-0.40000000000000036},{\"angle\":3.2,\"amplitude\":-0.40000000000000036},{\"angle\":3.5,\"amplitude\":-0.40000000000000036},{\"angle\":3.6,\"amplitude\":-0.40000000000000036},{\"angle\":4.2,\"amplitude\":-0.40000000000000036},{\"angle\":4.3,\"amplitude\":-0.40000000000000036},{\"angle\":4.7,\"amplitude\":-0.40000000000000036},{\"angle\":4.8,\"amplitude\":-0.40000000000000036},{\"angle\":5.2,\"amplitude\":-0.40000000000000036},{\"angle\":5.4,\"amplitude\":-0.40000000000000036},{\"angle\":5.8,\"amplitude\":-0.8000000000000007},{\"angle\":5.9,\"amplitude\":-0.8000000000000007},{\"angle\":6.3,\"amplitude\":-0.8000000000000007},{\"angle\":6.5,\"amplitude\":-0.8000000000000007},{\"angle\":6.9,\"amplitude\":-0.8000000000000007},{\"angle\":7,\"amplitude\":-0.8000000000000007},{\"angle\":7.4,\"amplitude\":-0.8000000000000007},{\"angle\":7.6,\"amplitude\":-0.8000000000000007},{\"angle\":8,\"amplitude\":-0.8000000000000007},{\"angle\":8.4,\"amplitude\":-0.8000000000000007},{\"angle\":8.6,\"amplitude\":-0.8000000000000007},{\"angle\":9,\"amplitude\":-0.8000000000000007},{\"angle\":9.3,\"amplitude\":-1.200000000000001},{\"angle\":9.6,\"amplitude\":-1.200000000000001},{\"angle\":9.8,\"amplitude\":-1.200000000000001},{\"angle\":10.1,\"amplitude\":-1.200000000000001},{\"angle\":10.2,\"amplitude\":-0.8000000000000007},{\"angle\":10.4,\"amplitude\":-0.8000000000000007},{\"angle\":10.8,\"amplitude\":-0.8000000000000007},{\"angle\":10.9,\"amplitude\":-0.8000000000000007},{\"angle\":11.3,\"amplitude\":-0.8000000000000007},{\"angle\":11.4,\"amplitude\":-0.8000000000000007},{\"angle\":11.7,\"amplitude\":-0.8000000000000007},{\"angle\":11.9,\"amplitude\":-0.8000000000000007},{\"angle\":12,\"amplitude\":-0.8000000000000007},{\"angle\":12.3,\"amplitude\":-1.200000000000001},{\"angle\":12.6,\"amplitude\":-1.200000000000001},{\"angle\":12.9,\"amplitude\":-0.8000000000000007},{\"angle\":13.1,\"amplitude\":-1.200000000000001},{\"angle\":13.5,\"amplitude\":-0.8000000000000007},{\"angle\":14,\"amplitude\":-1.200000000000001},{\"angle\":14.2,\"amplitude\":-1.200000000000001},{\"angle\":14.3,\"amplitude\":-1.200000000000001},{\"angle\":14.6,\"amplitude\":-1.200000000000001},{\"angle\":14.7,\"amplitude\":-1.200000000000001},{\"angle\":15.1,\"amplitude\":-0.8000000000000007},{\"angle\":15.2,\"amplitude\":-0.8000000000000007},{\"angle\":15.4,\"amplitude\":-1.200000000000001},{\"angle\":15.6,\"amplitude\":-0.8000000000000007},{\"angle\":15.8,\"amplitude\":-0.8000000000000007},{\"angle\":15.9,\"amplitude\":-0.8000000000000007},{\"angle\":16.2,\"amplitude\":-0.8000000000000007},{\"angle\":16.5,\"amplitude\":-1.200000000000001},{\"angle\":16.8,\"amplitude\":-1.200000000000001},{\"angle\":16.9,\"amplitude\":-1.200000000000001},{\"angle\":17.1,\"amplitude\":-1.200000000000001},{\"angle\":17.5,\"amplitude\":-1.200000000000001},{\"angle\":18,\"amplitude\":-1.200000000000001},{\"angle\":18.3,\"amplitude\":-1.200000000000001},{\"angle\":18.6,\"amplitude\":-1.200000000000001},{\"angle\":18.7,\"amplitude\":-1.200000000000001},{\"angle\":19.1,\"amplitude\":-1.200000000000001},{\"angle\":19.2,\"amplitude\":-0.8000000000000007},{\"angle\":19.6,\"amplitude\":-0.8000000000000007},{\"angle\":20.2,\"amplitude\":-1.200000000000001},{\"angle\":20.4,\"amplitude\":-1.200000000000001},{\"angle\":20.5,\"amplitude\":-1.200000000000001},{\"angle\":20.8,\"amplitude\":-0.8000000000000007},{\"angle\":20.9,\"amplitude\":-0.8000000000000007},{\"angle\":21.1,\"amplitude\":-1.200000000000001},{\"angle\":21.3,\"amplitude\":-0.8000000000000007},{\"angle\":21.6,\"amplitude\":-1.200000000000001},{\"angle\":21.7,\"amplitude\":-1.200000000000001},{\"angle\":22,\"amplitude\":-1.200000000000001},{\"angle\":22.1,\"amplitude\":-1.200000000000001},{\"angle\":22.3,\"amplitude\":-1.200000000000001},{\"angle\":22.8,\"amplitude\":-1.200000000000001},{\"angle\":23,\"amplitude\":-1.200000000000001},{\"angle\":23.2,\"amplitude\":-1.200000000000001},{\"angle\":23.6,\"amplitude\":-1.200000000000001},{\"angle\":23.9,\"amplitude\":-1.200000000000001},{\"angle\":24.2,\"amplitude\":-1.200000000000001},{\"angle\":24.5,\"amplitude\":-1.200000000000001},{\"angle\":25.1,\"amplitude\":-1.200000000000001},{\"angle\":25.3,\"amplitude\":-1.200000000000001},{\"angle\":25.9,\"amplitude\":-1.200000000000001},{\"angle\":26.5,\"amplitude\":-1.200000000000001},{\"angle\":26.7,\"amplitude\":-1.200000000000001},{\"angle\":27.2,\"amplitude\":-1.200000000000001},{\"angle\":27.3,\"amplitude\":-1.200000000000001},{\"angle\":27.6,\"amplitude\":-1.200000000000001},{\"angle\":27.7,\"amplitude\":-1.200000000000001},{\"angle\":27.8,\"amplitude\":-1.200000000000001},{\"angle\":28.3,\"amplitude\":-1.200000000000001},{\"angle\":28.7,\"amplitude\":-1.200000000000001},{\"angle\":29.1,\"amplitude\":-1.200000000000001},{\"angle\":29.5,\"amplitude\":-1.200000000000001},{\"angle\":29.8,\"amplitude\":-1.200000000000001},{\"angle\":30.2,\"amplitude\":-1.200000000000001},{\"angle\":30.5,\"amplitude\":-1.6000000000000014},{\"angle\":30.9,\"amplitude\":-1.200000000000001},{\"angle\":31.3,\"amplitude\":-1.200000000000001},{\"angle\":31.6,\"amplitude\":-1.6000000000000014},{\"angle\":32.1,\"amplitude\":-1.6000000000000014},{\"angle\":32.2,\"amplitude\":-1.6000000000000014},{\"angle\":32.4,\"amplitude\":-1.6000000000000014},{\"angle\":32.5,\"amplitude\":-1.6000000000000014},{\"angle\":33,\"amplitude\":-1.6000000000000014},{\"angle\":33.1,\"amplitude\":-2.0000000000000018},{\"angle\":33.7,\"amplitude\":-2.400000000000002},{\"angle\":33.8,\"amplitude\":-2.400000000000002},{\"angle\":34,\"amplitude\":-2.400000000000002},{\"angle\":34.1,\"amplitude\":-2.400000000000002},{\"angle\":34.4,\"amplitude\":-2.400000000000002},{\"angle\":34.5,\"amplitude\":-2.400000000000002},{\"angle\":34.8,\"amplitude\":-2.799999999999998},{\"angle\":34.9,\"amplitude\":-2.799999999999998},{\"angle\":35,\"amplitude\":-2.799999999999998},{\"angle\":35.3,\"amplitude\":-2.799999999999998},{\"angle\":35.6,\"amplitude\":-2.799999999999998},{\"angle\":35.9,\"amplitude\":-3.1999999999999984},{\"angle\":36,\"amplitude\":-3.1999999999999984},{\"angle\":36.1,\"amplitude\":-3.1999999999999984},{\"angle\":36.6,\"amplitude\":-3.1999999999999984},{\"angle\":36.7,\"amplitude\":-3.1999999999999984},{\"angle\":36.9,\"amplitude\":-3.1999999999999984},{\"angle\":37,\"amplitude\":-3.1999999999999984},{\"angle\":37.4,\"amplitude\":-3.1999999999999984},{\"angle\":37.5,\"amplitude\":-3.1999999999999984},{\"angle\":37.7,\"amplitude\":-3.1999999999999984},{\"angle\":37.9,\"amplitude\":-3.5999999999999988},{\"angle\":38,\"amplitude\":-3.5999999999999988},{\"angle\":38.1,\"amplitude\":-3.5999999999999988},{\"angle\":38.4,\"amplitude\":-3.5999999999999988},{\"angle\":38.7,\"amplitude\":-3.5999999999999988},{\"angle\":38.9,\"amplitude\":-3.5999999999999988},{\"angle\":39,\"amplitude\":-3.5999999999999988},{\"angle\":39.4,\"amplitude\":-3.5999999999999988},{\"angle\":39.5,\"amplitude\":-3.5999999999999988},{\"angle\":39.6,\"amplitude\":-3.5999999999999988},{\"angle\":40.2,\"amplitude\":-3.5999999999999988},{\"angle\":40.3,\"amplitude\":-3.5999999999999988},{\"angle\":40.4,\"amplitude\":-3.5999999999999988},{\"angle\":40.6,\"amplitude\":-3.5999999999999988},{\"angle\":40.8,\"amplitude\":-3.999999999999999},{\"angle\":41.3,\"amplitude\":-3.999999999999999},{\"angle\":41.6,\"amplitude\":-3.999999999999999},{\"angle\":42.1,\"amplitude\":-3.999999999999999},{\"angle\":42.2,\"amplitude\":-3.999999999999999},{\"angle\":42.4,\"amplitude\":-3.999999999999999},{\"angle\":42.5,\"amplitude\":-3.999999999999999},{\"angle\":42.7,\"amplitude\":-3.999999999999999},{\"angle\":42.9,\"amplitude\":-3.999999999999999},{\"angle\":43.1,\"amplitude\":-3.999999999999999},{\"angle\":43.3,\"amplitude\":-3.999999999999999},{\"angle\":43.5,\"amplitude\":-3.999999999999999},{\"angle\":43.9,\"amplitude\":-3.999999999999999},{\"angle\":44.1,\"amplitude\":-3.999999999999999},{\"angle\":44.3,\"amplitude\":-3.999999999999999},{\"angle\":44.7,\"amplitude\":-3.999999999999999},{\"angle\":44.8,\"amplitude\":-3.999999999999999},{\"angle\":45,\"amplitude\":-3.999999999999999},{\"angle\":45.2,\"amplitude\":-3.999999999999999},{\"angle\":45.7,\"amplitude\":-3.999999999999999},{\"angle\":45.8,\"amplitude\":-3.999999999999999},{\"angle\":46,\"amplitude\":-3.999999999999999},{\"angle\":46.5,\"amplitude\":-3.999999999999999},{\"angle\":46.8,\"amplitude\":-3.999999999999999},{\"angle\":47.2,\"amplitude\":-3.999999999999999},{\"angle\":47.3,\"amplitude\":-3.999999999999999},{\"angle\":47.4,\"amplitude\":-3.999999999999999},{\"angle\":47.7,\"amplitude\":-3.999999999999999},{\"angle\":48.1,\"amplitude\":-3.999999999999999},{\"angle\":48.3,\"amplitude\":-3.999999999999999},{\"angle\":48.4,\"amplitude\":-3.999999999999999},{\"angle\":48.7,\"amplitude\":-3.999999999999999},{\"angle\":48.8,\"amplitude\":-4.3999999999999995},{\"angle\":49.4,\"amplitude\":-3.999999999999999},{\"angle\":49.5,\"amplitude\":-4.3999999999999995},{\"angle\":49.8,\"amplitude\":-4.3999999999999995},{\"angle\":50.3,\"amplitude\":-4.3999999999999995},{\"angle\":50.4,\"amplitude\":-3.999999999999999},{\"angle\":50.7,\"amplitude\":-4.3999999999999995},{\"angle\":50.8,\"amplitude\":-4.3999999999999995},{\"angle\":50.9,\"amplitude\":-4.3999999999999995},{\"angle\":51.3,\"amplitude\":-4.3999999999999995},{\"angle\":51.5,\"amplitude\":-4.3999999999999995},{\"angle\":51.6,\"amplitude\":-4.3999999999999995},{\"angle\":51.7,\"amplitude\":-4.3999999999999995},{\"angle\":52.1,\"amplitude\":-4.3999999999999995},{\"angle\":52.4,\"amplitude\":-4.3999999999999995},{\"angle\":52.5,\"amplitude\":-4.3999999999999995},{\"angle\":53,\"amplitude\":-4.3999999999999995},{\"angle\":53.4,\"amplitude\":-4.8},{\"angle\":53.7,\"amplitude\":-4.3999999999999995},{\"angle\":53.9,\"amplitude\":-4.3999999999999995},{\"angle\":54.2,\"amplitude\":-4.8},{\"angle\":54.7,\"amplitude\":-4.3999999999999995},{\"angle\":55.1,\"amplitude\":-4.3999999999999995},{\"angle\":55.2,\"amplitude\":-4.8},{\"angle\":56,\"amplitude\":-4.8},{\"angle\":56.2,\"amplitude\":-4.8},{\"angle\":56.4,\"amplitude\":-4.8},{\"angle\":56.6,\"amplitude\":-4.8},{\"angle\":56.9,\"amplitude\":-4.8},{\"angle\":57,\"amplitude\":-4.8},{\"angle\":57.2,\"amplitude\":-4.8},{\"angle\":57.6,\"amplitude\":-4.8},{\"angle\":57.7,\"amplitude\":-4.8},{\"angle\":57.8,\"amplitude\":-4.8},{\"angle\":57.9,\"amplitude\":-4.8},{\"angle\":58.2,\"amplitude\":-4.8},{\"angle\":58.3,\"amplitude\":-4.8},{\"angle\":58.8,\"amplitude\":-5.2},{\"angle\":59.2,\"amplitude\":-4.8},{\"angle\":59.6,\"amplitude\":-5.2},{\"angle\":60.2,\"amplitude\":-5.2},{\"angle\":60.3,\"amplitude\":-5.2},{\"angle\":60.6,\"amplitude\":-5.2},{\"angle\":60.8,\"amplitude\":-5.6000000000000005},{\"angle\":61.2,\"amplitude\":-5.6000000000000005},{\"angle\":61.8,\"amplitude\":-5.6000000000000005},{\"angle\":62,\"amplitude\":-5.6000000000000005},{\"angle\":62.1,\"amplitude\":-5.6000000000000005},{\"angle\":62.5,\"amplitude\":-5.6000000000000005},{\"angle\":62.7,\"amplitude\":-5.6000000000000005},{\"angle\":63,\"amplitude\":-5.6000000000000005},{\"angle\":63.1,\"amplitude\":-5.6000000000000005},{\"angle\":63.4,\"amplitude\":-5.6000000000000005},{\"angle\":63.6,\"amplitude\":-6.000000000000001},{\"angle\":63.8,\"amplitude\":-6.000000000000001},{\"angle\":63.9,\"amplitude\":-6.000000000000001},{\"angle\":64.3,\"amplitude\":-6.000000000000001},{\"angle\":64.5,\"amplitude\":-6.000000000000001},{\"angle\":64.7,\"amplitude\":-6.000000000000001},{\"angle\":65.2,\"amplitude\":-6.000000000000001},{\"angle\":65.4,\"amplitude\":-6.000000000000001},{\"angle\":66.1,\"amplitude\":-6.000000000000001},{\"angle\":66.4,\"amplitude\":-6.400000000000001},{\"angle\":66.8,\"amplitude\":-6.400000000000001},{\"angle\":66.9,\"amplitude\":-6.400000000000001},{\"angle\":67.3,\"amplitude\":-6.400000000000001},{\"angle\":67.9,\"amplitude\":-6.400000000000001},{\"angle\":68.5,\"amplitude\":-6.800000000000002},{\"angle\":68.8,\"amplitude\":-6.800000000000002},{\"angle\":69.4,\"amplitude\":-6.400000000000001},{\"angle\":69.8,\"amplitude\":-6.800000000000002},{\"angle\":70.4,\"amplitude\":-6.800000000000002},{\"angle\":70.6,\"amplitude\":-6.800000000000002},{\"angle\":70.8,\"amplitude\":-6.800000000000002},{\"angle\":71.1,\"amplitude\":-6.800000000000002},{\"angle\":71.8,\"amplitude\":-6.800000000000002},{\"angle\":71.9,\"amplitude\":-6.800000000000002},{\"angle\":72.5,\"amplitude\":-6.800000000000002},{\"angle\":72.7,\"amplitude\":-6.800000000000002},{\"angle\":73.1,\"amplitude\":-7.200000000000002},{\"angle\":73.8,\"amplitude\":-7.200000000000002},{\"angle\":73.9,\"amplitude\":-7.200000000000002},{\"angle\":74.2,\"amplitude\":-7.200000000000002},{\"angle\":74.5,\"amplitude\":-7.200000000000002},{\"angle\":75,\"amplitude\":-7.200000000000002},{\"angle\":75.1,\"amplitude\":-7.200000000000002},{\"angle\":75.5,\"amplitude\":-7.200000000000002},{\"angle\":75.6,\"amplitude\":-7.599999999999998},{\"angle\":75.8,\"amplitude\":-7.599999999999998},{\"angle\":76.1,\"amplitude\":-7.599999999999998},{\"angle\":76.2,\"amplitude\":-7.599999999999998},{\"angle\":76.4,\"amplitude\":-7.599999999999998},{\"angle\":77,\"amplitude\":-7.599999999999998},{\"angle\":77.7,\"amplitude\":-7.599999999999998},{\"angle\":78.2,\"amplitude\":-7.599999999999998},{\"angle\":78.6,\"amplitude\":-7.999999999999998},{\"angle\":79.3,\"amplitude\":-7.999999999999998},{\"angle\":79.4,\"amplitude\":-7.999999999999998},{\"angle\":79.9,\"amplitude\":-7.999999999999998},{\"angle\":80.1,\"amplitude\":-7.999999999999998},{\"angle\":80.9,\"amplitude\":-7.999999999999998},{\"angle\":81.4,\"amplitude\":-7.999999999999998},{\"angle\":81.6,\"amplitude\":-7.999999999999998},{\"angle\":81.9,\"amplitude\":-7.999999999999998},{\"angle\":82.1,\"amplitude\":-7.999999999999998},{\"angle\":82.9,\"amplitude\":-7.999999999999998},{\"angle\":83.2,\"amplitude\":-8.399999999999999},{\"angle\":83.4,\"amplitude\":-8.399999999999999},{\"angle\":83.5,\"amplitude\":-8.399999999999999},{\"angle\":84.2,\"amplitude\":-8.399999999999999},{\"angle\":84.5,\"amplitude\":-8.399999999999999},{\"angle\":84.7,\"amplitude\":-8.399999999999999},{\"angle\":84.9,\"amplitude\":-8.399999999999999},{\"angle\":85.2,\"amplitude\":-8.399999999999999},{\"angle\":85.4,\"amplitude\":-8.399999999999999},{\"angle\":85.5,\"amplitude\":-8.399999999999999},{\"angle\":85.9,\"amplitude\":-8.399999999999999},{\"angle\":86,\"amplitude\":-8.399999999999999},{\"angle\":86.2,\"amplitude\":-8.399999999999999},{\"angle\":86.5,\"amplitude\":-8.399999999999999},{\"angle\":86.8,\"amplitude\":-8.799999999999999},{\"angle\":87.8,\"amplitude\":-8.799999999999999},{\"angle\":88,\"amplitude\":-9.2},{\"angle\":88.5,\"amplitude\":-9.2},{\"angle\":89.3,\"amplitude\":-9.2},{\"angle\":89.9,\"amplitude\":-9.6},{\"angle\":90,\"amplitude\":-9.6},{\"angle\":90.6,\"amplitude\":-9.6},{\"angle\":90.7,\"amplitude\":-9.6},{\"angle\":90.9,\"amplitude\":-10},{\"angle\":91.4,\"amplitude\":-10},{\"angle\":91.6,\"amplitude\":-10},{\"angle\":92,\"amplitude\":-10},{\"angle\":92.2,\"amplitude\":-10},{\"angle\":92.3,\"amplitude\":-10},{\"angle\":92.7,\"amplitude\":-10.4},{\"angle\":92.9,\"amplitude\":-10.4},{\"angle\":93.1,\"amplitude\":-10.4},{\"angle\":93.4,\"amplitude\":-10.4},{\"angle\":93.6,\"amplitude\":-10.4},{\"angle\":93.8,\"amplitude\":-10.4},{\"angle\":94.2,\"amplitude\":-10.8},{\"angle\":94.4,\"amplitude\":-10.8},{\"angle\":94.9,\"amplitude\":-10.8},{\"angle\":95.1,\"amplitude\":-10.8},{\"angle\":95.3,\"amplitude\":-11.200000000000001},{\"angle\":95.7,\"amplitude\":-11.200000000000001},{\"angle\":95.9,\"amplitude\":-11.200000000000001},{\"angle\":96.1,\"amplitude\":-11.200000000000001},{\"angle\":96.5,\"amplitude\":-11.200000000000001},{\"angle\":96.7,\"amplitude\":-11.200000000000001},{\"angle\":96.9,\"amplitude\":-11.600000000000001},{\"angle\":97.3,\"amplitude\":-11.600000000000001},{\"angle\":97.5,\"amplitude\":-11.600000000000001},{\"angle\":97.7,\"amplitude\":-11.600000000000001},{\"angle\":98.1,\"amplitude\":-11.600000000000001},{\"angle\":98.3,\"amplitude\":-12.000000000000002},{\"angle\":98.6,\"amplitude\":-12.000000000000002},{\"angle\":99,\"amplitude\":-12.000000000000002},{\"angle\":99.2,\"amplitude\":-12.000000000000002},{\"angle\":99.4,\"amplitude\":-12.400000000000002},{\"angle\":99.5,\"amplitude\":-12.400000000000002},{\"angle\":99.8,\"amplitude\":-12.400000000000002},{\"angle\":99.9,\"amplitude\":-12.400000000000002},{\"angle\":100.1,\"amplitude\":-12.799999999999997},{\"angle\":100.2,\"amplitude\":-12.799999999999997},{\"angle\":100.8,\"amplitude\":-12.799999999999997},{\"angle\":101,\"amplitude\":-12.799999999999997},{\"angle\":101.1,\"amplitude\":-12.799999999999997},{\"angle\":101.7,\"amplitude\":-13.2},{\"angle\":101.8,\"amplitude\":-13.2},{\"angle\":102,\"amplitude\":-13.2},{\"angle\":102.7,\"amplitude\":-13.599999999999998},{\"angle\":102.9,\"amplitude\":-14},{\"angle\":103.3,\"amplitude\":-14},{\"angle\":103.7,\"amplitude\":-14},{\"angle\":103.9,\"amplitude\":-14},{\"angle\":104.1,\"amplitude\":-14},{\"angle\":104.3,\"amplitude\":-14},{\"angle\":105.4,\"amplitude\":-14.399999999999999},{\"angle\":105.8,\"amplitude\":-14.399999999999999},{\"angle\":106.1,\"amplitude\":-14.8},{\"angle\":106.8,\"amplitude\":-14.8},{\"angle\":107,\"amplitude\":-14.8},{\"angle\":107.1,\"amplitude\":-14.8},{\"angle\":107.3,\"amplitude\":-14.8},{\"angle\":107.4,\"amplitude\":-14.8},{\"angle\":107.8,\"amplitude\":-14.8},{\"angle\":107.9,\"amplitude\":-14.8},{\"angle\":108.2,\"amplitude\":-15.2},{\"angle\":108.4,\"amplitude\":-15.2},{\"angle\":108.9,\"amplitude\":-15.2},{\"angle\":110.2,\"amplitude\":-15.2},{\"angle\":111.1,\"amplitude\":-15.600000000000001},{\"angle\":111.5,\"amplitude\":-15.600000000000001},{\"angle\":111.8,\"amplitude\":-16},{\"angle\":112.4,\"amplitude\":-16},{\"angle\":112.6,\"amplitude\":-16},{\"angle\":112.9,\"amplitude\":-16},{\"angle\":113,\"amplitude\":-16},{\"angle\":113.6,\"amplitude\":-16.400000000000002},{\"angle\":113.9,\"amplitude\":-16.400000000000002},{\"angle\":114.4,\"amplitude\":-16.400000000000002},{\"angle\":114.7,\"amplitude\":-16.8},{\"angle\":115.4,\"amplitude\":-16.8},{\"angle\":115.5,\"amplitude\":-16.8},{\"angle\":115.7,\"amplitude\":-17.200000000000003},{\"angle\":116.2,\"amplitude\":-17.200000000000003},{\"angle\":116.9,\"amplitude\":-17.200000000000003},{\"angle\":117.4,\"amplitude\":-17.599999999999998},{\"angle\":117.7,\"amplitude\":-17.599999999999998},{\"angle\":117.8,\"amplitude\":-17.599999999999998},{\"angle\":118.1,\"amplitude\":-17.599999999999998},{\"angle\":118.6,\"amplitude\":-17.599999999999998},{\"angle\":118.9,\"amplitude\":-18},{\"angle\":119.3,\"amplitude\":-18},{\"angle\":119.4,\"amplitude\":-18},{\"angle\":119.6,\"amplitude\":-18},{\"angle\":119.8,\"amplitude\":-18.4},{\"angle\":120.7,\"amplitude\":-18.4},{\"angle\":121,\"amplitude\":-18.799999999999997},{\"angle\":121.8,\"amplitude\":-18.799999999999997},{\"angle\":121.9,\"amplitude\":-18.799999999999997},{\"angle\":122.2,\"amplitude\":-19.2},{\"angle\":122.3,\"amplitude\":-19.2},{\"angle\":122.8,\"amplitude\":-18.799999999999997},{\"angle\":122.9,\"amplitude\":-19.2},{\"angle\":123.2,\"amplitude\":-19.2},{\"angle\":123.3,\"amplitude\":-19.2},{\"angle\":123.9,\"amplitude\":-19.2},{\"angle\":124.2,\"amplitude\":-19.6},{\"angle\":124.3,\"amplitude\":-19.6},{\"angle\":124.5,\"amplitude\":-19.6},{\"angle\":124.9,\"amplitude\":-20},{\"angle\":125.5,\"amplitude\":-19.6},{\"angle\":125.8,\"amplitude\":-20},{\"angle\":125.9,\"amplitude\":-20},{\"angle\":126.1,\"amplitude\":-20},{\"angle\":127,\"amplitude\":-20.4},{\"angle\":127.2,\"amplitude\":-20.4},{\"angle\":127.5,\"amplitude\":-20.4},{\"angle\":127.7,\"amplitude\":-20.4},{\"angle\":127.8,\"amplitude\":-20.4},{\"angle\":128.2,\"amplitude\":-20.8},{\"angle\":128.3,\"amplitude\":-20.8},{\"angle\":128.8,\"amplitude\":-20.8},{\"angle\":129.6,\"amplitude\":-21.200000000000003},{\"angle\":129.7,\"amplitude\":-21.200000000000003},{\"angle\":130.3,\"amplitude\":-21.6},{\"angle\":130.5,\"amplitude\":-21.6},{\"angle\":130.7,\"amplitude\":-21.6},{\"angle\":131,\"amplitude\":-22},{\"angle\":131.2,\"amplitude\":-22},{\"angle\":131.8,\"amplitude\":-22},{\"angle\":132,\"amplitude\":-22},{\"angle\":132.6,\"amplitude\":-22.400000000000002},{\"angle\":132.8,\"amplitude\":-22.400000000000002},{\"angle\":133.4,\"amplitude\":-22.800000000000004},{\"angle\":133.7,\"amplitude\":-22.800000000000004},{\"angle\":134.3,\"amplitude\":-22.800000000000004},{\"angle\":135.2,\"amplitude\":-23.200000000000003},{\"angle\":135.4,\"amplitude\":-23.200000000000003},{\"angle\":136.1,\"amplitude\":-23.6},{\"angle\":137,\"amplitude\":-23.6},{\"angle\":137.2,\"amplitude\":-23.6},{\"angle\":137.5,\"amplitude\":-24},{\"angle\":138,\"amplitude\":-24},{\"angle\":138.2,\"amplitude\":-24},{\"angle\":138.5,\"amplitude\":-24},{\"angle\":139,\"amplitude\":-24},{\"angle\":139.5,\"amplitude\":-24.4},{\"angle\":140,\"amplitude\":-24.4},{\"angle\":140.3,\"amplitude\":-24.4},{\"angle\":140.8,\"amplitude\":-24.8},{\"angle\":141.1,\"amplitude\":-24.8},{\"angle\":141.2,\"amplitude\":-24.8},{\"angle\":141.7,\"amplitude\":-25.2},{\"angle\":141.8,\"amplitude\":-25.2},{\"angle\":142.2,\"amplitude\":-25.6},{\"angle\":142.5,\"amplitude\":-25.6},{\"angle\":142.8,\"amplitude\":-25.6},{\"angle\":143.4,\"amplitude\":-26},{\"angle\":143.7,\"amplitude\":-26.4},{\"angle\":144,\"amplitude\":-26.4},{\"angle\":144.3,\"amplitude\":-26.4},{\"angle\":144.7,\"amplitude\":-26.4},{\"angle\":145,\"amplitude\":-26.4},{\"angle\":145.5,\"amplitude\":-26.799999999999997},{\"angle\":146.7,\"amplitude\":-27.199999999999996},{\"angle\":148.4,\"amplitude\":-27.599999999999998},{\"angle\":148.8,\"amplitude\":-27.599999999999998},{\"angle\":149.3,\"amplitude\":-27.599999999999998},{\"angle\":149.6,\"amplitude\":-28},{\"angle\":150.5,\"amplitude\":-28},{\"angle\":150.9,\"amplitude\":-28},{\"angle\":152.1,\"amplitude\":-28.4},{\"angle\":152.3,\"amplitude\":-28.4},{\"angle\":153.1,\"amplitude\":-28.799999999999997},{\"angle\":153.3,\"amplitude\":-28.799999999999997},{\"angle\":154.6,\"amplitude\":-28.799999999999997},{\"angle\":154.8,\"amplitude\":-29.2},{\"angle\":156.1,\"amplitude\":-29.2},{\"angle\":157.3,\"amplitude\":-29.6},{\"angle\":158.2,\"amplitude\":-30},{\"angle\":158.7,\"amplitude\":-30},{\"angle\":159,\"amplitude\":-30},{\"angle\":160,\"amplitude\":-30},{\"angle\":160.5,\"amplitude\":-30},{\"angle\":161,\"amplitude\":-30.4},{\"angle\":161.9,\"amplitude\":-30.4},{\"angle\":162,\"amplitude\":-30.4},{\"angle\":162.4,\"amplitude\":-30.8},{\"angle\":163.5,\"amplitude\":-30.8},{\"angle\":164,\"amplitude\":-30.8},{\"angle\":164.4,\"amplitude\":-30.8},{\"angle\":165.3,\"amplitude\":-31.200000000000003},{\"angle\":165.7,\"amplitude\":-31.200000000000003},{\"angle\":166.3,\"amplitude\":-31.200000000000003},{\"angle\":167.5,\"amplitude\":-31.200000000000003},{\"angle\":168,\"amplitude\":-31.200000000000003},{\"angle\":168.3,\"amplitude\":-31.6},{\"angle\":169.5,\"amplitude\":-31.6},{\"angle\":170,\"amplitude\":-31.6},{\"angle\":170.5,\"amplitude\":-32},{\"angle\":171.8,\"amplitude\":-32},{\"angle\":173.1,\"amplitude\":-32},{\"angle\":174.3,\"amplitude\":-32},{\"angle\":174.9,\"amplitude\":-32},{\"angle\":175.5,\"amplitude\":-32.400000000000006},{\"angle\":176.9,\"amplitude\":-32.400000000000006},{\"angle\":177.5,\"amplitude\":-32.400000000000006},{\"angle\":178.2,\"amplitude\":-32.400000000000006},{\"angle\":179.6,\"amplitude\":-32.400000000000006},{\"angle\":182.6,\"amplitude\":-32.800000000000004},{\"amplitude\":-32.800000000000004,\"angle\":177.4},{\"amplitude\":-32.400000000000006,\"angle\":180.4},{\"amplitude\":-32.400000000000006,\"angle\":181.8},{\"amplitude\":-32.400000000000006,\"angle\":182.5},{\"amplitude\":-32.400000000000006,\"angle\":183.1},{\"amplitude\":-32.400000000000006,\"angle\":184.5},{\"amplitude\":-32,\"angle\":185.1},{\"amplitude\":-32,\"angle\":185.7},{\"amplitude\":-32,\"angle\":186.9},{\"amplitude\":-32,\"angle\":188.2},{\"amplitude\":-32,\"angle\":189.5},{\"amplitude\":-31.6,\"angle\":190},{\"amplitude\":-31.6,\"angle\":190.5},{\"amplitude\":-31.6,\"angle\":191.7},{\"amplitude\":-31.200000000000003,\"angle\":192},{\"amplitude\":-31.200000000000003,\"angle\":192.5},{\"amplitude\":-31.200000000000003,\"angle\":193.7},{\"amplitude\":-31.200000000000003,\"angle\":194.3},{\"amplitude\":-31.200000000000003,\"angle\":194.7},{\"amplitude\":-30.8,\"angle\":195.6},{\"amplitude\":-30.8,\"angle\":196},{\"amplitude\":-30.8,\"angle\":196.5},{\"amplitude\":-30.8,\"angle\":197.6},{\"amplitude\":-30.4,\"angle\":198},{\"amplitude\":-30.4,\"angle\":198.1},{\"amplitude\":-30.4,\"angle\":199},{\"amplitude\":-30,\"angle\":199.5},{\"amplitude\":-30,\"angle\":200},{\"amplitude\":-30,\"angle\":201},{\"amplitude\":-30,\"angle\":201.3},{\"amplitude\":-30,\"angle\":201.8},{\"amplitude\":-29.6,\"angle\":202.7},{\"amplitude\":-29.2,\"angle\":203.9},{\"amplitude\":-29.2,\"angle\":205.2},{\"amplitude\":-28.799999999999997,\"angle\":205.4},{\"amplitude\":-28.799999999999997,\"angle\":206.7},{\"amplitude\":-28.799999999999997,\"angle\":206.9},{\"amplitude\":-28.4,\"angle\":207.7},{\"amplitude\":-28.4,\"angle\":207.9},{\"amplitude\":-28,\"angle\":209.1},{\"amplitude\":-28,\"angle\":209.5},{\"amplitude\":-28,\"angle\":210.4},{\"amplitude\":-27.599999999999998,\"angle\":210.7},{\"amplitude\":-27.599999999999998,\"angle\":211.2},{\"amplitude\":-27.599999999999998,\"angle\":211.6},{\"amplitude\":-27.199999999999996,\"angle\":213.3},{\"amplitude\":-26.799999999999997,\"angle\":214.5},{\"amplitude\":-26.4,\"angle\":215},{\"amplitude\":-26.4,\"angle\":215.3},{\"amplitude\":-26.4,\"angle\":215.7},{\"amplitude\":-26.4,\"angle\":216},{\"amplitude\":-26.4,\"angle\":216.3},{\"amplitude\":-26,\"angle\":216.6},{\"amplitude\":-25.6,\"angle\":217.2},{\"amplitude\":-25.6,\"angle\":217.5},{\"amplitude\":-25.6,\"angle\":217.8},{\"amplitude\":-25.2,\"angle\":218.2},{\"amplitude\":-25.2,\"angle\":218.3},{\"amplitude\":-24.8,\"angle\":218.8},{\"amplitude\":-24.8,\"angle\":218.9},{\"amplitude\":-24.8,\"angle\":219.2},{\"amplitude\":-24.4,\"angle\":219.7},{\"amplitude\":-24.4,\"angle\":220},{\"amplitude\":-24.4,\"angle\":220.5},{\"amplitude\":-24,\"angle\":221},{\"amplitude\":-24,\"angle\":221.5},{\"amplitude\":-24,\"angle\":221.8},{\"amplitude\":-24,\"angle\":222},{\"amplitude\":-24,\"angle\":222.5},{\"amplitude\":-23.6,\"angle\":222.8},{\"amplitude\":-23.6,\"angle\":223},{\"amplitude\":-23.6,\"angle\":223.9},{\"amplitude\":-23.200000000000003,\"angle\":224.6},{\"amplitude\":-23.200000000000003,\"angle\":224.8},{\"amplitude\":-22.800000000000004,\"angle\":225.7},{\"amplitude\":-22.800000000000004,\"angle\":226.3},{\"amplitude\":-22.800000000000004,\"angle\":226.6},{\"amplitude\":-22.400000000000002,\"angle\":227.2},{\"amplitude\":-22.400000000000002,\"angle\":227.4},{\"amplitude\":-22,\"angle\":228},{\"amplitude\":-22,\"angle\":228.2},{\"amplitude\":-22,\"angle\":228.8},{\"amplitude\":-22,\"angle\":229},{\"amplitude\":-21.6,\"angle\":229.3},{\"amplitude\":-21.6,\"angle\":229.5},{\"amplitude\":-21.6,\"angle\":229.7},{\"amplitude\":-21.200000000000003,\"angle\":230.3},{\"amplitude\":-21.200000000000003,\"angle\":230.4},{\"amplitude\":-20.8,\"angle\":231.2},{\"amplitude\":-20.8,\"angle\":231.7},{\"amplitude\":-20.8,\"angle\":231.8},{\"amplitude\":-20.4,\"angle\":232.2},{\"amplitude\":-20.4,\"angle\":232.3},{\"amplitude\":-20.4,\"angle\":232.5},{\"amplitude\":-20.4,\"angle\":232.8},{\"amplitude\":-20.4,\"angle\":233},{\"amplitude\":-20,\"angle\":233.9},{\"amplitude\":-20,\"angle\":234.1},{\"amplitude\":-20,\"angle\":234.2},{\"amplitude\":-19.6,\"angle\":234.5},{\"amplitude\":-20,\"angle\":235.1},{\"amplitude\":-19.6,\"angle\":235.5},{\"amplitude\":-19.6,\"angle\":235.7},{\"amplitude\":-19.6,\"angle\":235.8},{\"amplitude\":-19.2,\"angle\":236.1},{\"amplitude\":-19.2,\"angle\":236.7},{\"amplitude\":-19.2,\"angle\":236.8},{\"amplitude\":-19.2,\"angle\":237.1},{\"amplitude\":-18.799999999999997,\"angle\":237.2},{\"amplitude\":-19.2,\"angle\":237.7},{\"amplitude\":-19.2,\"angle\":237.8},{\"amplitude\":-18.799999999999997,\"angle\":238.1},{\"amplitude\":-18.799999999999997,\"angle\":238.2},{\"amplitude\":-18.799999999999997,\"angle\":239},{\"amplitude\":-18.4,\"angle\":239.3},{\"amplitude\":-18.4,\"angle\":240.2},{\"amplitude\":-18,\"angle\":240.4},{\"amplitude\":-18,\"angle\":240.6},{\"amplitude\":-18,\"angle\":240.7},{\"amplitude\":-18,\"angle\":241.1},{\"amplitude\":-17.599999999999998,\"angle\":241.4},{\"amplitude\":-17.599999999999998,\"angle\":241.9},{\"amplitude\":-17.599999999999998,\"angle\":242.2},{\"amplitude\":-17.599999999999998,\"angle\":242.3},{\"amplitude\":-17.599999999999998,\"angle\":242.6},{\"amplitude\":-17.200000000000003,\"angle\":243.1},{\"amplitude\":-17.200000000000003,\"angle\":243.8},{\"amplitude\":-17.200000000000003,\"angle\":244.3},{\"amplitude\":-16.8,\"angle\":244.5},{\"amplitude\":-16.8,\"angle\":244.6},{\"amplitude\":-16.8,\"angle\":245.3},{\"amplitude\":-16.400000000000002,\"angle\":245.6},{\"amplitude\":-16.400000000000002,\"angle\":246.1},{\"amplitude\":-16.400000000000002,\"angle\":246.4},{\"amplitude\":-16,\"angle\":247},{\"amplitude\":-16,\"angle\":247.1},{\"amplitude\":-16,\"angle\":247.4},{\"amplitude\":-16,\"angle\":247.6},{\"amplitude\":-16,\"angle\":248.2},{\"amplitude\":-15.600000000000001,\"angle\":248.5},{\"amplitude\":-15.600000000000001,\"angle\":248.9},{\"amplitude\":-15.2,\"angle\":249.8},{\"amplitude\":-15.2,\"angle\":251.1},{\"amplitude\":-15.2,\"angle\":251.6},{\"amplitude\":-15.2,\"angle\":251.8},{\"amplitude\":-14.8,\"angle\":252.1},{\"amplitude\":-14.8,\"angle\":252.2},{\"amplitude\":-14.8,\"angle\":252.6},{\"amplitude\":-14.8,\"angle\":252.7},{\"amplitude\":-14.8,\"angle\":252.9},{\"amplitude\":-14.8,\"angle\":253},{\"amplitude\":-14.8,\"angle\":253.2},{\"amplitude\":-14.8,\"angle\":253.9},{\"amplitude\":-14.399999999999999,\"angle\":254.2},{\"amplitude\":-14.399999999999999,\"angle\":254.6},{\"amplitude\":-14,\"angle\":255.7},{\"amplitude\":-14,\"angle\":255.9},{\"amplitude\":-14,\"angle\":256.1},{\"amplitude\":-14,\"angle\":256.3},{\"amplitude\":-14,\"angle\":256.7},{\"amplitude\":-14,\"angle\":257.1},{\"amplitude\":-13.599999999999998,\"angle\":257.3},{\"amplitude\":-13.2,\"angle\":258},{\"amplitude\":-13.2,\"angle\":258.2},{\"amplitude\":-13.2,\"angle\":258.3},{\"amplitude\":-12.799999999999997,\"angle\":258.9},{\"amplitude\":-12.799999999999997,\"angle\":259},{\"amplitude\":-12.799999999999997,\"angle\":259.2},{\"amplitude\":-12.799999999999997,\"angle\":259.8},{\"amplitude\":-12.799999999999997,\"angle\":259.9},{\"amplitude\":-12.400000000000002,\"angle\":260.1},{\"amplitude\":-12.400000000000002,\"angle\":260.2},{\"amplitude\":-12.400000000000002,\"angle\":260.5},{\"amplitude\":-12.400000000000002,\"angle\":260.6},{\"amplitude\":-12.000000000000002,\"angle\":260.8},{\"amplitude\":-12.000000000000002,\"angle\":261},{\"amplitude\":-12.000000000000002,\"angle\":261.4},{\"amplitude\":-12.000000000000002,\"angle\":261.7},{\"amplitude\":-11.600000000000001,\"angle\":261.9},{\"amplitude\":-11.600000000000001,\"angle\":262.3},{\"amplitude\":-11.600000000000001,\"angle\":262.5},{\"amplitude\":-11.600000000000001,\"angle\":262.7},{\"amplitude\":-11.600000000000001,\"angle\":263.1},{\"amplitude\":-11.200000000000001,\"angle\":263.3},{\"amplitude\":-11.200000000000001,\"angle\":263.5},{\"amplitude\":-11.200000000000001,\"angle\":263.9},{\"amplitude\":-11.200000000000001,\"angle\":264.1},{\"amplitude\":-11.200000000000001,\"angle\":264.3},{\"amplitude\":-11.200000000000001,\"angle\":264.7},{\"amplitude\":-10.8,\"angle\":264.9},{\"amplitude\":-10.8,\"angle\":265.1},{\"amplitude\":-10.8,\"angle\":265.6},{\"amplitude\":-10.8,\"angle\":265.8},{\"amplitude\":-10.4,\"angle\":266.2},{\"amplitude\":-10.4,\"angle\":266.4},{\"amplitude\":-10.4,\"angle\":266.6},{\"amplitude\":-10.4,\"angle\":266.9},{\"amplitude\":-10.4,\"angle\":267.1},{\"amplitude\":-10.4,\"angle\":267.3},{\"amplitude\":-10,\"angle\":267.7},{\"amplitude\":-10,\"angle\":267.8},{\"amplitude\":-10,\"angle\":268},{\"amplitude\":-10,\"angle\":268.4},{\"amplitude\":-10,\"angle\":268.6},{\"amplitude\":-10,\"angle\":269.1},{\"amplitude\":-9.6,\"angle\":269.3},{\"amplitude\":-9.6,\"angle\":269.4},{\"amplitude\":-9.6,\"angle\":270},{\"amplitude\":-9.6,\"angle\":270.1},{\"amplitude\":-9.2,\"angle\":270.7},{\"amplitude\":-9.2,\"angle\":271.5},{\"amplitude\":-9.2,\"angle\":272},{\"amplitude\":-8.799999999999999,\"angle\":272.2},{\"amplitude\":-8.799999999999999,\"angle\":273.2},{\"amplitude\":-8.399999999999999,\"angle\":273.5},{\"amplitude\":-8.399999999999999,\"angle\":273.8},{\"amplitude\":-8.399999999999999,\"angle\":274},{\"amplitude\":-8.399999999999999,\"angle\":274.1},{\"amplitude\":-8.399999999999999,\"angle\":274.5},{\"amplitude\":-8.399999999999999,\"angle\":274.6},{\"amplitude\":-8.399999999999999,\"angle\":274.8},{\"amplitude\":-8.399999999999999,\"angle\":275.1},{\"amplitude\":-8.399999999999999,\"angle\":275.3},{\"amplitude\":-8.399999999999999,\"angle\":275.5},{\"amplitude\":-8.399999999999999,\"angle\":275.8},{\"amplitude\":-8.399999999999999,\"angle\":276.5},{\"amplitude\":-8.399999999999999,\"angle\":276.6},{\"amplitude\":-8.399999999999999,\"angle\":276.8},{\"amplitude\":-7.999999999999998,\"angle\":277.1},{\"amplitude\":-7.999999999999998,\"angle\":277.9},{\"amplitude\":-7.999999999999998,\"angle\":278.1},{\"amplitude\":-7.999999999999998,\"angle\":278.4},{\"amplitude\":-7.999999999999998,\"angle\":278.6},{\"amplitude\":-7.999999999999998,\"angle\":279.1},{\"amplitude\":-7.999999999999998,\"angle\":279.9},{\"amplitude\":-7.999999999999998,\"angle\":280.1},{\"amplitude\":-7.999999999999998,\"angle\":280.6},{\"amplitude\":-7.999999999999998,\"angle\":280.7},{\"amplitude\":-7.999999999999998,\"angle\":281.4},{\"amplitude\":-7.599999999999998,\"angle\":281.8},{\"amplitude\":-7.599999999999998,\"angle\":282.3},{\"amplitude\":-7.599999999999998,\"angle\":283},{\"amplitude\":-7.599999999999998,\"angle\":283.6},{\"amplitude\":-7.599999999999998,\"angle\":283.8},{\"amplitude\":-7.599999999999998,\"angle\":283.9},{\"amplitude\":-7.599999999999998,\"angle\":284.2},{\"amplitude\":-7.599999999999998,\"angle\":284.4},{\"amplitude\":-7.200000000000002,\"angle\":284.5},{\"amplitude\":-7.200000000000002,\"angle\":284.9},{\"amplitude\":-7.200000000000002,\"angle\":285},{\"amplitude\":-7.200000000000002,\"angle\":285.5},{\"amplitude\":-7.200000000000002,\"angle\":285.8},{\"amplitude\":-7.200000000000002,\"angle\":286.1},{\"amplitude\":-7.200000000000002,\"angle\":286.2},{\"amplitude\":-7.200000000000002,\"angle\":286.9},{\"amplitude\":-6.800000000000002,\"angle\":287.3},{\"amplitude\":-6.800000000000002,\"angle\":287.5},{\"amplitude\":-6.800000000000002,\"angle\":288.1},{\"amplitude\":-6.800000000000002,\"angle\":288.2},{\"amplitude\":-6.800000000000002,\"angle\":288.9},{\"amplitude\":-6.800000000000002,\"angle\":289.2},{\"amplitude\":-6.800000000000002,\"angle\":289.4},{\"amplitude\":-6.800000000000002,\"angle\":289.6},{\"amplitude\":-6.800000000000002,\"angle\":290.2},{\"amplitude\":-6.400000000000001,\"angle\":290.6},{\"amplitude\":-6.800000000000002,\"angle\":291.2},{\"amplitude\":-6.800000000000002,\"angle\":291.5},{\"amplitude\":-6.400000000000001,\"angle\":292.1},{\"amplitude\":-6.400000000000001,\"angle\":292.7},{\"amplitude\":-6.400000000000001,\"angle\":293.1},{\"amplitude\":-6.400000000000001,\"angle\":293.2},{\"amplitude\":-6.400000000000001,\"angle\":293.6},{\"amplitude\":-6.000000000000001,\"angle\":293.9},{\"amplitude\":-6.000000000000001,\"angle\":294.6},{\"amplitude\":-6.000000000000001,\"angle\":294.8},{\"amplitude\":-6.000000000000001,\"angle\":295.3},{\"amplitude\":-6.000000000000001,\"angle\":295.5},{\"amplitude\":-6.000000000000001,\"angle\":295.7},{\"amplitude\":-6.000000000000001,\"angle\":296.1},{\"amplitude\":-6.000000000000001,\"angle\":296.2},{\"amplitude\":-6.000000000000001,\"angle\":296.4},{\"amplitude\":-5.6000000000000005,\"angle\":296.6},{\"amplitude\":-5.6000000000000005,\"angle\":296.9},{\"amplitude\":-5.6000000000000005,\"angle\":297},{\"amplitude\":-5.6000000000000005,\"angle\":297.3},{\"amplitude\":-5.6000000000000005,\"angle\":297.5},{\"amplitude\":-5.6000000000000005,\"angle\":297.9},{\"amplitude\":-5.6000000000000005,\"angle\":298},{\"amplitude\":-5.6000000000000005,\"angle\":298.2},{\"amplitude\":-5.6000000000000005,\"angle\":298.8},{\"amplitude\":-5.6000000000000005,\"angle\":299.2},{\"amplitude\":-5.2,\"angle\":299.4},{\"amplitude\":-5.2,\"angle\":299.7},{\"amplitude\":-5.2,\"angle\":299.8},{\"amplitude\":-5.2,\"angle\":300.4},{\"amplitude\":-4.8,\"angle\":300.8},{\"amplitude\":-5.2,\"angle\":301.2},{\"amplitude\":-4.8,\"angle\":301.7},{\"amplitude\":-4.8,\"angle\":301.8},{\"amplitude\":-4.8,\"angle\":302.1},{\"amplitude\":-4.8,\"angle\":302.2},{\"amplitude\":-4.8,\"angle\":302.3},{\"amplitude\":-4.8,\"angle\":302.4},{\"amplitude\":-4.8,\"angle\":302.8},{\"amplitude\":-4.8,\"angle\":303},{\"amplitude\":-4.8,\"angle\":303.1},{\"amplitude\":-4.8,\"angle\":303.4},{\"amplitude\":-4.8,\"angle\":303.6},{\"amplitude\":-4.8,\"angle\":303.8},{\"amplitude\":-4.8,\"angle\":304},{\"amplitude\":-4.8,\"angle\":304.8},{\"amplitude\":-4.3999999999999995,\"angle\":304.9},{\"amplitude\":-4.3999999999999995,\"angle\":305.3},{\"amplitude\":-4.8,\"angle\":305.8},{\"amplitude\":-4.3999999999999995,\"angle\":306.1},{\"amplitude\":-4.3999999999999995,\"angle\":306.3},{\"amplitude\":-4.8,\"angle\":306.6},{\"amplitude\":-4.3999999999999995,\"angle\":307},{\"amplitude\":-4.3999999999999995,\"angle\":307.5},{\"amplitude\":-4.3999999999999995,\"angle\":307.6},{\"amplitude\":-4.3999999999999995,\"angle\":307.9},{\"amplitude\":-4.3999999999999995,\"angle\":308.3},{\"amplitude\":-4.3999999999999995,\"angle\":308.4},{\"amplitude\":-4.3999999999999995,\"angle\":308.5},{\"amplitude\":-4.3999999999999995,\"angle\":308.7},{\"amplitude\":-4.3999999999999995,\"angle\":309.1},{\"amplitude\":-4.3999999999999995,\"angle\":309.2},{\"amplitude\":-4.3999999999999995,\"angle\":309.3},{\"amplitude\":-3.999999999999999,\"angle\":309.6},{\"amplitude\":-4.3999999999999995,\"angle\":309.7},{\"amplitude\":-4.3999999999999995,\"angle\":310.2},{\"amplitude\":-4.3999999999999995,\"angle\":310.5},{\"amplitude\":-3.999999999999999,\"angle\":310.6},{\"amplitude\":-4.3999999999999995,\"angle\":311.2},{\"amplitude\":-3.999999999999999,\"angle\":311.3},{\"amplitude\":-3.999999999999999,\"angle\":311.6},{\"amplitude\":-3.999999999999999,\"angle\":311.7},{\"amplitude\":-3.999999999999999,\"angle\":311.9},{\"amplitude\":-3.999999999999999,\"angle\":312.3},{\"amplitude\":-3.999999999999999,\"angle\":312.6},{\"amplitude\":-3.999999999999999,\"angle\":312.7},{\"amplitude\":-3.999999999999999,\"angle\":312.8},{\"amplitude\":-3.999999999999999,\"angle\":313.2},{\"amplitude\":-3.999999999999999,\"angle\":313.5},{\"amplitude\":-3.999999999999999,\"angle\":314},{\"amplitude\":-3.999999999999999,\"angle\":314.2},{\"amplitude\":-3.999999999999999,\"angle\":314.3},{\"amplitude\":-3.999999999999999,\"angle\":314.8},{\"amplitude\":-3.999999999999999,\"angle\":315},{\"amplitude\":-3.999999999999999,\"angle\":315.2},{\"amplitude\":-3.999999999999999,\"angle\":315.3},{\"amplitude\":-3.999999999999999,\"angle\":315.7},{\"amplitude\":-3.999999999999999,\"angle\":315.9},{\"amplitude\":-3.999999999999999,\"angle\":316.1},{\"amplitude\":-3.999999999999999,\"angle\":316.5},{\"amplitude\":-3.999999999999999,\"angle\":316.7},{\"amplitude\":-3.999999999999999,\"angle\":316.9},{\"amplitude\":-3.999999999999999,\"angle\":317.1},{\"amplitude\":-3.999999999999999,\"angle\":317.3},{\"amplitude\":-3.999999999999999,\"angle\":317.5},{\"amplitude\":-3.999999999999999,\"angle\":317.6},{\"amplitude\":-3.999999999999999,\"angle\":317.8},{\"amplitude\":-3.999999999999999,\"angle\":317.9},{\"amplitude\":-3.999999999999999,\"angle\":318.4},{\"amplitude\":-3.999999999999999,\"angle\":318.7},{\"amplitude\":-3.999999999999999,\"angle\":319.2},{\"amplitude\":-3.5999999999999988,\"angle\":319.4},{\"amplitude\":-3.5999999999999988,\"angle\":319.6},{\"amplitude\":-3.5999999999999988,\"angle\":319.7},{\"amplitude\":-3.5999999999999988,\"angle\":319.8},{\"amplitude\":-3.5999999999999988,\"angle\":320.4},{\"amplitude\":-3.5999999999999988,\"angle\":320.5},{\"amplitude\":-3.5999999999999988,\"angle\":320.6},{\"amplitude\":-3.5999999999999988,\"angle\":321},{\"amplitude\":-3.5999999999999988,\"angle\":321.1},{\"amplitude\":-3.5999999999999988,\"angle\":321.3},{\"amplitude\":-3.5999999999999988,\"angle\":321.6},{\"amplitude\":-3.5999999999999988,\"angle\":321.9},{\"amplitude\":-3.5999999999999988,\"angle\":322},{\"amplitude\":-3.5999999999999988,\"angle\":322.1},{\"amplitude\":-3.1999999999999984,\"angle\":322.3},{\"amplitude\":-3.1999999999999984,\"angle\":322.5},{\"amplitude\":-3.1999999999999984,\"angle\":322.6},{\"amplitude\":-3.1999999999999984,\"angle\":323},{\"amplitude\":-3.1999999999999984,\"angle\":323.1},{\"amplitude\":-3.1999999999999984,\"angle\":323.3},{\"amplitude\":-3.1999999999999984,\"angle\":323.4},{\"amplitude\":-3.1999999999999984,\"angle\":323.9},{\"amplitude\":-3.1999999999999984,\"angle\":324},{\"amplitude\":-3.1999999999999984,\"angle\":324.1},{\"amplitude\":-2.799999999999998,\"angle\":324.4},{\"amplitude\":-2.799999999999998,\"angle\":324.7},{\"amplitude\":-2.799999999999998,\"angle\":325},{\"amplitude\":-2.799999999999998,\"angle\":325.1},{\"amplitude\":-2.799999999999998,\"angle\":325.2},{\"amplitude\":-2.400000000000002,\"angle\":325.5},{\"amplitude\":-2.400000000000002,\"angle\":325.6},{\"amplitude\":-2.400000000000002,\"angle\":325.9},{\"amplitude\":-2.400000000000002,\"angle\":326},{\"amplitude\":-2.400000000000002,\"angle\":326.2},{\"amplitude\":-2.400000000000002,\"angle\":326.3},{\"amplitude\":-2.0000000000000018,\"angle\":326.9},{\"amplitude\":-1.6000000000000014,\"angle\":327},{\"amplitude\":-1.6000000000000014,\"angle\":327.5},{\"amplitude\":-1.6000000000000014,\"angle\":327.6},{\"amplitude\":-1.6000000000000014,\"angle\":327.8},{\"amplitude\":-1.6000000000000014,\"angle\":327.9},{\"amplitude\":-1.6000000000000014,\"angle\":328.4},{\"amplitude\":-1.200000000000001,\"angle\":328.7},{\"amplitude\":-1.200000000000001,\"angle\":329.1},{\"amplitude\":-1.6000000000000014,\"angle\":329.5},{\"amplitude\":-1.200000000000001,\"angle\":329.8},{\"amplitude\":-1.200000000000001,\"angle\":330.2},{\"amplitude\":-1.200000000000001,\"angle\":330.5},{\"amplitude\":-1.200000000000001,\"angle\":330.9},{\"amplitude\":-1.200000000000001,\"angle\":331.3},{\"amplitude\":-1.200000000000001,\"angle\":331.7},{\"amplitude\":-1.200000000000001,\"angle\":332.2},{\"amplitude\":-1.200000000000001,\"angle\":332.3},{\"amplitude\":-1.200000000000001,\"angle\":332.4},{\"amplitude\":-1.200000000000001,\"angle\":332.7},{\"amplitude\":-1.200000000000001,\"angle\":332.8},{\"amplitude\":-1.200000000000001,\"angle\":333.3},{\"amplitude\":-1.200000000000001,\"angle\":333.5},{\"amplitude\":-1.200000000000001,\"angle\":334.1},{\"amplitude\":-1.200000000000001,\"angle\":334.7},{\"amplitude\":-1.200000000000001,\"angle\":334.9},{\"amplitude\":-1.200000000000001,\"angle\":335.5},{\"amplitude\":-1.200000000000001,\"angle\":335.8},{\"amplitude\":-1.200000000000001,\"angle\":336.1},{\"amplitude\":-1.200000000000001,\"angle\":336.4},{\"amplitude\":-1.200000000000001,\"angle\":336.8},{\"amplitude\":-1.200000000000001,\"angle\":337},{\"amplitude\":-1.200000000000001,\"angle\":337.2},{\"amplitude\":-1.200000000000001,\"angle\":337.7},{\"amplitude\":-1.200000000000001,\"angle\":337.9},{\"amplitude\":-1.200000000000001,\"angle\":338},{\"amplitude\":-1.200000000000001,\"angle\":338.3},{\"amplitude\":-1.200000000000001,\"angle\":338.4},{\"amplitude\":-0.8000000000000007,\"angle\":338.7},{\"amplitude\":-1.200000000000001,\"angle\":338.9},{\"amplitude\":-0.8000000000000007,\"angle\":339.1},{\"amplitude\":-0.8000000000000007,\"angle\":339.2},{\"amplitude\":-1.200000000000001,\"angle\":339.5},{\"amplitude\":-1.200000000000001,\"angle\":339.6},{\"amplitude\":-1.200000000000001,\"angle\":339.8},{\"amplitude\":-0.8000000000000007,\"angle\":340.4},{\"amplitude\":-0.8000000000000007,\"angle\":340.8},{\"amplitude\":-1.200000000000001,\"angle\":340.9},{\"amplitude\":-1.200000000000001,\"angle\":341.3},{\"amplitude\":-1.200000000000001,\"angle\":341.4},{\"amplitude\":-1.200000000000001,\"angle\":341.7},{\"amplitude\":-1.200000000000001,\"angle\":342},{\"amplitude\":-1.200000000000001,\"angle\":342.5},{\"amplitude\":-1.200000000000001,\"angle\":342.9},{\"amplitude\":-1.200000000000001,\"angle\":343.1},{\"amplitude\":-1.200000000000001,\"angle\":343.2},{\"amplitude\":-1.200000000000001,\"angle\":343.5},{\"amplitude\":-0.8000000000000007,\"angle\":343.8},{\"amplitude\":-0.8000000000000007,\"angle\":344.1},{\"amplitude\":-0.8000000000000007,\"angle\":344.2},{\"amplitude\":-0.8000000000000007,\"angle\":344.4},{\"amplitude\":-1.200000000000001,\"angle\":344.6},{\"amplitude\":-0.8000000000000007,\"angle\":344.8},{\"amplitude\":-0.8000000000000007,\"angle\":344.9},{\"amplitude\":-1.200000000000001,\"angle\":345.3},{\"amplitude\":-1.200000000000001,\"angle\":345.4},{\"amplitude\":-1.200000000000001,\"angle\":345.7},{\"amplitude\":-1.200000000000001,\"angle\":345.8},{\"amplitude\":-1.200000000000001,\"angle\":346},{\"amplitude\":-0.8000000000000007,\"angle\":346.5},{\"amplitude\":-1.200000000000001,\"angle\":346.9},{\"amplitude\":-0.8000000000000007,\"angle\":347.1},{\"amplitude\":-1.200000000000001,\"angle\":347.4},{\"amplitude\":-1.200000000000001,\"angle\":347.7},{\"amplitude\":-0.8000000000000007,\"angle\":348},{\"amplitude\":-0.8000000000000007,\"angle\":348.1},{\"amplitude\":-0.8000000000000007,\"angle\":348.3},{\"amplitude\":-0.8000000000000007,\"angle\":348.6},{\"amplitude\":-0.8000000000000007,\"angle\":348.7},{\"amplitude\":-0.8000000000000007,\"angle\":349.1},{\"amplitude\":-0.8000000000000007,\"angle\":349.2},{\"amplitude\":-0.8000000000000007,\"angle\":349.6},{\"amplitude\":-0.8000000000000007,\"angle\":349.8},{\"amplitude\":-1.200000000000001,\"angle\":349.9},{\"amplitude\":-1.200000000000001,\"angle\":350.2},{\"amplitude\":-1.200000000000001,\"angle\":350.4},{\"amplitude\":-1.200000000000001,\"angle\":350.7},{\"amplitude\":-0.8000000000000007,\"angle\":351},{\"amplitude\":-0.8000000000000007,\"angle\":351.4},{\"amplitude\":-0.8000000000000007,\"angle\":351.6},{\"amplitude\":-0.8000000000000007,\"angle\":352},{\"amplitude\":-0.8000000000000007,\"angle\":352.4},{\"amplitude\":-0.8000000000000007,\"angle\":352.6},{\"amplitude\":-0.8000000000000007,\"angle\":353},{\"amplitude\":-0.8000000000000007,\"angle\":353.1},{\"amplitude\":-0.8000000000000007,\"angle\":353.5},{\"amplitude\":-0.8000000000000007,\"angle\":353.7},{\"amplitude\":-0.8000000000000007,\"angle\":354.1},{\"amplitude\":-0.8000000000000007,\"angle\":354.2},{\"amplitude\":-0.40000000000000036,\"angle\":354.6},{\"amplitude\":-0.40000000000000036,\"angle\":354.8},{\"amplitude\":-0.40000000000000036,\"angle\":355.2},{\"amplitude\":-0.40000000000000036,\"angle\":355.3},{\"amplitude\":-0.40000000000000036,\"angle\":355.7},{\"amplitude\":-0.40000000000000036,\"angle\":355.8},{\"amplitude\":-0.40000000000000036,\"angle\":356.4},{\"amplitude\":-0.40000000000000036,\"angle\":356.5},{\"amplitude\":-0.40000000000000036,\"angle\":356.8},{\"amplitude\":-0.40000000000000036,\"angle\":356.9},{\"amplitude\":-0.40000000000000036,\"angle\":357.1},{\"amplitude\":0,\"angle\":357.3},{\"amplitude\":0,\"angle\":357.5},{\"amplitude\":0,\"angle\":357.6},{\"amplitude\":0,\"angle\":358},{\"amplitude\":0,\"angle\":358.5},{\"amplitude\":0,\"angle\":359.1},{\"amplitude\":0,\"angle\":359.2},{\"amplitude\":0,\"angle\":360}]\n\n },\n {\n name: '6KHz',\n data: [{\"angle\":0,\"amplitude\":-0.40000000000000036},{\"angle\":0.4,\"amplitude\":-0.40000000000000036},{\"angle\":0.5,\"amplitude\":-0.40000000000000036},{\"angle\":0.8,\"amplitude\":-0.40000000000000036},{\"angle\":1.3,\"amplitude\":-0.40000000000000036},{\"angle\":2.4,\"amplitude\":-0.40000000000000036},{\"angle\":2.6,\"amplitude\":-0.40000000000000036},{\"angle\":3.1,\"amplitude\":-0.8000000000000007},{\"angle\":3.5,\"amplitude\":-0.8000000000000007},{\"angle\":4.1,\"amplitude\":-0.8000000000000007},{\"angle\":4.3,\"amplitude\":-0.8000000000000007},{\"angle\":4.6,\"amplitude\":-0.8000000000000007},{\"angle\":4.7,\"amplitude\":-0.8000000000000007},{\"angle\":5.2,\"amplitude\":-0.8000000000000007},{\"angle\":5.9,\"amplitude\":-1.200000000000001},{\"angle\":6.4,\"amplitude\":-1.200000000000001},{\"angle\":7,\"amplitude\":-1.200000000000001},{\"angle\":7.5,\"amplitude\":-1.200000000000001},{\"angle\":7.9,\"amplitude\":-1.200000000000001},{\"angle\":8.1,\"amplitude\":-1.200000000000001},{\"angle\":8.2,\"amplitude\":-1.200000000000001},{\"angle\":8.7,\"amplitude\":-1.200000000000001},{\"angle\":9.1,\"amplitude\":-1.6000000000000014},{\"angle\":10.2,\"amplitude\":-1.6000000000000014},{\"angle\":10.4,\"amplitude\":-1.6000000000000014},{\"angle\":10.6,\"amplitude\":-1.6000000000000014},{\"angle\":11,\"amplitude\":-1.6000000000000014},{\"angle\":11.4,\"amplitude\":-1.6000000000000014},{\"angle\":11.6,\"amplitude\":-1.6000000000000014},{\"angle\":12,\"amplitude\":-2.0000000000000018},{\"angle\":12.2,\"amplitude\":-2.0000000000000018},{\"angle\":12.6,\"amplitude\":-1.6000000000000014},{\"angle\":12.8,\"amplitude\":-2.0000000000000018},{\"angle\":13.2,\"amplitude\":-2.0000000000000018},{\"angle\":13.3,\"amplitude\":-2.0000000000000018},{\"angle\":13.9,\"amplitude\":-2.0000000000000018},{\"angle\":14.3,\"amplitude\":-2.0000000000000018},{\"angle\":14.4,\"amplitude\":-2.0000000000000018},{\"angle\":14.8,\"amplitude\":-2.0000000000000018},{\"angle\":15.6,\"amplitude\":-2.0000000000000018},{\"angle\":15.7,\"amplitude\":-2.0000000000000018},{\"angle\":16,\"amplitude\":-1.6000000000000014},{\"angle\":16.1,\"amplitude\":-1.6000000000000014},{\"angle\":16.8,\"amplitude\":-2.0000000000000018},{\"angle\":17.4,\"amplitude\":-2.0000000000000018},{\"angle\":17.9,\"amplitude\":-2.0000000000000018},{\"angle\":18.5,\"amplitude\":-2.0000000000000018},{\"angle\":18.8,\"amplitude\":-2.0000000000000018},{\"angle\":19.2,\"amplitude\":-2.0000000000000018},{\"angle\":19.3,\"amplitude\":-2.0000000000000018},{\"angle\":19.7,\"amplitude\":-2.0000000000000018},{\"angle\":20.2,\"amplitude\":-2.0000000000000018},{\"angle\":20.9,\"amplitude\":-2.0000000000000018},{\"angle\":21.1,\"amplitude\":-2.0000000000000018},{\"angle\":21.3,\"amplitude\":-2.0000000000000018},{\"angle\":22.1,\"amplitude\":-2.0000000000000018},{\"angle\":22.6,\"amplitude\":-2.0000000000000018},{\"angle\":22.8,\"amplitude\":-2.0000000000000018},{\"angle\":24.1,\"amplitude\":-2.0000000000000018},{\"angle\":24.9,\"amplitude\":-1.6000000000000014},{\"angle\":25.6,\"amplitude\":-1.6000000000000014},{\"angle\":25.7,\"amplitude\":-1.6000000000000014},{\"angle\":26.4,\"amplitude\":-1.6000000000000014},{\"angle\":28.5,\"amplitude\":-1.6000000000000014},{\"angle\":29.2,\"amplitude\":-1.6000000000000014},{\"angle\":29.7,\"amplitude\":-1.6000000000000014},{\"angle\":30,\"amplitude\":-1.6000000000000014},{\"angle\":30.3,\"amplitude\":-1.6000000000000014},{\"angle\":30.6,\"amplitude\":-1.6000000000000014},{\"angle\":31.5,\"amplitude\":-1.6000000000000014},{\"angle\":31.8,\"amplitude\":-1.6000000000000014},{\"angle\":32.1,\"amplitude\":-1.6000000000000014},{\"angle\":32.7,\"amplitude\":-1.6000000000000014},{\"angle\":33.4,\"amplitude\":-1.6000000000000014},{\"angle\":33.5,\"amplitude\":-1.6000000000000014},{\"angle\":33.8,\"amplitude\":-1.6000000000000014},{\"angle\":34.3,\"amplitude\":-1.6000000000000014},{\"angle\":35.2,\"amplitude\":-1.6000000000000014},{\"angle\":35.9,\"amplitude\":-1.6000000000000014},{\"angle\":36,\"amplitude\":-2.0000000000000018},{\"angle\":36.1,\"amplitude\":-2.0000000000000018},{\"angle\":36.6,\"amplitude\":-2.0000000000000018},{\"angle\":36.9,\"amplitude\":-2.0000000000000018},{\"angle\":37.6,\"amplitude\":-2.400000000000002},{\"angle\":38.2,\"amplitude\":-2.0000000000000018},{\"angle\":38.7,\"amplitude\":-2.400000000000002},{\"angle\":38.8,\"amplitude\":-2.400000000000002},{\"angle\":39.6,\"amplitude\":-2.400000000000002},{\"angle\":40.2,\"amplitude\":-2.400000000000002},{\"angle\":40.9,\"amplitude\":-2.400000000000002},{\"angle\":41.4,\"amplitude\":-2.400000000000002},{\"angle\":42.2,\"amplitude\":-2.799999999999998},{\"angle\":42.8,\"amplitude\":-2.799999999999998},{\"angle\":43.1,\"amplitude\":-2.799999999999998},{\"angle\":43.9,\"amplitude\":-2.799999999999998},{\"angle\":44.3,\"amplitude\":-2.799999999999998},{\"angle\":44.7,\"amplitude\":-2.799999999999998},{\"angle\":45.2,\"amplitude\":-2.799999999999998},{\"angle\":45.4,\"amplitude\":-2.799999999999998},{\"angle\":45.8,\"amplitude\":-2.799999999999998},{\"angle\":46.6,\"amplitude\":-2.799999999999998},{\"angle\":47.2,\"amplitude\":-3.1999999999999984},{\"angle\":47.4,\"amplitude\":-2.799999999999998},{\"angle\":47.8,\"amplitude\":-2.799999999999998},{\"angle\":48,\"amplitude\":-2.799999999999998},{\"angle\":48.7,\"amplitude\":-3.1999999999999984},{\"angle\":48.8,\"amplitude\":-3.1999999999999984},{\"angle\":49.2,\"amplitude\":-3.1999999999999984},{\"angle\":49.5,\"amplitude\":-3.1999999999999984},{\"angle\":49.8,\"amplitude\":-3.1999999999999984},{\"angle\":51,\"amplitude\":-3.5999999999999988},{\"angle\":51.1,\"amplitude\":-3.5999999999999988},{\"angle\":54.4,\"amplitude\":-3.999999999999999},{\"angle\":55.7,\"amplitude\":-4.3999999999999995},{\"angle\":56.2,\"amplitude\":-4.3999999999999995},{\"angle\":56.6,\"amplitude\":-4.3999999999999995},{\"angle\":56.7,\"amplitude\":-4.3999999999999995},{\"angle\":57.2,\"amplitude\":-4.3999999999999995},{\"angle\":57.7,\"amplitude\":-4.8},{\"angle\":58,\"amplitude\":-4.3999999999999995},{\"angle\":58.8,\"amplitude\":-4.8},{\"angle\":59.2,\"amplitude\":-4.8},{\"angle\":59.9,\"amplitude\":-4.8},{\"angle\":60.4,\"amplitude\":-4.8},{\"angle\":61.2,\"amplitude\":-4.8},{\"angle\":62.5,\"amplitude\":-4.8},{\"angle\":63,\"amplitude\":-4.8},{\"angle\":63.4,\"amplitude\":-4.8},{\"angle\":64.3,\"amplitude\":-4.8},{\"angle\":64.4,\"amplitude\":-5.2},{\"angle\":64.8,\"amplitude\":-5.2},{\"angle\":65.7,\"amplitude\":-5.2},{\"angle\":65.9,\"amplitude\":-5.2},{\"angle\":66.5,\"amplitude\":-5.2},{\"angle\":67.1,\"amplitude\":-5.2},{\"angle\":67.8,\"amplitude\":-5.2},{\"angle\":69,\"amplitude\":-5.2},{\"angle\":69.5,\"amplitude\":-5.2},{\"angle\":69.7,\"amplitude\":-5.2},{\"angle\":70.5,\"amplitude\":-4.8},{\"angle\":71.1,\"amplitude\":-4.8},{\"angle\":72.2,\"amplitude\":-5.2},{\"angle\":72.3,\"amplitude\":-5.2},{\"angle\":73.6,\"amplitude\":-5.2},{\"angle\":74.5,\"amplitude\":-5.2},{\"angle\":75.5,\"amplitude\":-5.2},{\"angle\":75.8,\"amplitude\":-5.2},{\"angle\":76.6,\"amplitude\":-5.2},{\"angle\":77,\"amplitude\":-5.2},{\"angle\":77.6,\"amplitude\":-5.2},{\"angle\":78.3,\"amplitude\":-5.2},{\"angle\":79,\"amplitude\":-5.2},{\"angle\":79.5,\"amplitude\":-5.2},{\"angle\":79.8,\"amplitude\":-5.2},{\"angle\":80.4,\"amplitude\":-5.2},{\"angle\":80.7,\"amplitude\":-5.2},{\"angle\":83.2,\"amplitude\":-5.2},{\"angle\":83.8,\"amplitude\":-5.2},{\"angle\":84.5,\"amplitude\":-5.2},{\"angle\":85.1,\"amplitude\":-5.2},{\"angle\":85.6,\"amplitude\":-5.2},{\"angle\":85.9,\"amplitude\":-5.2},{\"angle\":86.8,\"amplitude\":-5.6000000000000005},{\"angle\":87.1,\"amplitude\":-5.6000000000000005},{\"angle\":87.6,\"amplitude\":-5.6000000000000005},{\"angle\":88,\"amplitude\":-5.6000000000000005},{\"angle\":88.6,\"amplitude\":-5.6000000000000005},{\"angle\":89.3,\"amplitude\":-6.000000000000001},{\"angle\":90,\"amplitude\":-6.000000000000001},{\"angle\":90.2,\"amplitude\":-6.000000000000001},{\"angle\":90.7,\"amplitude\":-6.000000000000001},{\"angle\":90.8,\"amplitude\":-6.400000000000001},{\"angle\":91.4,\"amplitude\":-6.400000000000001},{\"angle\":92.1,\"amplitude\":-6.400000000000001},{\"angle\":92.5,\"amplitude\":-6.400000000000001},{\"angle\":92.7,\"amplitude\":-6.400000000000001},{\"angle\":93.2,\"amplitude\":-6.400000000000001},{\"angle\":93.3,\"amplitude\":-6.400000000000001},{\"angle\":94,\"amplitude\":-6.800000000000002},{\"angle\":95.1,\"amplitude\":-6.800000000000002},{\"angle\":95.8,\"amplitude\":-6.800000000000002},{\"angle\":96.4,\"amplitude\":-6.800000000000002},{\"angle\":97.1,\"amplitude\":-6.800000000000002},{\"angle\":97.7,\"amplitude\":-6.800000000000002},{\"angle\":98.5,\"amplitude\":-6.800000000000002},{\"angle\":99.5,\"amplitude\":-7.200000000000002},{\"angle\":99.9,\"amplitude\":-7.200000000000002},{\"angle\":100.3,\"amplitude\":-7.200000000000002},{\"angle\":100.5,\"amplitude\":-7.200000000000002},{\"angle\":101.5,\"amplitude\":-7.200000000000002},{\"angle\":101.6,\"amplitude\":-7.200000000000002},{\"angle\":102.2,\"amplitude\":-7.200000000000002},{\"angle\":102.5,\"amplitude\":-7.200000000000002},{\"angle\":103.3,\"amplitude\":-7.599999999999998},{\"angle\":104.1,\"amplitude\":-7.599999999999998},{\"angle\":104.4,\"amplitude\":-7.599999999999998},{\"angle\":104.7,\"amplitude\":-7.999999999999998},{\"angle\":105.2,\"amplitude\":-7.999999999999998},{\"angle\":106,\"amplitude\":-8.399999999999999},{\"angle\":106.5,\"amplitude\":-8.399999999999999},{\"angle\":106.9,\"amplitude\":-8.399999999999999},{\"angle\":107.4,\"amplitude\":-8.799999999999999},{\"angle\":107.8,\"amplitude\":-8.799999999999999},{\"angle\":107.9,\"amplitude\":-9.2},{\"angle\":108.8,\"amplitude\":-9.2},{\"angle\":109.3,\"amplitude\":-9.6},{\"angle\":110.3,\"amplitude\":-10},{\"angle\":110.8,\"amplitude\":-10},{\"angle\":111.3,\"amplitude\":-10.4},{\"angle\":112.4,\"amplitude\":-10.8},{\"angle\":113.4,\"amplitude\":-11.200000000000001},{\"angle\":114.2,\"amplitude\":-11.600000000000001},{\"angle\":114.9,\"amplitude\":-11.600000000000001},{\"angle\":115.5,\"amplitude\":-12.000000000000002},{\"angle\":116,\"amplitude\":-12.000000000000002},{\"angle\":116.2,\"amplitude\":-12.000000000000002},{\"angle\":117,\"amplitude\":-12.400000000000002},{\"angle\":117.1,\"amplitude\":-12.400000000000002},{\"angle\":117.9,\"amplitude\":-12.799999999999997},{\"angle\":118.3,\"amplitude\":-12.799999999999997},{\"angle\":119.4,\"amplitude\":-13.2},{\"angle\":119.9,\"amplitude\":-13.2},{\"angle\":120.3,\"amplitude\":-13.599999999999998},{\"angle\":120.8,\"amplitude\":-13.599999999999998},{\"angle\":121.3,\"amplitude\":-13.599999999999998},{\"angle\":122.2,\"amplitude\":-14},{\"angle\":122.4,\"amplitude\":-14},{\"angle\":123,\"amplitude\":-14},{\"angle\":123.4,\"amplitude\":-14},{\"angle\":124.1,\"amplitude\":-14},{\"angle\":124.9,\"amplitude\":-14.399999999999999},{\"angle\":125.1,\"amplitude\":-14.399999999999999},{\"angle\":126.8,\"amplitude\":-14.8},{\"angle\":127,\"amplitude\":-14.8},{\"angle\":127.4,\"amplitude\":-15.2},{\"angle\":128.4,\"amplitude\":-15.600000000000001},{\"angle\":129.5,\"amplitude\":-16},{\"angle\":130.1,\"amplitude\":-16},{\"angle\":130.7,\"amplitude\":-16.400000000000002},{\"angle\":131.1,\"amplitude\":-16.400000000000002},{\"angle\":131.7,\"amplitude\":-16.8},{\"angle\":132,\"amplitude\":-16.8},{\"angle\":132.4,\"amplitude\":-16.8},{\"angle\":132.5,\"amplitude\":-17.200000000000003},{\"angle\":133.1,\"amplitude\":-17.200000000000003},{\"angle\":133.3,\"amplitude\":-17.200000000000003},{\"angle\":133.8,\"amplitude\":-17.599999999999998},{\"angle\":133.9,\"amplitude\":-17.599999999999998},{\"angle\":134.4,\"amplitude\":-18},{\"angle\":135.1,\"amplitude\":-18},{\"angle\":135.6,\"amplitude\":-18.4},{\"angle\":136.5,\"amplitude\":-18.799999999999997},{\"angle\":137.4,\"amplitude\":-18.799999999999997},{\"angle\":138,\"amplitude\":-19.2},{\"angle\":138.2,\"amplitude\":-19.2},{\"angle\":139.5,\"amplitude\":-19.6},{\"angle\":140.1,\"amplitude\":-19.6},{\"angle\":140.3,\"amplitude\":-20},{\"angle\":140.5,\"amplitude\":-20},{\"angle\":141.2,\"amplitude\":-20.4},{\"angle\":141.8,\"amplitude\":-20.4},{\"angle\":142.7,\"amplitude\":-20.4},{\"angle\":143.3,\"amplitude\":-20.8},{\"angle\":143.5,\"amplitude\":-20.8},{\"angle\":144.2,\"amplitude\":-20.8},{\"angle\":144.8,\"amplitude\":-21.200000000000003},{\"angle\":145,\"amplitude\":-21.200000000000003},{\"angle\":146,\"amplitude\":-21.6},{\"angle\":146.8,\"amplitude\":-22},{\"angle\":148.6,\"amplitude\":-22.400000000000002},{\"angle\":149.2,\"amplitude\":-22.800000000000004},{\"angle\":150.3,\"amplitude\":-22.800000000000004},{\"angle\":151.5,\"amplitude\":-23.200000000000003},{\"angle\":152,\"amplitude\":-23.200000000000003},{\"angle\":152.6,\"amplitude\":-23.6},{\"angle\":152.9,\"amplitude\":-23.6},{\"angle\":153.2,\"amplitude\":-23.6},{\"angle\":153.3,\"amplitude\":-24},{\"angle\":153.8,\"amplitude\":-24},{\"angle\":154.1,\"amplitude\":-24},{\"angle\":154.7,\"amplitude\":-24.4},{\"angle\":155.3,\"amplitude\":-24.4},{\"angle\":155.6,\"amplitude\":-24.8},{\"angle\":155.9,\"amplitude\":-24.8},{\"angle\":156.8,\"amplitude\":-25.2},{\"angle\":157.6,\"amplitude\":-25.2},{\"angle\":158,\"amplitude\":-25.2},{\"angle\":158.8,\"amplitude\":-26},{\"angle\":159.2,\"amplitude\":-26},{\"angle\":159.8,\"amplitude\":-26.4},{\"angle\":160,\"amplitude\":-26.4},{\"angle\":160.8,\"amplitude\":-26.799999999999997},{\"angle\":161.5,\"amplitude\":-27.199999999999996},{\"angle\":162.3,\"amplitude\":-27.199999999999996},{\"angle\":163,\"amplitude\":-27.199999999999996},{\"angle\":163.3,\"amplitude\":-27.199999999999996},{\"angle\":163.4,\"amplitude\":-27.599999999999998},{\"angle\":164.4,\"amplitude\":-28},{\"angle\":164.8,\"amplitude\":-28},{\"angle\":165.4,\"amplitude\":-28},{\"angle\":168.8,\"amplitude\":-28.799999999999997},{\"angle\":169.1,\"amplitude\":-28.799999999999997},{\"angle\":170.7,\"amplitude\":-29.6},{\"angle\":172.1,\"amplitude\":-29.6},{\"angle\":172.4,\"amplitude\":-30},{\"angle\":173.4,\"amplitude\":-30},{\"angle\":174.4,\"amplitude\":-30},{\"angle\":175.7,\"amplitude\":-30.8},{\"angle\":176.2,\"amplitude\":-30.8},{\"angle\":177.3,\"amplitude\":-31.200000000000003},{\"angle\":177.9,\"amplitude\":-31.200000000000003},{\"angle\":178.4,\"amplitude\":-31.200000000000003},{\"angle\":180.3,\"amplitude\":-31.6},{\"amplitude\":-31.6,\"angle\":179.7},{\"amplitude\":-31.200000000000003,\"angle\":181.6},{\"amplitude\":-31.200000000000003,\"angle\":182.1},{\"amplitude\":-31.200000000000003,\"angle\":182.7},{\"amplitude\":-30.8,\"angle\":183.8},{\"amplitude\":-30.8,\"angle\":184.3},{\"amplitude\":-30,\"angle\":185.6},{\"amplitude\":-30,\"angle\":186.6},{\"amplitude\":-30,\"angle\":187.6},{\"amplitude\":-29.6,\"angle\":187.9},{\"amplitude\":-29.6,\"angle\":189.3},{\"amplitude\":-28.799999999999997,\"angle\":190.9},{\"amplitude\":-28.799999999999997,\"angle\":191.2},{\"amplitude\":-28,\"angle\":194.6},{\"amplitude\":-28,\"angle\":195.2},{\"amplitude\":-28,\"angle\":195.6},{\"amplitude\":-27.599999999999998,\"angle\":196.6},{\"amplitude\":-27.199999999999996,\"angle\":196.7},{\"amplitude\":-27.199999999999996,\"angle\":197},{\"amplitude\":-27.199999999999996,\"angle\":197.7},{\"amplitude\":-27.199999999999996,\"angle\":198.5},{\"amplitude\":-26.799999999999997,\"angle\":199.2},{\"amplitude\":-26.4,\"angle\":200},{\"amplitude\":-26.4,\"angle\":200.2},{\"amplitude\":-26,\"angle\":200.8},{\"amplitude\":-26,\"angle\":201.2},{\"amplitude\":-25.2,\"angle\":202},{\"amplitude\":-25.2,\"angle\":202.4},{\"amplitude\":-25.2,\"angle\":203.2},{\"amplitude\":-24.8,\"angle\":204.1},{\"amplitude\":-24.8,\"angle\":204.4},{\"amplitude\":-24.4,\"angle\":204.7},{\"amplitude\":-24.4,\"angle\":205.3},{\"amplitude\":-24,\"angle\":205.9},{\"amplitude\":-24,\"angle\":206.2},{\"amplitude\":-24,\"angle\":206.7},{\"amplitude\":-23.6,\"angle\":206.8},{\"amplitude\":-23.6,\"angle\":207.1},{\"amplitude\":-23.6,\"angle\":207.4},{\"amplitude\":-23.200000000000003,\"angle\":208},{\"amplitude\":-23.200000000000003,\"angle\":208.5},{\"amplitude\":-22.800000000000004,\"angle\":209.7},{\"amplitude\":-22.800000000000004,\"angle\":210.8},{\"amplitude\":-22.400000000000002,\"angle\":211.4},{\"amplitude\":-22,\"angle\":213.2},{\"amplitude\":-21.6,\"angle\":214},{\"amplitude\":-21.200000000000003,\"angle\":215},{\"amplitude\":-21.200000000000003,\"angle\":215.2},{\"amplitude\":-20.8,\"angle\":215.8},{\"amplitude\":-20.8,\"angle\":216.5},{\"amplitude\":-20.8,\"angle\":216.7},{\"amplitude\":-20.4,\"angle\":217.3},{\"amplitude\":-20.4,\"angle\":218.2},{\"amplitude\":-20.4,\"angle\":218.8},{\"amplitude\":-20,\"angle\":219.5},{\"amplitude\":-20,\"angle\":219.7},{\"amplitude\":-19.6,\"angle\":219.9},{\"amplitude\":-19.6,\"angle\":220.5},{\"amplitude\":-19.2,\"angle\":221.8},{\"amplitude\":-19.2,\"angle\":222},{\"amplitude\":-18.799999999999997,\"angle\":222.6},{\"amplitude\":-18.799999999999997,\"angle\":223.5},{\"amplitude\":-18.4,\"angle\":224.4},{\"amplitude\":-18,\"angle\":224.9},{\"amplitude\":-18,\"angle\":225.6},{\"amplitude\":-17.599999999999998,\"angle\":226.1},{\"amplitude\":-17.599999999999998,\"angle\":226.2},{\"amplitude\":-17.200000000000003,\"angle\":226.7},{\"amplitude\":-17.200000000000003,\"angle\":226.9},{\"amplitude\":-17.200000000000003,\"angle\":227.5},{\"amplitude\":-16.8,\"angle\":227.6},{\"amplitude\":-16.8,\"angle\":228},{\"amplitude\":-16.8,\"angle\":228.3},{\"amplitude\":-16.400000000000002,\"angle\":228.9},{\"amplitude\":-16.400000000000002,\"angle\":229.3},{\"amplitude\":-16,\"angle\":229.9},{\"amplitude\":-16,\"angle\":230.5},{\"amplitude\":-15.600000000000001,\"angle\":231.6},{\"amplitude\":-15.2,\"angle\":232.6},{\"amplitude\":-14.8,\"angle\":233},{\"amplitude\":-14.8,\"angle\":233.2},{\"amplitude\":-14.399999999999999,\"angle\":234.9},{\"amplitude\":-14.399999999999999,\"angle\":235.1},{\"amplitude\":-14,\"angle\":235.9},{\"amplitude\":-14,\"angle\":236.6},{\"amplitude\":-14,\"angle\":237},{\"amplitude\":-14,\"angle\":237.6},{\"amplitude\":-14,\"angle\":237.8},{\"amplitude\":-13.599999999999998,\"angle\":238.7},{\"amplitude\":-13.599999999999998,\"angle\":239.2},{\"amplitude\":-13.599999999999998,\"angle\":239.7},{\"amplitude\":-13.2,\"angle\":240.1},{\"amplitude\":-13.2,\"angle\":240.6},{\"amplitude\":-12.799999999999997,\"angle\":241.7},{\"amplitude\":-12.799999999999997,\"angle\":242.1},{\"amplitude\":-12.400000000000002,\"angle\":242.9},{\"amplitude\":-12.400000000000002,\"angle\":243},{\"amplitude\":-12.000000000000002,\"angle\":243.8},{\"amplitude\":-12.000000000000002,\"angle\":244},{\"amplitude\":-12.000000000000002,\"angle\":244.5},{\"amplitude\":-11.600000000000001,\"angle\":245.1},{\"amplitude\":-11.600000000000001,\"angle\":245.8},{\"amplitude\":-11.200000000000001,\"angle\":246.6},{\"amplitude\":-10.8,\"angle\":247.6},{\"amplitude\":-10.4,\"angle\":248.7},{\"amplitude\":-10,\"angle\":249.2},{\"amplitude\":-10,\"angle\":249.7},{\"amplitude\":-9.6,\"angle\":250.7},{\"amplitude\":-9.2,\"angle\":251.2},{\"amplitude\":-9.2,\"angle\":252.1},{\"amplitude\":-8.799999999999999,\"angle\":252.2},{\"amplitude\":-8.799999999999999,\"angle\":252.6},{\"amplitude\":-8.399999999999999,\"angle\":253.1},{\"amplitude\":-8.399999999999999,\"angle\":253.5},{\"amplitude\":-8.399999999999999,\"angle\":254},{\"amplitude\":-7.999999999999998,\"angle\":254.8},{\"amplitude\":-7.999999999999998,\"angle\":255.3},{\"amplitude\":-7.599999999999998,\"angle\":255.6},{\"amplitude\":-7.599999999999998,\"angle\":255.9},{\"amplitude\":-7.599999999999998,\"angle\":256.7},{\"amplitude\":-7.200000000000002,\"angle\":257.5},{\"amplitude\":-7.200000000000002,\"angle\":257.8},{\"amplitude\":-7.200000000000002,\"angle\":258.4},{\"amplitude\":-7.200000000000002,\"angle\":258.5},{\"amplitude\":-7.200000000000002,\"angle\":259.5},{\"amplitude\":-7.200000000000002,\"angle\":259.7},{\"amplitude\":-7.200000000000002,\"angle\":260.1},{\"amplitude\":-7.200000000000002,\"angle\":260.5},{\"amplitude\":-6.800000000000002,\"angle\":261.5},{\"amplitude\":-6.800000000000002,\"angle\":262.3},{\"amplitude\":-6.800000000000002,\"angle\":262.9},{\"amplitude\":-6.800000000000002,\"angle\":263.6},{\"amplitude\":-6.800000000000002,\"angle\":264.2},{\"amplitude\":-6.800000000000002,\"angle\":264.9},{\"amplitude\":-6.800000000000002,\"angle\":266},{\"amplitude\":-6.400000000000001,\"angle\":266.7},{\"amplitude\":-6.400000000000001,\"angle\":266.8},{\"amplitude\":-6.400000000000001,\"angle\":267.3},{\"amplitude\":-6.400000000000001,\"angle\":267.5},{\"amplitude\":-6.400000000000001,\"angle\":267.9},{\"amplitude\":-6.400000000000001,\"angle\":268.6},{\"amplitude\":-6.400000000000001,\"angle\":269.2},{\"amplitude\":-6.000000000000001,\"angle\":269.3},{\"amplitude\":-6.000000000000001,\"angle\":269.8},{\"amplitude\":-6.000000000000001,\"angle\":270},{\"amplitude\":-6.000000000000001,\"angle\":270.7},{\"amplitude\":-5.6000000000000005,\"angle\":271.4},{\"amplitude\":-5.6000000000000005,\"angle\":272},{\"amplitude\":-5.6000000000000005,\"angle\":272.4},{\"amplitude\":-5.6000000000000005,\"angle\":272.9},{\"amplitude\":-5.6000000000000005,\"angle\":273.2},{\"amplitude\":-5.2,\"angle\":274.1},{\"amplitude\":-5.2,\"angle\":274.4},{\"amplitude\":-5.2,\"angle\":274.9},{\"amplitude\":-5.2,\"angle\":275.5},{\"amplitude\":-5.2,\"angle\":276.2},{\"amplitude\":-5.2,\"angle\":276.8},{\"amplitude\":-5.2,\"angle\":279.3},{\"amplitude\":-5.2,\"angle\":279.6},{\"amplitude\":-5.2,\"angle\":280.2},{\"amplitude\":-5.2,\"angle\":280.5},{\"amplitude\":-5.2,\"angle\":281},{\"amplitude\":-5.2,\"angle\":281.7},{\"amplitude\":-5.2,\"angle\":282.4},{\"amplitude\":-5.2,\"angle\":283},{\"amplitude\":-5.2,\"angle\":283.4},{\"amplitude\":-5.2,\"angle\":284.2},{\"amplitude\":-5.2,\"angle\":284.5},{\"amplitude\":-5.2,\"angle\":285.5},{\"amplitude\":-5.2,\"angle\":286.4},{\"amplitude\":-5.2,\"angle\":287.7},{\"amplitude\":-5.2,\"angle\":287.8},{\"amplitude\":-4.8,\"angle\":288.9},{\"amplitude\":-4.8,\"angle\":289.5},{\"amplitude\":-5.2,\"angle\":290.3},{\"amplitude\":-5.2,\"angle\":290.5},{\"amplitude\":-5.2,\"angle\":291},{\"amplitude\":-5.2,\"angle\":292.2},{\"amplitude\":-5.2,\"angle\":292.9},{\"amplitude\":-5.2,\"angle\":293.5},{\"amplitude\":-5.2,\"angle\":294.1},{\"amplitude\":-5.2,\"angle\":294.3},{\"amplitude\":-5.2,\"angle\":295.2},{\"amplitude\":-5.2,\"angle\":295.6},{\"amplitude\":-4.8,\"angle\":295.7},{\"amplitude\":-4.8,\"angle\":296.6},{\"amplitude\":-4.8,\"angle\":297},{\"amplitude\":-4.8,\"angle\":297.5},{\"amplitude\":-4.8,\"angle\":298.8},{\"amplitude\":-4.8,\"angle\":299.6},{\"amplitude\":-4.8,\"angle\":300.1},{\"amplitude\":-4.8,\"angle\":300.8},{\"amplitude\":-4.8,\"angle\":301.2},{\"amplitude\":-4.3999999999999995,\"angle\":302},{\"amplitude\":-4.8,\"angle\":302.3},{\"amplitude\":-4.3999999999999995,\"angle\":302.8},{\"amplitude\":-4.3999999999999995,\"angle\":303.3},{\"amplitude\":-4.3999999999999995,\"angle\":303.4},{\"amplitude\":-4.3999999999999995,\"angle\":303.8},{\"amplitude\":-4.3999999999999995,\"angle\":304.3},{\"amplitude\":-3.999999999999999,\"angle\":305.6},{\"amplitude\":-3.5999999999999988,\"angle\":308.9},{\"amplitude\":-3.5999999999999988,\"angle\":309},{\"amplitude\":-3.1999999999999984,\"angle\":310.2},{\"amplitude\":-3.1999999999999984,\"angle\":310.5},{\"amplitude\":-3.1999999999999984,\"angle\":310.8},{\"amplitude\":-3.1999999999999984,\"angle\":311.2},{\"amplitude\":-3.1999999999999984,\"angle\":311.3},{\"amplitude\":-2.799999999999998,\"angle\":312},{\"amplitude\":-2.799999999999998,\"angle\":312.2},{\"amplitude\":-2.799999999999998,\"angle\":312.6},{\"amplitude\":-3.1999999999999984,\"angle\":312.8},{\"amplitude\":-2.799999999999998,\"angle\":313.4},{\"amplitude\":-2.799999999999998,\"angle\":314.2},{\"amplitude\":-2.799999999999998,\"angle\":314.6},{\"amplitude\":-2.799999999999998,\"angle\":314.8},{\"amplitude\":-2.799999999999998,\"angle\":315.3},{\"amplitude\":-2.799999999999998,\"angle\":315.7},{\"amplitude\":-2.799999999999998,\"angle\":316.1},{\"amplitude\":-2.799999999999998,\"angle\":316.9},{\"amplitude\":-2.799999999999998,\"angle\":317.2},{\"amplitude\":-2.799999999999998,\"angle\":317.8},{\"amplitude\":-2.400000000000002,\"angle\":318.6},{\"amplitude\":-2.400000000000002,\"angle\":319.1},{\"amplitude\":-2.400000000000002,\"angle\":319.8},{\"amplitude\":-2.400000000000002,\"angle\":320.4},{\"amplitude\":-2.400000000000002,\"angle\":321.2},{\"amplitude\":-2.400000000000002,\"angle\":321.3},{\"amplitude\":-2.0000000000000018,\"angle\":321.8},{\"amplitude\":-2.400000000000002,\"angle\":322.4},{\"amplitude\":-2.0000000000000018,\"angle\":323.1},{\"amplitude\":-2.0000000000000018,\"angle\":323.4},{\"amplitude\":-2.0000000000000018,\"angle\":323.9},{\"amplitude\":-2.0000000000000018,\"angle\":324},{\"amplitude\":-1.6000000000000014,\"angle\":324.1},{\"amplitude\":-1.6000000000000014,\"angle\":324.8},{\"amplitude\":-1.6000000000000014,\"angle\":325.7},{\"amplitude\":-1.6000000000000014,\"angle\":326.2},{\"amplitude\":-1.6000000000000014,\"angle\":326.5},{\"amplitude\":-1.6000000000000014,\"angle\":326.6},{\"amplitude\":-1.6000000000000014,\"angle\":327.3},{\"amplitude\":-1.6000000000000014,\"angle\":327.9},{\"amplitude\":-1.6000000000000014,\"angle\":328.2},{\"amplitude\":-1.6000000000000014,\"angle\":328.5},{\"amplitude\":-1.6000000000000014,\"angle\":329.4},{\"amplitude\":-1.6000000000000014,\"angle\":329.7},{\"amplitude\":-1.6000000000000014,\"angle\":330},{\"amplitude\":-1.6000000000000014,\"angle\":330.3},{\"amplitude\":-1.6000000000000014,\"angle\":330.8},{\"amplitude\":-1.6000000000000014,\"angle\":331.5},{\"amplitude\":-1.6000000000000014,\"angle\":333.6},{\"amplitude\":-1.6000000000000014,\"angle\":334.3},{\"amplitude\":-1.6000000000000014,\"angle\":334.4},{\"amplitude\":-1.6000000000000014,\"angle\":335.1},{\"amplitude\":-2.0000000000000018,\"angle\":335.9},{\"amplitude\":-2.0000000000000018,\"angle\":337.2},{\"amplitude\":-2.0000000000000018,\"angle\":337.4},{\"amplitude\":-2.0000000000000018,\"angle\":337.9},{\"amplitude\":-2.0000000000000018,\"angle\":338.7},{\"amplitude\":-2.0000000000000018,\"angle\":338.9},{\"amplitude\":-2.0000000000000018,\"angle\":339.1},{\"amplitude\":-2.0000000000000018,\"angle\":339.8},{\"amplitude\":-2.0000000000000018,\"angle\":340.3},{\"amplitude\":-2.0000000000000018,\"angle\":340.7},{\"amplitude\":-2.0000000000000018,\"angle\":340.8},{\"amplitude\":-2.0000000000000018,\"angle\":341.2},{\"amplitude\":-2.0000000000000018,\"angle\":341.5},{\"amplitude\":-2.0000000000000018,\"angle\":342.1},{\"amplitude\":-2.0000000000000018,\"angle\":342.6},{\"amplitude\":-2.0000000000000018,\"angle\":343.2},{\"amplitude\":-1.6000000000000014,\"angle\":343.9},{\"amplitude\":-1.6000000000000014,\"angle\":344},{\"amplitude\":-2.0000000000000018,\"angle\":344.3},{\"amplitude\":-2.0000000000000018,\"angle\":344.4},{\"amplitude\":-2.0000000000000018,\"angle\":345.2},{\"amplitude\":-2.0000000000000018,\"angle\":345.6},{\"amplitude\":-2.0000000000000018,\"angle\":345.7},{\"amplitude\":-2.0000000000000018,\"angle\":346.1},{\"amplitude\":-2.0000000000000018,\"angle\":346.7},{\"amplitude\":-2.0000000000000018,\"angle\":346.8},{\"amplitude\":-2.0000000000000018,\"angle\":347.2},{\"amplitude\":-1.6000000000000014,\"angle\":347.4},{\"amplitude\":-2.0000000000000018,\"angle\":347.8},{\"amplitude\":-2.0000000000000018,\"angle\":348},{\"amplitude\":-1.6000000000000014,\"angle\":348.4},{\"amplitude\":-1.6000000000000014,\"angle\":348.6},{\"amplitude\":-1.6000000000000014,\"angle\":349},{\"amplitude\":-1.6000000000000014,\"angle\":349.4},{\"amplitude\":-1.6000000000000014,\"angle\":349.6},{\"amplitude\":-1.6000000000000014,\"angle\":349.8},{\"amplitude\":-1.6000000000000014,\"angle\":350.9},{\"amplitude\":-1.200000000000001,\"angle\":351.3},{\"amplitude\":-1.200000000000001,\"angle\":351.8},{\"amplitude\":-1.200000000000001,\"angle\":351.9},{\"amplitude\":-1.200000000000001,\"angle\":352.1},{\"amplitude\":-1.200000000000001,\"angle\":352.5},{\"amplitude\":-1.200000000000001,\"angle\":353},{\"amplitude\":-1.200000000000001,\"angle\":353.6},{\"amplitude\":-1.200000000000001,\"angle\":354.1},{\"amplitude\":-0.8000000000000007,\"angle\":354.8},{\"amplitude\":-0.8000000000000007,\"angle\":355.3},{\"amplitude\":-0.8000000000000007,\"angle\":355.4},{\"amplitude\":-0.8000000000000007,\"angle\":355.7},{\"amplitude\":-0.8000000000000007,\"angle\":355.9},{\"amplitude\":-0.8000000000000007,\"angle\":356.5},{\"amplitude\":-0.8000000000000007,\"angle\":356.9},{\"amplitude\":-0.40000000000000036,\"angle\":357.4},{\"amplitude\":-0.40000000000000036,\"angle\":357.6},{\"amplitude\":-0.40000000000000036,\"angle\":358.7},{\"amplitude\":-0.40000000000000036,\"angle\":359.2},{\"amplitude\":-0.40000000000000036,\"angle\":359.5},{\"amplitude\":-0.40000000000000036,\"angle\":359.6},{\"amplitude\":-0.40000000000000036,\"angle\":360}]\n \n },\n {\n name: '8KHz',\n data: [{\"angle\":0,\"amplitude\":-0.40000000000000036},{\"angle\":0.3,\"amplitude\":-0.40000000000000036},{\"angle\":0.5,\"amplitude\":-0.40000000000000036},{\"angle\":0.8,\"amplitude\":-0.40000000000000036},{\"angle\":1.3,\"amplitude\":-0.40000000000000036},{\"angle\":1.4,\"amplitude\":-0.40000000000000036},{\"angle\":1.5,\"amplitude\":-0.40000000000000036},{\"angle\":1.6,\"amplitude\":-0.40000000000000036},{\"angle\":1.9,\"amplitude\":-0.40000000000000036},{\"angle\":2,\"amplitude\":-0.40000000000000036},{\"angle\":2.4,\"amplitude\":-0.40000000000000036},{\"angle\":2.7,\"amplitude\":-0.8000000000000007},{\"angle\":3.1,\"amplitude\":-0.8000000000000007},{\"angle\":3.3,\"amplitude\":-0.8000000000000007},{\"angle\":3.8,\"amplitude\":-0.8000000000000007},{\"angle\":4.1,\"amplitude\":-0.8000000000000007},{\"angle\":4.2,\"amplitude\":-0.8000000000000007},{\"angle\":4.3,\"amplitude\":-0.8000000000000007},{\"angle\":4.6,\"amplitude\":-1.200000000000001},{\"angle\":4.8,\"amplitude\":-1.200000000000001},{\"angle\":4.9,\"amplitude\":-1.200000000000001},{\"angle\":5.3,\"amplitude\":-1.200000000000001},{\"angle\":5.5,\"amplitude\":-1.200000000000001},{\"angle\":5.7,\"amplitude\":-1.200000000000001},{\"angle\":5.9,\"amplitude\":-1.200000000000001},{\"angle\":6.3,\"amplitude\":-1.200000000000001},{\"angle\":6.4,\"amplitude\":-1.200000000000001},{\"angle\":6.6,\"amplitude\":-1.200000000000001},{\"angle\":6.9,\"amplitude\":-1.200000000000001},{\"angle\":7,\"amplitude\":-1.200000000000001},{\"angle\":7.4,\"amplitude\":-1.200000000000001},{\"angle\":7.6,\"amplitude\":-1.200000000000001},{\"angle\":7.7,\"amplitude\":-1.200000000000001},{\"angle\":8.1,\"amplitude\":-1.200000000000001},{\"angle\":8.2,\"amplitude\":-1.200000000000001},{\"angle\":8.8,\"amplitude\":-1.6000000000000014},{\"angle\":9.1,\"amplitude\":-1.6000000000000014},{\"angle\":9.6,\"amplitude\":-1.6000000000000014},{\"angle\":9.8,\"amplitude\":-1.6000000000000014},{\"angle\":9.9,\"amplitude\":-1.6000000000000014},{\"angle\":10.2,\"amplitude\":-1.6000000000000014},{\"angle\":10.4,\"amplitude\":-1.6000000000000014},{\"angle\":10.5,\"amplitude\":-1.6000000000000014},{\"angle\":10.8,\"amplitude\":-1.6000000000000014},{\"angle\":10.9,\"amplitude\":-1.6000000000000014},{\"angle\":11,\"amplitude\":-1.6000000000000014},{\"angle\":11.4,\"amplitude\":-1.6000000000000014},{\"angle\":11.6,\"amplitude\":-1.6000000000000014},{\"angle\":12,\"amplitude\":-1.6000000000000014},{\"angle\":12.2,\"amplitude\":-1.6000000000000014},{\"angle\":12.5,\"amplitude\":-1.6000000000000014},{\"angle\":12.6,\"amplitude\":-1.6000000000000014},{\"angle\":13.2,\"amplitude\":-1.6000000000000014},{\"angle\":13.4,\"amplitude\":-1.6000000000000014},{\"angle\":13.6,\"amplitude\":-1.6000000000000014},{\"angle\":13.8,\"amplitude\":-1.6000000000000014},{\"angle\":13.9,\"amplitude\":-1.6000000000000014},{\"angle\":14.2,\"amplitude\":-1.6000000000000014},{\"angle\":14.7,\"amplitude\":-1.6000000000000014},{\"angle\":15,\"amplitude\":-1.6000000000000014},{\"angle\":15.3,\"amplitude\":-1.6000000000000014},{\"angle\":15.4,\"amplitude\":-1.6000000000000014},{\"angle\":15.8,\"amplitude\":-1.200000000000001},{\"angle\":16.1,\"amplitude\":-1.200000000000001},{\"angle\":16.3,\"amplitude\":-1.200000000000001},{\"angle\":16.6,\"amplitude\":-1.6000000000000014},{\"angle\":16.7,\"amplitude\":-1.6000000000000014},{\"angle\":17,\"amplitude\":-1.200000000000001},{\"angle\":17.1,\"amplitude\":-1.200000000000001},{\"angle\":17.2,\"amplitude\":-1.200000000000001},{\"angle\":17.6,\"amplitude\":-1.200000000000001},{\"angle\":17.7,\"amplitude\":-1.200000000000001},{\"angle\":18.3,\"amplitude\":-1.200000000000001},{\"angle\":18.6,\"amplitude\":-1.200000000000001},{\"angle\":18.7,\"amplitude\":-1.200000000000001},{\"angle\":19.1,\"amplitude\":-1.200000000000001},{\"angle\":19.2,\"amplitude\":-1.200000000000001},{\"angle\":21.1,\"amplitude\":-1.200000000000001},{\"angle\":21.6,\"amplitude\":-1.200000000000001},{\"angle\":21.9,\"amplitude\":-0.8000000000000007},{\"angle\":22.2,\"amplitude\":-1.200000000000001},{\"angle\":22.5,\"amplitude\":-0.8000000000000007},{\"angle\":22.7,\"amplitude\":-0.8000000000000007},{\"angle\":22.8,\"amplitude\":-0.8000000000000007},{\"angle\":23,\"amplitude\":-0.8000000000000007},{\"angle\":23.3,\"amplitude\":-1.200000000000001},{\"angle\":23.5,\"amplitude\":-1.200000000000001},{\"angle\":23.7,\"amplitude\":-0.8000000000000007},{\"angle\":23.9,\"amplitude\":-0.8000000000000007},{\"angle\":24.2,\"amplitude\":-0.8000000000000007},{\"angle\":24.6,\"amplitude\":-1.200000000000001},{\"angle\":24.9,\"amplitude\":-1.200000000000001},{\"angle\":25.6,\"amplitude\":-0.8000000000000007},{\"angle\":26.1,\"amplitude\":-1.200000000000001},{\"angle\":26.2,\"amplitude\":-0.8000000000000007},{\"angle\":26.4,\"amplitude\":-0.8000000000000007},{\"angle\":26.8,\"amplitude\":-0.8000000000000007},{\"angle\":26.9,\"amplitude\":-0.8000000000000007},{\"angle\":27.3,\"amplitude\":-0.8000000000000007},{\"angle\":27.5,\"amplitude\":-0.8000000000000007},{\"angle\":27.9,\"amplitude\":-0.8000000000000007},{\"angle\":28.3,\"amplitude\":-1.200000000000001},{\"angle\":28.7,\"amplitude\":-1.200000000000001},{\"angle\":29.2,\"amplitude\":-0.8000000000000007},{\"angle\":29.9,\"amplitude\":-1.200000000000001},{\"angle\":30.4,\"amplitude\":-1.200000000000001},{\"angle\":30.7,\"amplitude\":-1.200000000000001},{\"angle\":31.5,\"amplitude\":-0.8000000000000007},{\"angle\":31.9,\"amplitude\":-0.8000000000000007},{\"angle\":32.7,\"amplitude\":-0.8000000000000007},{\"angle\":32.8,\"amplitude\":-0.8000000000000007},{\"angle\":33.4,\"amplitude\":-0.8000000000000007},{\"angle\":33.5,\"amplitude\":-0.8000000000000007},{\"angle\":33.8,\"amplitude\":-0.8000000000000007},{\"angle\":34.4,\"amplitude\":-0.8000000000000007},{\"angle\":34.9,\"amplitude\":-0.8000000000000007},{\"angle\":35.4,\"amplitude\":-0.8000000000000007},{\"angle\":35.6,\"amplitude\":-0.8000000000000007},{\"angle\":36.3,\"amplitude\":-1.200000000000001},{\"angle\":36.4,\"amplitude\":-1.200000000000001},{\"angle\":37.2,\"amplitude\":-1.200000000000001},{\"angle\":37.5,\"amplitude\":-1.200000000000001},{\"angle\":38.3,\"amplitude\":-1.6000000000000014},{\"angle\":38.7,\"amplitude\":-1.6000000000000014},{\"angle\":39,\"amplitude\":-1.6000000000000014},{\"angle\":39.1,\"amplitude\":-1.6000000000000014},{\"angle\":39.2,\"amplitude\":-1.6000000000000014},{\"angle\":39.4,\"amplitude\":-1.6000000000000014},{\"angle\":39.9,\"amplitude\":-1.6000000000000014},{\"angle\":40.3,\"amplitude\":-1.6000000000000014},{\"angle\":40.6,\"amplitude\":-1.6000000000000014},{\"angle\":41,\"amplitude\":-1.6000000000000014},{\"angle\":41.1,\"amplitude\":-2.0000000000000018},{\"angle\":41.3,\"amplitude\":-1.6000000000000014},{\"angle\":41.5,\"amplitude\":-1.6000000000000014},{\"angle\":42.3,\"amplitude\":-1.6000000000000014},{\"angle\":42.4,\"amplitude\":-1.6000000000000014},{\"angle\":44,\"amplitude\":-1.6000000000000014},{\"angle\":44.6,\"amplitude\":-1.6000000000000014},{\"angle\":44.8,\"amplitude\":-1.6000000000000014},{\"angle\":45,\"amplitude\":-1.6000000000000014},{\"angle\":45.2,\"amplitude\":-1.6000000000000014},{\"angle\":45.4,\"amplitude\":-1.6000000000000014},{\"angle\":45.5,\"amplitude\":-1.6000000000000014},{\"angle\":46,\"amplitude\":-2.0000000000000018},{\"angle\":46.5,\"amplitude\":-2.0000000000000018},{\"angle\":46.9,\"amplitude\":-2.0000000000000018},{\"angle\":47.7,\"amplitude\":-2.0000000000000018},{\"angle\":47.8,\"amplitude\":-2.0000000000000018},{\"angle\":48.3,\"amplitude\":-2.400000000000002},{\"angle\":49.2,\"amplitude\":-2.400000000000002},{\"angle\":49.5,\"amplitude\":-2.400000000000002},{\"angle\":49.6,\"amplitude\":-2.400000000000002},{\"angle\":50.2,\"amplitude\":-2.400000000000002},{\"angle\":50.9,\"amplitude\":-2.400000000000002},{\"angle\":51.4,\"amplitude\":-2.799999999999998},{\"angle\":51.5,\"amplitude\":-2.799999999999998},{\"angle\":51.7,\"amplitude\":-2.400000000000002},{\"angle\":52.1,\"amplitude\":-2.799999999999998},{\"angle\":52.3,\"amplitude\":-2.799999999999998},{\"angle\":52.8,\"amplitude\":-2.799999999999998},{\"angle\":53,\"amplitude\":-2.799999999999998},{\"angle\":53.3,\"amplitude\":-2.799999999999998},{\"angle\":53.5,\"amplitude\":-2.799999999999998},{\"angle\":54.1,\"amplitude\":-2.799999999999998},{\"angle\":54.8,\"amplitude\":-2.799999999999998},{\"angle\":54.9,\"amplitude\":-3.1999999999999984},{\"angle\":55.1,\"amplitude\":-2.799999999999998},{\"angle\":55.3,\"amplitude\":-2.799999999999998},{\"angle\":55.6,\"amplitude\":-2.799999999999998},{\"angle\":56,\"amplitude\":-3.1999999999999984},{\"angle\":56.3,\"amplitude\":-2.799999999999998},{\"angle\":56.4,\"amplitude\":-2.799999999999998},{\"angle\":56.8,\"amplitude\":-3.1999999999999984},{\"angle\":57,\"amplitude\":-3.1999999999999984},{\"angle\":57.2,\"amplitude\":-3.1999999999999984},{\"angle\":57.5,\"amplitude\":-3.1999999999999984},{\"angle\":57.7,\"amplitude\":-2.799999999999998},{\"angle\":57.9,\"amplitude\":-3.1999999999999984},{\"angle\":58.1,\"amplitude\":-3.1999999999999984},{\"angle\":58.2,\"amplitude\":-3.1999999999999984},{\"angle\":58.6,\"amplitude\":-3.1999999999999984},{\"angle\":58.8,\"amplitude\":-3.1999999999999984},{\"angle\":59.5,\"amplitude\":-2.799999999999998},{\"angle\":59.7,\"amplitude\":-2.799999999999998},{\"angle\":60.9,\"amplitude\":-2.799999999999998},{\"angle\":61.1,\"amplitude\":-2.799999999999998},{\"angle\":61.8,\"amplitude\":-2.799999999999998},{\"angle\":62.1,\"amplitude\":-2.799999999999998},{\"angle\":62.3,\"amplitude\":-2.799999999999998},{\"angle\":62.7,\"amplitude\":-2.799999999999998},{\"angle\":63.1,\"amplitude\":-2.799999999999998},{\"angle\":63.4,\"amplitude\":-2.799999999999998},{\"angle\":63.5,\"amplitude\":-2.799999999999998},{\"angle\":63.6,\"amplitude\":-2.799999999999998},{\"angle\":64,\"amplitude\":-2.799999999999998},{\"angle\":64.3,\"amplitude\":-2.799999999999998},{\"angle\":64.8,\"amplitude\":-2.799999999999998},{\"angle\":65.1,\"amplitude\":-2.799999999999998},{\"angle\":65.3,\"amplitude\":-3.1999999999999984},{\"angle\":65.4,\"amplitude\":-2.799999999999998},{\"angle\":66.3,\"amplitude\":-3.1999999999999984},{\"angle\":66.6,\"amplitude\":-3.1999999999999984},{\"angle\":67,\"amplitude\":-3.1999999999999984},{\"angle\":67.7,\"amplitude\":-3.1999999999999984},{\"angle\":67.8,\"amplitude\":-3.1999999999999984},{\"angle\":68.2,\"amplitude\":-3.1999999999999984},{\"angle\":68.4,\"amplitude\":-3.1999999999999984},{\"angle\":68.7,\"amplitude\":-3.1999999999999984},{\"angle\":68.9,\"amplitude\":-3.1999999999999984},{\"angle\":69.6,\"amplitude\":-3.1999999999999984},{\"angle\":69.7,\"amplitude\":-3.1999999999999984},{\"angle\":69.9,\"amplitude\":-3.1999999999999984},{\"angle\":70.1,\"amplitude\":-3.1999999999999984},{\"angle\":70.6,\"amplitude\":-3.5999999999999988},{\"angle\":71.1,\"amplitude\":-3.5999999999999988},{\"angle\":71.4,\"amplitude\":-3.1999999999999984},{\"angle\":71.8,\"amplitude\":-3.5999999999999988},{\"angle\":72.3,\"amplitude\":-3.1999999999999984},{\"angle\":72.4,\"amplitude\":-3.5999999999999988},{\"angle\":72.6,\"amplitude\":-3.5999999999999988},{\"angle\":72.8,\"amplitude\":-3.5999999999999988},{\"angle\":73,\"amplitude\":-3.5999999999999988},{\"angle\":73.1,\"amplitude\":-3.5999999999999988},{\"angle\":73.4,\"amplitude\":-3.5999999999999988},{\"angle\":73.7,\"amplitude\":-3.5999999999999988},{\"angle\":74.1,\"amplitude\":-3.5999999999999988},{\"angle\":74.6,\"amplitude\":-3.5999999999999988},{\"angle\":74.7,\"amplitude\":-3.5999999999999988},{\"angle\":75.1,\"amplitude\":-3.999999999999999},{\"angle\":75.3,\"amplitude\":-3.999999999999999},{\"angle\":75.4,\"amplitude\":-3.999999999999999},{\"angle\":75.7,\"amplitude\":-3.999999999999999},{\"angle\":76,\"amplitude\":-3.999999999999999},{\"angle\":76.3,\"amplitude\":-3.999999999999999},{\"angle\":76.4,\"amplitude\":-3.999999999999999},{\"angle\":76.8,\"amplitude\":-3.999999999999999},{\"angle\":77.1,\"amplitude\":-3.999999999999999},{\"angle\":77.5,\"amplitude\":-3.999999999999999},{\"angle\":77.6,\"amplitude\":-3.999999999999999},{\"angle\":77.8,\"amplitude\":-3.999999999999999},{\"angle\":78.2,\"amplitude\":-3.999999999999999},{\"angle\":78.4,\"amplitude\":-3.999999999999999},{\"angle\":78.7,\"amplitude\":-3.999999999999999},{\"angle\":78.8,\"amplitude\":-3.999999999999999},{\"angle\":79,\"amplitude\":-3.5999999999999988},{\"angle\":79.3,\"amplitude\":-3.5999999999999988},{\"angle\":79.5,\"amplitude\":-3.5999999999999988},{\"angle\":79.6,\"amplitude\":-3.5999999999999988},{\"angle\":79.9,\"amplitude\":-3.999999999999999},{\"angle\":80,\"amplitude\":-3.999999999999999},{\"angle\":80.2,\"amplitude\":-3.999999999999999},{\"angle\":80.5,\"amplitude\":-3.999999999999999},{\"angle\":80.6,\"amplitude\":-3.999999999999999},{\"angle\":80.8,\"amplitude\":-3.999999999999999},{\"angle\":81.1,\"amplitude\":-3.999999999999999},{\"angle\":81.2,\"amplitude\":-3.999999999999999},{\"angle\":81.8,\"amplitude\":-3.999999999999999},{\"angle\":81.9,\"amplitude\":-3.999999999999999},{\"angle\":82.5,\"amplitude\":-3.999999999999999},{\"angle\":82.8,\"amplitude\":-3.999999999999999},{\"angle\":83.5,\"amplitude\":-3.999999999999999},{\"angle\":83.7,\"amplitude\":-3.999999999999999},{\"angle\":84.1,\"amplitude\":-3.999999999999999},{\"angle\":84.3,\"amplitude\":-4.3999999999999995},{\"angle\":84.7,\"amplitude\":-4.3999999999999995},{\"angle\":84.8,\"amplitude\":-4.3999999999999995},{\"angle\":85.1,\"amplitude\":-4.3999999999999995},{\"angle\":85.3,\"amplitude\":-4.3999999999999995},{\"angle\":85.4,\"amplitude\":-4.3999999999999995},{\"angle\":85.9,\"amplitude\":-4.3999999999999995},{\"angle\":86,\"amplitude\":-4.3999999999999995},{\"angle\":86.5,\"amplitude\":-4.3999999999999995},{\"angle\":86.6,\"amplitude\":-4.3999999999999995},{\"angle\":87,\"amplitude\":-4.8},{\"angle\":87.2,\"amplitude\":-4.8},{\"angle\":87.6,\"amplitude\":-4.8},{\"angle\":88.1,\"amplitude\":-4.8},{\"angle\":88.2,\"amplitude\":-4.8},{\"angle\":88.4,\"amplitude\":-4.8},{\"angle\":88.7,\"amplitude\":-4.8},{\"angle\":88.8,\"amplitude\":-4.8},{\"angle\":89.3,\"amplitude\":-4.8},{\"angle\":89.6,\"amplitude\":-4.8},{\"angle\":89.9,\"amplitude\":-4.8},{\"angle\":90,\"amplitude\":-4.8},{\"angle\":90.2,\"amplitude\":-4.8},{\"angle\":90.5,\"amplitude\":-4.8},{\"angle\":90.8,\"amplitude\":-4.8},{\"angle\":92,\"amplitude\":-5.2},{\"angle\":92.3,\"amplitude\":-5.2},{\"angle\":92.6,\"amplitude\":-5.2},{\"angle\":92.9,\"amplitude\":-5.2},{\"angle\":93.1,\"amplitude\":-5.2},{\"angle\":93.2,\"amplitude\":-5.2},{\"angle\":93.5,\"amplitude\":-5.6000000000000005},{\"angle\":93.7,\"amplitude\":-5.6000000000000005},{\"angle\":93.9,\"amplitude\":-5.6000000000000005},{\"angle\":94.2,\"amplitude\":-5.6000000000000005},{\"angle\":94.3,\"amplitude\":-5.6000000000000005},{\"angle\":94.8,\"amplitude\":-5.6000000000000005},{\"angle\":95,\"amplitude\":-5.6000000000000005},{\"angle\":95.5,\"amplitude\":-6.000000000000001},{\"angle\":95.8,\"amplitude\":-6.000000000000001},{\"angle\":96.2,\"amplitude\":-6.000000000000001},{\"angle\":96.7,\"amplitude\":-6.000000000000001},{\"angle\":97.1,\"amplitude\":-6.000000000000001},{\"angle\":97.4,\"amplitude\":-6.000000000000001},{\"angle\":97.7,\"amplitude\":-6.000000000000001},{\"angle\":98,\"amplitude\":-6.000000000000001},{\"angle\":98.2,\"amplitude\":-6.400000000000001},{\"angle\":98.3,\"amplitude\":-6.400000000000001},{\"angle\":98.7,\"amplitude\":-6.400000000000001},{\"angle\":98.9,\"amplitude\":-6.400000000000001},{\"angle\":99,\"amplitude\":-6.400000000000001},{\"angle\":99.3,\"amplitude\":-6.400000000000001},{\"angle\":100,\"amplitude\":-6.400000000000001},{\"angle\":100.3,\"amplitude\":-6.400000000000001},{\"angle\":100.6,\"amplitude\":-6.400000000000001},{\"angle\":100.7,\"amplitude\":-6.400000000000001},{\"angle\":101,\"amplitude\":-6.400000000000001},{\"angle\":101.3,\"amplitude\":-6.400000000000001},{\"angle\":101.7,\"amplitude\":-6.800000000000002},{\"angle\":102,\"amplitude\":-6.400000000000001},{\"angle\":102.2,\"amplitude\":-6.800000000000002},{\"angle\":102.4,\"amplitude\":-6.800000000000002},{\"angle\":103,\"amplitude\":-6.800000000000002},{\"angle\":103.1,\"amplitude\":-7.200000000000002},{\"angle\":103.5,\"amplitude\":-7.200000000000002},{\"angle\":103.6,\"amplitude\":-7.200000000000002},{\"angle\":104.1,\"amplitude\":-7.200000000000002},{\"angle\":104.4,\"amplitude\":-7.200000000000002},{\"angle\":104.6,\"amplitude\":-7.200000000000002},{\"angle\":104.9,\"amplitude\":-7.200000000000002},{\"angle\":105.1,\"amplitude\":-7.599999999999998},{\"angle\":105.3,\"amplitude\":-7.599999999999998},{\"angle\":105.7,\"amplitude\":-7.599999999999998},{\"angle\":106,\"amplitude\":-7.599999999999998},{\"angle\":106.5,\"amplitude\":-7.599999999999998},{\"angle\":106.7,\"amplitude\":-7.999999999999998},{\"angle\":106.8,\"amplitude\":-7.999999999999998},{\"angle\":107.3,\"amplitude\":-7.999999999999998},{\"angle\":107.5,\"amplitude\":-7.999999999999998},{\"angle\":107.6,\"amplitude\":-8.399999999999999},{\"angle\":108.1,\"amplitude\":-8.399999999999999},{\"angle\":108.4,\"amplitude\":-8.399999999999999},{\"angle\":108.6,\"amplitude\":-8.399999999999999},{\"angle\":109,\"amplitude\":-8.399999999999999},{\"angle\":109.2,\"amplitude\":-8.399999999999999},{\"angle\":109.5,\"amplitude\":-8.799999999999999},{\"angle\":109.8,\"amplitude\":-8.799999999999999},{\"angle\":110,\"amplitude\":-8.799999999999999},{\"angle\":110.1,\"amplitude\":-8.799999999999999},{\"angle\":110.6,\"amplitude\":-8.799999999999999},{\"angle\":110.9,\"amplitude\":-8.799999999999999},{\"angle\":111,\"amplitude\":-8.799999999999999},{\"angle\":111.5,\"amplitude\":-8.799999999999999},{\"angle\":111.7,\"amplitude\":-8.799999999999999},{\"angle\":112.2,\"amplitude\":-8.799999999999999},{\"angle\":112.4,\"amplitude\":-9.2},{\"angle\":112.6,\"amplitude\":-9.2},{\"angle\":112.7,\"amplitude\":-9.2},{\"angle\":113.5,\"amplitude\":-9.2},{\"angle\":113.7,\"amplitude\":-9.6},{\"angle\":114,\"amplitude\":-9.2},{\"angle\":114.2,\"amplitude\":-9.6},{\"angle\":114.4,\"amplitude\":-9.6},{\"angle\":114.9,\"amplitude\":-9.6},{\"angle\":115,\"amplitude\":-9.6},{\"angle\":115.3,\"amplitude\":-9.6},{\"angle\":115.4,\"amplitude\":-10},{\"angle\":115.8,\"amplitude\":-10},{\"angle\":116.3,\"amplitude\":-10},{\"angle\":116.4,\"amplitude\":-10},{\"angle\":117.1,\"amplitude\":-10.4},{\"angle\":117.3,\"amplitude\":-10},{\"angle\":117.5,\"amplitude\":-10.4},{\"angle\":117.8,\"amplitude\":-10.4},{\"angle\":118,\"amplitude\":-10.8},{\"angle\":118.3,\"amplitude\":-10.8},{\"angle\":118.4,\"amplitude\":-10.8},{\"angle\":118.8,\"amplitude\":-10.8},{\"angle\":119,\"amplitude\":-10.8},{\"angle\":119.4,\"amplitude\":-10.8},{\"angle\":119.6,\"amplitude\":-10.8},{\"angle\":119.8,\"amplitude\":-11.200000000000001},{\"angle\":120.5,\"amplitude\":-11.200000000000001},{\"angle\":120.7,\"amplitude\":-11.200000000000001},{\"angle\":120.9,\"amplitude\":-11.200000000000001},{\"angle\":121.4,\"amplitude\":-11.600000000000001},{\"angle\":121.8,\"amplitude\":-11.600000000000001},{\"angle\":121.9,\"amplitude\":-11.600000000000001},{\"angle\":122.1,\"amplitude\":-11.600000000000001},{\"angle\":122.3,\"amplitude\":-11.600000000000001},{\"angle\":122.8,\"amplitude\":-12.000000000000002},{\"angle\":123.3,\"amplitude\":-12.000000000000002},{\"angle\":123.7,\"amplitude\":-12.000000000000002},{\"angle\":124.5,\"amplitude\":-12.799999999999997},{\"angle\":124.9,\"amplitude\":-12.799999999999997},{\"angle\":125.7,\"amplitude\":-12.799999999999997},{\"angle\":126,\"amplitude\":-13.2},{\"angle\":126.1,\"amplitude\":-13.2},{\"angle\":126.5,\"amplitude\":-13.599999999999998},{\"angle\":126.8,\"amplitude\":-13.599999999999998},{\"angle\":127,\"amplitude\":-13.599999999999998},{\"angle\":127.1,\"amplitude\":-13.599999999999998},{\"angle\":127.4,\"amplitude\":-13.599999999999998},{\"angle\":127.9,\"amplitude\":-14},{\"angle\":128.1,\"amplitude\":-14},{\"angle\":129.1,\"amplitude\":-14.399999999999999},{\"angle\":129.8,\"amplitude\":-14.399999999999999},{\"angle\":130,\"amplitude\":-14.399999999999999},{\"angle\":130.4,\"amplitude\":-14.8},{\"angle\":130.5,\"amplitude\":-14.8},{\"angle\":130.9,\"amplitude\":-15.2},{\"angle\":131.4,\"amplitude\":-14.8},{\"angle\":131.5,\"amplitude\":-15.2},{\"angle\":132.1,\"amplitude\":-15.2},{\"angle\":132.5,\"amplitude\":-15.600000000000001},{\"angle\":133.9,\"amplitude\":-15.600000000000001},{\"angle\":134.2,\"amplitude\":-15.600000000000001},{\"angle\":135,\"amplitude\":-16},{\"angle\":135.1,\"amplitude\":-16},{\"angle\":136.1,\"amplitude\":-16.400000000000002},{\"angle\":136.4,\"amplitude\":-16.400000000000002},{\"angle\":136.7,\"amplitude\":-16.400000000000002},{\"angle\":137.7,\"amplitude\":-16.8},{\"angle\":138,\"amplitude\":-16.8},{\"angle\":138.2,\"amplitude\":-16.8},{\"angle\":138.7,\"amplitude\":-17.200000000000003},{\"angle\":138.9,\"amplitude\":-17.200000000000003},{\"angle\":139.3,\"amplitude\":-16.8},{\"angle\":139.7,\"amplitude\":-17.200000000000003},{\"angle\":139.9,\"amplitude\":-17.200000000000003},{\"angle\":140,\"amplitude\":-17.200000000000003},{\"angle\":140.9,\"amplitude\":-17.200000000000003},{\"angle\":141.1,\"amplitude\":-17.200000000000003},{\"angle\":141.4,\"amplitude\":-17.599999999999998},{\"angle\":141.6,\"amplitude\":-17.599999999999998},{\"angle\":141.8,\"amplitude\":-17.599999999999998},{\"angle\":142.2,\"amplitude\":-17.599999999999998},{\"angle\":142.3,\"amplitude\":-17.599999999999998},{\"angle\":142.5,\"amplitude\":-17.599999999999998},{\"angle\":143.1,\"amplitude\":-18},{\"angle\":143.4,\"amplitude\":-18},{\"angle\":144,\"amplitude\":-18},{\"angle\":144.2,\"amplitude\":-18},{\"angle\":144.4,\"amplitude\":-18},{\"angle\":144.7,\"amplitude\":-18},{\"angle\":144.9,\"amplitude\":-18.4},{\"angle\":145.1,\"amplitude\":-18.4},{\"angle\":145.8,\"amplitude\":-18.4},{\"angle\":146.6,\"amplitude\":-18.799999999999997},{\"angle\":147.7,\"amplitude\":-18.799999999999997},{\"angle\":147.9,\"amplitude\":-18.799999999999997},{\"angle\":148.9,\"amplitude\":-18.799999999999997},{\"angle\":149.5,\"amplitude\":-18.799999999999997},{\"angle\":149.8,\"amplitude\":-18.799999999999997},{\"angle\":150.5,\"amplitude\":-19.2},{\"angle\":150.7,\"amplitude\":-19.2},{\"angle\":151.4,\"amplitude\":-19.2},{\"angle\":151.6,\"amplitude\":-19.2},{\"angle\":152.1,\"amplitude\":-19.6},{\"angle\":152.3,\"amplitude\":-19.6},{\"angle\":153.2,\"amplitude\":-19.6},{\"angle\":153.9,\"amplitude\":-19.6},{\"angle\":154.9,\"amplitude\":-20},{\"angle\":155.1,\"amplitude\":-20},{\"angle\":155.3,\"amplitude\":-20},{\"angle\":155.8,\"amplitude\":-20},{\"angle\":156.1,\"amplitude\":-20},{\"angle\":156.3,\"amplitude\":-20},{\"angle\":156.8,\"amplitude\":-20.4},{\"angle\":157.3,\"amplitude\":-20.4},{\"angle\":157.8,\"amplitude\":-20.4},{\"angle\":158,\"amplitude\":-20.4},{\"angle\":158.3,\"amplitude\":-20.4},{\"angle\":158.8,\"amplitude\":-20.4},{\"angle\":159,\"amplitude\":-20.4},{\"angle\":159.8,\"amplitude\":-20.8},{\"angle\":160,\"amplitude\":-20.8},{\"angle\":161.1,\"amplitude\":-20.8},{\"angle\":161.3,\"amplitude\":-20.8},{\"angle\":162,\"amplitude\":-20.8},{\"angle\":163.3,\"amplitude\":-21.200000000000003},{\"angle\":163.7,\"amplitude\":-21.6},{\"angle\":163.9,\"amplitude\":-21.6},{\"angle\":164.7,\"amplitude\":-21.6},{\"angle\":165,\"amplitude\":-21.6},{\"angle\":165.8,\"amplitude\":-21.6},{\"angle\":166.1,\"amplitude\":-21.6},{\"angle\":166.7,\"amplitude\":-22},{\"angle\":167,\"amplitude\":-22},{\"angle\":167.3,\"amplitude\":-22},{\"angle\":167.8,\"amplitude\":-22.400000000000002},{\"angle\":168.1,\"amplitude\":-22.400000000000002},{\"angle\":168.4,\"amplitude\":-22.400000000000002},{\"angle\":169.2,\"amplitude\":-22.400000000000002},{\"angle\":169.4,\"amplitude\":-22.800000000000004},{\"angle\":170,\"amplitude\":-22.800000000000004},{\"angle\":170.3,\"amplitude\":-22.800000000000004},{\"angle\":170.6,\"amplitude\":-22.800000000000004},{\"angle\":171.1,\"amplitude\":-22.800000000000004},{\"angle\":171.3,\"amplitude\":-23.200000000000003},{\"angle\":171.6,\"amplitude\":-23.200000000000003},{\"angle\":173.5,\"amplitude\":-23.200000000000003},{\"angle\":173.7,\"amplitude\":-23.6},{\"angle\":174.6,\"amplitude\":-23.6},{\"angle\":175.3,\"amplitude\":-23.6},{\"angle\":175.9,\"amplitude\":-23.6},{\"angle\":176.2,\"amplitude\":-23.6},{\"angle\":176.5,\"amplitude\":-23.6},{\"angle\":177.1,\"amplitude\":-24},{\"angle\":177.5,\"amplitude\":-24},{\"angle\":177.8,\"amplitude\":-24},{\"angle\":178.5,\"amplitude\":-24},{\"angle\":178.8,\"amplitude\":-24},{\"angle\":179.1,\"amplitude\":-24},{\"angle\":179.8,\"amplitude\":-24},{\"angle\":180.1,\"amplitude\":-24},{\"amplitude\":-24,\"angle\":179.9},{\"amplitude\":-24,\"angle\":180.2},{\"amplitude\":-24,\"angle\":180.9},{\"amplitude\":-24,\"angle\":181.2},{\"amplitude\":-24,\"angle\":181.5},{\"amplitude\":-24,\"angle\":182.2},{\"amplitude\":-24,\"angle\":182.5},{\"amplitude\":-24,\"angle\":182.9},{\"amplitude\":-23.6,\"angle\":183.5},{\"amplitude\":-23.6,\"angle\":183.8},{\"amplitude\":-23.6,\"angle\":184.1},{\"amplitude\":-23.6,\"angle\":184.7},{\"amplitude\":-23.6,\"angle\":185.4},{\"amplitude\":-23.6,\"angle\":186.3},{\"amplitude\":-23.200000000000003,\"angle\":186.5},{\"amplitude\":-23.200000000000003,\"angle\":188.4},{\"amplitude\":-23.200000000000003,\"angle\":188.7},{\"amplitude\":-22.800000000000004,\"angle\":188.9},{\"amplitude\":-22.800000000000004,\"angle\":189.4},{\"amplitude\":-22.800000000000004,\"angle\":189.7},{\"amplitude\":-22.800000000000004,\"angle\":190},{\"amplitude\":-22.800000000000004,\"angle\":190.6},{\"amplitude\":-22.400000000000002,\"angle\":190.8},{\"amplitude\":-22.400000000000002,\"angle\":191.6},{\"amplitude\":-22.400000000000002,\"angle\":191.9},{\"amplitude\":-22.400000000000002,\"angle\":192.2},{\"amplitude\":-22,\"angle\":192.7},{\"amplitude\":-22,\"angle\":193},{\"amplitude\":-22,\"angle\":193.3},{\"amplitude\":-21.6,\"angle\":193.9},{\"amplitude\":-21.6,\"angle\":194.2},{\"amplitude\":-21.6,\"angle\":195},{\"amplitude\":-21.6,\"angle\":195.3},{\"amplitude\":-21.6,\"angle\":196.1},{\"amplitude\":-21.6,\"angle\":196.3},{\"amplitude\":-21.200000000000003,\"angle\":196.7},{\"amplitude\":-20.8,\"angle\":198},{\"amplitude\":-20.8,\"angle\":198.7},{\"amplitude\":-20.8,\"angle\":198.9},{\"amplitude\":-20.8,\"angle\":200},{\"amplitude\":-20.8,\"angle\":200.2},{\"amplitude\":-20.4,\"angle\":201},{\"amplitude\":-20.4,\"angle\":201.2},{\"amplitude\":-20.4,\"angle\":201.7},{\"amplitude\":-20.4,\"angle\":202},{\"amplitude\":-20.4,\"angle\":202.2},{\"amplitude\":-20.4,\"angle\":202.7},{\"amplitude\":-20.4,\"angle\":203.2},{\"amplitude\":-20,\"angle\":203.7},{\"amplitude\":-20,\"angle\":203.9},{\"amplitude\":-20,\"angle\":204.2},{\"amplitude\":-20,\"angle\":204.7},{\"amplitude\":-20,\"angle\":204.9},{\"amplitude\":-20,\"angle\":205.1},{\"amplitude\":-19.6,\"angle\":206.1},{\"amplitude\":-19.6,\"angle\":206.8},{\"amplitude\":-19.6,\"angle\":207.7},{\"amplitude\":-19.6,\"angle\":207.9},{\"amplitude\":-19.2,\"angle\":208.4},{\"amplitude\":-19.2,\"angle\":208.6},{\"amplitude\":-19.2,\"angle\":209.3},{\"amplitude\":-19.2,\"angle\":209.5},{\"amplitude\":-18.799999999999997,\"angle\":210.2},{\"amplitude\":-18.799999999999997,\"angle\":210.5},{\"amplitude\":-18.799999999999997,\"angle\":211.1},{\"amplitude\":-18.799999999999997,\"angle\":212.1},{\"amplitude\":-18.799999999999997,\"angle\":212.3},{\"amplitude\":-18.799999999999997,\"angle\":213.4},{\"amplitude\":-18.4,\"angle\":214.2},{\"amplitude\":-18.4,\"angle\":214.9},{\"amplitude\":-18.4,\"angle\":215.1},{\"amplitude\":-18,\"angle\":215.3},{\"amplitude\":-18,\"angle\":215.6},{\"amplitude\":-18,\"angle\":215.8},{\"amplitude\":-18,\"angle\":216},{\"amplitude\":-18,\"angle\":216.6},{\"amplitude\":-18,\"angle\":216.9},{\"amplitude\":-17.599999999999998,\"angle\":217.5},{\"amplitude\":-17.599999999999998,\"angle\":217.7},{\"amplitude\":-17.599999999999998,\"angle\":217.8},{\"amplitude\":-17.599999999999998,\"angle\":218.2},{\"amplitude\":-17.599999999999998,\"angle\":218.4},{\"amplitude\":-17.599999999999998,\"angle\":218.6},{\"amplitude\":-17.200000000000003,\"angle\":218.9},{\"amplitude\":-17.200000000000003,\"angle\":219.1},{\"amplitude\":-17.200000000000003,\"angle\":220},{\"amplitude\":-17.200000000000003,\"angle\":220.1},{\"amplitude\":-17.200000000000003,\"angle\":220.3},{\"amplitude\":-16.8,\"angle\":220.7},{\"amplitude\":-17.200000000000003,\"angle\":221.1},{\"amplitude\":-17.200000000000003,\"angle\":221.3},{\"amplitude\":-16.8,\"angle\":221.8},{\"amplitude\":-16.8,\"angle\":222},{\"amplitude\":-16.8,\"angle\":222.3},{\"amplitude\":-16.400000000000002,\"angle\":223.3},{\"amplitude\":-16.400000000000002,\"angle\":223.6},{\"amplitude\":-16.400000000000002,\"angle\":223.9},{\"amplitude\":-16,\"angle\":224.9},{\"amplitude\":-16,\"angle\":225},{\"amplitude\":-15.600000000000001,\"angle\":225.8},{\"amplitude\":-15.600000000000001,\"angle\":226.1},{\"amplitude\":-15.600000000000001,\"angle\":227.5},{\"amplitude\":-15.2,\"angle\":227.9},{\"amplitude\":-15.2,\"angle\":228.5},{\"amplitude\":-14.8,\"angle\":228.6},{\"amplitude\":-15.2,\"angle\":229.1},{\"amplitude\":-14.8,\"angle\":229.5},{\"amplitude\":-14.8,\"angle\":229.6},{\"amplitude\":-14.399999999999999,\"angle\":230},{\"amplitude\":-14.399999999999999,\"angle\":230.2},{\"amplitude\":-14.399999999999999,\"angle\":230.9},{\"amplitude\":-14,\"angle\":231.9},{\"amplitude\":-14,\"angle\":232.1},{\"amplitude\":-13.599999999999998,\"angle\":232.6},{\"amplitude\":-13.599999999999998,\"angle\":232.9},{\"amplitude\":-13.599999999999998,\"angle\":233},{\"amplitude\":-13.599999999999998,\"angle\":233.2},{\"amplitude\":-13.599999999999998,\"angle\":233.5},{\"amplitude\":-13.2,\"angle\":233.9},{\"amplitude\":-13.2,\"angle\":234},{\"amplitude\":-12.799999999999997,\"angle\":234.3},{\"amplitude\":-12.799999999999997,\"angle\":235.1},{\"amplitude\":-12.799999999999997,\"angle\":235.5},{\"amplitude\":-12.000000000000002,\"angle\":236.3},{\"amplitude\":-12.000000000000002,\"angle\":236.7},{\"amplitude\":-12.000000000000002,\"angle\":237.2},{\"amplitude\":-11.600000000000001,\"angle\":237.7},{\"amplitude\":-11.600000000000001,\"angle\":237.9},{\"amplitude\":-11.600000000000001,\"angle\":238.1},{\"amplitude\":-11.600000000000001,\"angle\":238.2},{\"amplitude\":-11.600000000000001,\"angle\":238.6},{\"amplitude\":-11.200000000000001,\"angle\":239.1},{\"amplitude\":-11.200000000000001,\"angle\":239.3},{\"amplitude\":-11.200000000000001,\"angle\":239.5},{\"amplitude\":-11.200000000000001,\"angle\":240.2},{\"amplitude\":-10.8,\"angle\":240.4},{\"amplitude\":-10.8,\"angle\":240.6},{\"amplitude\":-10.8,\"angle\":241},{\"amplitude\":-10.8,\"angle\":241.2},{\"amplitude\":-10.8,\"angle\":241.6},{\"amplitude\":-10.8,\"angle\":241.7},{\"amplitude\":-10.8,\"angle\":242},{\"amplitude\":-10.4,\"angle\":242.2},{\"amplitude\":-10.4,\"angle\":242.5},{\"amplitude\":-10,\"angle\":242.7},{\"amplitude\":-10.4,\"angle\":242.9},{\"amplitude\":-10,\"angle\":243.6},{\"amplitude\":-10,\"angle\":243.7},{\"amplitude\":-10,\"angle\":244.2},{\"amplitude\":-10,\"angle\":244.6},{\"amplitude\":-9.6,\"angle\":244.7},{\"amplitude\":-9.6,\"angle\":245},{\"amplitude\":-9.6,\"angle\":245.1},{\"amplitude\":-9.6,\"angle\":245.6},{\"amplitude\":-9.6,\"angle\":245.8},{\"amplitude\":-9.2,\"angle\":246},{\"amplitude\":-9.6,\"angle\":246.3},{\"amplitude\":-9.2,\"angle\":246.5},{\"amplitude\":-9.2,\"angle\":247.3},{\"amplitude\":-9.2,\"angle\":247.4},{\"amplitude\":-9.2,\"angle\":247.6},{\"amplitude\":-8.799999999999999,\"angle\":247.8},{\"amplitude\":-8.799999999999999,\"angle\":248.3},{\"amplitude\":-8.799999999999999,\"angle\":248.5},{\"amplitude\":-8.799999999999999,\"angle\":249},{\"amplitude\":-8.799999999999999,\"angle\":249.1},{\"amplitude\":-8.799999999999999,\"angle\":249.4},{\"amplitude\":-8.799999999999999,\"angle\":249.9},{\"amplitude\":-8.799999999999999,\"angle\":250},{\"amplitude\":-8.799999999999999,\"angle\":250.2},{\"amplitude\":-8.799999999999999,\"angle\":250.5},{\"amplitude\":-8.399999999999999,\"angle\":250.8},{\"amplitude\":-8.399999999999999,\"angle\":251},{\"amplitude\":-8.399999999999999,\"angle\":251.4},{\"amplitude\":-8.399999999999999,\"angle\":251.6},{\"amplitude\":-8.399999999999999,\"angle\":251.9},{\"amplitude\":-8.399999999999999,\"angle\":252.4},{\"amplitude\":-7.999999999999998,\"angle\":252.5},{\"amplitude\":-7.999999999999998,\"angle\":252.7},{\"amplitude\":-7.999999999999998,\"angle\":253.2},{\"amplitude\":-7.999999999999998,\"angle\":253.3},{\"amplitude\":-7.599999999999998,\"angle\":253.5},{\"amplitude\":-7.599999999999998,\"angle\":254},{\"amplitude\":-7.599999999999998,\"angle\":254.3},{\"amplitude\":-7.599999999999998,\"angle\":254.7},{\"amplitude\":-7.599999999999998,\"angle\":254.9},{\"amplitude\":-7.200000000000002,\"angle\":255.1},{\"amplitude\":-7.200000000000002,\"angle\":255.4},{\"amplitude\":-7.200000000000002,\"angle\":255.6},{\"amplitude\":-7.200000000000002,\"angle\":255.9},{\"amplitude\":-7.200000000000002,\"angle\":256.4},{\"amplitude\":-7.200000000000002,\"angle\":256.5},{\"amplitude\":-7.200000000000002,\"angle\":256.9},{\"amplitude\":-6.800000000000002,\"angle\":257},{\"amplitude\":-6.800000000000002,\"angle\":257.6},{\"amplitude\":-6.800000000000002,\"angle\":257.8},{\"amplitude\":-6.400000000000001,\"angle\":258},{\"amplitude\":-6.800000000000002,\"angle\":258.3},{\"amplitude\":-6.400000000000001,\"angle\":258.7},{\"amplitude\":-6.400000000000001,\"angle\":259},{\"amplitude\":-6.400000000000001,\"angle\":259.3},{\"amplitude\":-6.400000000000001,\"angle\":259.4},{\"amplitude\":-6.400000000000001,\"angle\":259.7},{\"amplitude\":-6.400000000000001,\"angle\":260},{\"amplitude\":-6.400000000000001,\"angle\":260.7},{\"amplitude\":-6.400000000000001,\"angle\":261},{\"amplitude\":-6.400000000000001,\"angle\":261.1},{\"amplitude\":-6.400000000000001,\"angle\":261.3},{\"amplitude\":-6.400000000000001,\"angle\":261.7},{\"amplitude\":-6.400000000000001,\"angle\":261.8},{\"amplitude\":-6.000000000000001,\"angle\":262},{\"amplitude\":-6.000000000000001,\"angle\":262.3},{\"amplitude\":-6.000000000000001,\"angle\":262.6},{\"amplitude\":-6.000000000000001,\"angle\":262.9},{\"amplitude\":-6.000000000000001,\"angle\":263.3},{\"amplitude\":-6.000000000000001,\"angle\":263.8},{\"amplitude\":-6.000000000000001,\"angle\":264.2},{\"amplitude\":-6.000000000000001,\"angle\":264.5},{\"amplitude\":-5.6000000000000005,\"angle\":265},{\"amplitude\":-5.6000000000000005,\"angle\":265.2},{\"amplitude\":-5.6000000000000005,\"angle\":265.7},{\"amplitude\":-5.6000000000000005,\"angle\":265.8},{\"amplitude\":-5.6000000000000005,\"angle\":266.1},{\"amplitude\":-5.6000000000000005,\"angle\":266.3},{\"amplitude\":-5.6000000000000005,\"angle\":266.5},{\"amplitude\":-5.2,\"angle\":266.8},{\"amplitude\":-5.2,\"angle\":266.9},{\"amplitude\":-5.2,\"angle\":267.1},{\"amplitude\":-5.2,\"angle\":267.4},{\"amplitude\":-5.2,\"angle\":267.7},{\"amplitude\":-5.2,\"angle\":268},{\"amplitude\":-4.8,\"angle\":269.2},{\"amplitude\":-4.8,\"angle\":269.5},{\"amplitude\":-4.8,\"angle\":269.8},{\"amplitude\":-4.8,\"angle\":270},{\"amplitude\":-4.8,\"angle\":270.1},{\"amplitude\":-4.8,\"angle\":270.4},{\"amplitude\":-4.8,\"angle\":270.7},{\"amplitude\":-4.8,\"angle\":271.2},{\"amplitude\":-4.8,\"angle\":271.3},{\"amplitude\":-4.8,\"angle\":271.6},{\"amplitude\":-4.8,\"angle\":271.8},{\"amplitude\":-4.8,\"angle\":271.9},{\"amplitude\":-4.8,\"angle\":272.4},{\"amplitude\":-4.8,\"angle\":272.8},{\"amplitude\":-4.8,\"angle\":273},{\"amplitude\":-4.3999999999999995,\"angle\":273.4},{\"amplitude\":-4.3999999999999995,\"angle\":273.5},{\"amplitude\":-4.3999999999999995,\"angle\":274},{\"amplitude\":-4.3999999999999995,\"angle\":274.1},{\"amplitude\":-4.3999999999999995,\"angle\":274.6},{\"amplitude\":-4.3999999999999995,\"angle\":274.7},{\"amplitude\":-4.3999999999999995,\"angle\":274.9},{\"amplitude\":-4.3999999999999995,\"angle\":275.2},{\"amplitude\":-4.3999999999999995,\"angle\":275.3},{\"amplitude\":-4.3999999999999995,\"angle\":275.7},{\"amplitude\":-3.999999999999999,\"angle\":275.9},{\"amplitude\":-3.999999999999999,\"angle\":276.3},{\"amplitude\":-3.999999999999999,\"angle\":276.5},{\"amplitude\":-3.999999999999999,\"angle\":277.2},{\"amplitude\":-3.999999999999999,\"angle\":277.5},{\"amplitude\":-3.999999999999999,\"angle\":278.1},{\"amplitude\":-3.999999999999999,\"angle\":278.2},{\"amplitude\":-3.999999999999999,\"angle\":278.8},{\"amplitude\":-3.999999999999999,\"angle\":278.9},{\"amplitude\":-3.999999999999999,\"angle\":279.2},{\"amplitude\":-3.999999999999999,\"angle\":279.4},{\"amplitude\":-3.999999999999999,\"angle\":279.5},{\"amplitude\":-3.999999999999999,\"angle\":279.8},{\"amplitude\":-3.999999999999999,\"angle\":280},{\"amplitude\":-3.999999999999999,\"angle\":280.1},{\"amplitude\":-3.5999999999999988,\"angle\":280.4},{\"amplitude\":-3.5999999999999988,\"angle\":280.5},{\"amplitude\":-3.5999999999999988,\"angle\":280.7},{\"amplitude\":-3.5999999999999988,\"angle\":281},{\"amplitude\":-3.999999999999999,\"angle\":281.2},{\"amplitude\":-3.999999999999999,\"angle\":281.3},{\"amplitude\":-3.999999999999999,\"angle\":281.6},{\"amplitude\":-3.999999999999999,\"angle\":281.8},{\"amplitude\":-3.999999999999999,\"angle\":282.2},{\"amplitude\":-3.999999999999999,\"angle\":282.4},{\"amplitude\":-3.999999999999999,\"angle\":282.5},{\"amplitude\":-3.999999999999999,\"angle\":282.9},{\"amplitude\":-3.999999999999999,\"angle\":283.2},{\"amplitude\":-3.999999999999999,\"angle\":283.6},{\"amplitude\":-3.999999999999999,\"angle\":283.7},{\"amplitude\":-3.999999999999999,\"angle\":284},{\"amplitude\":-3.999999999999999,\"angle\":284.3},{\"amplitude\":-3.999999999999999,\"angle\":284.6},{\"amplitude\":-3.999999999999999,\"angle\":284.7},{\"amplitude\":-3.999999999999999,\"angle\":284.9},{\"amplitude\":-3.5999999999999988,\"angle\":285.3},{\"amplitude\":-3.5999999999999988,\"angle\":285.4},{\"amplitude\":-3.5999999999999988,\"angle\":285.9},{\"amplitude\":-3.5999999999999988,\"angle\":286.3},{\"amplitude\":-3.5999999999999988,\"angle\":286.6},{\"amplitude\":-3.5999999999999988,\"angle\":286.9},{\"amplitude\":-3.5999999999999988,\"angle\":287},{\"amplitude\":-3.5999999999999988,\"angle\":287.2},{\"amplitude\":-3.5999999999999988,\"angle\":287.4},{\"amplitude\":-3.5999999999999988,\"angle\":287.6},{\"amplitude\":-3.1999999999999984,\"angle\":287.7},{\"amplitude\":-3.5999999999999988,\"angle\":288.2},{\"amplitude\":-3.1999999999999984,\"angle\":288.6},{\"amplitude\":-3.5999999999999988,\"angle\":288.9},{\"amplitude\":-3.5999999999999988,\"angle\":289.4},{\"amplitude\":-3.1999999999999984,\"angle\":289.9},{\"amplitude\":-3.1999999999999984,\"angle\":290.1},{\"amplitude\":-3.1999999999999984,\"angle\":290.3},{\"amplitude\":-3.1999999999999984,\"angle\":290.4},{\"amplitude\":-3.1999999999999984,\"angle\":291.1},{\"amplitude\":-3.1999999999999984,\"angle\":291.3},{\"amplitude\":-3.1999999999999984,\"angle\":291.6},{\"amplitude\":-3.1999999999999984,\"angle\":291.8},{\"amplitude\":-3.1999999999999984,\"angle\":292.2},{\"amplitude\":-3.1999999999999984,\"angle\":292.3},{\"amplitude\":-3.1999999999999984,\"angle\":293},{\"amplitude\":-3.1999999999999984,\"angle\":293.4},{\"amplitude\":-3.1999999999999984,\"angle\":293.7},{\"amplitude\":-2.799999999999998,\"angle\":294.6},{\"amplitude\":-3.1999999999999984,\"angle\":294.7},{\"amplitude\":-2.799999999999998,\"angle\":294.9},{\"amplitude\":-2.799999999999998,\"angle\":295.2},{\"amplitude\":-2.799999999999998,\"angle\":295.7},{\"amplitude\":-2.799999999999998,\"angle\":296},{\"amplitude\":-2.799999999999998,\"angle\":296.4},{\"amplitude\":-2.799999999999998,\"angle\":296.5},{\"amplitude\":-2.799999999999998,\"angle\":296.6},{\"amplitude\":-2.799999999999998,\"angle\":296.9},{\"amplitude\":-2.799999999999998,\"angle\":297.3},{\"amplitude\":-2.799999999999998,\"angle\":297.7},{\"amplitude\":-2.799999999999998,\"angle\":297.9},{\"amplitude\":-2.799999999999998,\"angle\":298.2},{\"amplitude\":-2.799999999999998,\"angle\":298.9},{\"amplitude\":-2.799999999999998,\"angle\":299.1},{\"amplitude\":-2.799999999999998,\"angle\":300.3},{\"amplitude\":-2.799999999999998,\"angle\":300.5},{\"amplitude\":-3.1999999999999984,\"angle\":301.2},{\"amplitude\":-3.1999999999999984,\"angle\":301.4},{\"amplitude\":-3.1999999999999984,\"angle\":301.8},{\"amplitude\":-3.1999999999999984,\"angle\":301.9},{\"amplitude\":-3.1999999999999984,\"angle\":302.1},{\"amplitude\":-2.799999999999998,\"angle\":302.3},{\"amplitude\":-3.1999999999999984,\"angle\":302.5},{\"amplitude\":-3.1999999999999984,\"angle\":302.8},{\"amplitude\":-3.1999999999999984,\"angle\":303},{\"amplitude\":-3.1999999999999984,\"angle\":303.2},{\"amplitude\":-2.799999999999998,\"angle\":303.6},{\"amplitude\":-2.799999999999998,\"angle\":303.7},{\"amplitude\":-3.1999999999999984,\"angle\":304},{\"amplitude\":-2.799999999999998,\"angle\":304.4},{\"amplitude\":-2.799999999999998,\"angle\":304.7},{\"amplitude\":-2.799999999999998,\"angle\":304.9},{\"amplitude\":-3.1999999999999984,\"angle\":305.1},{\"amplitude\":-2.799999999999998,\"angle\":305.2},{\"amplitude\":-2.799999999999998,\"angle\":305.9},{\"amplitude\":-2.799999999999998,\"angle\":306.5},{\"amplitude\":-2.799999999999998,\"angle\":306.7},{\"amplitude\":-2.799999999999998,\"angle\":307},{\"amplitude\":-2.799999999999998,\"angle\":307.2},{\"amplitude\":-2.799999999999998,\"angle\":307.7},{\"amplitude\":-2.799999999999998,\"angle\":307.9},{\"amplitude\":-2.400000000000002,\"angle\":308.3},{\"amplitude\":-2.799999999999998,\"angle\":308.5},{\"amplitude\":-2.799999999999998,\"angle\":308.6},{\"amplitude\":-2.400000000000002,\"angle\":309.1},{\"amplitude\":-2.400000000000002,\"angle\":309.8},{\"amplitude\":-2.400000000000002,\"angle\":310.4},{\"amplitude\":-2.400000000000002,\"angle\":310.5},{\"amplitude\":-2.400000000000002,\"angle\":310.8},{\"amplitude\":-2.400000000000002,\"angle\":311.7},{\"amplitude\":-2.0000000000000018,\"angle\":312.2},{\"amplitude\":-2.0000000000000018,\"angle\":312.3},{\"amplitude\":-2.0000000000000018,\"angle\":313.1},{\"amplitude\":-2.0000000000000018,\"angle\":313.5},{\"amplitude\":-2.0000000000000018,\"angle\":314},{\"amplitude\":-1.6000000000000014,\"angle\":314.5},{\"amplitude\":-1.6000000000000014,\"angle\":314.6},{\"amplitude\":-1.6000000000000014,\"angle\":314.8},{\"amplitude\":-1.6000000000000014,\"angle\":315},{\"amplitude\":-1.6000000000000014,\"angle\":315.2},{\"amplitude\":-1.6000000000000014,\"angle\":315.4},{\"amplitude\":-1.6000000000000014,\"angle\":316},{\"amplitude\":-1.6000000000000014,\"angle\":317.6},{\"amplitude\":-1.6000000000000014,\"angle\":317.7},{\"amplitude\":-1.6000000000000014,\"angle\":318.5},{\"amplitude\":-1.6000000000000014,\"angle\":318.7},{\"amplitude\":-2.0000000000000018,\"angle\":318.9},{\"amplitude\":-1.6000000000000014,\"angle\":319},{\"amplitude\":-1.6000000000000014,\"angle\":319.4},{\"amplitude\":-1.6000000000000014,\"angle\":319.7},{\"amplitude\":-1.6000000000000014,\"angle\":320.1},{\"amplitude\":-1.6000000000000014,\"angle\":320.6},{\"amplitude\":-1.6000000000000014,\"angle\":320.8},{\"amplitude\":-1.6000000000000014,\"angle\":320.9},{\"amplitude\":-1.6000000000000014,\"angle\":321},{\"amplitude\":-1.6000000000000014,\"angle\":321.3},{\"amplitude\":-1.6000000000000014,\"angle\":321.7},{\"amplitude\":-1.200000000000001,\"angle\":322.5},{\"amplitude\":-1.200000000000001,\"angle\":322.8},{\"amplitude\":-1.200000000000001,\"angle\":323.6},{\"amplitude\":-1.200000000000001,\"angle\":323.7},{\"amplitude\":-0.8000000000000007,\"angle\":324.4},{\"amplitude\":-0.8000000000000007,\"angle\":324.6},{\"amplitude\":-0.8000000000000007,\"angle\":325.1},{\"amplitude\":-0.8000000000000007,\"angle\":325.6},{\"amplitude\":-0.8000000000000007,\"angle\":326.2},{\"amplitude\":-0.8000000000000007,\"angle\":326.5},{\"amplitude\":-0.8000000000000007,\"angle\":326.6},{\"amplitude\":-0.8000000000000007,\"angle\":327.2},{\"amplitude\":-0.8000000000000007,\"angle\":327.3},{\"amplitude\":-0.8000000000000007,\"angle\":328.1},{\"amplitude\":-0.8000000000000007,\"angle\":328.5},{\"amplitude\":-1.200000000000001,\"angle\":329.3},{\"amplitude\":-1.200000000000001,\"angle\":329.6},{\"amplitude\":-1.200000000000001,\"angle\":330.1},{\"amplitude\":-0.8000000000000007,\"angle\":330.8},{\"amplitude\":-1.200000000000001,\"angle\":331.3},{\"amplitude\":-1.200000000000001,\"angle\":331.7},{\"amplitude\":-0.8000000000000007,\"angle\":332.1},{\"amplitude\":-0.8000000000000007,\"angle\":332.5},{\"amplitude\":-0.8000000000000007,\"angle\":332.7},{\"amplitude\":-0.8000000000000007,\"angle\":333.1},{\"amplitude\":-0.8000000000000007,\"angle\":333.2},{\"amplitude\":-0.8000000000000007,\"angle\":333.6},{\"amplitude\":-0.8000000000000007,\"angle\":333.8},{\"amplitude\":-1.200000000000001,\"angle\":333.9},{\"amplitude\":-0.8000000000000007,\"angle\":334.4},{\"amplitude\":-1.200000000000001,\"angle\":335.1},{\"amplitude\":-1.200000000000001,\"angle\":335.4},{\"amplitude\":-0.8000000000000007,\"angle\":335.8},{\"amplitude\":-0.8000000000000007,\"angle\":336.1},{\"amplitude\":-0.8000000000000007,\"angle\":336.3},{\"amplitude\":-1.200000000000001,\"angle\":336.5},{\"amplitude\":-1.200000000000001,\"angle\":336.7},{\"amplitude\":-0.8000000000000007,\"angle\":337},{\"amplitude\":-0.8000000000000007,\"angle\":337.2},{\"amplitude\":-0.8000000000000007,\"angle\":337.3},{\"amplitude\":-0.8000000000000007,\"angle\":337.5},{\"amplitude\":-1.200000000000001,\"angle\":337.8},{\"amplitude\":-0.8000000000000007,\"angle\":338.1},{\"amplitude\":-1.200000000000001,\"angle\":338.4},{\"amplitude\":-1.200000000000001,\"angle\":338.9},{\"amplitude\":-1.200000000000001,\"angle\":340.8},{\"amplitude\":-1.200000000000001,\"angle\":340.9},{\"amplitude\":-1.200000000000001,\"angle\":341.3},{\"amplitude\":-1.200000000000001,\"angle\":341.4},{\"amplitude\":-1.200000000000001,\"angle\":341.7},{\"amplitude\":-1.200000000000001,\"angle\":342.3},{\"amplitude\":-1.200000000000001,\"angle\":342.4},{\"amplitude\":-1.200000000000001,\"angle\":342.8},{\"amplitude\":-1.200000000000001,\"angle\":342.9},{\"amplitude\":-1.200000000000001,\"angle\":343},{\"amplitude\":-1.6000000000000014,\"angle\":343.3},{\"amplitude\":-1.6000000000000014,\"angle\":343.4},{\"amplitude\":-1.200000000000001,\"angle\":343.7},{\"amplitude\":-1.200000000000001,\"angle\":343.9},{\"amplitude\":-1.200000000000001,\"angle\":344.2},{\"amplitude\":-1.6000000000000014,\"angle\":344.6},{\"amplitude\":-1.6000000000000014,\"angle\":344.7},{\"amplitude\":-1.6000000000000014,\"angle\":345},{\"amplitude\":-1.6000000000000014,\"angle\":345.3},{\"amplitude\":-1.6000000000000014,\"angle\":345.8},{\"amplitude\":-1.6000000000000014,\"angle\":346.1},{\"amplitude\":-1.6000000000000014,\"angle\":346.2},{\"amplitude\":-1.6000000000000014,\"angle\":346.4},{\"amplitude\":-1.6000000000000014,\"angle\":346.6},{\"amplitude\":-1.6000000000000014,\"angle\":346.8},{\"amplitude\":-1.6000000000000014,\"angle\":347.4},{\"amplitude\":-1.6000000000000014,\"angle\":347.5},{\"amplitude\":-1.6000000000000014,\"angle\":347.8},{\"amplitude\":-1.6000000000000014,\"angle\":348},{\"amplitude\":-1.6000000000000014,\"angle\":348.4},{\"amplitude\":-1.6000000000000014,\"angle\":348.6},{\"amplitude\":-1.6000000000000014,\"angle\":349},{\"amplitude\":-1.6000000000000014,\"angle\":349.1},{\"amplitude\":-1.6000000000000014,\"angle\":349.2},{\"amplitude\":-1.6000000000000014,\"angle\":349.5},{\"amplitude\":-1.6000000000000014,\"angle\":349.6},{\"amplitude\":-1.6000000000000014,\"angle\":349.8},{\"amplitude\":-1.6000000000000014,\"angle\":350.1},{\"amplitude\":-1.6000000000000014,\"angle\":350.2},{\"amplitude\":-1.6000000000000014,\"angle\":350.4},{\"amplitude\":-1.6000000000000014,\"angle\":350.9},{\"amplitude\":-1.6000000000000014,\"angle\":351.2},{\"amplitude\":-1.200000000000001,\"angle\":351.8},{\"amplitude\":-1.200000000000001,\"angle\":351.9},{\"amplitude\":-1.200000000000001,\"angle\":352.3},{\"amplitude\":-1.200000000000001,\"angle\":352.4},{\"amplitude\":-1.200000000000001,\"angle\":352.6},{\"amplitude\":-1.200000000000001,\"angle\":353},{\"amplitude\":-1.200000000000001,\"angle\":353.1},{\"amplitude\":-1.200000000000001,\"angle\":353.4},{\"amplitude\":-1.200000000000001,\"angle\":353.6},{\"amplitude\":-1.200000000000001,\"angle\":353.7},{\"amplitude\":-1.200000000000001,\"angle\":354.1},{\"amplitude\":-1.200000000000001,\"angle\":354.3},{\"amplitude\":-1.200000000000001,\"angle\":354.5},{\"amplitude\":-1.200000000000001,\"angle\":354.7},{\"amplitude\":-1.200000000000001,\"angle\":355.1},{\"amplitude\":-1.200000000000001,\"angle\":355.2},{\"amplitude\":-1.200000000000001,\"angle\":355.4},{\"amplitude\":-0.8000000000000007,\"angle\":355.7},{\"amplitude\":-0.8000000000000007,\"angle\":355.8},{\"amplitude\":-0.8000000000000007,\"angle\":355.9},{\"amplitude\":-0.8000000000000007,\"angle\":356.2},{\"amplitude\":-0.8000000000000007,\"angle\":356.7},{\"amplitude\":-0.8000000000000007,\"angle\":356.9},{\"amplitude\":-0.8000000000000007,\"angle\":357.3},{\"amplitude\":-0.40000000000000036,\"angle\":357.6},{\"amplitude\":-0.40000000000000036,\"angle\":358},{\"amplitude\":-0.40000000000000036,\"angle\":358.1},{\"amplitude\":-0.40000000000000036,\"angle\":358.4},{\"amplitude\":-0.40000000000000036,\"angle\":358.5},{\"amplitude\":-0.40000000000000036,\"angle\":358.6},{\"amplitude\":-0.40000000000000036,\"angle\":358.7},{\"amplitude\":-0.40000000000000036,\"angle\":359.2},{\"amplitude\":-0.40000000000000036,\"angle\":359.5},{\"amplitude\":-0.40000000000000036,\"angle\":359.7},{\"amplitude\":-0.40000000000000036,\"angle\":360}]\n\n },\n {\n name: '12.5KHz',\n data: [{\"angle\":0,\"amplitude\":-0.40000000000000036},{\"angle\":0.3,\"amplitude\":-0.40000000000000036},{\"angle\":0.5,\"amplitude\":-0.40000000000000036},{\"angle\":0.9,\"amplitude\":-0.40000000000000036},{\"angle\":1.5,\"amplitude\":-0.40000000000000036},{\"angle\":2.2,\"amplitude\":-0.40000000000000036},{\"angle\":2.6,\"amplitude\":-0.40000000000000036},{\"angle\":3.1,\"amplitude\":-0.40000000000000036},{\"angle\":3.6,\"amplitude\":-0.8000000000000007},{\"angle\":4.2,\"amplitude\":-0.40000000000000036},{\"angle\":4.6,\"amplitude\":-0.8000000000000007},{\"angle\":5.1,\"amplitude\":-0.8000000000000007},{\"angle\":5.4,\"amplitude\":-0.8000000000000007},{\"angle\":6,\"amplitude\":-0.8000000000000007},{\"angle\":7.1,\"amplitude\":-1.200000000000001},{\"angle\":7.5,\"amplitude\":-0.8000000000000007},{\"angle\":7.6,\"amplitude\":-1.200000000000001},{\"angle\":7.9,\"amplitude\":-1.200000000000001},{\"angle\":8,\"amplitude\":-1.200000000000001},{\"angle\":8.2,\"amplitude\":-1.200000000000001},{\"angle\":8.6,\"amplitude\":-0.8000000000000007},{\"angle\":9,\"amplitude\":-0.8000000000000007},{\"angle\":9.1,\"amplitude\":-0.8000000000000007},{\"angle\":9.2,\"amplitude\":-0.8000000000000007},{\"angle\":9.5,\"amplitude\":-0.8000000000000007},{\"angle\":9.8,\"amplitude\":-0.8000000000000007},{\"angle\":10.2,\"amplitude\":-0.8000000000000007},{\"angle\":10.3,\"amplitude\":-0.8000000000000007},{\"angle\":10.8,\"amplitude\":-0.8000000000000007},{\"angle\":11.2,\"amplitude\":-0.8000000000000007},{\"angle\":11.7,\"amplitude\":-0.8000000000000007},{\"angle\":11.8,\"amplitude\":-0.8000000000000007},{\"angle\":12,\"amplitude\":-0.8000000000000007},{\"angle\":12.4,\"amplitude\":-0.8000000000000007},{\"angle\":12.9,\"amplitude\":-0.8000000000000007},{\"angle\":13.4,\"amplitude\":-0.8000000000000007},{\"angle\":13.5,\"amplitude\":-0.8000000000000007},{\"angle\":14.2,\"amplitude\":-0.8000000000000007},{\"angle\":14.5,\"amplitude\":-0.8000000000000007},{\"angle\":15.4,\"amplitude\":-1.200000000000001},{\"angle\":15.8,\"amplitude\":-1.200000000000001},{\"angle\":15.9,\"amplitude\":-1.200000000000001},{\"angle\":16.4,\"amplitude\":-1.200000000000001},{\"angle\":16.5,\"amplitude\":-1.200000000000001},{\"angle\":17,\"amplitude\":-1.200000000000001},{\"angle\":17.1,\"amplitude\":-1.200000000000001},{\"angle\":17.6,\"amplitude\":-1.200000000000001},{\"angle\":17.8,\"amplitude\":-1.200000000000001},{\"angle\":18.3,\"amplitude\":-1.6000000000000014},{\"angle\":18.4,\"amplitude\":-1.6000000000000014},{\"angle\":19.4,\"amplitude\":-1.6000000000000014},{\"angle\":20.2,\"amplitude\":-1.6000000000000014},{\"angle\":20.6,\"amplitude\":-1.6000000000000014},{\"angle\":20.8,\"amplitude\":-1.6000000000000014},{\"angle\":21.1,\"amplitude\":-1.6000000000000014},{\"angle\":21.3,\"amplitude\":-1.6000000000000014},{\"angle\":21.4,\"amplitude\":-1.6000000000000014},{\"angle\":21.7,\"amplitude\":-1.6000000000000014},{\"angle\":21.9,\"amplitude\":-1.6000000000000014},{\"angle\":22.4,\"amplitude\":-1.6000000000000014},{\"angle\":22.9,\"amplitude\":-1.6000000000000014},{\"angle\":23,\"amplitude\":-1.6000000000000014},{\"angle\":23.1,\"amplitude\":-1.6000000000000014},{\"angle\":23.3,\"amplitude\":-1.6000000000000014},{\"angle\":23.9,\"amplitude\":-1.6000000000000014},{\"angle\":24.3,\"amplitude\":-1.6000000000000014},{\"angle\":24.5,\"amplitude\":-1.6000000000000014},{\"angle\":24.8,\"amplitude\":-1.6000000000000014},{\"angle\":25.4,\"amplitude\":-1.6000000000000014},{\"angle\":25.7,\"amplitude\":-1.6000000000000014},{\"angle\":26.2,\"amplitude\":-2.0000000000000018},{\"angle\":26.4,\"amplitude\":-2.0000000000000018},{\"angle\":26.7,\"amplitude\":-1.6000000000000014},{\"angle\":26.9,\"amplitude\":-2.0000000000000018},{\"angle\":27,\"amplitude\":-2.0000000000000018},{\"angle\":27.5,\"amplitude\":-2.0000000000000018},{\"angle\":27.7,\"amplitude\":-2.0000000000000018},{\"angle\":28,\"amplitude\":-2.0000000000000018},{\"angle\":28.3,\"amplitude\":-2.0000000000000018},{\"angle\":28.4,\"amplitude\":-2.0000000000000018},{\"angle\":28.8,\"amplitude\":-2.0000000000000018},{\"angle\":29.4,\"amplitude\":-2.0000000000000018},{\"angle\":29.7,\"amplitude\":-2.0000000000000018},{\"angle\":30.1,\"amplitude\":-2.0000000000000018},{\"angle\":30.3,\"amplitude\":-2.0000000000000018},{\"angle\":30.8,\"amplitude\":-2.0000000000000018},{\"angle\":31.2,\"amplitude\":-2.400000000000002},{\"angle\":31.4,\"amplitude\":-2.0000000000000018},{\"angle\":31.7,\"amplitude\":-2.400000000000002},{\"angle\":32.2,\"amplitude\":-2.400000000000002},{\"angle\":32.5,\"amplitude\":-2.400000000000002},{\"angle\":33,\"amplitude\":-2.400000000000002},{\"angle\":33.7,\"amplitude\":-2.400000000000002},{\"angle\":33.9,\"amplitude\":-2.799999999999998},{\"angle\":34,\"amplitude\":-2.400000000000002},{\"angle\":34.1,\"amplitude\":-2.799999999999998},{\"angle\":34.4,\"amplitude\":-2.799999999999998},{\"angle\":34.5,\"amplitude\":-2.799999999999998},{\"angle\":34.8,\"amplitude\":-2.799999999999998},{\"angle\":35,\"amplitude\":-2.799999999999998},{\"angle\":35.3,\"amplitude\":-2.799999999999998},{\"angle\":35.9,\"amplitude\":-3.1999999999999984},{\"angle\":36.7,\"amplitude\":-3.1999999999999984},{\"angle\":37.4,\"amplitude\":-3.1999999999999984},{\"angle\":37.6,\"amplitude\":-3.1999999999999984},{\"angle\":37.9,\"amplitude\":-3.5999999999999988},{\"angle\":38.3,\"amplitude\":-3.1999999999999984},{\"angle\":38.4,\"amplitude\":-3.5999999999999988},{\"angle\":38.5,\"amplitude\":-3.5999999999999988},{\"angle\":38.8,\"amplitude\":-3.5999999999999988},{\"angle\":38.9,\"amplitude\":-3.5999999999999988},{\"angle\":39.5,\"amplitude\":-3.5999999999999988},{\"angle\":39.7,\"amplitude\":-3.5999999999999988},{\"angle\":40,\"amplitude\":-3.5999999999999988},{\"angle\":40.5,\"amplitude\":-3.5999999999999988},{\"angle\":40.8,\"amplitude\":-3.5999999999999988},{\"angle\":41.1,\"amplitude\":-3.5999999999999988},{\"angle\":41.7,\"amplitude\":-3.5999999999999988},{\"angle\":42,\"amplitude\":-3.5999999999999988},{\"angle\":42.2,\"amplitude\":-3.999999999999999},{\"angle\":42.5,\"amplitude\":-3.999999999999999},{\"angle\":42.8,\"amplitude\":-3.999999999999999},{\"angle\":43,\"amplitude\":-3.999999999999999},{\"angle\":43.3,\"amplitude\":-3.999999999999999},{\"angle\":43.6,\"amplitude\":-3.999999999999999},{\"angle\":43.8,\"amplitude\":-3.999999999999999},{\"angle\":44,\"amplitude\":-3.999999999999999},{\"angle\":44.5,\"amplitude\":-3.999999999999999},{\"angle\":44.6,\"amplitude\":-3.999999999999999},{\"angle\":45.1,\"amplitude\":-3.999999999999999},{\"angle\":45.4,\"amplitude\":-3.999999999999999},{\"angle\":45.9,\"amplitude\":-3.999999999999999},{\"angle\":46.7,\"amplitude\":-3.999999999999999},{\"angle\":46.9,\"amplitude\":-4.3999999999999995},{\"angle\":47.5,\"amplitude\":-3.999999999999999},{\"angle\":47.8,\"amplitude\":-4.3999999999999995},{\"angle\":47.9,\"amplitude\":-4.3999999999999995},{\"angle\":48.5,\"amplitude\":-4.3999999999999995},{\"angle\":49.8,\"amplitude\":-4.3999999999999995},{\"angle\":49.9,\"amplitude\":-4.3999999999999995},{\"angle\":50.3,\"amplitude\":-4.8},{\"angle\":50.9,\"amplitude\":-4.8},{\"angle\":51.2,\"amplitude\":-4.8},{\"angle\":51.4,\"amplitude\":-4.8},{\"angle\":51.7,\"amplitude\":-4.8},{\"angle\":52.2,\"amplitude\":-4.8},{\"angle\":52.5,\"amplitude\":-4.8},{\"angle\":52.6,\"amplitude\":-4.8},{\"angle\":52.7,\"amplitude\":-4.8},{\"angle\":53,\"amplitude\":-4.8},{\"angle\":53.2,\"amplitude\":-4.8},{\"angle\":53.7,\"amplitude\":-4.8},{\"angle\":53.9,\"amplitude\":-4.8},{\"angle\":54.1,\"amplitude\":-4.8},{\"angle\":54.7,\"amplitude\":-4.8},{\"angle\":54.8,\"amplitude\":-5.2},{\"angle\":54.9,\"amplitude\":-4.8},{\"angle\":55.1,\"amplitude\":-5.2},{\"angle\":55.2,\"amplitude\":-4.8},{\"angle\":55.9,\"amplitude\":-5.2},{\"angle\":56,\"amplitude\":-4.8},{\"angle\":56.9,\"amplitude\":-4.8},{\"angle\":57.2,\"amplitude\":-4.8},{\"angle\":57.8,\"amplitude\":-4.8},{\"angle\":58.2,\"amplitude\":-4.8},{\"angle\":59.2,\"amplitude\":-4.8},{\"angle\":59.5,\"amplitude\":-4.8},{\"angle\":60.2,\"amplitude\":-5.2},{\"angle\":60.8,\"amplitude\":-5.2},{\"angle\":61,\"amplitude\":-5.2},{\"angle\":61.5,\"amplitude\":-5.2},{\"angle\":62,\"amplitude\":-5.2},{\"angle\":62.8,\"amplitude\":-5.2},{\"angle\":63.3,\"amplitude\":-5.2},{\"angle\":66.3,\"amplitude\":-6.000000000000001},{\"angle\":66.5,\"amplitude\":-6.000000000000001},{\"angle\":67.1,\"amplitude\":-5.6000000000000005},{\"angle\":67.8,\"amplitude\":-6.000000000000001},{\"angle\":68.4,\"amplitude\":-6.000000000000001},{\"angle\":68.6,\"amplitude\":-6.000000000000001},{\"angle\":69,\"amplitude\":-6.000000000000001},{\"angle\":69.1,\"amplitude\":-6.000000000000001},{\"angle\":69.8,\"amplitude\":-6.000000000000001},{\"angle\":70.3,\"amplitude\":-6.000000000000001},{\"angle\":70.5,\"amplitude\":-6.000000000000001},{\"angle\":71,\"amplitude\":-6.000000000000001},{\"angle\":71.1,\"amplitude\":-6.000000000000001},{\"angle\":71.4,\"amplitude\":-6.400000000000001},{\"angle\":71.6,\"amplitude\":-6.400000000000001},{\"angle\":72,\"amplitude\":-6.400000000000001},{\"angle\":72.2,\"amplitude\":-6.400000000000001},{\"angle\":72.7,\"amplitude\":-6.400000000000001},{\"angle\":73,\"amplitude\":-6.400000000000001},{\"angle\":73.5,\"amplitude\":-6.400000000000001},{\"angle\":73.7,\"amplitude\":-6.400000000000001},{\"angle\":74,\"amplitude\":-6.400000000000001},{\"angle\":74.1,\"amplitude\":-6.400000000000001},{\"angle\":74.6,\"amplitude\":-6.400000000000001},{\"angle\":74.8,\"amplitude\":-6.400000000000001},{\"angle\":74.9,\"amplitude\":-6.400000000000001},{\"angle\":75.5,\"amplitude\":-6.400000000000001},{\"angle\":75.8,\"amplitude\":-6.400000000000001},{\"angle\":76.1,\"amplitude\":-6.800000000000002},{\"angle\":76.4,\"amplitude\":-6.800000000000002},{\"angle\":76.7,\"amplitude\":-6.800000000000002},{\"angle\":77.4,\"amplitude\":-6.800000000000002},{\"angle\":77.7,\"amplitude\":-6.800000000000002},{\"angle\":78,\"amplitude\":-6.800000000000002},{\"angle\":78.3,\"amplitude\":-6.800000000000002},{\"angle\":78.6,\"amplitude\":-6.800000000000002},{\"angle\":79,\"amplitude\":-6.800000000000002},{\"angle\":79.3,\"amplitude\":-6.800000000000002},{\"angle\":79.9,\"amplitude\":-7.200000000000002},{\"angle\":80.5,\"amplitude\":-7.200000000000002},{\"angle\":81,\"amplitude\":-7.200000000000002},{\"angle\":82.3,\"amplitude\":-7.200000000000002},{\"angle\":82.8,\"amplitude\":-7.200000000000002},{\"angle\":83.4,\"amplitude\":-7.200000000000002},{\"angle\":83.7,\"amplitude\":-7.200000000000002},{\"angle\":84.2,\"amplitude\":-7.200000000000002},{\"angle\":85.5,\"amplitude\":-7.599999999999998},{\"angle\":85.7,\"amplitude\":-7.599999999999998},{\"angle\":86.3,\"amplitude\":-7.599999999999998},{\"angle\":86.8,\"amplitude\":-7.599999999999998},{\"angle\":86.9,\"amplitude\":-7.599999999999998},{\"angle\":87.3,\"amplitude\":-7.599999999999998},{\"angle\":87.4,\"amplitude\":-7.599999999999998},{\"angle\":87.6,\"amplitude\":-7.599999999999998},{\"angle\":87.9,\"amplitude\":-7.599999999999998},{\"angle\":88.1,\"amplitude\":-7.599999999999998},{\"angle\":88.6,\"amplitude\":-7.599999999999998},{\"angle\":88.9,\"amplitude\":-7.599999999999998},{\"angle\":89.4,\"amplitude\":-7.599999999999998},{\"angle\":90,\"amplitude\":-7.599999999999998},{\"angle\":91.2,\"amplitude\":-7.999999999999998},{\"angle\":91.8,\"amplitude\":-7.999999999999998},{\"angle\":92.2,\"amplitude\":-7.999999999999998},{\"angle\":92.5,\"amplitude\":-8.399999999999999},{\"angle\":92.9,\"amplitude\":-8.399999999999999},{\"angle\":93.2,\"amplitude\":-8.399999999999999},{\"angle\":93.4,\"amplitude\":-8.399999999999999},{\"angle\":93.5,\"amplitude\":-8.399999999999999},{\"angle\":93.9,\"amplitude\":-8.399999999999999},{\"angle\":94.6,\"amplitude\":-8.399999999999999},{\"angle\":94.7,\"amplitude\":-8.399999999999999},{\"angle\":94.9,\"amplitude\":-8.799999999999999},{\"angle\":95.3,\"amplitude\":-8.799999999999999},{\"angle\":95.5,\"amplitude\":-8.799999999999999},{\"angle\":95.6,\"amplitude\":-8.799999999999999},{\"angle\":96.2,\"amplitude\":-8.799999999999999},{\"angle\":96.3,\"amplitude\":-8.799999999999999},{\"angle\":96.9,\"amplitude\":-9.2},{\"angle\":97.1,\"amplitude\":-9.2},{\"angle\":97.6,\"amplitude\":-9.2},{\"angle\":98.1,\"amplitude\":-9.2},{\"angle\":98.3,\"amplitude\":-9.2},{\"angle\":98.9,\"amplitude\":-9.2},{\"angle\":99,\"amplitude\":-9.2},{\"angle\":99.2,\"amplitude\":-9.6},{\"angle\":99.6,\"amplitude\":-9.2},{\"angle\":99.8,\"amplitude\":-9.6},{\"angle\":100,\"amplitude\":-9.6},{\"angle\":100.5,\"amplitude\":-9.6},{\"angle\":101.1,\"amplitude\":-9.6},{\"angle\":101.2,\"amplitude\":-9.6},{\"angle\":101.4,\"amplitude\":-9.6},{\"angle\":102,\"amplitude\":-9.6},{\"angle\":102.2,\"amplitude\":-10},{\"angle\":103.5,\"amplitude\":-10},{\"angle\":103.8,\"amplitude\":-10},{\"angle\":104.4,\"amplitude\":-10.4},{\"angle\":104.7,\"amplitude\":-10.4},{\"angle\":105.1,\"amplitude\":-10.4},{\"angle\":105.4,\"amplitude\":-10.8},{\"angle\":105.6,\"amplitude\":-10.8},{\"angle\":106,\"amplitude\":-10.8},{\"angle\":106.1,\"amplitude\":-10.8},{\"angle\":106.4,\"amplitude\":-11.200000000000001},{\"angle\":106.5,\"amplitude\":-11.200000000000001},{\"angle\":107.2,\"amplitude\":-11.200000000000001},{\"angle\":107.3,\"amplitude\":-11.200000000000001},{\"angle\":107.5,\"amplitude\":-11.200000000000001},{\"angle\":108,\"amplitude\":-11.200000000000001},{\"angle\":108.1,\"amplitude\":-11.600000000000001},{\"angle\":108.3,\"amplitude\":-11.600000000000001},{\"angle\":108.4,\"amplitude\":-11.600000000000001},{\"angle\":109,\"amplitude\":-11.600000000000001},{\"angle\":109.2,\"amplitude\":-11.600000000000001},{\"angle\":109.3,\"amplitude\":-12.000000000000002},{\"angle\":109.9,\"amplitude\":-12.000000000000002},{\"angle\":110.1,\"amplitude\":-11.600000000000001},{\"angle\":110.2,\"amplitude\":-12.000000000000002},{\"angle\":110.6,\"amplitude\":-12.000000000000002},{\"angle\":111.1,\"amplitude\":-12.000000000000002},{\"angle\":111.6,\"amplitude\":-12.000000000000002},{\"angle\":111.9,\"amplitude\":-12.400000000000002},{\"angle\":112.1,\"amplitude\":-12.400000000000002},{\"angle\":112.8,\"amplitude\":-12.400000000000002},{\"angle\":113.1,\"amplitude\":-12.799999999999997},{\"angle\":113.8,\"amplitude\":-12.799999999999997},{\"angle\":113.9,\"amplitude\":-12.799999999999997},{\"angle\":114.5,\"amplitude\":-13.2},{\"angle\":115.2,\"amplitude\":-13.2},{\"angle\":115.4,\"amplitude\":-13.2},{\"angle\":115.5,\"amplitude\":-13.2},{\"angle\":116.2,\"amplitude\":-13.2},{\"angle\":116.6,\"amplitude\":-13.2},{\"angle\":116.7,\"amplitude\":-13.599999999999998},{\"angle\":117.1,\"amplitude\":-13.599999999999998},{\"angle\":118.9,\"amplitude\":-14},{\"angle\":119.3,\"amplitude\":-14},{\"angle\":120.2,\"amplitude\":-14.399999999999999},{\"angle\":121.3,\"amplitude\":-14.399999999999999},{\"angle\":122.1,\"amplitude\":-14.8},{\"angle\":123.4,\"amplitude\":-14.8},{\"angle\":124.2,\"amplitude\":-15.2},{\"angle\":124.4,\"amplitude\":-15.2},{\"angle\":124.7,\"amplitude\":-15.2},{\"angle\":125.4,\"amplitude\":-15.600000000000001},{\"angle\":125.9,\"amplitude\":-15.600000000000001},{\"angle\":126.3,\"amplitude\":-16},{\"angle\":126.6,\"amplitude\":-16},{\"angle\":127.3,\"amplitude\":-16},{\"angle\":127.6,\"amplitude\":-16.400000000000002},{\"angle\":128.5,\"amplitude\":-16.400000000000002},{\"angle\":128.6,\"amplitude\":-16.400000000000002},{\"angle\":128.7,\"amplitude\":-16.400000000000002},{\"angle\":129.3,\"amplitude\":-16.8},{\"angle\":129.5,\"amplitude\":-16.8},{\"angle\":130.6,\"amplitude\":-16.8},{\"angle\":131,\"amplitude\":-17.200000000000003},{\"angle\":131.2,\"amplitude\":-17.200000000000003},{\"angle\":131.7,\"amplitude\":-17.200000000000003},{\"angle\":132,\"amplitude\":-17.200000000000003},{\"angle\":132.3,\"amplitude\":-17.599999999999998},{\"angle\":132.6,\"amplitude\":-17.599999999999998},{\"angle\":132.9,\"amplitude\":-17.599999999999998},{\"angle\":133.8,\"amplitude\":-18},{\"angle\":134.4,\"amplitude\":-18.4},{\"angle\":137.1,\"amplitude\":-18.799999999999997},{\"angle\":137.2,\"amplitude\":-18.799999999999997},{\"angle\":138,\"amplitude\":-19.2},{\"angle\":138.6,\"amplitude\":-19.2},{\"angle\":138.9,\"amplitude\":-19.6},{\"angle\":139.7,\"amplitude\":-19.6},{\"angle\":141,\"amplitude\":-19.6},{\"angle\":141.6,\"amplitude\":-20},{\"angle\":142.4,\"amplitude\":-20},{\"angle\":142.8,\"amplitude\":-20},{\"angle\":143.3,\"amplitude\":-20},{\"angle\":144.3,\"amplitude\":-20.4},{\"angle\":144.8,\"amplitude\":-20.4},{\"angle\":145,\"amplitude\":-20.4},{\"angle\":146.1,\"amplitude\":-20.4},{\"angle\":146.5,\"amplitude\":-20.4},{\"angle\":147.1,\"amplitude\":-20.4},{\"angle\":147.6,\"amplitude\":-20.8},{\"angle\":147.9,\"amplitude\":-20.4},{\"angle\":148.5,\"amplitude\":-20.4},{\"angle\":148.9,\"amplitude\":-20.4},{\"angle\":149.1,\"amplitude\":-20.4},{\"angle\":149.5,\"amplitude\":-20.8},{\"angle\":150.7,\"amplitude\":-20.4},{\"angle\":151,\"amplitude\":-20.4},{\"angle\":151.5,\"amplitude\":-20.4},{\"angle\":152.4,\"amplitude\":-20.4},{\"angle\":152.8,\"amplitude\":-20.4},{\"angle\":153.2,\"amplitude\":-20.4},{\"angle\":154.2,\"amplitude\":-20.4},{\"angle\":154.3,\"amplitude\":-20.4},{\"angle\":154.5,\"amplitude\":-20.4},{\"angle\":154.9,\"amplitude\":-20.4},{\"angle\":155.4,\"amplitude\":-20.4},{\"angle\":155.8,\"amplitude\":-20.4},{\"angle\":155.9,\"amplitude\":-20},{\"angle\":156.2,\"amplitude\":-20.4},{\"angle\":156.8,\"amplitude\":-20.4},{\"angle\":157.5,\"amplitude\":-20},{\"angle\":158,\"amplitude\":-20},{\"angle\":158.7,\"amplitude\":-20},{\"angle\":159.8,\"amplitude\":-20},{\"angle\":160.7,\"amplitude\":-20},{\"angle\":161.7,\"amplitude\":-20},{\"angle\":162.2,\"amplitude\":-20},{\"angle\":162.8,\"amplitude\":-20},{\"angle\":163.8,\"amplitude\":-20},{\"angle\":165.2,\"amplitude\":-20},{\"angle\":165.5,\"amplitude\":-20},{\"angle\":166.3,\"amplitude\":-20},{\"angle\":167.2,\"amplitude\":-20},{\"angle\":168.4,\"amplitude\":-20},{\"angle\":169.3,\"amplitude\":-19.6},{\"angle\":169.4,\"amplitude\":-19.6},{\"angle\":169.9,\"amplitude\":-19.6},{\"angle\":170.4,\"amplitude\":-19.6},{\"angle\":170.6,\"amplitude\":-19.6},{\"angle\":170.9,\"amplitude\":-19.6},{\"angle\":171.7,\"amplitude\":-19.6},{\"angle\":172.7,\"amplitude\":-19.6},{\"angle\":173.9,\"amplitude\":-19.6},{\"angle\":174.7,\"amplitude\":-19.2},{\"angle\":175.2,\"amplitude\":-19.2},{\"angle\":176,\"amplitude\":-19.2},{\"angle\":176.3,\"amplitude\":-19.2},{\"angle\":177.1,\"amplitude\":-19.2},{\"angle\":177.8,\"amplitude\":-19.2},{\"angle\":178.1,\"amplitude\":-18.799999999999997},{\"angle\":178.3,\"amplitude\":-18.799999999999997},{\"angle\":178.8,\"amplitude\":-18.799999999999997},{\"angle\":179.3,\"amplitude\":-18.799999999999997},{\"angle\":179.8,\"amplitude\":-18.799999999999997},{\"angle\":180.3,\"amplitude\":-18.799999999999997},{\"amplitude\":-18.799999999999997,\"angle\":179.7},{\"amplitude\":-18.799999999999997,\"angle\":180.2},{\"amplitude\":-18.799999999999997,\"angle\":180.7},{\"amplitude\":-18.799999999999997,\"angle\":181.2},{\"amplitude\":-18.799999999999997,\"angle\":181.7},{\"amplitude\":-18.799999999999997,\"angle\":181.9},{\"amplitude\":-19.2,\"angle\":182.2},{\"amplitude\":-19.2,\"angle\":182.9},{\"amplitude\":-19.2,\"angle\":183.7},{\"amplitude\":-19.2,\"angle\":184},{\"amplitude\":-19.2,\"angle\":184.8},{\"amplitude\":-19.2,\"angle\":185.3},{\"amplitude\":-19.6,\"angle\":186.1},{\"amplitude\":-19.6,\"angle\":187.3},{\"amplitude\":-19.6,\"angle\":188.3},{\"amplitude\":-19.6,\"angle\":189.1},{\"amplitude\":-19.6,\"angle\":189.4},{\"amplitude\":-19.6,\"angle\":189.6},{\"amplitude\":-19.6,\"angle\":190.1},{\"amplitude\":-19.6,\"angle\":190.6},{\"amplitude\":-19.6,\"angle\":190.7},{\"amplitude\":-20,\"angle\":191.6},{\"amplitude\":-20,\"angle\":192.8},{\"amplitude\":-20,\"angle\":193.7},{\"amplitude\":-20,\"angle\":194.5},{\"amplitude\":-20,\"angle\":194.8},{\"amplitude\":-20,\"angle\":196.2},{\"amplitude\":-20,\"angle\":197.2},{\"amplitude\":-20,\"angle\":197.8},{\"amplitude\":-20,\"angle\":198.3},{\"amplitude\":-20,\"angle\":199.3},{\"amplitude\":-20,\"angle\":200.2},{\"amplitude\":-20,\"angle\":201.3},{\"amplitude\":-20,\"angle\":202},{\"amplitude\":-20,\"angle\":202.5},{\"amplitude\":-20.4,\"angle\":203.2},{\"amplitude\":-20.4,\"angle\":203.8},{\"amplitude\":-20,\"angle\":204.1},{\"amplitude\":-20.4,\"angle\":204.2},{\"amplitude\":-20.4,\"angle\":204.6},{\"amplitude\":-20.4,\"angle\":205.1},{\"amplitude\":-20.4,\"angle\":205.5},{\"amplitude\":-20.4,\"angle\":205.7},{\"amplitude\":-20.4,\"angle\":205.8},{\"amplitude\":-20.4,\"angle\":206.8},{\"amplitude\":-20.4,\"angle\":207.2},{\"amplitude\":-20.4,\"angle\":207.6},{\"amplitude\":-20.4,\"angle\":208.5},{\"amplitude\":-20.4,\"angle\":209},{\"amplitude\":-20.4,\"angle\":209.3},{\"amplitude\":-20.8,\"angle\":210.5},{\"amplitude\":-20.4,\"angle\":210.9},{\"amplitude\":-20.4,\"angle\":211.1},{\"amplitude\":-20.4,\"angle\":211.5},{\"amplitude\":-20.4,\"angle\":212.1},{\"amplitude\":-20.8,\"angle\":212.4},{\"amplitude\":-20.4,\"angle\":212.9},{\"amplitude\":-20.4,\"angle\":213.5},{\"amplitude\":-20.4,\"angle\":213.9},{\"amplitude\":-20.4,\"angle\":215},{\"amplitude\":-20.4,\"angle\":215.2},{\"amplitude\":-20.4,\"angle\":215.7},{\"amplitude\":-20,\"angle\":216.7},{\"amplitude\":-20,\"angle\":217.2},{\"amplitude\":-20,\"angle\":217.6},{\"amplitude\":-20,\"angle\":218.4},{\"amplitude\":-19.6,\"angle\":219},{\"amplitude\":-19.6,\"angle\":220.3},{\"amplitude\":-19.6,\"angle\":221.1},{\"amplitude\":-19.2,\"angle\":221.4},{\"amplitude\":-19.2,\"angle\":222},{\"amplitude\":-18.799999999999997,\"angle\":222.8},{\"amplitude\":-18.799999999999997,\"angle\":222.9},{\"amplitude\":-18.4,\"angle\":225.6},{\"amplitude\":-18,\"angle\":226.2},{\"amplitude\":-17.599999999999998,\"angle\":227.1},{\"amplitude\":-17.599999999999998,\"angle\":227.4},{\"amplitude\":-17.599999999999998,\"angle\":227.7},{\"amplitude\":-17.200000000000003,\"angle\":228},{\"amplitude\":-17.200000000000003,\"angle\":228.3},{\"amplitude\":-17.200000000000003,\"angle\":228.8},{\"amplitude\":-17.200000000000003,\"angle\":229},{\"amplitude\":-16.8,\"angle\":229.4},{\"amplitude\":-16.8,\"angle\":230.5},{\"amplitude\":-16.8,\"angle\":230.7},{\"amplitude\":-16.400000000000002,\"angle\":231.3},{\"amplitude\":-16.400000000000002,\"angle\":231.4},{\"amplitude\":-16.400000000000002,\"angle\":231.5},{\"amplitude\":-16.400000000000002,\"angle\":232.4},{\"amplitude\":-16,\"angle\":232.7},{\"amplitude\":-16,\"angle\":233.4},{\"amplitude\":-16,\"angle\":233.7},{\"amplitude\":-15.600000000000001,\"angle\":234.1},{\"amplitude\":-15.600000000000001,\"angle\":234.6},{\"amplitude\":-15.2,\"angle\":235.3},{\"amplitude\":-15.2,\"angle\":235.6},{\"amplitude\":-15.2,\"angle\":235.8},{\"amplitude\":-14.8,\"angle\":236.6},{\"amplitude\":-14.8,\"angle\":237.9},{\"amplitude\":-14.399999999999999,\"angle\":238.7},{\"amplitude\":-14.399999999999999,\"angle\":239.8},{\"amplitude\":-14,\"angle\":240.7},{\"amplitude\":-14,\"angle\":241.1},{\"amplitude\":-13.599999999999998,\"angle\":242.9},{\"amplitude\":-13.599999999999998,\"angle\":243.3},{\"amplitude\":-13.2,\"angle\":243.4},{\"amplitude\":-13.2,\"angle\":243.8},{\"amplitude\":-13.2,\"angle\":244.5},{\"amplitude\":-13.2,\"angle\":244.6},{\"amplitude\":-13.2,\"angle\":244.8},{\"amplitude\":-13.2,\"angle\":245.5},{\"amplitude\":-12.799999999999997,\"angle\":246.1},{\"amplitude\":-12.799999999999997,\"angle\":246.2},{\"amplitude\":-12.799999999999997,\"angle\":246.9},{\"amplitude\":-12.400000000000002,\"angle\":247.2},{\"amplitude\":-12.400000000000002,\"angle\":247.9},{\"amplitude\":-12.400000000000002,\"angle\":248.1},{\"amplitude\":-12.000000000000002,\"angle\":248.4},{\"amplitude\":-12.000000000000002,\"angle\":248.9},{\"amplitude\":-12.000000000000002,\"angle\":249.4},{\"amplitude\":-12.000000000000002,\"angle\":249.8},{\"amplitude\":-11.600000000000001,\"angle\":249.9},{\"amplitude\":-12.000000000000002,\"angle\":250.1},{\"amplitude\":-12.000000000000002,\"angle\":250.7},{\"amplitude\":-11.600000000000001,\"angle\":250.8},{\"amplitude\":-11.600000000000001,\"angle\":251},{\"amplitude\":-11.600000000000001,\"angle\":251.6},{\"amplitude\":-11.600000000000001,\"angle\":251.7},{\"amplitude\":-11.600000000000001,\"angle\":251.9},{\"amplitude\":-11.200000000000001,\"angle\":252},{\"amplitude\":-11.200000000000001,\"angle\":252.5},{\"amplitude\":-11.200000000000001,\"angle\":252.7},{\"amplitude\":-11.200000000000001,\"angle\":252.8},{\"amplitude\":-11.200000000000001,\"angle\":253.5},{\"amplitude\":-11.200000000000001,\"angle\":253.6},{\"amplitude\":-10.8,\"angle\":253.9},{\"amplitude\":-10.8,\"angle\":254},{\"amplitude\":-10.8,\"angle\":254.4},{\"amplitude\":-10.8,\"angle\":254.6},{\"amplitude\":-10.4,\"angle\":254.9},{\"amplitude\":-10.4,\"angle\":255.3},{\"amplitude\":-10.4,\"angle\":255.6},{\"amplitude\":-10,\"angle\":256.2},{\"amplitude\":-10,\"angle\":256.5},{\"amplitude\":-10,\"angle\":257.8},{\"amplitude\":-9.6,\"angle\":258},{\"amplitude\":-9.6,\"angle\":258.6},{\"amplitude\":-9.6,\"angle\":258.8},{\"amplitude\":-9.6,\"angle\":258.9},{\"amplitude\":-9.6,\"angle\":259.5},{\"amplitude\":-9.6,\"angle\":260},{\"amplitude\":-9.6,\"angle\":260.2},{\"amplitude\":-9.2,\"angle\":260.4},{\"amplitude\":-9.6,\"angle\":260.8},{\"amplitude\":-9.2,\"angle\":261},{\"amplitude\":-9.2,\"angle\":261.1},{\"amplitude\":-9.2,\"angle\":261.7},{\"amplitude\":-9.2,\"angle\":261.9},{\"amplitude\":-9.2,\"angle\":262.4},{\"amplitude\":-9.2,\"angle\":262.9},{\"amplitude\":-9.2,\"angle\":263.1},{\"amplitude\":-8.799999999999999,\"angle\":263.7},{\"amplitude\":-8.799999999999999,\"angle\":263.8},{\"amplitude\":-8.799999999999999,\"angle\":264.4},{\"amplitude\":-8.799999999999999,\"angle\":264.5},{\"amplitude\":-8.799999999999999,\"angle\":264.7},{\"amplitude\":-8.799999999999999,\"angle\":265.1},{\"amplitude\":-8.399999999999999,\"angle\":265.3},{\"amplitude\":-8.399999999999999,\"angle\":265.4},{\"amplitude\":-8.399999999999999,\"angle\":266.1},{\"amplitude\":-8.399999999999999,\"angle\":266.5},{\"amplitude\":-8.399999999999999,\"angle\":266.6},{\"amplitude\":-8.399999999999999,\"angle\":266.8},{\"amplitude\":-8.399999999999999,\"angle\":267.1},{\"amplitude\":-8.399999999999999,\"angle\":267.5},{\"amplitude\":-7.999999999999998,\"angle\":267.8},{\"amplitude\":-7.999999999999998,\"angle\":268.2},{\"amplitude\":-7.999999999999998,\"angle\":268.8},{\"amplitude\":-7.599999999999998,\"angle\":270},{\"amplitude\":-7.599999999999998,\"angle\":270.6},{\"amplitude\":-7.599999999999998,\"angle\":271.1},{\"amplitude\":-7.599999999999998,\"angle\":271.4},{\"amplitude\":-7.599999999999998,\"angle\":271.9},{\"amplitude\":-7.599999999999998,\"angle\":272.1},{\"amplitude\":-7.599999999999998,\"angle\":272.4},{\"amplitude\":-7.599999999999998,\"angle\":272.6},{\"amplitude\":-7.599999999999998,\"angle\":272.7},{\"amplitude\":-7.599999999999998,\"angle\":273.1},{\"amplitude\":-7.599999999999998,\"angle\":273.2},{\"amplitude\":-7.599999999999998,\"angle\":273.7},{\"amplitude\":-7.599999999999998,\"angle\":274.3},{\"amplitude\":-7.599999999999998,\"angle\":274.5},{\"amplitude\":-7.200000000000002,\"angle\":275.8},{\"amplitude\":-7.200000000000002,\"angle\":276.3},{\"amplitude\":-7.200000000000002,\"angle\":276.6},{\"amplitude\":-7.200000000000002,\"angle\":277.2},{\"amplitude\":-7.200000000000002,\"angle\":277.7},{\"amplitude\":-7.200000000000002,\"angle\":279},{\"amplitude\":-7.200000000000002,\"angle\":279.5},{\"amplitude\":-7.200000000000002,\"angle\":280.1},{\"amplitude\":-6.800000000000002,\"angle\":280.7},{\"amplitude\":-6.800000000000002,\"angle\":281},{\"amplitude\":-6.800000000000002,\"angle\":281.4},{\"amplitude\":-6.800000000000002,\"angle\":281.7},{\"amplitude\":-6.800000000000002,\"angle\":282},{\"amplitude\":-6.800000000000002,\"angle\":282.3},{\"amplitude\":-6.800000000000002,\"angle\":282.6},{\"amplitude\":-6.800000000000002,\"angle\":283.3},{\"amplitude\":-6.800000000000002,\"angle\":283.6},{\"amplitude\":-6.800000000000002,\"angle\":283.9},{\"amplitude\":-6.400000000000001,\"angle\":284.2},{\"amplitude\":-6.400000000000001,\"angle\":284.5},{\"amplitude\":-6.400000000000001,\"angle\":285.1},{\"amplitude\":-6.400000000000001,\"angle\":285.2},{\"amplitude\":-6.400000000000001,\"angle\":285.4},{\"amplitude\":-6.400000000000001,\"angle\":285.9},{\"amplitude\":-6.400000000000001,\"angle\":286},{\"amplitude\":-6.400000000000001,\"angle\":286.3},{\"amplitude\":-6.400000000000001,\"angle\":286.5},{\"amplitude\":-6.400000000000001,\"angle\":287},{\"amplitude\":-6.400000000000001,\"angle\":287.3},{\"amplitude\":-6.400000000000001,\"angle\":287.8},{\"amplitude\":-6.400000000000001,\"angle\":288},{\"amplitude\":-6.400000000000001,\"angle\":288.4},{\"amplitude\":-6.400000000000001,\"angle\":288.6},{\"amplitude\":-6.000000000000001,\"angle\":288.9},{\"amplitude\":-6.000000000000001,\"angle\":289},{\"amplitude\":-6.000000000000001,\"angle\":289.5},{\"amplitude\":-6.000000000000001,\"angle\":289.7},{\"amplitude\":-6.000000000000001,\"angle\":290.2},{\"amplitude\":-6.000000000000001,\"angle\":290.9},{\"amplitude\":-6.000000000000001,\"angle\":291},{\"amplitude\":-6.000000000000001,\"angle\":291.4},{\"amplitude\":-6.000000000000001,\"angle\":291.6},{\"amplitude\":-6.000000000000001,\"angle\":292.2},{\"amplitude\":-5.6000000000000005,\"angle\":292.9},{\"amplitude\":-6.000000000000001,\"angle\":293.5},{\"amplitude\":-6.000000000000001,\"angle\":293.7},{\"amplitude\":-5.2,\"angle\":296.7},{\"amplitude\":-5.2,\"angle\":297.2},{\"amplitude\":-5.2,\"angle\":298},{\"amplitude\":-5.2,\"angle\":298.5},{\"amplitude\":-5.2,\"angle\":299},{\"amplitude\":-5.2,\"angle\":299.2},{\"amplitude\":-5.2,\"angle\":299.8},{\"amplitude\":-4.8,\"angle\":300.5},{\"amplitude\":-4.8,\"angle\":300.8},{\"amplitude\":-4.8,\"angle\":301.8},{\"amplitude\":-4.8,\"angle\":302.2},{\"amplitude\":-4.8,\"angle\":302.8},{\"amplitude\":-4.8,\"angle\":303.1},{\"amplitude\":-4.8,\"angle\":304},{\"amplitude\":-5.2,\"angle\":304.1},{\"amplitude\":-4.8,\"angle\":304.8},{\"amplitude\":-5.2,\"angle\":304.9},{\"amplitude\":-4.8,\"angle\":305.1},{\"amplitude\":-5.2,\"angle\":305.2},{\"amplitude\":-4.8,\"angle\":305.3},{\"amplitude\":-4.8,\"angle\":305.9},{\"amplitude\":-4.8,\"angle\":306.1},{\"amplitude\":-4.8,\"angle\":306.3},{\"amplitude\":-4.8,\"angle\":306.8},{\"amplitude\":-4.8,\"angle\":307},{\"amplitude\":-4.8,\"angle\":307.3},{\"amplitude\":-4.8,\"angle\":307.4},{\"amplitude\":-4.8,\"angle\":307.5},{\"amplitude\":-4.8,\"angle\":307.8},{\"amplitude\":-4.8,\"angle\":308.3},{\"amplitude\":-4.8,\"angle\":308.6},{\"amplitude\":-4.8,\"angle\":308.8},{\"amplitude\":-4.8,\"angle\":309.1},{\"amplitude\":-4.8,\"angle\":309.7},{\"amplitude\":-4.3999999999999995,\"angle\":310.1},{\"amplitude\":-4.3999999999999995,\"angle\":310.2},{\"amplitude\":-4.3999999999999995,\"angle\":311.5},{\"amplitude\":-4.3999999999999995,\"angle\":312.1},{\"amplitude\":-4.3999999999999995,\"angle\":312.2},{\"amplitude\":-3.999999999999999,\"angle\":312.5},{\"amplitude\":-4.3999999999999995,\"angle\":313.1},{\"amplitude\":-3.999999999999999,\"angle\":313.3},{\"amplitude\":-3.999999999999999,\"angle\":314.1},{\"amplitude\":-3.999999999999999,\"angle\":314.6},{\"amplitude\":-3.999999999999999,\"angle\":314.9},{\"amplitude\":-3.999999999999999,\"angle\":315.4},{\"amplitude\":-3.999999999999999,\"angle\":315.5},{\"amplitude\":-3.999999999999999,\"angle\":316},{\"amplitude\":-3.999999999999999,\"angle\":316.2},{\"amplitude\":-3.999999999999999,\"angle\":316.4},{\"amplitude\":-3.999999999999999,\"angle\":316.7},{\"amplitude\":-3.999999999999999,\"angle\":317},{\"amplitude\":-3.999999999999999,\"angle\":317.2},{\"amplitude\":-3.999999999999999,\"angle\":317.5},{\"amplitude\":-3.999999999999999,\"angle\":317.8},{\"amplitude\":-3.5999999999999988,\"angle\":318},{\"amplitude\":-3.5999999999999988,\"angle\":318.3},{\"amplitude\":-3.5999999999999988,\"angle\":318.9},{\"amplitude\":-3.5999999999999988,\"angle\":319.2},{\"amplitude\":-3.5999999999999988,\"angle\":319.5},{\"amplitude\":-3.5999999999999988,\"angle\":320},{\"amplitude\":-3.5999999999999988,\"angle\":320.3},{\"amplitude\":-3.5999999999999988,\"angle\":320.5},{\"amplitude\":-3.5999999999999988,\"angle\":321.1},{\"amplitude\":-3.5999999999999988,\"angle\":321.2},{\"amplitude\":-3.5999999999999988,\"angle\":321.5},{\"amplitude\":-3.5999999999999988,\"angle\":321.6},{\"amplitude\":-3.1999999999999984,\"angle\":321.7},{\"amplitude\":-3.5999999999999988,\"angle\":322.1},{\"amplitude\":-3.1999999999999984,\"angle\":322.4},{\"amplitude\":-3.1999999999999984,\"angle\":322.6},{\"amplitude\":-3.1999999999999984,\"angle\":323.3},{\"amplitude\":-3.1999999999999984,\"angle\":324.1},{\"amplitude\":-2.799999999999998,\"angle\":324.7},{\"amplitude\":-2.799999999999998,\"angle\":325},{\"amplitude\":-2.799999999999998,\"angle\":325.2},{\"amplitude\":-2.799999999999998,\"angle\":325.5},{\"amplitude\":-2.799999999999998,\"angle\":325.6},{\"amplitude\":-2.799999999999998,\"angle\":325.9},{\"amplitude\":-2.400000000000002,\"angle\":326},{\"amplitude\":-2.799999999999998,\"angle\":326.1},{\"amplitude\":-2.400000000000002,\"angle\":326.3},{\"amplitude\":-2.400000000000002,\"angle\":327},{\"amplitude\":-2.400000000000002,\"angle\":327.5},{\"amplitude\":-2.400000000000002,\"angle\":327.8},{\"amplitude\":-2.400000000000002,\"angle\":328.3},{\"amplitude\":-2.0000000000000018,\"angle\":328.6},{\"amplitude\":-2.400000000000002,\"angle\":328.8},{\"amplitude\":-2.0000000000000018,\"angle\":329.2},{\"amplitude\":-2.0000000000000018,\"angle\":329.7},{\"amplitude\":-2.0000000000000018,\"angle\":329.9},{\"amplitude\":-2.0000000000000018,\"angle\":330.3},{\"amplitude\":-2.0000000000000018,\"angle\":330.6},{\"amplitude\":-2.0000000000000018,\"angle\":331.2},{\"amplitude\":-2.0000000000000018,\"angle\":331.6},{\"amplitude\":-2.0000000000000018,\"angle\":331.7},{\"amplitude\":-2.0000000000000018,\"angle\":332},{\"amplitude\":-2.0000000000000018,\"angle\":332.3},{\"amplitude\":-2.0000000000000018,\"angle\":332.5},{\"amplitude\":-2.0000000000000018,\"angle\":333},{\"amplitude\":-2.0000000000000018,\"angle\":333.1},{\"amplitude\":-1.6000000000000014,\"angle\":333.3},{\"amplitude\":-2.0000000000000018,\"angle\":333.6},{\"amplitude\":-2.0000000000000018,\"angle\":333.8},{\"amplitude\":-1.6000000000000014,\"angle\":334.3},{\"amplitude\":-1.6000000000000014,\"angle\":334.6},{\"amplitude\":-1.6000000000000014,\"angle\":335.2},{\"amplitude\":-1.6000000000000014,\"angle\":335.5},{\"amplitude\":-1.6000000000000014,\"angle\":335.7},{\"amplitude\":-1.6000000000000014,\"angle\":336.1},{\"amplitude\":-1.6000000000000014,\"angle\":336.7},{\"amplitude\":-1.6000000000000014,\"angle\":336.9},{\"amplitude\":-1.6000000000000014,\"angle\":337},{\"amplitude\":-1.6000000000000014,\"angle\":337.1},{\"amplitude\":-1.6000000000000014,\"angle\":337.6},{\"amplitude\":-1.6000000000000014,\"angle\":338.1},{\"amplitude\":-1.6000000000000014,\"angle\":338.3},{\"amplitude\":-1.6000000000000014,\"angle\":338.6},{\"amplitude\":-1.6000000000000014,\"angle\":338.7},{\"amplitude\":-1.6000000000000014,\"angle\":338.9},{\"amplitude\":-1.6000000000000014,\"angle\":339.2},{\"amplitude\":-1.6000000000000014,\"angle\":339.4},{\"amplitude\":-1.6000000000000014,\"angle\":339.8},{\"amplitude\":-1.6000000000000014,\"angle\":340.6},{\"amplitude\":-1.6000000000000014,\"angle\":341.6},{\"amplitude\":-1.6000000000000014,\"angle\":341.7},{\"amplitude\":-1.200000000000001,\"angle\":342.2},{\"amplitude\":-1.200000000000001,\"angle\":342.4},{\"amplitude\":-1.200000000000001,\"angle\":342.9},{\"amplitude\":-1.200000000000001,\"angle\":343},{\"amplitude\":-1.200000000000001,\"angle\":343.5},{\"amplitude\":-1.200000000000001,\"angle\":343.6},{\"amplitude\":-1.200000000000001,\"angle\":344.1},{\"amplitude\":-1.200000000000001,\"angle\":344.2},{\"amplitude\":-1.200000000000001,\"angle\":344.6},{\"amplitude\":-0.8000000000000007,\"angle\":345.5},{\"amplitude\":-0.8000000000000007,\"angle\":345.8},{\"amplitude\":-0.8000000000000007,\"angle\":346.5},{\"amplitude\":-0.8000000000000007,\"angle\":346.6},{\"amplitude\":-0.8000000000000007,\"angle\":347.1},{\"amplitude\":-0.8000000000000007,\"angle\":347.6},{\"amplitude\":-0.8000000000000007,\"angle\":348},{\"amplitude\":-0.8000000000000007,\"angle\":348.2},{\"amplitude\":-0.8000000000000007,\"angle\":348.3},{\"amplitude\":-0.8000000000000007,\"angle\":348.8},{\"amplitude\":-0.8000000000000007,\"angle\":349.2},{\"amplitude\":-0.8000000000000007,\"angle\":349.7},{\"amplitude\":-0.8000000000000007,\"angle\":349.8},{\"amplitude\":-0.8000000000000007,\"angle\":350.2},{\"amplitude\":-0.8000000000000007,\"angle\":350.5},{\"amplitude\":-0.8000000000000007,\"angle\":350.8},{\"amplitude\":-0.8000000000000007,\"angle\":350.9},{\"amplitude\":-0.8000000000000007,\"angle\":351},{\"amplitude\":-0.8000000000000007,\"angle\":351.4},{\"amplitude\":-1.200000000000001,\"angle\":351.8},{\"amplitude\":-1.200000000000001,\"angle\":352},{\"amplitude\":-1.200000000000001,\"angle\":352.1},{\"amplitude\":-1.200000000000001,\"angle\":352.4},{\"amplitude\":-0.8000000000000007,\"angle\":352.5},{\"amplitude\":-1.200000000000001,\"angle\":352.9},{\"amplitude\":-0.8000000000000007,\"angle\":354},{\"amplitude\":-0.8000000000000007,\"angle\":354.6},{\"amplitude\":-0.8000000000000007,\"angle\":354.9},{\"amplitude\":-0.8000000000000007,\"angle\":355.4},{\"amplitude\":-0.40000000000000036,\"angle\":355.8},{\"amplitude\":-0.8000000000000007,\"angle\":356.4},{\"amplitude\":-0.40000000000000036,\"angle\":356.9},{\"amplitude\":-0.40000000000000036,\"angle\":357.4},{\"amplitude\":-0.40000000000000036,\"angle\":357.8},{\"amplitude\":-0.40000000000000036,\"angle\":358.5},{\"amplitude\":-0.40000000000000036,\"angle\":359.1},{\"amplitude\":-0.40000000000000036,\"angle\":359.5},{\"amplitude\":-0.40000000000000036,\"angle\":359.7},{\"amplitude\":-0.40000000000000036,\"angle\":360}]\n \n }\n])\n","url":null,"readme":"This example showcases a simple Polar Chart with five Line Series.\n\nPolar Charts are used for visualizing data relationships in terms of radiuses and angles.\n\n## Polar coordinate system and PolarLineSeries\n\n```typescript\n{\n // Data point angle as degrees [0, 360].\n angle: 0,\n // Data point position on the *Amplitude Axis*. Determines its location between the Charts origin and outer edge.\n amplitude: 50\n}\n```\n\n*PolarLineSeries* connects a list of such *PolarPoints* with a continuous line.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\n\n## PolarRadialAxis\n\nThe coordinate system can be rotated with methods of *PolarRadialAxis**.\n\n```typescript\n// Configure Polar Radial Axis.\nconst radialAxis = polar.getRadialAxis()\n // 0 = North\n .setRotation(90)\n // Clockwise direction.\n .setInverted(true)\n```\n\n## PolarAmplitudeAxis\n\nSimilarly, the visible range of amplitude values can be configured with methods of *PolarAmplitudeAxis*. The default configuration is to fit \n\n```typescript\nconst amplitudeAxis = polar.getAmplitudeAxis()\n // Set amplitude interval explicitly.\n // [-39 dB, 0 dB]\n .setInterval(-39, 0)\n .setTitle('Sensitivity (dB)')\n```","image":"polarMicrophoneSensitivity.png"},{"id":"lcjs-example-1002-polarEMFieldStrength","title":"JavaScript Polar Chart EM Field Strength","tags":["polar","area"],"description":"PolarChart showcase with AreaSeries","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: Polar Charts, Scientific Charts, High-Performance Charts, Medical Charts, Area Charts, Line Series.","src":"/*\n * LightningChartJS example showcasing PolarChart and PolarAreaSeries in a electromagnetic field strength visualization application.\n */\n// Import LightningChartJS\nconst lcjs = require('@arction/lcjs')\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n Themes\n} = lcjs\n\nconst app = (data) => {\n // Create a polar chart.\n const polar = lightningChart().Polar({\n // theme: Themes.darkGold\n })\n .setTitle('Electromagnetic field strength')\n\n // Configure Polar Axes.\n const radialAxis = polar.getRadialAxis()\n\n const amplitudeAxis = polar.getAmplitudeAxis()\n .setTitle('Field strength H (A/m)')\n\n // Create series for each data set.\n const series = data.map(( info ) => {\n const { name } = info\n const polarAreaSeries = polar.addAreaSeries()\n .setName( name )\n .setConnectDataAutomaticallyEnabled(true)\n .setMouseInteractions(false)\n .setCursorResultTableFormatter((builder, series, angleDeg, amplitude, format) => builder\n .addRow(`${series.getName()}`)\n .addRow('Angle', '', `${Math.round(angleDeg)} °`)\n .addRow('Field strength', '', `${format(amplitude)} A/m`)\n )\n\n return polarAreaSeries\n })\n\n // Animate series data with random static to simulate live sensor data.\n let freezeData = false\n const updateData = () => {\n if (! freezeData)\n series.forEach((series, i) => {\n const polarPoints = data[i].data\n const polarPointsWithStatic = polarPoints.map( polarPoint => ({\n angle: polarPoint.angle,\n amplitude: polarPoint.amplitude + (Math.random() * 2 - 1) * 0.2\n }))\n series.setData(polarPointsWithStatic)\n })\n\n requestAnimationFrame(updateData)\n }\n updateData()\n\n // Add LegendBox.\n const legendBox = polar.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.20,\n })\n legendBox.add(polar)\n\n // Freeze data animation while mouse is on Chart.\n polar.onSeriesBackgroundMouseEnter(() => {\n freezeData = true\n })\n polar.onSeriesBackgroundMouseLeave(() => {\n freezeData = false\n })\n \n}\n\napp([\n {\n name: 'Above 100MHz',\n data: [{\"angle\":0,\"amplitude\":4.1},{\"angle\":0.3,\"amplitude\":4.1},{\"angle\":0.6,\"amplitude\":4},{\"angle\":1.1,\"amplitude\":4},{\"angle\":1.4,\"amplitude\":4},{\"angle\":1.7,\"amplitude\":4},{\"angle\":2.2,\"amplitude\":4},{\"angle\":2.5,\"amplitude\":4},{\"angle\":2.7,\"amplitude\":4},{\"angle\":3.3,\"amplitude\":4},{\"angle\":3.5,\"amplitude\":4},{\"angle\":3.8,\"amplitude\":4},{\"angle\":4.3,\"amplitude\":4},{\"angle\":4.6,\"amplitude\":4},{\"angle\":4.8,\"amplitude\":4},{\"angle\":5.4,\"amplitude\":4},{\"angle\":5.6,\"amplitude\":4},{\"angle\":5.9,\"amplitude\":4},{\"angle\":6.4,\"amplitude\":4.1},{\"angle\":6.6,\"amplitude\":4.1},{\"angle\":6.9,\"amplitude\":4.1},{\"angle\":7.6,\"amplitude\":4.1},{\"angle\":7.9,\"amplitude\":4.1},{\"angle\":8.3,\"amplitude\":4.1},{\"angle\":8.6,\"amplitude\":4.1},{\"angle\":8.8,\"amplitude\":4.2},{\"angle\":9.3,\"amplitude\":4.2},{\"angle\":10.2,\"amplitude\":4.2},{\"angle\":10.7,\"amplitude\":4.2},{\"angle\":11.1,\"amplitude\":4.3},{\"angle\":11.6,\"amplitude\":4.3},{\"angle\":12.1,\"amplitude\":4.3},{\"angle\":12.2,\"amplitude\":4.3},{\"angle\":12.4,\"amplitude\":4.3},{\"angle\":12.9,\"amplitude\":4.3},{\"angle\":13.1,\"amplitude\":4.4},{\"angle\":13.3,\"amplitude\":4.4},{\"angle\":13.8,\"amplitude\":4.4},{\"angle\":14.1,\"amplitude\":4.4},{\"angle\":14.5,\"amplitude\":4.4},{\"angle\":14.9,\"amplitude\":4.5},{\"angle\":15.5,\"amplitude\":4.5},{\"angle\":16.3,\"amplitude\":4.6000000000000005},{\"angle\":17.1,\"amplitude\":4.6000000000000005},{\"angle\":17.2,\"amplitude\":4.6000000000000005},{\"angle\":17.6,\"amplitude\":4.699999999999999},{\"angle\":17.7,\"amplitude\":4.699999999999999},{\"angle\":18.4,\"amplitude\":4.699999999999999},{\"angle\":18.5,\"amplitude\":4.8},{\"angle\":18.6,\"amplitude\":4.8},{\"angle\":19,\"amplitude\":4.8},{\"angle\":19.2,\"amplitude\":4.8},{\"angle\":19.6,\"amplitude\":4.9},{\"angle\":19.7,\"amplitude\":4.9},{\"angle\":20.3,\"amplitude\":5},{\"angle\":20.4,\"amplitude\":5},{\"angle\":21,\"amplitude\":5},{\"angle\":21.3,\"amplitude\":5.1},{\"angle\":21.5,\"amplitude\":5.1},{\"angle\":21.7,\"amplitude\":5.1},{\"angle\":21.9,\"amplitude\":5.2},{\"angle\":22,\"amplitude\":5.2},{\"angle\":22.1,\"amplitude\":5.2},{\"angle\":22.5,\"amplitude\":5.2},{\"angle\":22.6,\"amplitude\":5.300000000000001},{\"angle\":23.1,\"amplitude\":5.300000000000001},{\"angle\":23.3,\"amplitude\":5.4},{\"angle\":23.7,\"amplitude\":5.4},{\"angle\":23.8,\"amplitude\":5.4},{\"angle\":24.4,\"amplitude\":5.4},{\"angle\":24.6,\"amplitude\":5.4},{\"angle\":24.9,\"amplitude\":5.5},{\"angle\":25.3,\"amplitude\":5.5},{\"angle\":25.6,\"amplitude\":5.5},{\"angle\":25.8,\"amplitude\":5.5},{\"angle\":26,\"amplitude\":5.5},{\"angle\":26.1,\"amplitude\":5.5},{\"angle\":26.5,\"amplitude\":5.5},{\"angle\":26.6,\"amplitude\":5.5},{\"angle\":26.8,\"amplitude\":5.4},{\"angle\":26.9,\"amplitude\":5.4},{\"angle\":27,\"amplitude\":5.4},{\"angle\":27.2,\"amplitude\":5.4},{\"angle\":27.3,\"amplitude\":5.300000000000001},{\"angle\":27.4,\"amplitude\":5.300000000000001},{\"angle\":27.5,\"amplitude\":5.300000000000001},{\"angle\":27.7,\"amplitude\":5.300000000000001},{\"angle\":27.9,\"amplitude\":5.2},{\"angle\":28,\"amplitude\":5.1},{\"angle\":28.2,\"amplitude\":5.1},{\"angle\":28.4,\"amplitude\":5},{\"angle\":28.6,\"amplitude\":5},{\"angle\":28.8,\"amplitude\":5},{\"angle\":29,\"amplitude\":4.9},{\"angle\":29.2,\"amplitude\":4.9},{\"angle\":29.6,\"amplitude\":4.8},{\"angle\":29.8,\"amplitude\":4.8},{\"angle\":30.5,\"amplitude\":4.699999999999999},{\"angle\":31.7,\"amplitude\":4.4},{\"angle\":31.9,\"amplitude\":4.3},{\"angle\":32,\"amplitude\":4.2},{\"angle\":32.4,\"amplitude\":4.2},{\"angle\":32.7,\"amplitude\":4.1},{\"angle\":32.8,\"amplitude\":4},{\"angle\":33.1,\"amplitude\":4},{\"angle\":33.2,\"amplitude\":3.9000000000000004},{\"angle\":33.4,\"amplitude\":3.8},{\"angle\":33.8,\"amplitude\":3.5},{\"angle\":34,\"amplitude\":3.4000000000000004},{\"angle\":34.8,\"amplitude\":3.3000000000000003},{\"angle\":35,\"amplitude\":3.2},{\"angle\":35.5,\"amplitude\":3.2},{\"angle\":35.6,\"amplitude\":3.1},{\"angle\":36.4,\"amplitude\":3.1},{\"angle\":36.5,\"amplitude\":3},{\"angle\":36.6,\"amplitude\":3},{\"angle\":36.9,\"amplitude\":2.9},{\"angle\":37.1,\"amplitude\":2.9},{\"angle\":37.5,\"amplitude\":2.8000000000000003},{\"angle\":37.7,\"amplitude\":2.8000000000000003},{\"angle\":37.8,\"amplitude\":2.7},{\"angle\":38.8,\"amplitude\":2.7},{\"angle\":40.5,\"amplitude\":2.5},{\"angle\":41.3,\"amplitude\":2.5},{\"angle\":42.4,\"amplitude\":2.3000000000000003},{\"angle\":42.9,\"amplitude\":2.2},{\"angle\":45.3,\"amplitude\":2.1},{\"angle\":46.7,\"amplitude\":2.1},{\"angle\":46.8,\"amplitude\":2.1},{\"angle\":47.9,\"amplitude\":2},{\"angle\":48.3,\"amplitude\":2},{\"angle\":49.1,\"amplitude\":2},{\"angle\":49.6,\"amplitude\":2},{\"angle\":50,\"amplitude\":1.9},{\"angle\":50.8,\"amplitude\":1.9},{\"angle\":51.2,\"amplitude\":1.9},{\"angle\":51.7,\"amplitude\":1.9},{\"angle\":53,\"amplitude\":1.9},{\"angle\":53.7,\"amplitude\":1.7999999999999998},{\"angle\":54.7,\"amplitude\":1.7999999999999998},{\"angle\":57.2,\"amplitude\":1.7999999999999998},{\"angle\":57.5,\"amplitude\":1.7999999999999998},{\"angle\":58.4,\"amplitude\":1.9},{\"angle\":58.7,\"amplitude\":1.9},{\"angle\":60.3,\"amplitude\":1.9},{\"angle\":61.1,\"amplitude\":2},{\"angle\":61.4,\"amplitude\":2},{\"angle\":61.9,\"amplitude\":2},{\"angle\":64.4,\"amplitude\":2.1},{\"angle\":65.5,\"amplitude\":2.1},{\"angle\":65.9,\"amplitude\":2.2},{\"angle\":66.3,\"amplitude\":2.2},{\"angle\":68,\"amplitude\":2.2},{\"angle\":68.8,\"amplitude\":2.2},{\"angle\":69,\"amplitude\":2.3000000000000003},{\"angle\":69.5,\"amplitude\":2.3000000000000003},{\"angle\":70.3,\"amplitude\":2.3000000000000003},{\"angle\":71.1,\"amplitude\":2.3000000000000003},{\"angle\":71.8,\"amplitude\":2.3000000000000003},{\"angle\":71.9,\"amplitude\":2.4},{\"angle\":72.1,\"amplitude\":2.4},{\"angle\":72.3,\"amplitude\":2.4},{\"angle\":73.4,\"amplitude\":2.4},{\"angle\":73.8,\"amplitude\":2.5},{\"angle\":75.1,\"amplitude\":2.6},{\"angle\":75.6,\"amplitude\":2.6},{\"angle\":75.9,\"amplitude\":2.7},{\"angle\":76.7,\"amplitude\":2.7},{\"angle\":77,\"amplitude\":2.8000000000000003},{\"angle\":77.6,\"amplitude\":2.8000000000000003},{\"angle\":77.8,\"amplitude\":2.9},{\"angle\":78,\"amplitude\":2.9},{\"angle\":78.2,\"amplitude\":3},{\"angle\":78.7,\"amplitude\":3},{\"angle\":79.7,\"amplitude\":3.1},{\"angle\":79.8,\"amplitude\":3.1},{\"angle\":80,\"amplitude\":3.2},{\"angle\":80.1,\"amplitude\":3.2},{\"angle\":80.2,\"amplitude\":3.2},{\"angle\":80.3,\"amplitude\":3.3000000000000003},{\"angle\":80.5,\"amplitude\":3.3000000000000003},{\"angle\":80.9,\"amplitude\":3.3000000000000003},{\"angle\":81,\"amplitude\":3.4000000000000004},{\"angle\":81.1,\"amplitude\":3.4000000000000004},{\"angle\":82.2,\"amplitude\":3.5},{\"angle\":82.3,\"amplitude\":3.5999999999999996},{\"angle\":82.8,\"amplitude\":3.5999999999999996},{\"angle\":83,\"amplitude\":3.7},{\"angle\":83.4,\"amplitude\":3.8},{\"angle\":83.5,\"amplitude\":3.9000000000000004},{\"angle\":84.1,\"amplitude\":3.9000000000000004},{\"angle\":84.2,\"amplitude\":4},{\"angle\":84.3,\"amplitude\":4},{\"angle\":84.4,\"amplitude\":4.1},{\"angle\":84.8,\"amplitude\":4.2},{\"angle\":85.2,\"amplitude\":4.3},{\"angle\":85.7,\"amplitude\":4.4},{\"angle\":86,\"amplitude\":4.5},{\"angle\":86.3,\"amplitude\":4.5},{\"angle\":86.8,\"amplitude\":4.6000000000000005},{\"angle\":87.1,\"amplitude\":4.6000000000000005},{\"angle\":87.4,\"amplitude\":4.8},{\"angle\":87.9,\"amplitude\":4.8},{\"angle\":88.1,\"amplitude\":4.9},{\"angle\":88.4,\"amplitude\":5},{\"angle\":88.8,\"amplitude\":5.1},{\"angle\":89,\"amplitude\":5.1},{\"angle\":89.2,\"amplitude\":5.2},{\"angle\":89.7,\"amplitude\":5.300000000000001},{\"angle\":89.9,\"amplitude\":5.300000000000001},{\"angle\":90,\"amplitude\":5.300000000000001},{\"angle\":90.4,\"amplitude\":5.300000000000001},{\"angle\":90.6,\"amplitude\":5.300000000000001},{\"angle\":91.4,\"amplitude\":5.300000000000001},{\"angle\":92.5,\"amplitude\":5.300000000000001},{\"angle\":93.1,\"amplitude\":5.300000000000001},{\"angle\":94.1,\"amplitude\":5.300000000000001},{\"angle\":94.5,\"amplitude\":5.2},{\"angle\":94.9,\"amplitude\":5.2},{\"angle\":95.5,\"amplitude\":5.2},{\"angle\":95.8,\"amplitude\":5.2},{\"angle\":96.2,\"amplitude\":5.2},{\"angle\":96.4,\"amplitude\":5.2},{\"angle\":96.7,\"amplitude\":5.2},{\"angle\":97.1,\"amplitude\":5.1},{\"angle\":97.2,\"amplitude\":5},{\"angle\":97.7,\"amplitude\":5},{\"angle\":98.2,\"amplitude\":5},{\"angle\":98.4,\"amplitude\":5},{\"angle\":98.8,\"amplitude\":4.9},{\"angle\":99.3,\"amplitude\":4.8},{\"angle\":99.6,\"amplitude\":4.8},{\"angle\":99.9,\"amplitude\":4.8},{\"angle\":100.4,\"amplitude\":4.8},{\"angle\":100.5,\"amplitude\":4.699999999999999},{\"angle\":100.7,\"amplitude\":4.699999999999999},{\"angle\":101.1,\"amplitude\":4.699999999999999},{\"angle\":101.6,\"amplitude\":4.6000000000000005},{\"angle\":101.7,\"amplitude\":4.6000000000000005},{\"angle\":101.9,\"amplitude\":4.6000000000000005},{\"angle\":102.2,\"amplitude\":4.6000000000000005},{\"angle\":102.8,\"amplitude\":4.5},{\"angle\":103,\"amplitude\":4.5},{\"angle\":103.1,\"amplitude\":4.5},{\"angle\":103.2,\"amplitude\":4.5},{\"angle\":103.5,\"amplitude\":4.5},{\"angle\":103.6,\"amplitude\":4.4},{\"angle\":104.1,\"amplitude\":4.4},{\"angle\":104.3,\"amplitude\":4.4},{\"angle\":104.7,\"amplitude\":4.4},{\"angle\":105.1,\"amplitude\":4.4},{\"angle\":105.6,\"amplitude\":4.4},{\"angle\":106.1,\"amplitude\":4.4},{\"angle\":106.4,\"amplitude\":4.4},{\"angle\":106.6,\"amplitude\":4.4},{\"angle\":107.1,\"amplitude\":4.4},{\"angle\":107.5,\"amplitude\":4.5},{\"angle\":107.9,\"amplitude\":4.5},{\"angle\":108.1,\"amplitude\":4.6000000000000005},{\"angle\":108.3,\"amplitude\":4.6000000000000005},{\"angle\":108.5,\"amplitude\":4.6000000000000005},{\"angle\":108.7,\"amplitude\":4.6000000000000005},{\"angle\":109,\"amplitude\":4.699999999999999},{\"angle\":109.1,\"amplitude\":4.699999999999999},{\"angle\":109.4,\"amplitude\":4.8},{\"angle\":109.5,\"amplitude\":4.8},{\"angle\":109.9,\"amplitude\":4.9},{\"angle\":110,\"amplitude\":5},{\"angle\":110.5,\"amplitude\":5},{\"angle\":111.1,\"amplitude\":5.1},{\"angle\":111.6,\"amplitude\":5.2},{\"angle\":112.8,\"amplitude\":5.300000000000001},{\"angle\":113,\"amplitude\":5.300000000000001},{\"angle\":113.3,\"amplitude\":5.4},{\"angle\":113.4,\"amplitude\":5.4},{\"angle\":113.5,\"amplitude\":5.5},{\"angle\":114,\"amplitude\":5.6000000000000005},{\"angle\":114.5,\"amplitude\":5.6000000000000005},{\"angle\":115,\"amplitude\":5.8},{\"angle\":115.4,\"amplitude\":5.8},{\"angle\":115.8,\"amplitude\":5.8999999999999995},{\"angle\":116.1,\"amplitude\":6},{\"angle\":116.4,\"amplitude\":6.1},{\"angle\":116.5,\"amplitude\":6.2},{\"angle\":116.8,\"amplitude\":6.2},{\"angle\":116.9,\"amplitude\":6.2},{\"angle\":117,\"amplitude\":6.2},{\"angle\":117.5,\"amplitude\":6.2},{\"angle\":117.8,\"amplitude\":6.3},{\"angle\":118.4,\"amplitude\":6.3},{\"angle\":118.5,\"amplitude\":6.3},{\"angle\":118.9,\"amplitude\":6.4},{\"angle\":119,\"amplitude\":6.4},{\"angle\":119.1,\"amplitude\":6.4},{\"angle\":119.4,\"amplitude\":6.4},{\"angle\":119.6,\"amplitude\":6.4},{\"angle\":119.7,\"amplitude\":6.4},{\"angle\":120,\"amplitude\":6.5},{\"angle\":120.3,\"amplitude\":6.4},{\"angle\":120.6,\"amplitude\":6.3},{\"angle\":120.7,\"amplitude\":6.3},{\"angle\":120.9,\"amplitude\":6.3},{\"angle\":121.3,\"amplitude\":6.2},{\"angle\":121.4,\"amplitude\":5.8999999999999995},{\"angle\":121.5,\"amplitude\":5.8},{\"angle\":121.7,\"amplitude\":5.8},{\"angle\":122.1,\"amplitude\":5.5},{\"angle\":122.6,\"amplitude\":5.300000000000001},{\"angle\":122.7,\"amplitude\":5.300000000000001},{\"angle\":122.9,\"amplitude\":5.300000000000001},{\"angle\":123,\"amplitude\":5.2},{\"angle\":123.5,\"amplitude\":5.1},{\"angle\":123.6,\"amplitude\":5},{\"angle\":123.8,\"amplitude\":5},{\"angle\":124,\"amplitude\":5},{\"angle\":124.3,\"amplitude\":4.9},{\"angle\":124.5,\"amplitude\":4.9},{\"angle\":124.7,\"amplitude\":4.8},{\"angle\":125,\"amplitude\":4.8},{\"angle\":125.4,\"amplitude\":4.699999999999999},{\"angle\":126,\"amplitude\":4.5},{\"angle\":126.6,\"amplitude\":4.5},{\"angle\":126.9,\"amplitude\":4.4},{\"angle\":127.2,\"amplitude\":4.3},{\"angle\":127.5,\"amplitude\":4.3},{\"angle\":127.6,\"amplitude\":4.2},{\"angle\":128,\"amplitude\":4.2},{\"angle\":128.1,\"amplitude\":4.1},{\"angle\":128.3,\"amplitude\":4.1},{\"angle\":128.6,\"amplitude\":4},{\"angle\":129,\"amplitude\":4},{\"angle\":129.3,\"amplitude\":4},{\"angle\":129.8,\"amplitude\":3.9000000000000004},{\"angle\":129.9,\"amplitude\":3.9000000000000004},{\"angle\":130.5,\"amplitude\":3.9000000000000004},{\"angle\":130.8,\"amplitude\":3.8},{\"angle\":131.4,\"amplitude\":3.8},{\"angle\":131.5,\"amplitude\":3.7},{\"angle\":132.3,\"amplitude\":3.5999999999999996},{\"angle\":132.8,\"amplitude\":3.5999999999999996},{\"angle\":133.5,\"amplitude\":3.5},{\"angle\":133.6,\"amplitude\":3.4000000000000004},{\"angle\":134.5,\"amplitude\":3.3000000000000003},{\"angle\":135.2,\"amplitude\":3.3000000000000003},{\"angle\":135.4,\"amplitude\":3.3000000000000003},{\"angle\":135.6,\"amplitude\":3.2},{\"angle\":135.7,\"amplitude\":3.2},{\"angle\":136.4,\"amplitude\":3.2},{\"angle\":136.6,\"amplitude\":3.1},{\"angle\":137.4,\"amplitude\":3.1},{\"angle\":137.6,\"amplitude\":3.1},{\"angle\":138.4,\"amplitude\":3.1},{\"angle\":138.6,\"amplitude\":3},{\"angle\":138.9,\"amplitude\":3.1},{\"angle\":139.3,\"amplitude\":3.1},{\"angle\":139.6,\"amplitude\":3.1},{\"angle\":139.8,\"amplitude\":3.1},{\"angle\":140.4,\"amplitude\":3.2},{\"angle\":140.6,\"amplitude\":3.2},{\"angle\":141.1,\"amplitude\":3.2},{\"angle\":141.5,\"amplitude\":3.2},{\"angle\":141.9,\"amplitude\":3.3000000000000003},{\"angle\":142.1,\"amplitude\":3.3000000000000003},{\"angle\":142.3,\"amplitude\":3.3000000000000003},{\"angle\":142.7,\"amplitude\":3.3000000000000003},{\"angle\":142.9,\"amplitude\":3.3000000000000003},{\"angle\":143,\"amplitude\":3.3000000000000003},{\"angle\":143.4,\"amplitude\":3.4000000000000004},{\"angle\":143.8,\"amplitude\":3.4000000000000004},{\"angle\":144.2,\"amplitude\":3.4000000000000004},{\"angle\":144.3,\"amplitude\":3.5},{\"angle\":145.4,\"amplitude\":3.5},{\"angle\":149.1,\"amplitude\":3.7},{\"angle\":151.8,\"amplitude\":3.9000000000000004},{\"angle\":155.5,\"amplitude\":4.3},{\"angle\":157.4,\"amplitude\":4.6000000000000005},{\"angle\":157.5,\"amplitude\":4.6000000000000005},{\"angle\":158,\"amplitude\":4.6000000000000005},{\"angle\":158.4,\"amplitude\":4.699999999999999},{\"angle\":158.5,\"amplitude\":4.699999999999999},{\"angle\":159.4,\"amplitude\":4.699999999999999},{\"angle\":159.8,\"amplitude\":4.8},{\"angle\":160.9,\"amplitude\":4.9},{\"angle\":161.4,\"amplitude\":5},{\"angle\":162,\"amplitude\":5.1},{\"angle\":163.3,\"amplitude\":5.2},{\"angle\":164.4,\"amplitude\":5.4},{\"angle\":166,\"amplitude\":5.6000000000000005},{\"angle\":166.5,\"amplitude\":5.8},{\"angle\":167,\"amplitude\":5.8},{\"angle\":167.5,\"amplitude\":5.8999999999999995},{\"angle\":168.2,\"amplitude\":6.1},{\"angle\":169.2,\"amplitude\":6.2},{\"angle\":169.5,\"amplitude\":6.3},{\"angle\":169.7,\"amplitude\":6.4},{\"angle\":170,\"amplitude\":6.5},{\"angle\":170.6,\"amplitude\":6.6000000000000005},{\"angle\":170.9,\"amplitude\":6.7},{\"angle\":171.4,\"amplitude\":6.800000000000001},{\"angle\":171.6,\"amplitude\":6.8999999999999995},{\"angle\":171.7,\"amplitude\":6.8999999999999995},{\"angle\":172.3,\"amplitude\":7},{\"angle\":172.5,\"amplitude\":7.1},{\"angle\":172.8,\"amplitude\":7.199999999999999},{\"angle\":173.2,\"amplitude\":7.3},{\"angle\":173.5,\"amplitude\":7.4},{\"angle\":173.9,\"amplitude\":7.5},{\"angle\":174.1,\"amplitude\":7.6},{\"angle\":174.3,\"amplitude\":7.6},{\"angle\":174.4,\"amplitude\":7.7},{\"angle\":174.7,\"amplitude\":7.7},{\"angle\":174.8,\"amplitude\":7.800000000000001},{\"angle\":174.9,\"amplitude\":7.800000000000001},{\"angle\":175,\"amplitude\":7.9},{\"angle\":175.1,\"amplitude\":7.9},{\"angle\":175.3,\"amplitude\":8},{\"angle\":175.5,\"amplitude\":8.100000000000001},{\"angle\":175.7,\"amplitude\":8.100000000000001},{\"angle\":176,\"amplitude\":8.2},{\"angle\":176.1,\"amplitude\":8.2},{\"angle\":176.7,\"amplitude\":8.4},{\"angle\":177.2,\"amplitude\":8.5},{\"angle\":177.3,\"amplitude\":8.6},{\"angle\":177.7,\"amplitude\":8.7},{\"angle\":177.8,\"amplitude\":8.8},{\"angle\":178,\"amplitude\":8.8},{\"angle\":178.2,\"amplitude\":8.9},{\"angle\":178.3,\"amplitude\":8.9},{\"angle\":178.5,\"amplitude\":9},{\"angle\":178.7,\"amplitude\":9},{\"angle\":178.8,\"amplitude\":9.1},{\"angle\":179,\"amplitude\":9.200000000000001},{\"angle\":179.2,\"amplitude\":9.200000000000001},{\"angle\":179.3,\"amplitude\":9.3},{\"angle\":179.4,\"amplitude\":9.3},{\"angle\":179.8,\"amplitude\":9.3},{\"angle\":179.9,\"amplitude\":9.3},{\"angle\":180.1,\"amplitude\":9.399999999999999},{\"angle\":180.2,\"amplitude\":9.399999999999999},{\"angle\":180.3,\"amplitude\":9.399999999999999},{\"angle\":180.7,\"amplitude\":9.5},{\"angle\":180.8,\"amplitude\":9.5},{\"angle\":181.1,\"amplitude\":9.5},{\"angle\":181.2,\"amplitude\":9.5},{\"angle\":181.6,\"amplitude\":9.5},{\"angle\":181.7,\"amplitude\":9.5},{\"angle\":182,\"amplitude\":9.5},{\"angle\":182.5,\"amplitude\":9.5},{\"angle\":182.6,\"amplitude\":9.5},{\"angle\":182.9,\"amplitude\":9.5},{\"angle\":183.4,\"amplitude\":9.5},{\"angle\":183.5,\"amplitude\":9.5},{\"angle\":183.7,\"amplitude\":9.5},{\"angle\":183.8,\"amplitude\":9.5},{\"angle\":184.1,\"amplitude\":9.5},{\"angle\":184.4,\"amplitude\":9.5},{\"angle\":184.8,\"amplitude\":9.5},{\"angle\":185.1,\"amplitude\":9.5},{\"angle\":185.2,\"amplitude\":9.399999999999999},{\"angle\":185.3,\"amplitude\":9.399999999999999},{\"angle\":185.5,\"amplitude\":9.399999999999999},{\"angle\":185.6,\"amplitude\":9.399999999999999},{\"angle\":185.8,\"amplitude\":9.399999999999999},{\"angle\":186,\"amplitude\":9.399999999999999},{\"angle\":186.1,\"amplitude\":9.399999999999999},{\"angle\":186.2,\"amplitude\":9.399999999999999},{\"angle\":186.5,\"amplitude\":9.399999999999999},{\"angle\":186.6,\"amplitude\":9.399999999999999},{\"angle\":186.7,\"amplitude\":9.399999999999999},{\"angle\":186.9,\"amplitude\":9.399999999999999},{\"angle\":187.1,\"amplitude\":9.3},{\"angle\":187.2,\"amplitude\":9.3},{\"angle\":187.4,\"amplitude\":9.3},{\"angle\":187.5,\"amplitude\":9.3},{\"angle\":187.7,\"amplitude\":9.3},{\"angle\":187.9,\"amplitude\":9.3},{\"angle\":188,\"amplitude\":9.3},{\"angle\":188.4,\"amplitude\":9.3},{\"angle\":188.5,\"amplitude\":9.3},{\"angle\":188.6,\"amplitude\":9.3},{\"angle\":188.9,\"amplitude\":9.3},{\"angle\":189,\"amplitude\":9.200000000000001},{\"angle\":189.1,\"amplitude\":9.200000000000001},{\"angle\":189.3,\"amplitude\":9.200000000000001},{\"angle\":189.5,\"amplitude\":9.200000000000001},{\"angle\":189.6,\"amplitude\":9.200000000000001},{\"angle\":189.9,\"amplitude\":9.200000000000001},{\"angle\":190,\"amplitude\":9.200000000000001},{\"angle\":190.1,\"amplitude\":9.200000000000001},{\"angle\":190.5,\"amplitude\":9.1},{\"angle\":190.9,\"amplitude\":9.1},{\"angle\":191.1,\"amplitude\":9.1},{\"angle\":191.2,\"amplitude\":9.1},{\"angle\":191.5,\"amplitude\":9},{\"angle\":191.6,\"amplitude\":9},{\"angle\":191.8,\"amplitude\":9},{\"angle\":191.9,\"amplitude\":8.9},{\"angle\":192.1,\"amplitude\":8.9},{\"angle\":192.2,\"amplitude\":8.9},{\"angle\":192.5,\"amplitude\":8.8},{\"angle\":192.8,\"amplitude\":8.8},{\"angle\":193,\"amplitude\":8.7},{\"angle\":193.3,\"amplitude\":8.6},{\"angle\":193.6,\"amplitude\":8.6},{\"angle\":193.7,\"amplitude\":8.5},{\"angle\":193.9,\"amplitude\":8.5},{\"angle\":194.1,\"amplitude\":8.5},{\"angle\":194.5,\"amplitude\":8.4},{\"angle\":194.6,\"amplitude\":8.299999999999999},{\"angle\":194.7,\"amplitude\":8.299999999999999},{\"angle\":194.8,\"amplitude\":8.299999999999999},{\"angle\":194.9,\"amplitude\":8.299999999999999},{\"angle\":195,\"amplitude\":8.2},{\"angle\":195.1,\"amplitude\":8.2},{\"angle\":195.4,\"amplitude\":8.2},{\"angle\":195.5,\"amplitude\":8.100000000000001},{\"angle\":195.6,\"amplitude\":8.100000000000001},{\"angle\":195.9,\"amplitude\":8},{\"angle\":196,\"amplitude\":7.9},{\"angle\":196.1,\"amplitude\":7.9},{\"angle\":196.2,\"amplitude\":7.800000000000001},{\"angle\":196.4,\"amplitude\":7.800000000000001},{\"angle\":197,\"amplitude\":7.7},{\"angle\":197.1,\"amplitude\":7.6},{\"angle\":197.4,\"amplitude\":7.5},{\"angle\":197.6,\"amplitude\":7.4},{\"angle\":197.7,\"amplitude\":7.4},{\"angle\":197.8,\"amplitude\":7.3},{\"angle\":198,\"amplitude\":7.3},{\"angle\":198.3,\"amplitude\":7.199999999999999},{\"angle\":198.5,\"amplitude\":7.1},{\"angle\":198.7,\"amplitude\":7},{\"angle\":198.8,\"amplitude\":7},{\"angle\":199.2,\"amplitude\":6.800000000000001},{\"angle\":199.6,\"amplitude\":6.7},{\"angle\":199.8,\"amplitude\":6.6000000000000005},{\"angle\":199.9,\"amplitude\":6.6000000000000005},{\"angle\":200,\"amplitude\":6.6000000000000005},{\"angle\":200.1,\"amplitude\":6.5},{\"angle\":200.3,\"amplitude\":6.5},{\"angle\":200.5,\"amplitude\":6.4},{\"angle\":200.7,\"amplitude\":6.3},{\"angle\":200.8,\"amplitude\":6.3},{\"angle\":201.1,\"amplitude\":6.2},{\"angle\":201.3,\"amplitude\":6.2},{\"angle\":201.5,\"amplitude\":6.1},{\"angle\":201.9,\"amplitude\":6.1},{\"angle\":202.3,\"amplitude\":6},{\"angle\":202.8,\"amplitude\":5.8},{\"angle\":203,\"amplitude\":5.8},{\"angle\":203.3,\"amplitude\":5.699999999999999},{\"angle\":203.6,\"amplitude\":5.699999999999999},{\"angle\":204.3,\"amplitude\":5.5},{\"angle\":205.2,\"amplitude\":5.300000000000001},{\"angle\":205.6,\"amplitude\":5.2},{\"angle\":205.9,\"amplitude\":5.2},{\"angle\":206.4,\"amplitude\":5.1},{\"angle\":206.8,\"amplitude\":5},{\"angle\":207.1,\"amplitude\":5},{\"angle\":207.7,\"amplitude\":4.9},{\"angle\":207.9,\"amplitude\":4.8},{\"angle\":208.4,\"amplitude\":4.8},{\"angle\":208.8,\"amplitude\":4.699999999999999},{\"angle\":209.2,\"amplitude\":4.6000000000000005},{\"angle\":209.5,\"amplitude\":4.6000000000000005},{\"angle\":210.4,\"amplitude\":4.5},{\"angle\":211.1,\"amplitude\":4.4},{\"angle\":211.6,\"amplitude\":4.3},{\"angle\":212.7,\"amplitude\":4.2},{\"angle\":213.5,\"amplitude\":4.1},{\"angle\":213.8,\"amplitude\":4.1},{\"angle\":214.1,\"amplitude\":4},{\"angle\":214.3,\"amplitude\":4},{\"angle\":214.7,\"amplitude\":4},{\"angle\":215.2,\"amplitude\":4},{\"angle\":215.9,\"amplitude\":3.9000000000000004},{\"angle\":216.2,\"amplitude\":3.9000000000000004},{\"angle\":217.7,\"amplitude\":3.7},{\"angle\":219.1,\"amplitude\":3.5999999999999996},{\"angle\":219.3,\"amplitude\":3.5999999999999996},{\"angle\":219.9,\"amplitude\":3.5999999999999996},{\"angle\":220.1,\"amplitude\":3.5},{\"angle\":220.9,\"amplitude\":3.5},{\"angle\":221.7,\"amplitude\":3.4000000000000004},{\"angle\":222.3,\"amplitude\":3.4000000000000004},{\"angle\":223.2,\"amplitude\":3.3000000000000003},{\"angle\":223.4,\"amplitude\":3.3000000000000003},{\"angle\":223.8,\"amplitude\":3.3000000000000003},{\"angle\":224,\"amplitude\":3.3000000000000003},{\"angle\":224.5,\"amplitude\":3.3000000000000003},{\"angle\":224.7,\"amplitude\":3.3000000000000003},{\"angle\":225.4,\"amplitude\":3.3000000000000003},{\"angle\":226.4,\"amplitude\":3.2},{\"angle\":227.6,\"amplitude\":3.1},{\"angle\":228.3,\"amplitude\":3.1},{\"angle\":228.6,\"amplitude\":3.1},{\"angle\":229.1,\"amplitude\":3.1},{\"angle\":229.4,\"amplitude\":3.1},{\"angle\":230.7,\"amplitude\":3},{\"angle\":231.8,\"amplitude\":3},{\"angle\":234.8,\"amplitude\":2.8000000000000003},{\"angle\":235.4,\"amplitude\":2.8000000000000003},{\"angle\":236.3,\"amplitude\":2.8000000000000003},{\"angle\":236.6,\"amplitude\":2.8000000000000003},{\"angle\":237.3,\"amplitude\":2.8000000000000003},{\"angle\":237.6,\"amplitude\":2.8000000000000003},{\"angle\":239.9,\"amplitude\":2.7},{\"angle\":240.2,\"amplitude\":2.6},{\"angle\":240.9,\"amplitude\":2.6},{\"angle\":241.6,\"amplitude\":2.6},{\"angle\":242.5,\"amplitude\":2.6},{\"angle\":243.5,\"amplitude\":2.5},{\"angle\":243.9,\"amplitude\":2.5},{\"angle\":244.6,\"amplitude\":2.4},{\"angle\":245,\"amplitude\":2.4},{\"angle\":246.1,\"amplitude\":2.4},{\"angle\":246.3,\"amplitude\":2.3000000000000003},{\"angle\":247.6,\"amplitude\":2.3000000000000003},{\"angle\":248,\"amplitude\":2.3000000000000003},{\"angle\":248.9,\"amplitude\":2.3000000000000003},{\"angle\":249.6,\"amplitude\":2.3000000000000003},{\"angle\":250.5,\"amplitude\":2.2},{\"angle\":250.9,\"amplitude\":2.2},{\"angle\":252.3,\"amplitude\":2.2},{\"angle\":252.6,\"amplitude\":2.2},{\"angle\":253.7,\"amplitude\":2.2},{\"angle\":254.7,\"amplitude\":2.1},{\"angle\":255.6,\"amplitude\":2.1},{\"angle\":256.1,\"amplitude\":2.1},{\"angle\":256.3,\"amplitude\":2.1},{\"angle\":256.5,\"amplitude\":2.1},{\"angle\":256.6,\"amplitude\":2.1},{\"angle\":258.3,\"amplitude\":2.1},{\"angle\":258.4,\"amplitude\":2.2},{\"angle\":259.1,\"amplitude\":2.2},{\"angle\":260.1,\"amplitude\":2.2},{\"angle\":260.2,\"amplitude\":2.2},{\"angle\":261.3,\"amplitude\":2.3000000000000003},{\"angle\":262.5,\"amplitude\":2.3000000000000003},{\"angle\":263,\"amplitude\":2.4},{\"angle\":263.5,\"amplitude\":2.4},{\"angle\":263.6,\"amplitude\":2.4},{\"angle\":264.4,\"amplitude\":2.4},{\"angle\":264.5,\"amplitude\":2.4},{\"angle\":265.1,\"amplitude\":2.5},{\"angle\":265.2,\"amplitude\":2.6},{\"angle\":265.6,\"amplitude\":2.6},{\"angle\":265.7,\"amplitude\":2.6},{\"angle\":265.8,\"amplitude\":2.7},{\"angle\":265.9,\"amplitude\":2.7},{\"angle\":266.7,\"amplitude\":2.8000000000000003},{\"angle\":267.2,\"amplitude\":2.8000000000000003},{\"angle\":267.6,\"amplitude\":2.9},{\"angle\":268.3,\"amplitude\":3},{\"angle\":268.4,\"amplitude\":3},{\"angle\":269.1,\"amplitude\":3.1},{\"angle\":269.8,\"amplitude\":3.3000000000000003},{\"angle\":270.4,\"amplitude\":3.5999999999999996},{\"angle\":271,\"amplitude\":3.7},{\"angle\":271.2,\"amplitude\":3.9000000000000004},{\"angle\":271.9,\"amplitude\":4},{\"angle\":272.1,\"amplitude\":4.1},{\"angle\":272.4,\"amplitude\":4.1},{\"angle\":272.8,\"amplitude\":4.2},{\"angle\":273,\"amplitude\":4.3},{\"angle\":273.2,\"amplitude\":4.4},{\"angle\":273.7,\"amplitude\":4.6000000000000005},{\"angle\":273.9,\"amplitude\":4.699999999999999},{\"angle\":274.2,\"amplitude\":4.9},{\"angle\":274.3,\"amplitude\":4.9},{\"angle\":274.5,\"amplitude\":5},{\"angle\":275.1,\"amplitude\":5},{\"angle\":275.2,\"amplitude\":5.1},{\"angle\":275.5,\"amplitude\":5.300000000000001},{\"angle\":275.6,\"amplitude\":5.4},{\"angle\":275.7,\"amplitude\":5.5},{\"angle\":276,\"amplitude\":5.6000000000000005},{\"angle\":276.1,\"amplitude\":5.6000000000000005},{\"angle\":276.5,\"amplitude\":5.8},{\"angle\":276.6,\"amplitude\":6},{\"angle\":276.8,\"amplitude\":6.1},{\"angle\":277,\"amplitude\":6.1},{\"angle\":277.3,\"amplitude\":6.3},{\"angle\":277.5,\"amplitude\":6.4},{\"angle\":277.6,\"amplitude\":6.6000000000000005},{\"angle\":277.7,\"amplitude\":6.7},{\"angle\":278.1,\"amplitude\":6.800000000000001},{\"angle\":278.4,\"amplitude\":7.199999999999999},{\"angle\":278.5,\"amplitude\":7.4},{\"angle\":278.7,\"amplitude\":7.5},{\"angle\":278.9,\"amplitude\":7.5},{\"angle\":279.1,\"amplitude\":7.9},{\"angle\":279.2,\"amplitude\":7.9},{\"angle\":279.4,\"amplitude\":8.100000000000001},{\"angle\":279.6,\"amplitude\":8.5},{\"angle\":279.8,\"amplitude\":8.6},{\"angle\":280,\"amplitude\":8.9},{\"angle\":280.3,\"amplitude\":9.1},{\"angle\":280.5,\"amplitude\":9.3},{\"angle\":280.6,\"amplitude\":9.399999999999999},{\"angle\":280.7,\"amplitude\":9.5},{\"angle\":280.8,\"amplitude\":9.6},{\"angle\":280.9,\"amplitude\":9.7},{\"angle\":281,\"amplitude\":10},{\"angle\":281.1,\"amplitude\":10},{\"angle\":281.2,\"amplitude\":10},{\"angle\":281.3,\"amplitude\":10},{\"angle\":281.4,\"amplitude\":10},{\"angle\":281.6,\"amplitude\":10},{\"angle\":281.7,\"amplitude\":10},{\"angle\":281.8,\"amplitude\":10},{\"angle\":282,\"amplitude\":10},{\"angle\":282.1,\"amplitude\":10},{\"angle\":282.4,\"amplitude\":10},{\"angle\":282.5,\"amplitude\":10},{\"angle\":282.7,\"amplitude\":10},{\"angle\":282.8,\"amplitude\":10},{\"angle\":282.9,\"amplitude\":10},{\"angle\":283,\"amplitude\":10},{\"angle\":283.3,\"amplitude\":10},{\"angle\":283.4,\"amplitude\":10},{\"angle\":283.6,\"amplitude\":10},{\"angle\":283.8,\"amplitude\":10},{\"angle\":284.1,\"amplitude\":10},{\"angle\":284.2,\"amplitude\":10},{\"angle\":284.3,\"amplitude\":10},{\"angle\":284.5,\"amplitude\":10},{\"angle\":284.6,\"amplitude\":10},{\"angle\":284.7,\"amplitude\":10},{\"angle\":284.9,\"amplitude\":10},{\"angle\":285,\"amplitude\":10},{\"angle\":285.2,\"amplitude\":10},{\"angle\":285.4,\"amplitude\":10},{\"angle\":285.5,\"amplitude\":10},{\"angle\":285.6,\"amplitude\":10},{\"angle\":285.8,\"amplitude\":10},{\"angle\":286,\"amplitude\":10},{\"angle\":286.1,\"amplitude\":10},{\"angle\":286.3,\"amplitude\":10},{\"angle\":286.4,\"amplitude\":10},{\"angle\":286.5,\"amplitude\":10},{\"angle\":286.8,\"amplitude\":10},{\"angle\":286.9,\"amplitude\":10},{\"angle\":287,\"amplitude\":10},{\"angle\":287.2,\"amplitude\":10},{\"angle\":287.3,\"amplitude\":10},{\"angle\":287.4,\"amplitude\":10},{\"angle\":287.6,\"amplitude\":10},{\"angle\":287.7,\"amplitude\":10},{\"angle\":287.8,\"amplitude\":10},{\"angle\":287.9,\"amplitude\":10},{\"angle\":288.1,\"amplitude\":10},{\"angle\":288.2,\"amplitude\":10},{\"angle\":288.3,\"amplitude\":10},{\"angle\":288.5,\"amplitude\":10},{\"angle\":288.6,\"amplitude\":10},{\"angle\":288.7,\"amplitude\":10},{\"angle\":288.9,\"amplitude\":10},{\"angle\":289,\"amplitude\":10},{\"angle\":289.1,\"amplitude\":10},{\"angle\":289.2,\"amplitude\":10},{\"angle\":289.4,\"amplitude\":10},{\"angle\":289.5,\"amplitude\":10},{\"angle\":289.8,\"amplitude\":10},{\"angle\":290,\"amplitude\":10},{\"angle\":290.2,\"amplitude\":10},{\"angle\":290.4,\"amplitude\":10},{\"angle\":290.5,\"amplitude\":10},{\"angle\":290.7,\"amplitude\":10},{\"angle\":290.8,\"amplitude\":10},{\"angle\":290.9,\"amplitude\":10},{\"angle\":291,\"amplitude\":10},{\"angle\":291.1,\"amplitude\":10},{\"angle\":291.2,\"amplitude\":10},{\"angle\":291.3,\"amplitude\":10},{\"angle\":291.6,\"amplitude\":10},{\"angle\":292,\"amplitude\":10},{\"angle\":292.1,\"amplitude\":10},{\"angle\":292.3,\"amplitude\":10},{\"angle\":292.4,\"amplitude\":10},{\"angle\":292.6,\"amplitude\":10},{\"angle\":292.8,\"amplitude\":10},{\"angle\":293,\"amplitude\":10},{\"angle\":293.2,\"amplitude\":10},{\"angle\":293.3,\"amplitude\":10},{\"angle\":293.4,\"amplitude\":10},{\"angle\":293.7,\"amplitude\":10},{\"angle\":294.1,\"amplitude\":10},{\"angle\":294.2,\"amplitude\":10},{\"angle\":294.5,\"amplitude\":10},{\"angle\":294.6,\"amplitude\":10},{\"angle\":294.8,\"amplitude\":10},{\"angle\":295,\"amplitude\":10},{\"angle\":295.3,\"amplitude\":10},{\"angle\":295.6,\"amplitude\":10},{\"angle\":295.8,\"amplitude\":10},{\"angle\":296,\"amplitude\":10},{\"angle\":296.2,\"amplitude\":10},{\"angle\":296.5,\"amplitude\":10},{\"angle\":296.7,\"amplitude\":10},{\"angle\":297,\"amplitude\":10},{\"angle\":297.1,\"amplitude\":10},{\"angle\":297.3,\"amplitude\":10},{\"angle\":297.4,\"amplitude\":10},{\"angle\":297.5,\"amplitude\":10},{\"angle\":297.6,\"amplitude\":10},{\"angle\":297.8,\"amplitude\":10},{\"angle\":297.9,\"amplitude\":10},{\"angle\":298,\"amplitude\":10},{\"angle\":298.2,\"amplitude\":10},{\"angle\":298.4,\"amplitude\":10},{\"angle\":298.5,\"amplitude\":10},{\"angle\":298.7,\"amplitude\":10},{\"angle\":298.8,\"amplitude\":10},{\"angle\":299,\"amplitude\":10},{\"angle\":299.3,\"amplitude\":10},{\"angle\":299.4,\"amplitude\":10},{\"angle\":299.6,\"amplitude\":10},{\"angle\":299.7,\"amplitude\":10},{\"angle\":299.8,\"amplitude\":10},{\"angle\":300,\"amplitude\":10},{\"angle\":300.1,\"amplitude\":10},{\"angle\":300.3,\"amplitude\":10},{\"angle\":300.5,\"amplitude\":10},{\"angle\":301,\"amplitude\":10},{\"angle\":301.2,\"amplitude\":10},{\"angle\":301.3,\"amplitude\":10},{\"angle\":301.6,\"amplitude\":10},{\"angle\":301.7,\"amplitude\":10},{\"angle\":301.8,\"amplitude\":10},{\"angle\":301.9,\"amplitude\":10},{\"angle\":302.2,\"amplitude\":10},{\"angle\":302.6,\"amplitude\":10},{\"angle\":302.8,\"amplitude\":10},{\"angle\":303.2,\"amplitude\":10},{\"angle\":303.3,\"amplitude\":10},{\"angle\":303.6,\"amplitude\":10},{\"angle\":303.7,\"amplitude\":10},{\"angle\":304.1,\"amplitude\":10},{\"angle\":304.2,\"amplitude\":10},{\"angle\":304.3,\"amplitude\":10},{\"angle\":304.5,\"amplitude\":10},{\"angle\":304.7,\"amplitude\":10},{\"angle\":305,\"amplitude\":10},{\"angle\":305.3,\"amplitude\":10},{\"angle\":305.4,\"amplitude\":10},{\"angle\":305.5,\"amplitude\":10},{\"angle\":305.8,\"amplitude\":10},{\"angle\":306,\"amplitude\":10},{\"angle\":306.2,\"amplitude\":10},{\"angle\":306.3,\"amplitude\":10},{\"angle\":306.4,\"amplitude\":10},{\"angle\":306.6,\"amplitude\":10},{\"angle\":306.7,\"amplitude\":10},{\"angle\":306.8,\"amplitude\":10},{\"angle\":307.1,\"amplitude\":10},{\"angle\":307.2,\"amplitude\":10},{\"angle\":307.3,\"amplitude\":10},{\"angle\":307.5,\"amplitude\":10},{\"angle\":307.7,\"amplitude\":10},{\"angle\":307.8,\"amplitude\":10},{\"angle\":308.1,\"amplitude\":10},{\"angle\":308.3,\"amplitude\":10},{\"angle\":308.5,\"amplitude\":10},{\"angle\":308.6,\"amplitude\":10},{\"angle\":308.7,\"amplitude\":10},{\"angle\":309,\"amplitude\":10},{\"angle\":309.2,\"amplitude\":10},{\"angle\":309.5,\"amplitude\":10},{\"angle\":309.6,\"amplitude\":10},{\"angle\":309.7,\"amplitude\":10},{\"angle\":309.8,\"amplitude\":10},{\"angle\":310.2,\"amplitude\":10},{\"angle\":310.3,\"amplitude\":10},{\"angle\":310.4,\"amplitude\":10},{\"angle\":310.6,\"amplitude\":10},{\"angle\":310.8,\"amplitude\":10},{\"angle\":310.9,\"amplitude\":10},{\"angle\":311.2,\"amplitude\":10},{\"angle\":311.6,\"amplitude\":10},{\"angle\":311.8,\"amplitude\":10},{\"angle\":312.1,\"amplitude\":10},{\"angle\":312.2,\"amplitude\":10},{\"angle\":312.3,\"amplitude\":10},{\"angle\":312.5,\"amplitude\":10},{\"angle\":312.6,\"amplitude\":10},{\"angle\":312.7,\"amplitude\":10},{\"angle\":312.8,\"amplitude\":10},{\"angle\":313,\"amplitude\":10},{\"angle\":313.2,\"amplitude\":10},{\"angle\":313.4,\"amplitude\":10},{\"angle\":313.6,\"amplitude\":10},{\"angle\":313.7,\"amplitude\":10},{\"angle\":313.9,\"amplitude\":10},{\"angle\":314,\"amplitude\":10},{\"angle\":314.2,\"amplitude\":10},{\"angle\":314.3,\"amplitude\":10},{\"angle\":314.5,\"amplitude\":10},{\"angle\":314.7,\"amplitude\":10},{\"angle\":315,\"amplitude\":10},{\"angle\":315.1,\"amplitude\":10},{\"angle\":315.2,\"amplitude\":10},{\"angle\":315.3,\"amplitude\":10},{\"angle\":315.4,\"amplitude\":10},{\"angle\":315.5,\"amplitude\":10},{\"angle\":315.6,\"amplitude\":10},{\"angle\":315.7,\"amplitude\":9.8},{\"angle\":315.9,\"amplitude\":6.1},{\"angle\":316.1,\"amplitude\":5.8999999999999995},{\"angle\":316.3,\"amplitude\":5.6000000000000005},{\"angle\":316.4,\"amplitude\":5.4},{\"angle\":316.6,\"amplitude\":5.1},{\"angle\":317,\"amplitude\":4.9},{\"angle\":317.2,\"amplitude\":3},{\"angle\":317.5,\"amplitude\":2.9},{\"angle\":317.9,\"amplitude\":2.8000000000000003},{\"angle\":318.7,\"amplitude\":2.8000000000000003},{\"angle\":318.9,\"amplitude\":2.7},{\"angle\":319.8,\"amplitude\":2.6},{\"angle\":320.2,\"amplitude\":2.6},{\"angle\":320.6,\"amplitude\":2.5},{\"angle\":320.7,\"amplitude\":2.5},{\"angle\":321.4,\"amplitude\":2.5},{\"angle\":322.8,\"amplitude\":2.4},{\"angle\":323,\"amplitude\":2.3000000000000003},{\"angle\":323.1,\"amplitude\":2.3000000000000003},{\"angle\":323.7,\"amplitude\":2.2},{\"angle\":323.9,\"amplitude\":2.2},{\"angle\":325.1,\"amplitude\":2.2},{\"angle\":326.2,\"amplitude\":2.1},{\"angle\":326.9,\"amplitude\":2},{\"angle\":327.4,\"amplitude\":1.9},{\"angle\":327.9,\"amplitude\":1.9},{\"angle\":328.8,\"amplitude\":1.9},{\"angle\":329.6,\"amplitude\":2},{\"angle\":329.9,\"amplitude\":2},{\"angle\":330.2,\"amplitude\":2},{\"angle\":330.7,\"amplitude\":2},{\"angle\":331.7,\"amplitude\":2.1},{\"angle\":331.9,\"amplitude\":2.1},{\"angle\":332.6,\"amplitude\":2.2},{\"angle\":333.1,\"amplitude\":2.2},{\"angle\":333.7,\"amplitude\":2.2},{\"angle\":334.5,\"amplitude\":2.3000000000000003},{\"angle\":335.1,\"amplitude\":2.4},{\"angle\":335.8,\"amplitude\":2.4},{\"angle\":336.2,\"amplitude\":2.5},{\"angle\":336.9,\"amplitude\":2.5},{\"angle\":337.2,\"amplitude\":2.6},{\"angle\":337.3,\"amplitude\":2.6},{\"angle\":337.5,\"amplitude\":2.6},{\"angle\":338,\"amplitude\":2.6},{\"angle\":338.1,\"amplitude\":2.7},{\"angle\":338.4,\"amplitude\":2.7},{\"angle\":338.5,\"amplitude\":2.7},{\"angle\":339,\"amplitude\":2.8000000000000003},{\"angle\":339.1,\"amplitude\":2.8000000000000003},{\"angle\":339.5,\"amplitude\":2.8000000000000003},{\"angle\":339.6,\"amplitude\":2.9},{\"angle\":339.8,\"amplitude\":2.9},{\"angle\":340,\"amplitude\":2.9},{\"angle\":340.1,\"amplitude\":2.9},{\"angle\":340.3,\"amplitude\":2.9},{\"angle\":340.4,\"amplitude\":3},{\"angle\":340.7,\"amplitude\":3.1},{\"angle\":341,\"amplitude\":3.2},{\"angle\":341.2,\"amplitude\":3.2},{\"angle\":341.6,\"amplitude\":3.3000000000000003},{\"angle\":341.9,\"amplitude\":3.4000000000000004},{\"angle\":342,\"amplitude\":3.5},{\"angle\":342.1,\"amplitude\":3.5},{\"angle\":342.2,\"amplitude\":3.5999999999999996},{\"angle\":342.5,\"amplitude\":3.7},{\"angle\":342.8,\"amplitude\":3.9000000000000004},{\"angle\":343.1,\"amplitude\":3.9000000000000004},{\"angle\":343.3,\"amplitude\":4},{\"angle\":343.4,\"amplitude\":4.1},{\"angle\":343.5,\"amplitude\":4.2},{\"angle\":343.7,\"amplitude\":4.2},{\"angle\":343.8,\"amplitude\":4.2},{\"angle\":344,\"amplitude\":4.3},{\"angle\":344.4,\"amplitude\":4.5},{\"angle\":345,\"amplitude\":4.8},{\"angle\":345.1,\"amplitude\":5},{\"angle\":345.4,\"amplitude\":5.1},{\"angle\":345.5,\"amplitude\":5.2},{\"angle\":345.6,\"amplitude\":5.2},{\"angle\":345.8,\"amplitude\":5.300000000000001},{\"angle\":346,\"amplitude\":5.300000000000001},{\"angle\":346.1,\"amplitude\":5.4},{\"angle\":346.5,\"amplitude\":5.5},{\"angle\":346.7,\"amplitude\":5.6000000000000005},{\"angle\":346.8,\"amplitude\":5.6000000000000005},{\"angle\":346.9,\"amplitude\":5.699999999999999},{\"angle\":347,\"amplitude\":5.699999999999999},{\"angle\":347.1,\"amplitude\":5.8},{\"angle\":347.2,\"amplitude\":5.8},{\"angle\":347.3,\"amplitude\":5.8999999999999995},{\"angle\":347.5,\"amplitude\":6.1},{\"angle\":347.7,\"amplitude\":6.1},{\"angle\":348.1,\"amplitude\":6.3},{\"angle\":348.2,\"amplitude\":6.4},{\"angle\":348.3,\"amplitude\":6.4},{\"angle\":348.4,\"amplitude\":6.5},{\"angle\":348.5,\"amplitude\":6.6000000000000005},{\"angle\":348.7,\"amplitude\":6.7},{\"angle\":348.8,\"amplitude\":6.7},{\"angle\":348.9,\"amplitude\":6.800000000000001},{\"angle\":349,\"amplitude\":6.6000000000000005},{\"angle\":349.1,\"amplitude\":6.6000000000000005},{\"angle\":349.3,\"amplitude\":6.3},{\"angle\":349.4,\"amplitude\":6},{\"angle\":349.5,\"amplitude\":5.699999999999999},{\"angle\":349.6,\"amplitude\":5.5},{\"angle\":349.9,\"amplitude\":5.4},{\"angle\":350,\"amplitude\":5.4},{\"angle\":350.4,\"amplitude\":5.300000000000001},{\"angle\":350.5,\"amplitude\":5.300000000000001},{\"angle\":350.7,\"amplitude\":5.2},{\"angle\":351,\"amplitude\":5.2},{\"angle\":351.2,\"amplitude\":5.2},{\"angle\":351.3,\"amplitude\":5.1},{\"angle\":351.8,\"amplitude\":5},{\"angle\":352,\"amplitude\":5},{\"angle\":352.3,\"amplitude\":5},{\"angle\":352.5,\"amplitude\":4.9},{\"angle\":352.6,\"amplitude\":4.9},{\"angle\":353.3,\"amplitude\":4.9},{\"angle\":353.4,\"amplitude\":4.8},{\"angle\":353.8,\"amplitude\":4.699999999999999},{\"angle\":354,\"amplitude\":4.699999999999999},{\"angle\":354.2,\"amplitude\":4.699999999999999},{\"angle\":354.5,\"amplitude\":4.6000000000000005},{\"angle\":354.8,\"amplitude\":4.6000000000000005},{\"angle\":354.9,\"amplitude\":4.6000000000000005},{\"angle\":355.3,\"amplitude\":4.5},{\"angle\":355.6,\"amplitude\":4.5},{\"angle\":355.8,\"amplitude\":4.4},{\"angle\":356.2,\"amplitude\":4.4},{\"angle\":356.4,\"amplitude\":4.3},{\"angle\":356.6,\"amplitude\":4.3},{\"angle\":357.1,\"amplitude\":4.2},{\"angle\":357.3,\"amplitude\":4.2},{\"angle\":357.5,\"amplitude\":4.1},{\"angle\":358,\"amplitude\":4.1},{\"angle\":358.3,\"amplitude\":4.1},{\"angle\":358.5,\"amplitude\":4.1},{\"angle\":359,\"amplitude\":4}]\n\n },\n {\n name: 'Below 100MHz',\n data: [{\"angle\":0,\"amplitude\":9.8},{\"angle\":0.1,\"amplitude\":9.8},{\"angle\":0.2,\"amplitude\":9.8},{\"angle\":0.4,\"amplitude\":9.8},{\"angle\":0.7,\"amplitude\":9.8},{\"angle\":0.9,\"amplitude\":9.8},{\"angle\":1,\"amplitude\":9.8},{\"angle\":1.1,\"amplitude\":9.8},{\"angle\":1.4,\"amplitude\":9.8},{\"angle\":1.5,\"amplitude\":9.8},{\"angle\":1.7,\"amplitude\":9.8},{\"angle\":1.8,\"amplitude\":9.8},{\"angle\":2.2,\"amplitude\":9.8},{\"angle\":2.4,\"amplitude\":9.8},{\"angle\":2.7,\"amplitude\":9.8},{\"angle\":2.8,\"amplitude\":9.8},{\"angle\":3.1,\"amplitude\":9.8},{\"angle\":3.2,\"amplitude\":9.8},{\"angle\":3.6,\"amplitude\":9.8},{\"angle\":3.7,\"amplitude\":9.8},{\"angle\":3.9,\"amplitude\":9.8},{\"angle\":4,\"amplitude\":9.8},{\"angle\":4.1,\"amplitude\":9.8},{\"angle\":4.4,\"amplitude\":9.8},{\"angle\":4.5,\"amplitude\":9.8},{\"angle\":4.9,\"amplitude\":9.8},{\"angle\":5,\"amplitude\":9.8},{\"angle\":5.3,\"amplitude\":9.8},{\"angle\":5.4,\"amplitude\":9.8},{\"angle\":5.7,\"amplitude\":9.8},{\"angle\":5.8,\"amplitude\":9.8},{\"angle\":5.9,\"amplitude\":9.8},{\"angle\":6.2,\"amplitude\":9.8},{\"angle\":6.6,\"amplitude\":9.7},{\"angle\":6.8,\"amplitude\":9.7},{\"angle\":7,\"amplitude\":9.7},{\"angle\":7.3,\"amplitude\":9.7},{\"angle\":7.5,\"amplitude\":9.6},{\"angle\":7.6,\"amplitude\":9.7},{\"angle\":7.7,\"amplitude\":9.6},{\"angle\":8.2,\"amplitude\":9.6},{\"angle\":8.5,\"amplitude\":9.6},{\"angle\":8.6,\"amplitude\":9.6},{\"angle\":8.9,\"amplitude\":9.5},{\"angle\":9.1,\"amplitude\":9.5},{\"angle\":9.2,\"amplitude\":9.5},{\"angle\":9.6,\"amplitude\":9.5},{\"angle\":9.7,\"amplitude\":9.5},{\"angle\":10.1,\"amplitude\":9.399999999999999},{\"angle\":10.2,\"amplitude\":9.399999999999999},{\"angle\":10.4,\"amplitude\":9.399999999999999},{\"angle\":10.6,\"amplitude\":9.399999999999999},{\"angle\":10.9,\"amplitude\":9.399999999999999},{\"angle\":11,\"amplitude\":9.3},{\"angle\":11.1,\"amplitude\":9.3},{\"angle\":11.3,\"amplitude\":9.3},{\"angle\":11.5,\"amplitude\":9.3},{\"angle\":11.7,\"amplitude\":9.200000000000001},{\"angle\":12,\"amplitude\":9.200000000000001},{\"angle\":12.2,\"amplitude\":9.200000000000001},{\"angle\":12.4,\"amplitude\":9.1},{\"angle\":12.8,\"amplitude\":9.1},{\"angle\":13.2,\"amplitude\":9.1},{\"angle\":13.4,\"amplitude\":9.1},{\"angle\":13.6,\"amplitude\":9},{\"angle\":13.9,\"amplitude\":9},{\"angle\":14,\"amplitude\":8.9},{\"angle\":14.1,\"amplitude\":8.9},{\"angle\":14.2,\"amplitude\":8.9},{\"angle\":14.4,\"amplitude\":8.8},{\"angle\":14.7,\"amplitude\":8.7},{\"angle\":14.9,\"amplitude\":8.7},{\"angle\":15.1,\"amplitude\":8.7},{\"angle\":15.6,\"amplitude\":8.6},{\"angle\":15.8,\"amplitude\":8.6},{\"angle\":15.9,\"amplitude\":8.5},{\"angle\":16.2,\"amplitude\":8.5},{\"angle\":16.4,\"amplitude\":8.4},{\"angle\":16.5,\"amplitude\":8.4},{\"angle\":16.7,\"amplitude\":8.4},{\"angle\":16.8,\"amplitude\":8.299999999999999},{\"angle\":16.9,\"amplitude\":8.299999999999999},{\"angle\":17.1,\"amplitude\":8.299999999999999},{\"angle\":17.2,\"amplitude\":8.299999999999999},{\"angle\":17.4,\"amplitude\":8.2},{\"angle\":17.5,\"amplitude\":8.2},{\"angle\":17.6,\"amplitude\":8.2},{\"angle\":18.1,\"amplitude\":8.100000000000001},{\"angle\":18.3,\"amplitude\":8},{\"angle\":18.8,\"amplitude\":7.9},{\"angle\":19.2,\"amplitude\":7.9},{\"angle\":19.3,\"amplitude\":7.9},{\"angle\":19.4,\"amplitude\":7.800000000000001},{\"angle\":19.5,\"amplitude\":7.800000000000001},{\"angle\":19.6,\"amplitude\":7.800000000000001},{\"angle\":19.9,\"amplitude\":7.7},{\"angle\":20,\"amplitude\":7.7},{\"angle\":20.9,\"amplitude\":7.5},{\"angle\":21,\"amplitude\":7.5},{\"angle\":21.5,\"amplitude\":7.4},{\"angle\":21.7,\"amplitude\":7.3},{\"angle\":22.1,\"amplitude\":7.3},{\"angle\":22.2,\"amplitude\":7.3},{\"angle\":22.8,\"amplitude\":7.199999999999999},{\"angle\":23,\"amplitude\":7.1},{\"angle\":23.1,\"amplitude\":7.1},{\"angle\":23.5,\"amplitude\":7},{\"angle\":23.8,\"amplitude\":7},{\"angle\":24.1,\"amplitude\":6.8999999999999995},{\"angle\":24.3,\"amplitude\":6.8999999999999995},{\"angle\":24.5,\"amplitude\":6.800000000000001},{\"angle\":24.8,\"amplitude\":6.800000000000001},{\"angle\":24.9,\"amplitude\":6.800000000000001},{\"angle\":25.4,\"amplitude\":6.800000000000001},{\"angle\":25.6,\"amplitude\":6.7},{\"angle\":25.9,\"amplitude\":6.6000000000000005},{\"angle\":26,\"amplitude\":6.6000000000000005},{\"angle\":26.3,\"amplitude\":6.5},{\"angle\":26.7,\"amplitude\":6.5},{\"angle\":26.8,\"amplitude\":6.5},{\"angle\":27.4,\"amplitude\":6.5},{\"angle\":27.5,\"amplitude\":6.4},{\"angle\":27.9,\"amplitude\":6.4},{\"angle\":28,\"amplitude\":6.4},{\"angle\":28.2,\"amplitude\":6.3},{\"angle\":28.4,\"amplitude\":6.3},{\"angle\":29.2,\"amplitude\":6.2},{\"angle\":29.5,\"amplitude\":6.2},{\"angle\":29.7,\"amplitude\":6.2},{\"angle\":30.3,\"amplitude\":6.1},{\"angle\":30.4,\"amplitude\":6.1},{\"angle\":31.1,\"amplitude\":6},{\"angle\":31.8,\"amplitude\":5.8999999999999995},{\"angle\":32.2,\"amplitude\":5.8999999999999995},{\"angle\":32.5,\"amplitude\":5.8},{\"angle\":32.7,\"amplitude\":5.8},{\"angle\":33.1,\"amplitude\":5.8},{\"angle\":33.9,\"amplitude\":5.699999999999999},{\"angle\":34.4,\"amplitude\":5.699999999999999},{\"angle\":35.1,\"amplitude\":5.6000000000000005},{\"angle\":36.2,\"amplitude\":5.5},{\"angle\":36.8,\"amplitude\":5.5},{\"angle\":37,\"amplitude\":5.5},{\"angle\":37.5,\"amplitude\":5.4},{\"angle\":37.9,\"amplitude\":5.4},{\"angle\":38.1,\"amplitude\":5.4},{\"angle\":38.5,\"amplitude\":5.4},{\"angle\":38.9,\"amplitude\":5.4},{\"angle\":39.4,\"amplitude\":5.4},{\"angle\":39.6,\"amplitude\":5.4},{\"angle\":39.9,\"amplitude\":5.4},{\"angle\":40.2,\"amplitude\":5.300000000000001},{\"angle\":40.5,\"amplitude\":5.4},{\"angle\":40.6,\"amplitude\":5.4},{\"angle\":41,\"amplitude\":5.300000000000001},{\"angle\":41.3,\"amplitude\":5.300000000000001},{\"angle\":41.6,\"amplitude\":5.4},{\"angle\":42,\"amplitude\":5.300000000000001},{\"angle\":42.1,\"amplitude\":5.300000000000001},{\"angle\":42.8,\"amplitude\":5.300000000000001},{\"angle\":43.3,\"amplitude\":5.300000000000001},{\"angle\":43.8,\"amplitude\":5.300000000000001},{\"angle\":44,\"amplitude\":5.300000000000001},{\"angle\":44.8,\"amplitude\":5.300000000000001},{\"angle\":45,\"amplitude\":5.300000000000001},{\"angle\":45.2,\"amplitude\":5.300000000000001},{\"angle\":45.7,\"amplitude\":5.2},{\"angle\":45.8,\"amplitude\":5.2},{\"angle\":46.2,\"amplitude\":5.2},{\"angle\":46.5,\"amplitude\":5.2},{\"angle\":46.7,\"amplitude\":5.2},{\"angle\":47,\"amplitude\":5.2},{\"angle\":47.4,\"amplitude\":5.2},{\"angle\":47.8,\"amplitude\":5.2},{\"angle\":48.1,\"amplitude\":5.2},{\"angle\":48.4,\"amplitude\":5.300000000000001},{\"angle\":48.5,\"amplitude\":5.2},{\"angle\":49.1,\"amplitude\":5.300000000000001},{\"angle\":49.2,\"amplitude\":5.2},{\"angle\":49.5,\"amplitude\":5.300000000000001},{\"angle\":49.7,\"amplitude\":5.300000000000001},{\"angle\":49.8,\"amplitude\":5.300000000000001},{\"angle\":50.2,\"amplitude\":5.300000000000001},{\"angle\":50.6,\"amplitude\":5.300000000000001},{\"angle\":50.9,\"amplitude\":5.300000000000001},{\"angle\":51.2,\"amplitude\":5.300000000000001},{\"angle\":51.9,\"amplitude\":5.300000000000001},{\"angle\":52.1,\"amplitude\":5.300000000000001},{\"angle\":52.4,\"amplitude\":5.300000000000001},{\"angle\":52.9,\"amplitude\":5.300000000000001},{\"angle\":53.1,\"amplitude\":5.300000000000001},{\"angle\":53.5,\"amplitude\":5.300000000000001},{\"angle\":53.7,\"amplitude\":5.300000000000001},{\"angle\":53.8,\"amplitude\":5.300000000000001},{\"angle\":54.3,\"amplitude\":5.300000000000001},{\"angle\":54.7,\"amplitude\":5.300000000000001},{\"angle\":54.8,\"amplitude\":5.300000000000001},{\"angle\":55.2,\"amplitude\":5.2},{\"angle\":55.3,\"amplitude\":5.2},{\"angle\":55.6,\"amplitude\":5.2},{\"angle\":55.9,\"amplitude\":5.2},{\"angle\":56.6,\"amplitude\":5.2},{\"angle\":56.8,\"amplitude\":5.2},{\"angle\":57,\"amplitude\":5.2},{\"angle\":57.3,\"amplitude\":5.1},{\"angle\":57.5,\"amplitude\":5.1},{\"angle\":57.7,\"amplitude\":5.1},{\"angle\":58,\"amplitude\":5.1},{\"angle\":58.4,\"amplitude\":5.1},{\"angle\":58.6,\"amplitude\":5},{\"angle\":58.7,\"amplitude\":5},{\"angle\":58.9,\"amplitude\":4.9},{\"angle\":59.2,\"amplitude\":4.8},{\"angle\":59.5,\"amplitude\":3},{\"angle\":59.8,\"amplitude\":3},{\"angle\":59.9,\"amplitude\":2.9},{\"angle\":60,\"amplitude\":2.9},{\"angle\":60.3,\"amplitude\":2.9},{\"angle\":60.5,\"amplitude\":2.8000000000000003},{\"angle\":60.9,\"amplitude\":2.8000000000000003},{\"angle\":61.2,\"amplitude\":2.8000000000000003},{\"angle\":62.3,\"amplitude\":2.7},{\"angle\":62.9,\"amplitude\":2.7},{\"angle\":64.4,\"amplitude\":2.6},{\"angle\":65.5,\"amplitude\":2.6},{\"angle\":65.7,\"amplitude\":2.5},{\"angle\":66.9,\"amplitude\":2.5},{\"angle\":67.1,\"amplitude\":2.5},{\"angle\":67.9,\"amplitude\":2.4},{\"angle\":68.2,\"amplitude\":2.4},{\"angle\":69.8,\"amplitude\":2.3000000000000003},{\"angle\":71.5,\"amplitude\":2.3000000000000003},{\"angle\":73.1,\"amplitude\":2.3000000000000003},{\"angle\":74,\"amplitude\":2.3000000000000003},{\"angle\":74.6,\"amplitude\":2.2},{\"angle\":75.5,\"amplitude\":2.2},{\"angle\":76,\"amplitude\":2.2},{\"angle\":76.4,\"amplitude\":2.2},{\"angle\":77.4,\"amplitude\":2.2},{\"angle\":77.7,\"amplitude\":2.2},{\"angle\":77.8,\"amplitude\":2.2},{\"angle\":78.1,\"amplitude\":2.3000000000000003},{\"angle\":78.2,\"amplitude\":2.3000000000000003},{\"angle\":78.5,\"amplitude\":2.4},{\"angle\":78.6,\"amplitude\":2.4},{\"angle\":78.7,\"amplitude\":2.4},{\"angle\":78.9,\"amplitude\":2.5},{\"angle\":79.2,\"amplitude\":2.5},{\"angle\":79.4,\"amplitude\":2.6},{\"angle\":79.5,\"amplitude\":2.6},{\"angle\":79.8,\"amplitude\":2.7},{\"angle\":80,\"amplitude\":2.7},{\"angle\":80.1,\"amplitude\":2.8000000000000003},{\"angle\":80.3,\"amplitude\":2.8000000000000003},{\"angle\":80.5,\"amplitude\":2.9},{\"angle\":80.7,\"amplitude\":2.9},{\"angle\":80.8,\"amplitude\":3},{\"angle\":80.9,\"amplitude\":3},{\"angle\":81,\"amplitude\":3},{\"angle\":81.2,\"amplitude\":3.1},{\"angle\":81.4,\"amplitude\":3.2},{\"angle\":81.6,\"amplitude\":3.2},{\"angle\":81.7,\"amplitude\":3.3000000000000003},{\"angle\":81.8,\"amplitude\":3.3000000000000003},{\"angle\":81.9,\"amplitude\":3.4000000000000004},{\"angle\":82,\"amplitude\":3.4000000000000004},{\"angle\":82.1,\"amplitude\":3.4000000000000004},{\"angle\":82.2,\"amplitude\":3.5},{\"angle\":82.3,\"amplitude\":3.5999999999999996},{\"angle\":82.4,\"amplitude\":3.5999999999999996},{\"angle\":82.6,\"amplitude\":3.7},{\"angle\":82.7,\"amplitude\":3.7},{\"angle\":82.8,\"amplitude\":3.8},{\"angle\":82.9,\"amplitude\":3.8},{\"angle\":83.3,\"amplitude\":3.9000000000000004},{\"angle\":83.4,\"amplitude\":4},{\"angle\":83.6,\"amplitude\":4.1},{\"angle\":83.7,\"amplitude\":4.1},{\"angle\":83.8,\"amplitude\":4.3},{\"angle\":83.9,\"amplitude\":4.3},{\"angle\":84,\"amplitude\":4.4},{\"angle\":84.1,\"amplitude\":4.4},{\"angle\":84.2,\"amplitude\":4.5},{\"angle\":84.5,\"amplitude\":4.6000000000000005},{\"angle\":85.1,\"amplitude\":4.699999999999999},{\"angle\":85.2,\"amplitude\":4.8},{\"angle\":85.4,\"amplitude\":4.8},{\"angle\":85.5,\"amplitude\":4.9},{\"angle\":85.8,\"amplitude\":5},{\"angle\":85.9,\"amplitude\":5.1},{\"angle\":86.6,\"amplitude\":5.2},{\"angle\":86.8,\"amplitude\":5.2},{\"angle\":86.9,\"amplitude\":5.300000000000001},{\"angle\":87.3,\"amplitude\":5.5},{\"angle\":87.4,\"amplitude\":5.5},{\"angle\":87.6,\"amplitude\":5.6000000000000005},{\"angle\":87.8,\"amplitude\":5.699999999999999},{\"angle\":87.9,\"amplitude\":5.8},{\"angle\":88.3,\"amplitude\":5.8999999999999995},{\"angle\":88.4,\"amplitude\":6},{\"angle\":88.6,\"amplitude\":6.1},{\"angle\":89,\"amplitude\":6.2},{\"angle\":89.2,\"amplitude\":6.3},{\"angle\":89.7,\"amplitude\":6.5},{\"angle\":89.9,\"amplitude\":6.6000000000000005},{\"angle\":90,\"amplitude\":6.800000000000001},{\"angle\":90.3,\"amplitude\":7},{\"angle\":90.5,\"amplitude\":7},{\"angle\":90.6,\"amplitude\":7.199999999999999},{\"angle\":91,\"amplitude\":7.5},{\"angle\":91.4,\"amplitude\":7.800000000000001},{\"angle\":91.5,\"amplitude\":7.9},{\"angle\":91.6,\"amplitude\":7.9},{\"angle\":91.9,\"amplitude\":8},{\"angle\":92,\"amplitude\":8.100000000000001},{\"angle\":92.1,\"amplitude\":8.2},{\"angle\":92.3,\"amplitude\":8.2},{\"angle\":92.5,\"amplitude\":8.4},{\"angle\":93,\"amplitude\":8.5},{\"angle\":93.3,\"amplitude\":8.6},{\"angle\":93.5,\"amplitude\":8.6},{\"angle\":93.7,\"amplitude\":8.7},{\"angle\":93.8,\"amplitude\":8.8},{\"angle\":93.9,\"amplitude\":8.8},{\"angle\":94.2,\"amplitude\":8.9},{\"angle\":94.3,\"amplitude\":8.9},{\"angle\":94.5,\"amplitude\":9},{\"angle\":94.6,\"amplitude\":9},{\"angle\":94.7,\"amplitude\":9},{\"angle\":94.9,\"amplitude\":9.1},{\"angle\":95,\"amplitude\":9.1},{\"angle\":95.4,\"amplitude\":9.1},{\"angle\":95.5,\"amplitude\":9.200000000000001},{\"angle\":95.6,\"amplitude\":9.200000000000001},{\"angle\":95.9,\"amplitude\":9.200000000000001},{\"angle\":96,\"amplitude\":9.200000000000001},{\"angle\":96.3,\"amplitude\":9.3},{\"angle\":96.8,\"amplitude\":9.3},{\"angle\":96.9,\"amplitude\":9.3},{\"angle\":97.3,\"amplitude\":9.3},{\"angle\":97.5,\"amplitude\":9.3},{\"angle\":97.7,\"amplitude\":9.399999999999999},{\"angle\":98.1,\"amplitude\":9.399999999999999},{\"angle\":98.4,\"amplitude\":9.399999999999999},{\"angle\":98.5,\"amplitude\":9.399999999999999},{\"angle\":98.9,\"amplitude\":9.399999999999999},{\"angle\":99.5,\"amplitude\":9.5},{\"angle\":99.7,\"amplitude\":9.5},{\"angle\":99.8,\"amplitude\":9.5},{\"angle\":100.1,\"amplitude\":9.5},{\"angle\":100.2,\"amplitude\":9.5},{\"angle\":100.3,\"amplitude\":9.5},{\"angle\":101,\"amplitude\":9.5},{\"angle\":101.1,\"amplitude\":9.5},{\"angle\":101.2,\"amplitude\":9.5},{\"angle\":101.4,\"amplitude\":9.5},{\"angle\":101.7,\"amplitude\":9.5},{\"angle\":101.9,\"amplitude\":9.5},{\"angle\":102,\"amplitude\":9.6},{\"angle\":102.1,\"amplitude\":9.6},{\"angle\":102.4,\"amplitude\":9.6},{\"angle\":102.5,\"amplitude\":9.6},{\"angle\":102.7,\"amplitude\":9.6},{\"angle\":103,\"amplitude\":9.6},{\"angle\":103.2,\"amplitude\":9.6},{\"angle\":103.4,\"amplitude\":9.6},{\"angle\":104.3,\"amplitude\":9.6},{\"angle\":104.8,\"amplitude\":9.6},{\"angle\":105,\"amplitude\":9.6},{\"angle\":105.2,\"amplitude\":9.6},{\"angle\":105.3,\"amplitude\":9.6},{\"angle\":105.5,\"amplitude\":9.6},{\"angle\":105.6,\"amplitude\":9.6},{\"angle\":105.8,\"amplitude\":9.6},{\"angle\":106.1,\"amplitude\":9.5},{\"angle\":106.2,\"amplitude\":9.5},{\"angle\":106.3,\"amplitude\":9.5},{\"angle\":106.7,\"amplitude\":9.5},{\"angle\":107.4,\"amplitude\":9.399999999999999},{\"angle\":107.6,\"amplitude\":9.399999999999999},{\"angle\":107.9,\"amplitude\":9.399999999999999},{\"angle\":108.3,\"amplitude\":9.399999999999999},{\"angle\":108.6,\"amplitude\":9.399999999999999},{\"angle\":108.8,\"amplitude\":9.399999999999999},{\"angle\":109.2,\"amplitude\":9.399999999999999},{\"angle\":109.3,\"amplitude\":9.399999999999999},{\"angle\":109.5,\"amplitude\":9.3},{\"angle\":109.7,\"amplitude\":9.3},{\"angle\":109.9,\"amplitude\":9.3},{\"angle\":110,\"amplitude\":9.3},{\"angle\":110.2,\"amplitude\":9.3},{\"angle\":110.4,\"amplitude\":9.3},{\"angle\":110.6,\"amplitude\":9.3},{\"angle\":110.8,\"amplitude\":9.3},{\"angle\":110.9,\"amplitude\":9.3},{\"angle\":111.3,\"amplitude\":9.3},{\"angle\":111.6,\"amplitude\":9.3},{\"angle\":111.8,\"amplitude\":9.3},{\"angle\":112,\"amplitude\":9.200000000000001},{\"angle\":112.2,\"amplitude\":9.200000000000001},{\"angle\":112.4,\"amplitude\":9.200000000000001},{\"angle\":112.6,\"amplitude\":9.200000000000001},{\"angle\":113,\"amplitude\":9.200000000000001},{\"angle\":113.2,\"amplitude\":9.200000000000001},{\"angle\":113.4,\"amplitude\":9.200000000000001},{\"angle\":113.7,\"amplitude\":9.1},{\"angle\":114,\"amplitude\":9.1},{\"angle\":114.3,\"amplitude\":9.1},{\"angle\":114.4,\"amplitude\":9.1},{\"angle\":114.7,\"amplitude\":9.1},{\"angle\":115.6,\"amplitude\":9},{\"angle\":115.8,\"amplitude\":9},{\"angle\":116.2,\"amplitude\":9},{\"angle\":116.4,\"amplitude\":9},{\"angle\":116.7,\"amplitude\":8.9},{\"angle\":117,\"amplitude\":8.9},{\"angle\":117.1,\"amplitude\":8.9},{\"angle\":117.2,\"amplitude\":8.9},{\"angle\":117.3,\"amplitude\":8.9},{\"angle\":117.6,\"amplitude\":8.8},{\"angle\":117.8,\"amplitude\":8.8},{\"angle\":118.1,\"amplitude\":8.8},{\"angle\":118.3,\"amplitude\":8.8},{\"angle\":118.7,\"amplitude\":8.7},{\"angle\":118.8,\"amplitude\":8.7},{\"angle\":119.1,\"amplitude\":8.7},{\"angle\":119.6,\"amplitude\":8.7},{\"angle\":119.7,\"amplitude\":8.7},{\"angle\":119.8,\"amplitude\":8.6},{\"angle\":120.2,\"amplitude\":8.6},{\"angle\":120.5,\"amplitude\":8.6},{\"angle\":120.9,\"amplitude\":8.6},{\"angle\":121.3,\"amplitude\":8.6},{\"angle\":121.6,\"amplitude\":8.6},{\"angle\":121.7,\"amplitude\":8.5},{\"angle\":122.1,\"amplitude\":8.5},{\"angle\":122.3,\"amplitude\":8.5},{\"angle\":122.8,\"amplitude\":8.5},{\"angle\":123,\"amplitude\":8.5},{\"angle\":123.4,\"amplitude\":8.5},{\"angle\":123.7,\"amplitude\":8.5},{\"angle\":123.8,\"amplitude\":8.5},{\"angle\":123.9,\"amplitude\":8.5},{\"angle\":124.1,\"amplitude\":8.5},{\"angle\":124.4,\"amplitude\":8.5},{\"angle\":124.5,\"amplitude\":8.5},{\"angle\":124.6,\"amplitude\":8.5},{\"angle\":125,\"amplitude\":8.5},{\"angle\":125.2,\"amplitude\":8.5},{\"angle\":125.3,\"amplitude\":8.5},{\"angle\":125.5,\"amplitude\":8.5},{\"angle\":125.9,\"amplitude\":8.5},{\"angle\":126.4,\"amplitude\":8.5},{\"angle\":126.6,\"amplitude\":8.5},{\"angle\":127.3,\"amplitude\":8.5},{\"angle\":127.7,\"amplitude\":8.6},{\"angle\":128.3,\"amplitude\":8.6},{\"angle\":128.8,\"amplitude\":8.6},{\"angle\":128.9,\"amplitude\":8.6},{\"angle\":129.1,\"amplitude\":8.6},{\"angle\":129.2,\"amplitude\":8.6},{\"angle\":129.4,\"amplitude\":8.6},{\"angle\":129.6,\"amplitude\":8.6},{\"angle\":129.9,\"amplitude\":8.6},{\"angle\":130.1,\"amplitude\":8.6},{\"angle\":130.3,\"amplitude\":8.6},{\"angle\":130.9,\"amplitude\":8.5},{\"angle\":131.2,\"amplitude\":8.5},{\"angle\":131.7,\"amplitude\":8.5},{\"angle\":131.8,\"amplitude\":8.5},{\"angle\":132.2,\"amplitude\":8.4},{\"angle\":132.3,\"amplitude\":8.4},{\"angle\":132.5,\"amplitude\":8.4},{\"angle\":132.6,\"amplitude\":8.4},{\"angle\":132.8,\"amplitude\":8.4},{\"angle\":133,\"amplitude\":8.4},{\"angle\":133.2,\"amplitude\":8.4},{\"angle\":133.3,\"amplitude\":8.4},{\"angle\":133.5,\"amplitude\":8.299999999999999},{\"angle\":133.6,\"amplitude\":8.299999999999999},{\"angle\":133.7,\"amplitude\":8.299999999999999},{\"angle\":133.9,\"amplitude\":8.299999999999999},{\"angle\":134,\"amplitude\":8.299999999999999},{\"angle\":134.2,\"amplitude\":8.2},{\"angle\":134.3,\"amplitude\":8.2},{\"angle\":134.4,\"amplitude\":8.2},{\"angle\":134.6,\"amplitude\":8.2},{\"angle\":134.7,\"amplitude\":8.2},{\"angle\":134.8,\"amplitude\":8.2},{\"angle\":135,\"amplitude\":8.100000000000001},{\"angle\":135.1,\"amplitude\":8.100000000000001},{\"angle\":135.2,\"amplitude\":8},{\"angle\":135.3,\"amplitude\":8},{\"angle\":135.5,\"amplitude\":8},{\"angle\":135.6,\"amplitude\":8},{\"angle\":135.7,\"amplitude\":8},{\"angle\":135.8,\"amplitude\":7.9},{\"angle\":135.9,\"amplitude\":7.9},{\"angle\":136,\"amplitude\":7.9},{\"angle\":136.1,\"amplitude\":7.9},{\"angle\":136.4,\"amplitude\":7.800000000000001},{\"angle\":136.5,\"amplitude\":7.800000000000001},{\"angle\":136.7,\"amplitude\":7.7},{\"angle\":136.8,\"amplitude\":7.6},{\"angle\":136.9,\"amplitude\":7.6},{\"angle\":137.1,\"amplitude\":7.6},{\"angle\":137.3,\"amplitude\":7.5},{\"angle\":137.5,\"amplitude\":7.4},{\"angle\":137.6,\"amplitude\":7.4},{\"angle\":137.8,\"amplitude\":7.3},{\"angle\":137.9,\"amplitude\":7.1},{\"angle\":138,\"amplitude\":7.1},{\"angle\":138.1,\"amplitude\":7},{\"angle\":138.2,\"amplitude\":6.8999999999999995},{\"angle\":138.3,\"amplitude\":6.800000000000001},{\"angle\":138.5,\"amplitude\":6.800000000000001},{\"angle\":138.7,\"amplitude\":6.7},{\"angle\":138.8,\"amplitude\":6.7},{\"angle\":139,\"amplitude\":6.6000000000000005},{\"angle\":139.1,\"amplitude\":6.4},{\"angle\":139.2,\"amplitude\":6.3},{\"angle\":139.4,\"amplitude\":6.2},{\"angle\":139.5,\"amplitude\":6.1},{\"angle\":139.7,\"amplitude\":6},{\"angle\":139.9,\"amplitude\":5.8999999999999995},{\"angle\":140.1,\"amplitude\":5.8999999999999995},{\"angle\":140.2,\"amplitude\":5.699999999999999},{\"angle\":140.3,\"amplitude\":5.6000000000000005},{\"angle\":140.4,\"amplitude\":5.5},{\"angle\":140.5,\"amplitude\":5.5},{\"angle\":140.6,\"amplitude\":5.4},{\"angle\":140.8,\"amplitude\":5.4},{\"angle\":141,\"amplitude\":5.300000000000001},{\"angle\":141.1,\"amplitude\":4.9},{\"angle\":141.2,\"amplitude\":4.699999999999999},{\"angle\":141.5,\"amplitude\":4.6000000000000005},{\"angle\":142,\"amplitude\":4.5},{\"angle\":142.3,\"amplitude\":4.2},{\"angle\":142.5,\"amplitude\":3.9000000000000004},{\"angle\":142.6,\"amplitude\":3.8},{\"angle\":142.8,\"amplitude\":3.7},{\"angle\":142.9,\"amplitude\":3.5999999999999996},{\"angle\":143.1,\"amplitude\":3.4000000000000004},{\"angle\":143.2,\"amplitude\":3.3000000000000003},{\"angle\":143.4,\"amplitude\":2.9},{\"angle\":143.5,\"amplitude\":2.8000000000000003},{\"angle\":143.8,\"amplitude\":2.8000000000000003},{\"angle\":144.1,\"amplitude\":2.7},{\"angle\":144.4,\"amplitude\":2.6},{\"angle\":144.6,\"amplitude\":2.5},{\"angle\":145.2,\"amplitude\":2.4},{\"angle\":145.7,\"amplitude\":2.4},{\"angle\":145.9,\"amplitude\":2.3000000000000003},{\"angle\":146.1,\"amplitude\":2.3000000000000003},{\"angle\":146.2,\"amplitude\":2.3000000000000003},{\"angle\":146.5,\"amplitude\":2.2},{\"angle\":146.6,\"amplitude\":2.2},{\"angle\":146.7,\"amplitude\":2.2},{\"angle\":147,\"amplitude\":2.1},{\"angle\":147.4,\"amplitude\":2.1},{\"angle\":147.6,\"amplitude\":2.1},{\"angle\":148.9,\"amplitude\":2.1},{\"angle\":149.2,\"amplitude\":2},{\"angle\":149.6,\"amplitude\":2},{\"angle\":150.1,\"amplitude\":2},{\"angle\":150.8,\"amplitude\":1.9},{\"angle\":151.2,\"amplitude\":1.9},{\"angle\":152.7,\"amplitude\":1.7999999999999998},{\"angle\":153.2,\"amplitude\":1.7999999999999998},{\"angle\":153.5,\"amplitude\":1.7000000000000002},{\"angle\":154.1,\"amplitude\":1.7000000000000002},{\"angle\":155.2,\"amplitude\":1.7000000000000002},{\"angle\":155.8,\"amplitude\":1.7000000000000002},{\"angle\":156.8,\"amplitude\":1.6},{\"angle\":157.4,\"amplitude\":1.6},{\"angle\":158,\"amplitude\":1.6},{\"angle\":159.2,\"amplitude\":1.6},{\"angle\":159.6,\"amplitude\":1.6},{\"angle\":160.2,\"amplitude\":1.6},{\"angle\":161.5,\"amplitude\":1.6},{\"angle\":162.2,\"amplitude\":1.5},{\"angle\":162.8,\"amplitude\":1.5},{\"angle\":163,\"amplitude\":1.6},{\"angle\":165.3,\"amplitude\":1.6},{\"angle\":165.5,\"amplitude\":1.6},{\"angle\":165.7,\"amplitude\":1.6},{\"angle\":166.1,\"amplitude\":1.7000000000000002},{\"angle\":166.3,\"amplitude\":1.7000000000000002},{\"angle\":166.7,\"amplitude\":1.7000000000000002},{\"angle\":166.9,\"amplitude\":1.7999999999999998},{\"angle\":167.3,\"amplitude\":1.7999999999999998},{\"angle\":167.4,\"amplitude\":1.7999999999999998},{\"angle\":167.8,\"amplitude\":1.9},{\"angle\":167.9,\"amplitude\":1.9},{\"angle\":168.1,\"amplitude\":1.9},{\"angle\":168.2,\"amplitude\":2},{\"angle\":168.3,\"amplitude\":2},{\"angle\":168.5,\"amplitude\":2},{\"angle\":168.6,\"amplitude\":2},{\"angle\":168.7,\"amplitude\":2},{\"angle\":168.9,\"amplitude\":2.1},{\"angle\":169.1,\"amplitude\":2.1},{\"angle\":169.5,\"amplitude\":4.8},{\"angle\":169.6,\"amplitude\":4.8},{\"angle\":170,\"amplitude\":4.9},{\"angle\":170.2,\"amplitude\":4.9},{\"angle\":170.7,\"amplitude\":4.9},{\"angle\":170.8,\"amplitude\":4.9},{\"angle\":171.2,\"amplitude\":4.9},{\"angle\":171.7,\"amplitude\":5},{\"angle\":171.8,\"amplitude\":5},{\"angle\":172.2,\"amplitude\":5},{\"angle\":172.3,\"amplitude\":5.1},{\"angle\":172.7,\"amplitude\":5},{\"angle\":173.2,\"amplitude\":5.1},{\"angle\":173.7,\"amplitude\":5.2},{\"angle\":173.9,\"amplitude\":5.1},{\"angle\":174.1,\"amplitude\":5.2},{\"angle\":174.6,\"amplitude\":5.2},{\"angle\":174.8,\"amplitude\":5.300000000000001},{\"angle\":175,\"amplitude\":5.300000000000001},{\"angle\":175.4,\"amplitude\":5.300000000000001},{\"angle\":175.6,\"amplitude\":5.300000000000001},{\"angle\":175.8,\"amplitude\":5.300000000000001},{\"angle\":176.5,\"amplitude\":5.300000000000001},{\"angle\":176.7,\"amplitude\":5.300000000000001},{\"angle\":177.1,\"amplitude\":5.300000000000001},{\"angle\":177.3,\"amplitude\":5.300000000000001},{\"angle\":177.9,\"amplitude\":5.300000000000001},{\"angle\":178.1,\"amplitude\":5.300000000000001},{\"angle\":178.3,\"amplitude\":5.300000000000001},{\"angle\":178.7,\"amplitude\":5.300000000000001},{\"angle\":179.1,\"amplitude\":5.300000000000001},{\"angle\":179.5,\"amplitude\":5.300000000000001},{\"angle\":179.9,\"amplitude\":5.300000000000001},{\"angle\":180.2,\"amplitude\":5.300000000000001},{\"angle\":180.4,\"amplitude\":5.300000000000001},{\"angle\":180.6,\"amplitude\":5.300000000000001},{\"angle\":181,\"amplitude\":5.300000000000001},{\"angle\":181.2,\"amplitude\":5.300000000000001},{\"angle\":181.4,\"amplitude\":5.300000000000001},{\"angle\":181.8,\"amplitude\":5.300000000000001},{\"angle\":182,\"amplitude\":5.300000000000001},{\"angle\":182.2,\"amplitude\":5.300000000000001},{\"angle\":182.6,\"amplitude\":5.300000000000001},{\"angle\":183,\"amplitude\":5.300000000000001},{\"angle\":183.4,\"amplitude\":5.300000000000001},{\"angle\":183.5,\"amplitude\":5.300000000000001},{\"angle\":183.7,\"amplitude\":5.2},{\"angle\":184.4,\"amplitude\":5.2},{\"angle\":184.6,\"amplitude\":5.1},{\"angle\":184.7,\"amplitude\":5.1},{\"angle\":185,\"amplitude\":5},{\"angle\":185.4,\"amplitude\":5},{\"angle\":185.5,\"amplitude\":4.9},{\"angle\":185.7,\"amplitude\":4.9},{\"angle\":185.8,\"amplitude\":4.8},{\"angle\":186,\"amplitude\":4.9},{\"angle\":186.5,\"amplitude\":4.8},{\"angle\":186.6,\"amplitude\":4.699999999999999},{\"angle\":186.7,\"amplitude\":4.699999999999999},{\"angle\":186.8,\"amplitude\":4.6000000000000005},{\"angle\":186.9,\"amplitude\":4.5},{\"angle\":187.2,\"amplitude\":4.5},{\"angle\":187.5,\"amplitude\":4.4},{\"angle\":187.6,\"amplitude\":4.4},{\"angle\":188.1,\"amplitude\":4.4},{\"angle\":188.5,\"amplitude\":4.3},{\"angle\":188.6,\"amplitude\":4.3},{\"angle\":188.7,\"amplitude\":4.2},{\"angle\":189.6,\"amplitude\":4.1},{\"angle\":189.9,\"amplitude\":4.1},{\"angle\":190.2,\"amplitude\":4},{\"angle\":190.4,\"amplitude\":3.9000000000000004},{\"angle\":190.7,\"amplitude\":3.9000000000000004},{\"angle\":190.9,\"amplitude\":3.8},{\"angle\":191.7,\"amplitude\":3.8},{\"angle\":191.8,\"amplitude\":3.8},{\"angle\":191.9,\"amplitude\":3.7},{\"angle\":192.3,\"amplitude\":3.7},{\"angle\":192.7,\"amplitude\":3.7},{\"angle\":192.8,\"amplitude\":3.5999999999999996},{\"angle\":193,\"amplitude\":3.5999999999999996},{\"angle\":193.2,\"amplitude\":3.5},{\"angle\":193.4,\"amplitude\":3.5},{\"angle\":193.6,\"amplitude\":3.4000000000000004},{\"angle\":194.5,\"amplitude\":3.4000000000000004},{\"angle\":195.2,\"amplitude\":3.3000000000000003},{\"angle\":195.5,\"amplitude\":3.2},{\"angle\":195.9,\"amplitude\":3.2},{\"angle\":196.1,\"amplitude\":3.2},{\"angle\":196.5,\"amplitude\":3.1},{\"angle\":196.6,\"amplitude\":3.1},{\"angle\":196.9,\"amplitude\":3},{\"angle\":197,\"amplitude\":3},{\"angle\":197.4,\"amplitude\":2.9},{\"angle\":198.2,\"amplitude\":2.9},{\"angle\":198.5,\"amplitude\":2.9},{\"angle\":198.9,\"amplitude\":2.8000000000000003},{\"angle\":199,\"amplitude\":2.8000000000000003},{\"angle\":199.5,\"amplitude\":2.8000000000000003},{\"angle\":199.7,\"amplitude\":2.8000000000000003},{\"angle\":199.9,\"amplitude\":2.7},{\"angle\":200,\"amplitude\":2.7},{\"angle\":200.3,\"amplitude\":2.7},{\"angle\":200.6,\"amplitude\":2.7},{\"angle\":200.8,\"amplitude\":2.7},{\"angle\":200.9,\"amplitude\":2.7},{\"angle\":201.2,\"amplitude\":2.6},{\"angle\":201.9,\"amplitude\":2.6},{\"angle\":202.3,\"amplitude\":2.7},{\"angle\":202.7,\"amplitude\":2.7},{\"angle\":203.4,\"amplitude\":2.7},{\"angle\":203.8,\"amplitude\":2.7},{\"angle\":204.9,\"amplitude\":2.8000000000000003},{\"angle\":205.6,\"amplitude\":2.8000000000000003},{\"angle\":205.8,\"amplitude\":2.9},{\"angle\":206.9,\"amplitude\":2.9},{\"angle\":207.2,\"amplitude\":3},{\"angle\":207.4,\"amplitude\":3},{\"angle\":207.5,\"amplitude\":3},{\"angle\":207.8,\"amplitude\":3.1},{\"angle\":208,\"amplitude\":3.1},{\"angle\":208.4,\"amplitude\":3.2},{\"angle\":208.5,\"amplitude\":3.2},{\"angle\":208.8,\"amplitude\":3.3000000000000003},{\"angle\":208.9,\"amplitude\":3.3000000000000003},{\"angle\":209.2,\"amplitude\":3.3000000000000003},{\"angle\":209.3,\"amplitude\":3.5},{\"angle\":209.4,\"amplitude\":3.5999999999999996},{\"angle\":209.7,\"amplitude\":3.5999999999999996},{\"angle\":209.9,\"amplitude\":3.8},{\"angle\":210,\"amplitude\":3.9000000000000004},{\"angle\":210.1,\"amplitude\":4.3},{\"angle\":210.2,\"amplitude\":4.4},{\"angle\":210.5,\"amplitude\":4.5},{\"angle\":210.6,\"amplitude\":4.5},{\"angle\":210.7,\"amplitude\":4.6000000000000005},{\"angle\":210.8,\"amplitude\":4.8},{\"angle\":211.2,\"amplitude\":4.9},{\"angle\":211.4,\"amplitude\":5},{\"angle\":211.7,\"amplitude\":5.2},{\"angle\":212,\"amplitude\":5.2},{\"angle\":212.1,\"amplitude\":5.2},{\"angle\":212.5,\"amplitude\":5.300000000000001},{\"angle\":212.6,\"amplitude\":5.4},{\"angle\":212.8,\"amplitude\":5.5},{\"angle\":212.9,\"amplitude\":5.6000000000000005},{\"angle\":213,\"amplitude\":5.6000000000000005},{\"angle\":213.4,\"amplitude\":5.699999999999999},{\"angle\":213.5,\"amplitude\":5.8999999999999995},{\"angle\":213.7,\"amplitude\":6},{\"angle\":213.8,\"amplitude\":6},{\"angle\":214,\"amplitude\":6},{\"angle\":214.1,\"amplitude\":6.1},{\"angle\":214.5,\"amplitude\":6.2},{\"angle\":214.7,\"amplitude\":6.3},{\"angle\":214.8,\"amplitude\":6.4},{\"angle\":215,\"amplitude\":6.5},{\"angle\":215.1,\"amplitude\":6.6000000000000005},{\"angle\":215.3,\"amplitude\":6.7},{\"angle\":215.4,\"amplitude\":6.800000000000001},{\"angle\":215.5,\"amplitude\":6.800000000000001},{\"angle\":215.7,\"amplitude\":6.8999999999999995},{\"angle\":215.8,\"amplitude\":7},{\"angle\":215.9,\"amplitude\":7.1},{\"angle\":216.1,\"amplitude\":7.1},{\"angle\":216.3,\"amplitude\":7.199999999999999},{\"angle\":216.4,\"amplitude\":7.199999999999999},{\"angle\":216.6,\"amplitude\":7.3},{\"angle\":216.7,\"amplitude\":7.4},{\"angle\":216.9,\"amplitude\":7.4},{\"angle\":217.1,\"amplitude\":7.4},{\"angle\":217.3,\"amplitude\":7.5},{\"angle\":217.5,\"amplitude\":7.6},{\"angle\":217.6,\"amplitude\":7.800000000000001},{\"angle\":217.7,\"amplitude\":7.800000000000001},{\"angle\":217.8,\"amplitude\":7.800000000000001},{\"angle\":218,\"amplitude\":8.299999999999999},{\"angle\":218.2,\"amplitude\":8.5},{\"angle\":218.3,\"amplitude\":8.6},{\"angle\":218.4,\"amplitude\":8.7},{\"angle\":218.5,\"amplitude\":8.7},{\"angle\":218.6,\"amplitude\":8.8},{\"angle\":218.7,\"amplitude\":9.200000000000001},{\"angle\":218.9,\"amplitude\":9.3},{\"angle\":219,\"amplitude\":9.3},{\"angle\":219.1,\"amplitude\":9.399999999999999},{\"angle\":219.3,\"amplitude\":9.5},{\"angle\":219.4,\"amplitude\":9.5},{\"angle\":219.5,\"amplitude\":9.5},{\"angle\":219.7,\"amplitude\":9.5},{\"angle\":219.8,\"amplitude\":9.7},{\"angle\":219.9,\"amplitude\":9.7},{\"angle\":220.1,\"amplitude\":9.7},{\"angle\":220.2,\"amplitude\":9.7},{\"angle\":220.4,\"amplitude\":9.7},{\"angle\":220.5,\"amplitude\":9.8},{\"angle\":220.6,\"amplitude\":9.8},{\"angle\":220.7,\"amplitude\":9.8},{\"angle\":220.8,\"amplitude\":9.8},{\"angle\":220.9,\"amplitude\":9.8},{\"angle\":221.1,\"amplitude\":9.8},{\"angle\":221.2,\"amplitude\":9.9},{\"angle\":221.5,\"amplitude\":9.9},{\"angle\":221.7,\"amplitude\":9.9},{\"angle\":222.1,\"amplitude\":9.9},{\"angle\":222.2,\"amplitude\":9.9},{\"angle\":222.5,\"amplitude\":9.9},{\"angle\":222.7,\"amplitude\":9.9},{\"angle\":222.8,\"amplitude\":9.9},{\"angle\":223.1,\"amplitude\":9.9},{\"angle\":223.3,\"amplitude\":9.9},{\"angle\":223.4,\"amplitude\":9.9},{\"angle\":223.6,\"amplitude\":9.8},{\"angle\":223.7,\"amplitude\":9.8},{\"angle\":224,\"amplitude\":9.8},{\"angle\":224.2,\"amplitude\":9.8},{\"angle\":224.3,\"amplitude\":9.8},{\"angle\":224.4,\"amplitude\":9.8},{\"angle\":224.6,\"amplitude\":9.7},{\"angle\":224.7,\"amplitude\":9.7},{\"angle\":224.8,\"amplitude\":9.7},{\"angle\":224.9,\"amplitude\":9.7},{\"angle\":225,\"amplitude\":9.7},{\"angle\":225.1,\"amplitude\":9.7},{\"angle\":225.5,\"amplitude\":9.6},{\"angle\":225.8,\"amplitude\":9.6},{\"angle\":226.2,\"amplitude\":9.5},{\"angle\":226.3,\"amplitude\":9.5},{\"angle\":226.5,\"amplitude\":9.5},{\"angle\":226.9,\"amplitude\":9.5},{\"angle\":227,\"amplitude\":9.399999999999999},{\"angle\":227.1,\"amplitude\":9.399999999999999},{\"angle\":227.3,\"amplitude\":9.399999999999999},{\"angle\":227.4,\"amplitude\":9.399999999999999},{\"angle\":227.7,\"amplitude\":9.399999999999999},{\"angle\":228,\"amplitude\":9.399999999999999},{\"angle\":228.1,\"amplitude\":9.399999999999999},{\"angle\":228.4,\"amplitude\":9.399999999999999},{\"angle\":228.6,\"amplitude\":9.399999999999999},{\"angle\":228.7,\"amplitude\":9.399999999999999},{\"angle\":228.9,\"amplitude\":9.5},{\"angle\":229,\"amplitude\":9.5},{\"angle\":229.1,\"amplitude\":9.5},{\"angle\":229.5,\"amplitude\":9.5},{\"angle\":229.9,\"amplitude\":9.399999999999999},{\"angle\":230.1,\"amplitude\":9.399999999999999},{\"angle\":230.4,\"amplitude\":9.399999999999999},{\"angle\":230.6,\"amplitude\":9.399999999999999},{\"angle\":230.7,\"amplitude\":9.399999999999999},{\"angle\":231,\"amplitude\":9.3},{\"angle\":231.1,\"amplitude\":9.3},{\"angle\":231.3,\"amplitude\":9.3},{\"angle\":231.5,\"amplitude\":9.3},{\"angle\":231.6,\"amplitude\":9.3},{\"angle\":231.7,\"amplitude\":9.3},{\"angle\":231.9,\"amplitude\":9.3},{\"angle\":232,\"amplitude\":9.200000000000001},{\"angle\":232.2,\"amplitude\":9.200000000000001},{\"angle\":232.6,\"amplitude\":9.200000000000001},{\"angle\":232.8,\"amplitude\":9.1},{\"angle\":233,\"amplitude\":9.1},{\"angle\":233.5,\"amplitude\":9.1},{\"angle\":233.6,\"amplitude\":9},{\"angle\":233.8,\"amplitude\":8.9},{\"angle\":234.2,\"amplitude\":8.9},{\"angle\":234.6,\"amplitude\":8.7},{\"angle\":234.8,\"amplitude\":8.6},{\"angle\":234.9,\"amplitude\":8.6},{\"angle\":235.1,\"amplitude\":8.5},{\"angle\":235.3,\"amplitude\":8.5},{\"angle\":235.7,\"amplitude\":8.4},{\"angle\":235.9,\"amplitude\":8.299999999999999},{\"angle\":236,\"amplitude\":8.299999999999999},{\"angle\":236.1,\"amplitude\":8.299999999999999},{\"angle\":236.3,\"amplitude\":8.2},{\"angle\":236.7,\"amplitude\":8.100000000000001},{\"angle\":236.8,\"amplitude\":8.100000000000001},{\"angle\":237,\"amplitude\":8},{\"angle\":237.1,\"amplitude\":8},{\"angle\":237.5,\"amplitude\":8},{\"angle\":237.7,\"amplitude\":7.9},{\"angle\":237.8,\"amplitude\":7.9},{\"angle\":238.2,\"amplitude\":7.9},{\"angle\":238.3,\"amplitude\":7.9},{\"angle\":238.6,\"amplitude\":7.9},{\"angle\":238.8,\"amplitude\":7.800000000000001},{\"angle\":238.9,\"amplitude\":7.800000000000001},{\"angle\":239.1,\"amplitude\":7.800000000000001},{\"angle\":239.2,\"amplitude\":7.800000000000001},{\"angle\":239.6,\"amplitude\":7.800000000000001},{\"angle\":239.7,\"amplitude\":7.800000000000001},{\"angle\":240.2,\"amplitude\":7.7},{\"angle\":240.3,\"amplitude\":7.7},{\"angle\":240.5,\"amplitude\":7.7},{\"angle\":240.8,\"amplitude\":7.7},{\"angle\":241.2,\"amplitude\":7.7},{\"angle\":241.4,\"amplitude\":7.7},{\"angle\":241.8,\"amplitude\":7.7},{\"angle\":242,\"amplitude\":7.7},{\"angle\":242.1,\"amplitude\":7.7},{\"angle\":242.3,\"amplitude\":7.7},{\"angle\":242.6,\"amplitude\":7.7},{\"angle\":242.7,\"amplitude\":7.7},{\"angle\":243,\"amplitude\":7.7},{\"angle\":243.2,\"amplitude\":7.7},{\"angle\":243.3,\"amplitude\":7.7},{\"angle\":243.4,\"amplitude\":7.800000000000001},{\"angle\":243.7,\"amplitude\":7.800000000000001},{\"angle\":244.1,\"amplitude\":7.800000000000001},{\"angle\":244.4,\"amplitude\":7.800000000000001},{\"angle\":244.7,\"amplitude\":7.800000000000001},{\"angle\":244.9,\"amplitude\":7.9},{\"angle\":245,\"amplitude\":7.9},{\"angle\":245.1,\"amplitude\":7.9},{\"angle\":245.4,\"amplitude\":8},{\"angle\":245.8,\"amplitude\":8},{\"angle\":245.9,\"amplitude\":8},{\"angle\":246.1,\"amplitude\":8},{\"angle\":246.3,\"amplitude\":8.100000000000001},{\"angle\":246.4,\"amplitude\":8.100000000000001},{\"angle\":246.5,\"amplitude\":8.100000000000001},{\"angle\":247,\"amplitude\":8.2},{\"angle\":247.2,\"amplitude\":8.2},{\"angle\":247.3,\"amplitude\":8.2},{\"angle\":247.4,\"amplitude\":8.2},{\"angle\":247.8,\"amplitude\":8.299999999999999},{\"angle\":248,\"amplitude\":8.4},{\"angle\":248.4,\"amplitude\":8.4},{\"angle\":248.5,\"amplitude\":8.4},{\"angle\":248.6,\"amplitude\":8.5},{\"angle\":248.9,\"amplitude\":8.5},{\"angle\":249,\"amplitude\":8.5},{\"angle\":249.3,\"amplitude\":8.6},{\"angle\":249.4,\"amplitude\":8.6},{\"angle\":249.7,\"amplitude\":8.7},{\"angle\":249.9,\"amplitude\":8.7},{\"angle\":250,\"amplitude\":8.7},{\"angle\":250.1,\"amplitude\":8.7},{\"angle\":250.2,\"amplitude\":8.8},{\"angle\":250.3,\"amplitude\":8.8},{\"angle\":250.5,\"amplitude\":8.9},{\"angle\":250.7,\"amplitude\":8.9},{\"angle\":251,\"amplitude\":8.9},{\"angle\":251.1,\"amplitude\":9},{\"angle\":251.3,\"amplitude\":9},{\"angle\":251.4,\"amplitude\":9},{\"angle\":251.5,\"amplitude\":9.1},{\"angle\":251.6,\"amplitude\":9.1},{\"angle\":251.7,\"amplitude\":9.200000000000001},{\"angle\":252.1,\"amplitude\":9.200000000000001},{\"angle\":252.2,\"amplitude\":9.200000000000001},{\"angle\":252.4,\"amplitude\":9.3},{\"angle\":252.6,\"amplitude\":9.399999999999999},{\"angle\":252.7,\"amplitude\":9.399999999999999},{\"angle\":252.9,\"amplitude\":9.399999999999999},{\"angle\":253.1,\"amplitude\":9.399999999999999},{\"angle\":253.2,\"amplitude\":9.5},{\"angle\":253.4,\"amplitude\":9.5},{\"angle\":253.6,\"amplitude\":9.5},{\"angle\":253.8,\"amplitude\":9.5},{\"angle\":253.9,\"amplitude\":9.5},{\"angle\":254.2,\"amplitude\":9.6},{\"angle\":254.3,\"amplitude\":9.6},{\"angle\":254.6,\"amplitude\":9.6},{\"angle\":254.7,\"amplitude\":9.6},{\"angle\":255.3,\"amplitude\":9.6},{\"angle\":255.7,\"amplitude\":9.6},{\"angle\":256,\"amplitude\":9.6},{\"angle\":256.1,\"amplitude\":9.6},{\"angle\":256.2,\"amplitude\":9.6},{\"angle\":256.4,\"amplitude\":9.6},{\"angle\":256.7,\"amplitude\":9.5},{\"angle\":256.9,\"amplitude\":9.5},{\"angle\":257.2,\"amplitude\":9.399999999999999},{\"angle\":257.3,\"amplitude\":9.3},{\"angle\":257.4,\"amplitude\":9.200000000000001},{\"angle\":257.5,\"amplitude\":9.200000000000001},{\"angle\":257.7,\"amplitude\":9.1},{\"angle\":257.9,\"amplitude\":8.9},{\"angle\":258,\"amplitude\":8.9},{\"angle\":258.2,\"amplitude\":8.8},{\"angle\":258.3,\"amplitude\":8.7},{\"angle\":258.5,\"amplitude\":8.7},{\"angle\":258.7,\"amplitude\":8.6},{\"angle\":258.9,\"amplitude\":8.5},{\"angle\":259.1,\"amplitude\":8.5},{\"angle\":259.3,\"amplitude\":8.4},{\"angle\":259.4,\"amplitude\":8.299999999999999},{\"angle\":259.5,\"amplitude\":8.299999999999999},{\"angle\":259.7,\"amplitude\":8.2},{\"angle\":259.9,\"amplitude\":8.100000000000001},{\"angle\":260,\"amplitude\":8.100000000000001},{\"angle\":260.2,\"amplitude\":8},{\"angle\":260.3,\"amplitude\":7.9},{\"angle\":260.5,\"amplitude\":7.7},{\"angle\":260.6,\"amplitude\":7.6},{\"angle\":260.8,\"amplitude\":7.5},{\"angle\":261.1,\"amplitude\":7.3},{\"angle\":261.3,\"amplitude\":7.199999999999999},{\"angle\":261.7,\"amplitude\":7.1},{\"angle\":262,\"amplitude\":6.8999999999999995},{\"angle\":262.1,\"amplitude\":6.6000000000000005},{\"angle\":262.2,\"amplitude\":6.6000000000000005},{\"angle\":262.3,\"amplitude\":6.5},{\"angle\":262.5,\"amplitude\":6.4},{\"angle\":262.6,\"amplitude\":6.3},{\"angle\":262.7,\"amplitude\":6.2},{\"angle\":262.9,\"amplitude\":6.1},{\"angle\":263,\"amplitude\":6.1},{\"angle\":263.2,\"amplitude\":6},{\"angle\":263.4,\"amplitude\":5.8},{\"angle\":263.5,\"amplitude\":5.699999999999999},{\"angle\":263.8,\"amplitude\":5.5},{\"angle\":263.9,\"amplitude\":5.300000000000001},{\"angle\":264.1,\"amplitude\":5.2},{\"angle\":264.3,\"amplitude\":5.2},{\"angle\":264.5,\"amplitude\":4.8},{\"angle\":264.8,\"amplitude\":4.2},{\"angle\":265,\"amplitude\":4.2},{\"angle\":265.1,\"amplitude\":4.1},{\"angle\":265.7,\"amplitude\":4.1},{\"angle\":265.8,\"amplitude\":4},{\"angle\":266.6,\"amplitude\":3.9000000000000004},{\"angle\":266.8,\"amplitude\":3.8},{\"angle\":267.6,\"amplitude\":3.8},{\"angle\":268.1,\"amplitude\":3.7},{\"angle\":268.7,\"amplitude\":3.7},{\"angle\":268.9,\"amplitude\":3.5999999999999996},{\"angle\":269.2,\"amplitude\":3.5999999999999996},{\"angle\":269.8,\"amplitude\":3.5999999999999996},{\"angle\":270.1,\"amplitude\":3.5},{\"angle\":270.4,\"amplitude\":3.5},{\"angle\":271,\"amplitude\":3.4000000000000004},{\"angle\":271.3,\"amplitude\":3.4000000000000004},{\"angle\":271.7,\"amplitude\":3.4000000000000004},{\"angle\":272.3,\"amplitude\":3.4000000000000004},{\"angle\":272.6,\"amplitude\":3.4000000000000004},{\"angle\":273.6,\"amplitude\":3.4000000000000004},{\"angle\":273.9,\"amplitude\":3.4000000000000004},{\"angle\":274.8,\"amplitude\":3.4000000000000004},{\"angle\":275.1,\"amplitude\":3.4000000000000004},{\"angle\":275.5,\"amplitude\":3.4000000000000004},{\"angle\":276,\"amplitude\":3.4000000000000004},{\"angle\":276.3,\"amplitude\":3.4000000000000004},{\"angle\":276.5,\"amplitude\":3.5},{\"angle\":277.1,\"amplitude\":3.5},{\"angle\":277.3,\"amplitude\":3.5},{\"angle\":277.5,\"amplitude\":3.5999999999999996},{\"angle\":278,\"amplitude\":3.5999999999999996},{\"angle\":278.3,\"amplitude\":3.5999999999999996},{\"angle\":278.4,\"amplitude\":3.7},{\"angle\":279,\"amplitude\":3.7},{\"angle\":279.1,\"amplitude\":3.8},{\"angle\":279.3,\"amplitude\":3.8},{\"angle\":279.8,\"amplitude\":3.9000000000000004},{\"angle\":280,\"amplitude\":3.9000000000000004},{\"angle\":280.8,\"amplitude\":4},{\"angle\":280.9,\"amplitude\":4},{\"angle\":281.4,\"amplitude\":4.1},{\"angle\":281.5,\"amplitude\":4.2},{\"angle\":281.8,\"amplitude\":4.3},{\"angle\":281.9,\"amplitude\":4.3},{\"angle\":282.1,\"amplitude\":4.6000000000000005},{\"angle\":282.2,\"amplitude\":4.8},{\"angle\":282.4,\"amplitude\":5},{\"angle\":282.5,\"amplitude\":5.1},{\"angle\":282.6,\"amplitude\":5.2},{\"angle\":282.8,\"amplitude\":5.300000000000001},{\"angle\":282.9,\"amplitude\":5.300000000000001},{\"angle\":283.2,\"amplitude\":5.5},{\"angle\":283.3,\"amplitude\":5.5},{\"angle\":283.6,\"amplitude\":5.699999999999999},{\"angle\":283.7,\"amplitude\":5.699999999999999},{\"angle\":284.2,\"amplitude\":5.8},{\"angle\":284.5,\"amplitude\":5.8999999999999995},{\"angle\":284.6,\"amplitude\":5.8999999999999995},{\"angle\":284.7,\"amplitude\":5.8999999999999995},{\"angle\":285,\"amplitude\":6},{\"angle\":285.1,\"amplitude\":6.1},{\"angle\":285.3,\"amplitude\":6.1},{\"angle\":285.5,\"amplitude\":6.2},{\"angle\":285.8,\"amplitude\":6.2},{\"angle\":286,\"amplitude\":6.2},{\"angle\":286.1,\"amplitude\":6.2},{\"angle\":286.6,\"amplitude\":6.3},{\"angle\":286.7,\"amplitude\":6.3},{\"angle\":287.1,\"amplitude\":6.3},{\"angle\":287.2,\"amplitude\":6.3},{\"angle\":287.5,\"amplitude\":6.3},{\"angle\":287.7,\"amplitude\":6.3},{\"angle\":287.9,\"amplitude\":6.4},{\"angle\":288.3,\"amplitude\":6.4},{\"angle\":288.5,\"amplitude\":6.4},{\"angle\":289,\"amplitude\":6.4},{\"angle\":289.6,\"amplitude\":6.4},{\"angle\":290.4,\"amplitude\":6.4},{\"angle\":290.7,\"amplitude\":6.4},{\"angle\":291.2,\"amplitude\":6.4},{\"angle\":291.5,\"amplitude\":6.4},{\"angle\":291.7,\"amplitude\":6.4},{\"angle\":291.9,\"amplitude\":6.4},{\"angle\":292,\"amplitude\":6.4},{\"angle\":292.3,\"amplitude\":6.4},{\"angle\":292.5,\"amplitude\":6.4},{\"angle\":292.8,\"amplitude\":6.4},{\"angle\":293.2,\"amplitude\":6.4},{\"angle\":293.3,\"amplitude\":6.3},{\"angle\":293.5,\"amplitude\":6.3},{\"angle\":293.8,\"amplitude\":6.3},{\"angle\":294.5,\"amplitude\":6.3},{\"angle\":294.6,\"amplitude\":6.2},{\"angle\":294.8,\"amplitude\":6.2},{\"angle\":295.3,\"amplitude\":6.2},{\"angle\":295.5,\"amplitude\":6.2},{\"angle\":295.6,\"amplitude\":6.2},{\"angle\":295.7,\"amplitude\":6.2},{\"angle\":296,\"amplitude\":6.2},{\"angle\":296.2,\"amplitude\":6.2},{\"angle\":296.3,\"amplitude\":6.2},{\"angle\":296.8,\"amplitude\":6.2},{\"angle\":297.1,\"amplitude\":6.2},{\"angle\":297.7,\"amplitude\":6.2},{\"angle\":297.9,\"amplitude\":6.2},{\"angle\":298.4,\"amplitude\":6.2},{\"angle\":298.5,\"amplitude\":6.2},{\"angle\":299.2,\"amplitude\":6.2},{\"angle\":299.4,\"amplitude\":6.2},{\"angle\":300,\"amplitude\":6.2},{\"angle\":300.4,\"amplitude\":6.3},{\"angle\":300.7,\"amplitude\":6.3},{\"angle\":301.2,\"amplitude\":6.3},{\"angle\":301.7,\"amplitude\":6.3},{\"angle\":302.2,\"amplitude\":6.4},{\"angle\":303.1,\"amplitude\":6.4},{\"angle\":303.2,\"amplitude\":6.4},{\"angle\":303.6,\"amplitude\":6.4},{\"angle\":304,\"amplitude\":6.4},{\"angle\":304.4,\"amplitude\":6.4},{\"angle\":304.8,\"amplitude\":6.5},{\"angle\":305.4,\"amplitude\":6.5},{\"angle\":305.7,\"amplitude\":6.5},{\"angle\":306,\"amplitude\":6.5},{\"angle\":306.1,\"amplitude\":6.5},{\"angle\":306.3,\"amplitude\":6.5},{\"angle\":306.4,\"amplitude\":6.5},{\"angle\":306.7,\"amplitude\":6.6000000000000005},{\"angle\":307.2,\"amplitude\":6.6000000000000005},{\"angle\":307.3,\"amplitude\":6.6000000000000005},{\"angle\":307.8,\"amplitude\":6.7},{\"angle\":308.4,\"amplitude\":6.7},{\"angle\":309,\"amplitude\":6.7},{\"angle\":309.3,\"amplitude\":6.800000000000001},{\"angle\":309.6,\"amplitude\":6.800000000000001},{\"angle\":309.9,\"amplitude\":6.800000000000001},{\"angle\":310.3,\"amplitude\":6.800000000000001},{\"angle\":310.8,\"amplitude\":6.8999999999999995},{\"angle\":311,\"amplitude\":6.8999999999999995},{\"angle\":311.4,\"amplitude\":7},{\"angle\":311.5,\"amplitude\":7},{\"angle\":312,\"amplitude\":7},{\"angle\":312.3,\"amplitude\":7},{\"angle\":312.5,\"amplitude\":7},{\"angle\":312.7,\"amplitude\":7},{\"angle\":313.1,\"amplitude\":7.1},{\"angle\":313.4,\"amplitude\":7.1},{\"angle\":313.9,\"amplitude\":7.199999999999999},{\"angle\":314.3,\"amplitude\":7.199999999999999},{\"angle\":314.7,\"amplitude\":7.3},{\"angle\":315.5,\"amplitude\":7.4},{\"angle\":315.7,\"amplitude\":7.4},{\"angle\":315.9,\"amplitude\":7.4},{\"angle\":316.1,\"amplitude\":7.4},{\"angle\":316.5,\"amplitude\":7.5},{\"angle\":317,\"amplitude\":7.6},{\"angle\":317.5,\"amplitude\":7.6},{\"angle\":317.9,\"amplitude\":7.7},{\"angle\":318.3,\"amplitude\":7.800000000000001},{\"angle\":318.6,\"amplitude\":7.800000000000001},{\"angle\":318.9,\"amplitude\":7.800000000000001},{\"angle\":319,\"amplitude\":7.9},{\"angle\":319.3,\"amplitude\":7.9},{\"angle\":319.4,\"amplitude\":7.9},{\"angle\":319.7,\"amplitude\":8},{\"angle\":320,\"amplitude\":8},{\"angle\":320.3,\"amplitude\":8.100000000000001},{\"angle\":321.1,\"amplitude\":8.2},{\"angle\":321.3,\"amplitude\":8.2},{\"angle\":321.7,\"amplitude\":8.299999999999999},{\"angle\":321.8,\"amplitude\":8.299999999999999},{\"angle\":322.1,\"amplitude\":8.4},{\"angle\":322.3,\"amplitude\":8.4},{\"angle\":323,\"amplitude\":8.5},{\"angle\":323.6,\"amplitude\":8.7},{\"angle\":323.9,\"amplitude\":8.7},{\"angle\":324.3,\"amplitude\":8.8},{\"angle\":324.4,\"amplitude\":8.8},{\"angle\":324.6,\"amplitude\":8.8},{\"angle\":324.7,\"amplitude\":8.8},{\"angle\":324.8,\"amplitude\":8.8},{\"angle\":324.9,\"amplitude\":8.8},{\"angle\":325,\"amplitude\":8.8},{\"angle\":325.2,\"amplitude\":8.8},{\"angle\":325.3,\"amplitude\":8.8},{\"angle\":325.6,\"amplitude\":8.9},{\"angle\":325.7,\"amplitude\":8.9},{\"angle\":325.9,\"amplitude\":8.9},{\"angle\":326.1,\"amplitude\":8.9},{\"angle\":326.3,\"amplitude\":8.9},{\"angle\":326.4,\"amplitude\":8.9},{\"angle\":326.5,\"amplitude\":9},{\"angle\":326.7,\"amplitude\":9},{\"angle\":326.9,\"amplitude\":9},{\"angle\":327.1,\"amplitude\":9},{\"angle\":327.2,\"amplitude\":9},{\"angle\":327.4,\"amplitude\":9},{\"angle\":327.5,\"amplitude\":9},{\"angle\":327.8,\"amplitude\":9},{\"angle\":328.1,\"amplitude\":9.1},{\"angle\":328.2,\"amplitude\":9.1},{\"angle\":328.6,\"amplitude\":9.1},{\"angle\":328.7,\"amplitude\":9.1},{\"angle\":328.9,\"amplitude\":9.1},{\"angle\":329.1,\"amplitude\":9.1},{\"angle\":329.3,\"amplitude\":9.1},{\"angle\":329.4,\"amplitude\":9.1},{\"angle\":329.5,\"amplitude\":9.1},{\"angle\":329.7,\"amplitude\":9.1},{\"angle\":329.8,\"amplitude\":9.1},{\"angle\":330,\"amplitude\":9.1},{\"angle\":330.3,\"amplitude\":9.1},{\"angle\":330.5,\"amplitude\":9.1},{\"angle\":330.8,\"amplitude\":9.1},{\"angle\":330.9,\"amplitude\":9.1},{\"angle\":331.2,\"amplitude\":9},{\"angle\":331.3,\"amplitude\":9},{\"angle\":331.4,\"amplitude\":9},{\"angle\":331.6,\"amplitude\":9},{\"angle\":331.7,\"amplitude\":9},{\"angle\":331.8,\"amplitude\":9},{\"angle\":332.1,\"amplitude\":9},{\"angle\":332.2,\"amplitude\":9},{\"angle\":332.5,\"amplitude\":8.9},{\"angle\":332.6,\"amplitude\":8.9},{\"angle\":332.9,\"amplitude\":8.9},{\"angle\":333,\"amplitude\":8.9},{\"angle\":333.4,\"amplitude\":8.9},{\"angle\":333.5,\"amplitude\":8.9},{\"angle\":333.8,\"amplitude\":8.8},{\"angle\":333.9,\"amplitude\":8.8},{\"angle\":334.2,\"amplitude\":8.8},{\"angle\":334.3,\"amplitude\":8.8},{\"angle\":334.7,\"amplitude\":8.8},{\"angle\":334.9,\"amplitude\":8.7},{\"angle\":335.2,\"amplitude\":8.7},{\"angle\":335.6,\"amplitude\":8.7},{\"angle\":335.8,\"amplitude\":8.7},{\"angle\":335.9,\"amplitude\":8.6},{\"angle\":336.2,\"amplitude\":8.6},{\"angle\":336.4,\"amplitude\":8.6},{\"angle\":336.6,\"amplitude\":8.6},{\"angle\":337,\"amplitude\":8.5},{\"angle\":337.3,\"amplitude\":8.5},{\"angle\":337.5,\"amplitude\":8.4},{\"angle\":337.6,\"amplitude\":8.4},{\"angle\":337.8,\"amplitude\":8.4},{\"angle\":337.9,\"amplitude\":8.4},{\"angle\":338.2,\"amplitude\":8.4},{\"angle\":338.5,\"amplitude\":8.299999999999999},{\"angle\":338.6,\"amplitude\":8.299999999999999},{\"angle\":339,\"amplitude\":8.2},{\"angle\":339.4,\"amplitude\":8.2},{\"angle\":339.8,\"amplitude\":8.100000000000001},{\"angle\":340,\"amplitude\":8.100000000000001},{\"angle\":340.1,\"amplitude\":8.100000000000001},{\"angle\":340.2,\"amplitude\":8},{\"angle\":340.6,\"amplitude\":8},{\"angle\":341.1,\"amplitude\":8},{\"angle\":341.3,\"amplitude\":8},{\"angle\":341.6,\"amplitude\":7.9},{\"angle\":341.9,\"amplitude\":7.9},{\"angle\":342.5,\"amplitude\":7.9},{\"angle\":342.6,\"amplitude\":7.800000000000001},{\"angle\":342.7,\"amplitude\":7.800000000000001},{\"angle\":343.1,\"amplitude\":7.800000000000001},{\"angle\":343.5,\"amplitude\":7.800000000000001},{\"angle\":343.8,\"amplitude\":7.800000000000001},{\"angle\":344,\"amplitude\":7.800000000000001},{\"angle\":344.1,\"amplitude\":7.800000000000001},{\"angle\":344.5,\"amplitude\":7.800000000000001},{\"angle\":344.7,\"amplitude\":7.800000000000001},{\"angle\":344.8,\"amplitude\":7.800000000000001},{\"angle\":345.3,\"amplitude\":7.7},{\"angle\":345.7,\"amplitude\":7.7},{\"angle\":346.1,\"amplitude\":7.7},{\"angle\":346.2,\"amplitude\":7.7},{\"angle\":346.3,\"amplitude\":7.7},{\"angle\":346.4,\"amplitude\":7.7},{\"angle\":346.8,\"amplitude\":7.800000000000001},{\"angle\":346.9,\"amplitude\":7.800000000000001},{\"angle\":347.1,\"amplitude\":7.800000000000001},{\"angle\":347.4,\"amplitude\":7.800000000000001},{\"angle\":347.5,\"amplitude\":7.800000000000001},{\"angle\":348,\"amplitude\":7.800000000000001},{\"angle\":348.1,\"amplitude\":7.800000000000001},{\"angle\":348.6,\"amplitude\":7.9},{\"angle\":348.8,\"amplitude\":7.9},{\"angle\":349.2,\"amplitude\":7.9},{\"angle\":349.6,\"amplitude\":8},{\"angle\":349.9,\"amplitude\":8},{\"angle\":350.2,\"amplitude\":8.100000000000001},{\"angle\":350.6,\"amplitude\":8.100000000000001},{\"angle\":350.7,\"amplitude\":8.100000000000001},{\"angle\":350.8,\"amplitude\":8.2},{\"angle\":351.2,\"amplitude\":8.2},{\"angle\":351.3,\"amplitude\":8.299999999999999},{\"angle\":351.4,\"amplitude\":8.299999999999999},{\"angle\":351.5,\"amplitude\":8.299999999999999},{\"angle\":351.6,\"amplitude\":8.4},{\"angle\":351.9,\"amplitude\":8.4},{\"angle\":352.1,\"amplitude\":8.5},{\"angle\":352.3,\"amplitude\":8.5},{\"angle\":352.6,\"amplitude\":8.6},{\"angle\":352.7,\"amplitude\":8.6},{\"angle\":352.8,\"amplitude\":8.7},{\"angle\":353.2,\"amplitude\":8.7},{\"angle\":353.3,\"amplitude\":8.7},{\"angle\":353.4,\"amplitude\":8.8},{\"angle\":353.5,\"amplitude\":8.8},{\"angle\":353.7,\"amplitude\":8.8},{\"angle\":353.9,\"amplitude\":8.9},{\"angle\":354,\"amplitude\":8.9},{\"angle\":354.3,\"amplitude\":8.9},{\"angle\":354.6,\"amplitude\":9},{\"angle\":354.9,\"amplitude\":9},{\"angle\":355.1,\"amplitude\":9.1},{\"angle\":355.3,\"amplitude\":9.1},{\"angle\":355.5,\"amplitude\":9.1},{\"angle\":355.6,\"amplitude\":9.200000000000001},{\"angle\":355.8,\"amplitude\":9.200000000000001},{\"angle\":356,\"amplitude\":9.200000000000001},{\"angle\":356.1,\"amplitude\":9.200000000000001},{\"angle\":356.3,\"amplitude\":9.200000000000001},{\"angle\":356.5,\"amplitude\":9.3},{\"angle\":356.6,\"amplitude\":9.3},{\"angle\":356.8,\"amplitude\":9.3},{\"angle\":356.9,\"amplitude\":9.399999999999999},{\"angle\":357.1,\"amplitude\":9.399999999999999},{\"angle\":357.3,\"amplitude\":9.399999999999999},{\"angle\":357.4,\"amplitude\":9.399999999999999},{\"angle\":357.8,\"amplitude\":9.399999999999999},{\"angle\":357.9,\"amplitude\":9.399999999999999},{\"angle\":358,\"amplitude\":9.5},{\"angle\":358.2,\"amplitude\":9.5},{\"angle\":358.3,\"amplitude\":9.5},{\"angle\":358.4,\"amplitude\":9.5},{\"angle\":358.7,\"amplitude\":9.6},{\"angle\":358.8,\"amplitude\":9.6},{\"angle\":358.9,\"amplitude\":9.6},{\"angle\":359.1,\"amplitude\":9.6}]\n \n },\n])\n","url":null,"readme":"This example showcases a simple Polar Chart with two Area Series.\n\n# PolarAreaSeries\n\n*PolarAreaSeries* connects a list of *PolarPoints* with a stroke, and fills the enclosed area. \n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\n## Automatic closing of data points\n\nBy enabling automatic closing of data points\n```typescript\nPolarAreaSeries.setConnectDataAutomaticallyEnabled(true)\n```\nyou can ensure that the highlighted area will be closed. In this picture there were only data points supplied for angles [0, 270], from there on, the data was automatically closed with a linear interpolation.\n\n","image":"polarEMFieldStrength.png"},{"id":"lcjs-example-1100-mapChart","title":"Map Chart","tags":["map"],"description":"Simple overview of the Map Chart feature","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance charts with maps, interactive map charts, charting library with maps, dynamic coloring maps, several map types.","src":"/*\n * LightningChart JS example that showcases Map Chart feature.\n *\n * Next examples cover extended configuration, API usage and real life scenarios.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst { lightningChart, MapTypes, Themes } =\n lcjs;\n\nconst mapChart = lightningChart().Map({\n // theme: Themes.darkGold\n type: MapTypes.World,\n});\n","url":null,"readme":"Very simple overview of MapChart feature.\n\nA `MapChart` is created by selecting one of the 9 available _Map types_:\n\n- `MapTypes.World`\n- `MapTypes.Europe`\n- `MapTypes.Africa`\n- `MapTypes.Asia`\n- `MapTypes.NorthAmerica`\n- `MapTypes.SouthAmerica`\n- `MapTypes.Australia`\n- `MapTypes.USA`\n- `MapTypes.Canada`\n\nThis example showcases `MapTypes.World`, but you can try the other ones by simply editing this one part in the live editor:\n\n```js\nconst mapChart = lightningChart().Map({\n type: MapTypes.World, // <--- Select MapType HERE\n});\n```\n\n**More map examples**:\n\n- [Data visualization over LightningChart JS Map Charts](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1103-mapChartVizXY.html)\n- [Data visualization over Google Maps](https://blog.arction.com/easy-geospatial-data-visualization-with-lightningchart-js-and-google)\n- [LightningChart JS Map Charts with Drill-down](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1111-covidDrillDownDashboard.html)\n- [Data visualization over static map picture](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1110-geoChartUsaTemperature.html)\n","image":"mapChart.png"},{"id":"lcjs-example-1101-mapChartDynamicColor","title":"Map Chart Dynamic Coloring","tags":["map","palette"],"description":"Example of using MapChart with real data set and dynamic region coloring","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance charts with maps, interactive map charts, charting library with maps, dynamic coloring maps, several map types.","src":"/*\n * LightningChart JS that showcases MapChart with dynamic region coloring\n * based on an external data set (country population).\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n MapTypes,\n PalettedFill,\n LUT,\n ColorRGBA,\n formatLongitudeLatitude,\n Themes\n} = lcjs;\n\nconst mapChart = lightningChart().Map({\n // theme: Themes.darkGold\n type: MapTypes.Europe,\n});\n\nmapChart\n .setTitle(\"Population by country (2018)\")\n .setFillStyle(\n new PalettedFill({\n lut: new LUT({\n steps: [\n {\n value: 1 * 1000 * 1000,\n color: ColorRGBA(0, 255, 0),\n label: \"1 Million\",\n },\n { value: 10 * 1000 * 1000, color: ColorRGBA(127, 127, 0), label: \"\" },\n { value: 50 * 1000 * 1000, color: ColorRGBA(255, 127, 0), label: \"\" },\n {\n value: 500 * 1000 * 1000,\n color: ColorRGBA(255, 0, 0),\n label: \"500 Million\",\n },\n ],\n interpolate: true,\n // This property is used to specify fallback color for regions which have no data.\n color: ColorRGBA(255, 255, 255),\n }),\n })\n )\n .setCursorResultTableFormatter(\n (builder, region, value, longitude, latitude) => {\n builder\n .addRow(region.name)\n .addRow(formatLongitudeLatitude(longitude, latitude));\n if (value) {\n builder.addRow(\n `Population: `,\n \"\",\n `${(value / (1000 * 1000)).toFixed(1)} million`\n );\n } else {\n builder.addRow(`No population data available`);\n }\n return builder;\n }\n );\n\n// Add Legend to show color look-up range.\nmapChart.addLegendBox()\n // Dispose example UI elements automatically if they take too much space. This is to avoid bad UI on mobile / etc. devices.\n .setAutoDispose({\n type: 'max-width',\n maxWidth: 0.30,\n })\n .add(mapChart)\n\n// Load population data.\nfetch(\n document.head.baseURI +\n \"examples/assets/1101/population_eu_2018.json\"\n)\n .then((r) => r.json())\n .then((populationData) => {\n // Data is Europe countries population in year 2018.\n // Format is:\n // Array<{ \"Country Code\": string, \"Value\": number }>\n\n // Map data to format expected by Europe MapChart.\n const regionValuesData = populationData.map((item) => ({\n ISO_A3: item[\"Country Code\"],\n value: item[\"Value\"],\n }));\n mapChart.invalidateRegionValues(regionValuesData);\n });\n","url":null,"readme":"Example on using `MapChart` with real data set for coloring map regions dynamically.\n\nThe data set is downloaded with `fetch` when the application is started.\nIt contains population for each country around European area in the year 2018.\n\n```js\n[\n { \"Country Code\": \"ALB\", Value: 2866376 },\n { \"Country Code\": \"AUT\", Value: 8840521 },\n { \"Country Code\": \"BLR\", Value: 9483499 },\n];\n```\n\nThe application translates this format to one expected by `MapChart`:\n\n```js\nconst regionValuesData = populationData.map((item) => ({\n ISO_A3: item[\"Country Code\"],\n value: item[\"Value\"],\n}));\n```\n\n```js\n[\n { ISO_A3: \"ALB\", value: 2866376 },\n { ISO_A3: \"AUT\", value: 8840521 },\n { ISO_A3: \"BLR\", value: 9483499 },\n];\n```\n\nFinally, the data is supplied to `MapChart` using the `invalidateRegionValues` method:\n\n```js\nmapChart.invalidateRegionValues(regionValuesData);\n```\n\n`MapChart` can utilize the region values data in two ways:\n\n1. Dynamic region coloring based on color look-up table.\n2. Auto Cursor formatting.\n\n### Dynamic region coloring\n\nDynamic coloring is enabled by setting the regions _fill style_ to a `PalettedFill`:\n\n```js\nmapChart.setFillStyle(\n new PalettedFill({\n lut: new LUT({\n steps: [\n {\n value: 1 * 1000 * 1000,\n color: ColorRGBA(0, 255, 0),\n label: \"1 Million\",\n },\n { value: 10 * 1000 * 1000, color: ColorRGBA(127, 127, 0), label: \"\" },\n { value: 50 * 1000 * 1000, color: ColorRGBA(255, 127, 0), label: \"\" },\n {\n value: 500 * 1000 * 1000,\n color: ColorRGBA(255, 0, 0),\n label: \"500 Million\",\n },\n ],\n interpolate: true,\n // This property is used to specify fallback color for regions which have no data.\n color: ColorRGBA(255, 255, 255),\n }),\n })\n);\n```\n\n### Auto cursor formatting\n\n`MapChart` cursor formatting is configured with `setCursorResultTableFormatter` method:\n\n```js\nmapChart.setCursorResultTableFormatter(\n (builder, region, value, longitude, latitude) => {\n builder.addRow(region.name);\n\n // Region value is supplied to the formatter function. Note, that it is `undefined` for regions which were not invalidated by the user.\n if (value) {\n builder.addRow(\n `Population: `,\n \"\",\n `${(value / (1000 * 1000)).toFixed(1)} million`\n );\n } else {\n builder.addRow(`No population data available`);\n }\n return builder;\n }\n);\n```\n\n**More map examples**:\n\n- [Data visualization over LightningChart JS Map Charts](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1103-mapChartVizXY.html)\n- [Data visualization over Google Maps](https://blog.arction.com/easy-geospatial-data-visualization-with-lightningchart-js-and-google)\n- [LightningChart JS Map Charts with Drill-down](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1111-covidDrillDownDashboard.html)\n- [Data visualization over static map picture](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1110-geoChartUsaTemperature.html)","image":"mapChartDynamicColor.png"},{"id":"lcjs-example-1102-mapChartTimeline","title":"JavaScript Real-time Map Dashboard","tags":["map","realtime","dashboard","ui","html","palette"],"description":"Example on using MapChart with animated real-time data set","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance charts with maps, interactive map charts, charting library with maps, dynamic coloring maps, several map types.","src":"/*\n * LightningChart JS Example on using `MapChart` with real-time animated data set and dynamic region coloring.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\n// Extract required parts from LightningChartJS.\nconst {\n lightningChart,\n MapTypes,\n PalettedFill,\n LUT,\n ColorRGBA,\n emptyFill,\n emptyLine,\n UIOrigins,\n LegendBoxBuilders,\n UIElementBuilders,\n UILayoutBuilders,\n Themes,\n} = lcjs;\n\n// Specify color look up table for coloring countries. Color depends on % of population change\nconst palette = new PalettedFill({\n lut: new LUT({\n steps: [\n {\n value: -5,\n color: ColorRGBA(0, 0, 100),\n label: \"-5%\",\n },\n {\n value: -2.5,\n color: ColorRGBA(0, 0, 255),\n label: \"-2.5%\",\n },\n {\n value: 0,\n color: ColorRGBA(200, 200, 200),\n label: \"0%\",\n },\n {\n value: 2.5,\n color: ColorRGBA(255, 0, 0),\n label: \"+2.5%\",\n },\n {\n value: 5,\n color: ColorRGBA(100, 0, 0),\n label: \"+5%\",\n },\n ],\n interpolate: true,\n // This property is used to specify fallback color for regions which have no data.\n color: ColorRGBA(255, 255, 255),\n }),\n});\n\n// Create Dashboard and Charts.\nconst dashboard = lightningChart().Dashboard({\n // theme: Themes.darkGold\n numberOfColumns: 3,\n numberOfRows: 2,\n});\n\n// Specify cursor result table formatter for all map charts.\nconst cursorResultTableFormatter = (\n builder,\n region,\n value,\n longitude,\n latitude\n) => {\n builder\n .addRow(\"\", region.name, \"\")\n .addRow(\"\", `Population change ${currentYear}`, \"\");\n if (value) {\n builder.addRow(\"\", `${value > 0 ? \"+\" : \"\"}${value.toFixed(2)} %`, \"\");\n }\n return builder;\n};\n\n// North America region\nconst chartNA = dashboard\n .createMapChart({\n type: MapTypes.NorthAmerica,\n columnIndex: 0,\n rowIndex: 0,\n columnSpan: 1,\n })\n .setTitle(\"North America\")\n .setFillStyle(palette)\n .setCursorResultTableFormatter(cursorResultTableFormatter);\n\n// South America region\nconst chartSA = dashboard\n .createMapChart({\n type: MapTypes.SouthAmerica,\n columnIndex: 1,\n rowIndex: 0,\n columnSpan: 1,\n })\n .setTitle(\"South America\")\n .setFillStyle(palette)\n .setCursorResultTableFormatter(cursorResultTableFormatter);\n\n// Europe region\nconst chartEurope = dashboard\n .createMapChart({\n type: MapTypes.Europe,\n columnIndex: 0,\n rowIndex: 1,\n columnSpan: 3,\n rowSpan: 1\n })\n .setTitle(\"Europe\")\n .setFillStyle(palette)\n .setCursorResultTableFormatter(cursorResultTableFormatter);\n\n// Create UI panel inside Dashboard for placing legend and some extra controls.\nconst panel = dashboard.createUIPanel({\n columnIndex: 2,\n rowIndex: 0,\n columnSpan: 1,\n rowSpan: 1\n});\n\npanel.onResize((chart, width, height, engineWidth, engineHeight) => {\n block.style.width = width + 'px'\n block.style.left = engineWidth - width + 'px'\n})\nchartEurope.onResize((chart, width, height, engineWidth, engineHeight) => {\n block.style.top = (engineHeight - height ) - 82 +'px'\n})\n\n// NOTE: Custom Legend Box is created with UI elements.\nconst legendLayout = panel\n .addUIElement(UILayoutBuilders.Column)\n .setPosition({\n x: 0,\n y: 20,\n })\n .setOrigin(UIOrigins.LeftBottom)\n .setMargin(6)\n .setMouseInteractions(false)\n .setBackground(bg => bg\n .setFillStyle(emptyFill)\n .setStrokeStyle(emptyLine)\n )\n\nconst legendTitle = legendLayout\n .addElement(UIElementBuilders.TextBox)\n .setText(\"Population change (% / year)\")\n\nconst legendBuilder = LegendBoxBuilders.HorizontalLegendBox.addStyler(\n (legendBox) =>\n legendBox\n .setBackground((background) =>\n background.setFillStyle(emptyFill).setStrokeStyle(emptyLine)\n )\n .setTitle(\"\")\n);\n\nconst legendNA = legendLayout.addElement(legendBuilder).add(chartNA);\nconst legendSA = legendLayout.addElement(legendBuilder).add(chartSA);\nconst legendEurope = legendLayout.addElement(legendBuilder).add(chartEurope);\n\n// Add dynamically injected HTML elements for active Year slider.\nconst yearDiv = document.createElement(\"div\");\nyearDiv.id = \"block\";\nconst yearSlider = document.createElement(\"input\");\nyearSlider.type = \"range\";\nyearSlider.min = 1961;\nyearSlider.max = 2018;\nyearSlider.value = yearSlider.min;\nyearSlider.id = \"slider\";\nconst yearMarker = document.createElement(\"span\");\nyearMarker.id = \"marker\";\nyearDiv.appendChild(yearMarker);\nyearDiv.appendChild(yearSlider);\ndashboard.engine.container.append(yearDiv);\n\nconst markerColorGreen = \"rgb(0, 0, 200, 0.6)\";\nconst markerColorDarkGreen = \"rgb(0, 0, 150)\";\nconst markerColorRed = \"rgb(200, 0, 0)\";\nconst markerColorDarkRed = \"rgb(150, 0, 0)\";\n\n// Keep track of animation properties.\nlet currentYear = yearSlider.min;\nlet yearAnimationActive = true;\nlet interval;\n\n// Fetch data set used in example.\nfetch(\n document.head.baseURI +\n \"examples/assets/1102/population60-21.json\"\n)\n .then((r) => r.json())\n .then((populationData) => {\n // stop timeline, change the year and change bg color of slider by clicking on slider\n yearSlider.oninput = () => {\n currentYear = yearSlider.value;\n clearInterval(interval);\n yearAnimationActive = false;\n yearMarker.style.background = markerColorRed;\n setMap(populationData, currentYear);\n const value =\n ((yearSlider.value - yearSlider.min) * 100) /\n (yearSlider.max - yearSlider.min);\n yearSlider.style.background =\n \"linear-gradient(to right, rgba(0,0,255,.6)\" +\n value +\n \"%, #fff \" +\n value +\n \"%, white 100%)\";\n };\n\n // change the color of the marker on hover\n yearMarker.onmouseover = () => {\n if (yearAnimationActive) {\n yearMarker.style.background = markerColorDarkRed;\n } else {\n yearMarker.style.background = markerColorDarkGreen;\n }\n };\n\n // reset the color of the marker on mouse out\n yearMarker.onmouseout = () => {\n if (yearAnimationActive) {\n yearMarker.style.background = markerColorGreen;\n } else {\n yearMarker.style.background = markerColorRed;\n }\n };\n\n // pause/start timeline by clicking the marker\n yearMarker.onclick = () => {\n if (yearAnimationActive) {\n clearInterval(interval);\n yearAnimationActive = false;\n yearMarker.style.background = markerColorRed;\n } else {\n intervalHandler();\n yearAnimationActive = true;\n yearMarker.style.background = markerColorGreen;\n }\n };\n\n // set timeline\n const intervalHandler = () => {\n // subscribe var. 'interval' to 'setInterval'\n interval = setInterval(() => {\n // Map data to format expected by MapChart.\n setMap(populationData, currentYear);\n // if timeline is over wait for 2sec and start it again\n if (currentYear >= 2019 && yearAnimationActive) {\n setTimeout(() => {\n currentYear = yearSlider.min;\n }, 1800);\n } else {\n yearSlider.value = currentYear;\n // change BG of slider\n const value =\n ((yearSlider.value - yearSlider.min) * 100) /\n (yearSlider.max - yearSlider.min);\n yearSlider.style.background =\n \"linear-gradient(to right, rgba(0,0,255,.6)\" +\n value +\n \"%, #fff \" +\n value +\n \"%, white 100%)\";\n currentYear++;\n }\n }, 200);\n };\n\n intervalHandler();\n\n const setMap = (populationData, year) => {\n // set year for marker\n yearMarker.textContent = year;\n\n // calculate population change from previous year and put into map chart data format.\n const regionValuesData = populationData.map((item) => ({\n ISO_A3: item[\"Country Code\"],\n value: ((item[year] - item[year - 1]) * 100) / item[year],\n }));\n\n // update map chart region values\n chartEurope.invalidateRegionValues(regionValuesData);\n chartSA.invalidateRegionValues(regionValuesData);\n chartNA.invalidateRegionValues(regionValuesData);\n };\n });\n\n// Dynamically inject some CSS to example.\nfunction addStyle(styleString) {\n const style = document.createElement(\"style\");\n style.textContent = styleString;\n document.head.append(style);\n}\n\naddStyle(`\n\n * {\n box-sizing: border-box;\n }\n \n #block{\n width: 33%;\n height: 60px;\n top: calc(40% - 13px);\n right: -2px;\n position: absolute;\n display: flex;\n justify-content: space-evenly;\n padding: 30px 10px;\n z-index: 1;\n box-sizing: border-box\n }\n\n #slider{\n -webkit-appearance: none;\n margin: 0;\n padding: 0;\n width: 75%;\n height: 5px;\n position: relative;\n cursor: pointer;\n border-radius: 10px;\n border: solid 1px; \n background: linear-gradient(to right, #fff 0%, white 100%)\n }\n \n #slider::-webkit-slider-thumb{\n -webkit-appearance: none;\n height: 20px;\n width: 20px;\n padding: 0;\n background-color: lightgray;\n cursor: pointer;\n border-radius: 50%;\n border: solid 1px gray\n }\n\n #marker {\n background: rgb(0, 0, 200, 0.6);\n color: white;\n height: 30px;\n width: 50px;\n top: -13px;\n position: relative;\n border-radius: 4px;\n text-align:center; \n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n #marker::after {\n content: \"\";\n text-align: center;\n position: absolute;\n left: 100%;\n border-bottom: 5px solid transparent;\n border-top: 5px solid transparent;\n border-left: 5px solid lightgray;\n }\n\n #marker:active {\n transform: scale(0.9);\n }\n\n `);\n","url":null,"readme":"Example on using `MapChart` with real-time animated data set and dynamic region coloring.\n\nThe data set is downloaded with `fetch` when the application is started.\nIt contains population for each country in Europe, North and South America in the year range between 1961-2019.\n\nThe dashboard contains 3 charts (for each region) and 1 cell with UI panel.\nThe UI panel contains interactive slider that can set a data period and year marker that can pause and start animation.\n\nEvery time the active year is changed, map regions data is quickly invalidated in real-time with the 'invalidateRegionValues' method\n\n```js\n// Code snippet setting region values for all 3 map charts.\nlet year = 2005;\n\nconst regionValuesData = populationData.map((item) => ({\n ISO_A3: item[\"Country Code\"],\n value: item[year],\n}));\n\nchartEurope.invalidateRegionValues(regionValuesData);\nchartSA.invalidateRegionValues(regionValuesData);\nchartNA.invalidateRegionValues(regionValuesData);\n```\n\n**More map examples**:\n\n- [Data visualization over LightningChart JS Map Charts](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1103-mapChartVizXY.html)\n- [Data visualization over Google Maps](https://blog.arction.com/easy-geospatial-data-visualization-with-lightningchart-js-and-google)\n- [LightningChart JS Map Charts with Drill-down](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1111-covidDrillDownDashboard.html)\n- [Data visualization over static map picture](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1110-geoChartUsaTemperature.html)","image":"mapChartTimeline.png"},{"id":"lcjs-example-1103-mapChartVizXY","title":"JavaScript Animated CoVID Vaccination Coverage Chart","tags":["xy","map","map","palette"],"description":"Animated map chart that visualizes the progression of first round of CoVID-19 vaccination coverage per country","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance charts with maps, interactive map charts, charting library with maps, dynamic coloring maps, several map types.","src":"/*\n * LightningChart JS Example on ChartXY with Custom Color Theme.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\nconst {\n lightningChart,\n AxisTickStrategies,\n ColorRGBA,\n PointShape,\n PalettedFill,\n LUT,\n UIElementBuilders,\n emptyFill,\n emptyLine,\n UIOrigins,\n MapTypes,\n transparentFill,\n Themes,\n} = lcjs;\n\n// Custom methods for date\nDate.prototype.formatDate = function () {\n return this.toISOString().split(\"T\")[0];\n};\n\nDate.prototype.addDays = function (days) {\n const date = new Date(this.valueOf());\n const newDay = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + days\n ).formatDate();\n return newDay;\n};\n\nconst domContainer = document.getElementById('chart-container') || document.body\n\n// Add div for MapChart\nconst divMap = document.createElement(\"div\");\ndomContainer.append(divMap);\n\n// Add div for ChartXY\nconst divOverlay = document.createElement(\"div\");\ndomContainer.append(divOverlay);\n\n// Adding slider\nlet animationActive = true;\n\n// Add slider div\nconst yearDiv = document.createElement(\"div\");\nconst yearSlider = document.createElement(\"input\");\nconst yearMarker = document.createElement(\"span\");\nyearDiv.appendChild(yearMarker);\nyearDiv.appendChild(yearSlider);\n\n// Palette fot coloring data by value\nconst palette = new PalettedFill({\n lut: new LUT({\n steps: [{\n value: 0,\n color: ColorRGBA(255, 0, 0, 0),\n label: \"0%\",\n },\n {\n value: 1,\n color: ColorRGBA(255, 0, 0),\n label: \"0%\",\n },\n {\n value: 20,\n color: ColorRGBA(150, 0, 0),\n label: \"20%\",\n },\n {\n value: 40,\n color: ColorRGBA(50, 0, 0, 80),\n label: \"40%\",\n },\n {\n value: 60,\n color: ColorRGBA(0, 0, 200, 45),\n label: \"60%\",\n },\n {\n value: 80,\n color: ColorRGBA(0, 200, 0, 50),\n label: \"80%\",\n },\n {\n value: 100,\n color: ColorRGBA(0, 255, 0, 40),\n label: \"100%\",\n },\n ],\n // This property is used to specify fallback color for regions which have no data.\n color: ColorRGBA(255, 255, 255),\n }),\n});\n\n// Yesterday's day in real time\nlet yesterday = new Date('January 10, 2022').formatDate();\n\nconst mapChart = lightningChart()\n .Map({\n // theme: Themes.darkGold\n type: MapTypes.World,\n container: divMap,\n })\n .setTitle(\"\")\n .setPadding({\n top: 30,\n bottom: 0,\n right: 0,\n left: 0\n });\n\n// Create chart with customized settings\nconst chart = lightningChart()\n .ChartXY({\n // theme: Themes.darkGold\n container: divOverlay,\n })\n .setMouseInteractions(false)\n .setTitle(\"Loading example data ...\")\n .setBackgroundFillStyle(transparentFill)\n .setSeriesBackgroundFillStyle(transparentFill);\nchart.engine.setBackgroundFillStyle(transparentFill);\n\n// Hide axes\nchart\n .getDefaultAxes()\n .forEach((axis) =>\n axis.setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine)\n );\n\n// Synchronize ChartXY with MapChart view.\nmapChart.onViewChange((view) => {\n const { latitudeRange, longitudeRange, margin } = view;\n\n chart\n .getDefaultAxisX()\n .setInterval(longitudeRange.start, longitudeRange.end, false, true);\n chart\n .getDefaultAxisY()\n .setInterval(latitudeRange.start, latitudeRange.end, false, true);\n\n chart.setPadding(0);\n});\n\n// Add legendBox\nconst legend = chart.addLegendBox();\n\n// Create TextBox of 'average of vaccinated %'\nconst textBox = chart\n .addUIElement(UIElementBuilders.TextBox)\n .setOrigin(UIOrigins.LeftTop)\n .setPosition({\n x: 0,\n y: 100,\n })\n .setMargin(10)\n .setText(\"\")\n .setTextFont((fontSettings) => fontSettings.setSize(15))\n .setBackground((background) =>\n background.setFillStyle(emptyFill).setStrokeStyle(emptyLine)\n );\n\n// Add PointSeries\nconst covidVaccinated = chart\n .addPointSeries({\n pointShape: PointShape.Circle,\n })\n .setMouseInteractions(false)\n .setName(\"Vaccination coverage\")\n .setIndividualPointSizeEnabled(true)\n .setIndividualPointValueEnabled(true)\n .setPointFillStyle(palette)\n .setCursorResultTableFormatter((builder, series, x, y, dataPoint) =>\n builder.addRow('')\n .addRow(dataPoint.country)\n .addRow(`Vaccinated once:`)\n .addRow(`${dataPoint.value.toFixed(2)}% of population`)\n );\n\n// Fetch the data\nfetch(document.head.baseURI + `examples/assets/1103/data.json`)\n .then(r => r.json())\n .then((data) => {\n\n // Add data to the Point Series\n data.countries.forEach((el, i) => {\n covidVaccinated.add({\n x: el.pos[1],\n y: el.pos[0],\n value: 0,\n size: 0,\n country: el.name,\n }); \n });\n\n // Set legendBox\n legend.add(covidVaccinated);\n\n // Start TimeInterval\n startBubbling(covidVaccinated, data);\n\n // If slider was moved then stop animation and set\n yearSlider.oninput = () => {\n stopSlider()\n //start 'Bubbling' to animate poins during slider dragging\n startBubbling(covidVaccinated, data);\n };\n\n // Start/Stop animation by click on marker\n yearMarker.onclick = () => {\n if (animationActive) {\n stopSlider()\n } else {\n animationActive = true;\n yearMarker.textContent = \"Started\";\n yearMarker.style.background = markerColorGreen;\n if( yearSlider.value == yearSlider.max) yearSlider.value = 0\n startBubbling(covidVaccinated, data);\n }\n };\n })\n .catch((error) => {\n console.log(error);\n });\n\nfunction startBubbling(bubbles, data) {\n // The current day in the loop\n const date = new Date(2021, 0, yearSlider.value);\n let day = date.formatDate();\n\n // Clear data of the Series\n bubbles.clear();\n let total = 0;\n // Add new data\n const dataAtDate = data.samples.find(item => item.date === day)\n dataAtDate.values.forEach((vacc100, i) => {\n total = total + vacc100;\n const country = data.countries[i]\n changeData(country, bubbles, vacc100);\n });\n\n // Set title as current day\n chart.setTitle(date.toLocaleDateString(\"FIN\"));\n\n // Set textBox\n textBox.setText(\n `Population who received at least one vaccine ${(\n total / dataAtDate.values.length\n ).toFixed(2)}%`\n );\n\n // Loop until reach 'Yesterday'\n if (yesterday > day && animationActive) {\n yearSlider.value++;\n setTimeout(\n () => startBubbling(covidVaccinated, data),\n 1000 / 24\n );\n } else {\n stopSlider()\n }\n}\n\n// Add new data / change data function\nfunction changeData(country, covidVaccinated, vacc100) {\n covidVaccinated.add({\n x: country.pos[1],\n y: country.pos[0],\n value: vacc100,\n size: vacc100,\n country: country.name,\n });\n}\n\nfunction stopSlider() {\n animationActive = false;\n yearMarker.textContent = \"Stopped\";\n yearMarker.style.background = markerColorRed;\n}\n\n// Style Map div\ndivMap.style.width = \"100%\";\ndivMap.style.height = \"100%\";\ndivMap.style.position = \"absolute\";\ndivMap.style.left = \"0px\";\ndivMap.style.top = \"0px\";\nmapChart.engine.layout();\n\n// Style Chart div\ndivOverlay.style.width = \"100%\";\ndivOverlay.style.height = \"100%\";\ndivOverlay.style.position = \"absolute\";\ndivOverlay.style.left = \"0px\";\ndivOverlay.style.top = \"0px\";\nchart.engine.layout();\n\n// Style Slider div\nyearDiv.id = \"block\";\nyearSlider.type = \"range\";\nyearSlider.min = 0;\nyearSlider.max = Math.ceil(\n (new Date('January 11, 2022') - new Date(2021, 0, 1)) / (1000 * 3600 * 24)\n);\nyearSlider.value = yearSlider.min;\nyearSlider.id = \"slider\";\nyearMarker.id = \"marker\";\nyearMarker.textContent = \"Started\";\nconst markerColorGreen = \"rgb(0, 0, 200, 0.6)\";\nconst markerColorRed = \"rgb(200, 0, 0)\";\n\nchart.engine.container.append(yearDiv);\n\n// Dynamically inject some CSS to example.\nfunction addStyle(styleString) {\n const style = document.createElement(\"style\");\n style.textContent = styleString;\n document.head.append(style);\n}\n\naddStyle(`\n\n * {\n box-sizing: border-box;\n }\n \n #block{\n width: 50%;\n height: 60px;\n\t\ttop: 90%;\n right: 60px;\n position: absolute;\n display: flex;\n justify-content: space-evenly;\n padding: 30px 10px;\n z-index: 1;\n box-sizing: border-box\n }\n\n #slider{\n -webkit-appearance: none;\n margin: 0;\n padding: 0;\n width: 85%;\n height: 5px;\n position: relative;\n cursor: pointer;\n border-radius: 10px;\n border: solid 1px; \n background: linear-gradient(to right, #fff 0%, white 100%)\n }\n \n #slider::-webkit-slider-thumb{\n -webkit-appearance: none;\n height: 20px;\n width: 20px;\n padding: 0;\n background-color: lightgray;\n cursor: pointer;\n border-radius: 50%;\n border: solid 1px gray\n }\n\n #marker {\n background: rgb(0, 0, 200, 0.6);\n color: white;\n height: 30px;\n width: 55px;\n top: -13px;\n position: relative;\n border-radius: 4px;\n text-align:center; \n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n #marker::after {\n content: \"\";\n text-align: center;\n position: absolute;\n left: 100%;\n border-bottom: 5px solid transparent;\n border-top: 5px solid transparent;\n border-left: 5px solid gray;\n }\n\n #marker:active {\n transform: scale(0.9);\n }\n\n`);","url":null,"readme":"Example which showcases laying LightningChart JS `ChartXY` data visualization features over a LightningChart JS `MapChart`.\n\nThis is likely to be the single easiest method available of implementing a geographical data visualization component:\n\n- **No tile server or large tile storage required**\n- **Can be used offline**\n- **Extremely simple to develop** (minimal setup less than 50 lines of code)\n\nThe two charts are laid perfectly over each other by placing them on their own HTML `div` elements with same position and size. To complete the setting, `MapChart` provides a method `onViewChange` which can be used to conveniently synchronize the map latitude and longitude view with the overlaid XY axes.\n\n```js\n// Minimal working code for overlaid and synchronized MapChart and ChartXY.\nconst divMap = document.createElement(\"div\");\ndocument.body.append(divMap);\n\nconst divOverlay = document.createElement(\"div\");\ndocument.body.append(divOverlay);\n\nconst mapChart = lightningChart()\n .Map({\n type: MapTypes.World,\n container: divMap,\n })\n .setTitle(\"\");\n\nconst chart = lightningChart()\n .ChartXY({\n container: divOverlay,\n })\n .setMouseInteractions(false)\n .setBackgroundFillStyle(transparentFill)\n .setSeriesBackgroundFillStyle(transparentFill);\nchart.engine.setBackgroundFillStyle(transparentFill);\nchart\n .getDefaultAxes()\n .forEach((axis) =>\n axis.setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine)\n );\n\nmapChart.onViewChange((view) => {\n const { latitudeRange, longitudeRange, margin } = view;\n chart\n .getDefaultAxisX()\n .setInterval(longitudeRange.start, longitudeRange.end, false, true);\n chart\n .getDefaultAxisY()\n .setInterval(latitudeRange.start, latitudeRange.end, false, true);\n chart.setPadding(margin);\n});\n\ndivMap.style.width = \"100vw\";\ndivMap.style.height = \"100vh\";\ndivMap.style.position = \"absolute\";\ndivMap.style.left = \"0px\";\ndivMap.style.top = \"0px\";\nmapChart.engine.layout();\n\ndivOverlay.style.width = \"100vw\";\ndivOverlay.style.height = \"100vh\";\ndivOverlay.style.position = \"absolute\";\ndivOverlay.style.left = \"0px\";\ndivOverlay.style.top = \"0px\";\nchart.engine.layout();\n```\n\nThe example animates the progression of first round of Covid-19 vaccines coverage across all countries.\n\nThe used data set is from [ourworldindata.org](https://ourworldindata.org/covid-vaccinations)\n\n> Hannah Ritchie, Edouard Mathieu, Lucas Rodés-Guirao, Cameron Appel, Charlie Giattino, Esteban Ortiz-Ospina, Joe Hasell, Bobbie Macdonald, Diana Beltekian and Max Roser (2020) - \"Coronavirus Pandemic (COVID-19)\". Published online at OurWorldInData.org. Retrieved from: 'https://ourworldindata.org/coronavirus' [Online Resource]\n\n**More map examples**:\n\n- [Simple Countries Visualization](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1101-mapChartDynamicColor.html)\n- [Data visualization over Google Maps](https://blog.arction.com/easy-geospatial-data-visualization-with-lightningchart-js-and-google)\n- [LightningChart JS Map Charts with Drill-down](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1111-covidDrillDownDashboard.html)\n- [Data visualization over static map picture](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1110-geoChartUsaTemperature.html)","image":"mapChartVizXY.png"},{"id":"lcjs-example-1110-geoChartUsaTemperature","title":"JavaScript Animated Geographical Temperature Chart","tags":["xy","map","heatmap","palette","realtime","image"],"description":"Example on geographical data visualization by laying a 2D heatmap over a picture of a map.","metaDescription":"Example on geographical data visualization by laying a 2D heatmap over a picture of a map.","src":"/*\n * LightningChart JS example on geographical data visualization by laying a 2D heatmap over a picture of a map.\n */\n\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\nconst xydata = require(\"@arction/xydata\");\n\n// Extract required parts from LightningChartJS.\nconst { \n lightningChart, \n ColorRGBA,\n ImageFill,\n ImageFitMode,\n PalettedFill,\n LUT,\n formatLongitudeLatitude,\n emptyLine,\n Themes \n} = lcjs;\n\nconst { createWaterDropDataGenerator } = xydata;\n\n// Create a XY Chart \nconst chart = lightningChart({\n // Example data set is a bit larger than actual displayed heatmap. This is intentional, but displays a console warning.\n // This flag is specified to omit this warning.\n warnings: false\n})\n .ChartXY({\n disableAnimations: true,\n // theme: Themes.darkGold\n })\n .setTitle('Loading temperature data ...')\n .setPadding({ right: 40 })\n .setMouseInteractions(false)\n\nconst axisY = chart.getDefaultAxisY()\n .setTitle('Latitude')\n .setMouseInteractions(false)\n\nconst axisX = chart.getDefaultAxisX()\n .setTitle('Longitude')\n .setMouseInteractions(false)\n\n// Define value -> color look up table.\nconst setHeatmapPalette = (transparency) => {\n heatmap.setFillStyle(new PalettedFill({\n lut: new LUT({\n units: 'intensity',\n steps: [\n // NOTE: Units in Fahrenheits.\n { value: 0, color: ColorRGBA(255, 255, 255, 0) },\n { value: 5, color: ColorRGBA(208, 0, 255, transparency) },\n { value: 20, color: ColorRGBA(10, 190, 255, transparency) },\n { value: 40, color: ColorRGBA(10, 10, 255, transparency) },\n { value: 50, color: ColorRGBA(9, 255, 0, transparency) },\n { value: 60, color: ColorRGBA(251, 255, 0, transparency) },\n { value: 70, color: ColorRGBA(255, 132, 0, transparency) },\n { value: 80, color: ColorRGBA(255, 38, 0, transparency) },\n { value: 100, color: ColorRGBA(200, 0, 0, transparency) },\n ],\n interpolate: true,\n })\n }))\n}\n\n// Add Heatmap Series\nconst columns = 500\nconst rows = 320\nconst heatmap = chart\n .addHeatmapGridSeries({\n columns,\n rows,\n start: { x: -126, y: 24 },\n end: { x: -66, y: 48.00 },\n dataOrder: 'columns',\n })\n .setWireframeStyle(emptyLine)\n // Customize cursor result table formatting.\n .setCursorResultTableFormatter((builder, _, dataPoint) => builder\n .addRow(formatLongitudeLatitude(dataPoint.x, dataPoint.y))\n .addRow('Temp:','', fahrenheitToCelsius(dataPoint.intensity).toFixed(1), '\\u00B0С')\n )\n\n// Get Temperature Data\nfetch( document.head.baseURI + 'examples/assets/1110/usa-temperature-data.json' )\n .then(r => r.json())\n .then(temperatureData => {\n // Add data to the Heatmap Series\n heatmap.invalidateIntensityValues(temperatureData.data)\n chart.setTitle('Loading animation ...')\n\n // Generate random offset data set for real-time animation.\n createWaterDropDataGenerator()\n .setColumns(columns)\n .setRows(rows)\n .setWaterDrops([\n { columnNormalized: .6, rowNormalized: .6, amplitude: 1 },\n { columnNormalized: .2, rowNormalized: .1, amplitude: .9 },\n { columnNormalized: .1, rowNormalized: .8, amplitude: .6 },\n ])\n .generate()\n .then(randomData => {\n // Map random data to more realistic fahrenheit value range.\n return randomData.map(row => row.map(fahrenheitOffset => fahrenheitOffset * .40))\n })\n .then(randomData => {\n chart.setTitle('Animated United States Temperature Heat map')\n\n // Generate n data sets that are interpolations between temperature data set and offset with random data.\n const animationSteps = 100\n const dataSets = []\n for (let i = 0; i < animationSteps; i += 1) {\n // [0, 1]\n const interpolation = (i) / (animationSteps - 1)\n if (interpolation === 0) {\n dataSets.push(temperatureData.data)\n } else {\n const interpolatedDataSet = []\n for (let column = 0; column < columns; column += 1) {\n const columnValues = []\n interpolatedDataSet.push(columnValues)\n for (let row = 0; row < rows; row += 1) {\n columnValues.push(temperatureData.data[column][row] + interpolation * randomData[row][column])\n }\n }\n dataSets.push(interpolatedDataSet)\n }\n }\n\n // Animate continuous interpolation between temperature data set and offset with random data.\n let dAnimation = 0\n let tPrevAnimationUpdate = window.performance.now()\n let activeDataSetIndex = 0\n const animationDurationMs = 5000\n const updateAnimation = () => {\n const tNow = window.performance.now()\n const dDelta = tNow - tPrevAnimationUpdate\n dAnimation += dDelta\n // Calculate animation position as [0, 1] where 0 = exact temperature data and 1 = exact temperature + random data.\n const a = dAnimation % animationDurationMs\n const animationPosition = a < animationDurationMs / 2 ?\n a / (animationDurationMs / 2) :\n 1 - ((a - animationDurationMs / 2) / (animationDurationMs / 2))\n\n const dataSetIndex = Math.round(animationPosition * (dataSets.length - 1))\n if (dataSetIndex !== activeDataSetIndex) {\n activeDataSetIndex = dataSetIndex\n // Change displayed heat map data set.\n heatmap.invalidateIntensityValues(dataSets[dataSetIndex])\n }\n\n tPrevAnimationUpdate = tNow\n requestAnimationFrame(updateAnimation)\n }\n updateAnimation()\n })\n })\n\n// Load picture of USA map.\nconst bgImg = new Image()\nbgImg.crossOrigin = ''\nbgImg.src = document.head.baseURI + 'examples/assets/1110/usa.png'\n\n// Style Chart series background as the picture.\nchart.setSeriesBackgroundFillStyle(\n new ImageFill({\n source: bgImg,\n fitMode: ImageFitMode.Stretch,\n }),\n)\n\n// Utility function for converting Fahrenheit to Celsius \nconst fahrenheitToCelsius = (celsius) => {\n return (celsius - 32)*(5/9)\n}\n\n// Maintain static aspect ratio of series area.\n// Size of X and Y axes is configured manually here to know the exact size distribution of the chart.\nconst leftAxisSizePx = 80\nconst bottomAxisSizePx = 60\naxisX.setThickness(bottomAxisSizePx)\naxisY.setThickness(leftAxisSizePx)\n\nconst updateChartAspectRatio = () => {\n const chartBounds = chart.engine.container.getBoundingClientRect()\n const seriesAreaSizePx = {\n x: Math.ceil(chartBounds.width - leftAxisSizePx),\n y: Math.ceil(chartBounds.height - bottomAxisSizePx),\n }\n\n // height / width\n const mapAspectRatio = 883 / 1600\n const curAspectRatio = seriesAreaSizePx.y / seriesAreaSizePx.x\n\n if (curAspectRatio < mapAspectRatio) {\n // Add horizontal chart padding to maintain Map picture aspect ratio.\n const targetAxisWidth = seriesAreaSizePx.y / mapAspectRatio\n const horizontalPadding = Math.max(seriesAreaSizePx.x - targetAxisWidth, 0)\n chart.setPadding({ left: horizontalPadding / 2, right: horizontalPadding / 2, top: 0, bottom: 0 })\n } else if (curAspectRatio > mapAspectRatio) {\n // Add vertical chart padding to maintain Map picture aspect ratio.\n const targetAxisHeight = seriesAreaSizePx.x * mapAspectRatio\n const verticalPadding = Math.max(seriesAreaSizePx.y - targetAxisHeight, 0)\n chart.setPadding({ top: verticalPadding / 2, bottom: verticalPadding / 2, left: 0, right: 16 })\n }\n}\nupdateChartAspectRatio()\n\n// Maintain chart aspect ratio when window is resized.\nwindow.addEventListener('resize', updateChartAspectRatio)\n\n\n// Add slider user interface for adjusting heat map transparency.\nconst exampleContainer = document.getElementById('chart') || document.body\nconst uiDiv = document.createElement(\"div\");\nchart.engine.container.append(uiDiv)\nuiDiv.style.position = 'absolute'\nuiDiv.style.left = '6px'\nuiDiv.style.bottom = '6px'\nuiDiv.style.zIndex = '999'\nuiDiv.style.color = 'white'\nuiDiv.style.display = 'flex'\nuiDiv.style.flexDirection = 'row'\nuiDiv.style.color = exampleContainer.parentElement.parentElement && window.getComputedStyle(exampleContainer.parentElement.parentElement).color || 'white'\nconst label = document.createElement(\"span\");\nuiDiv.append(label)\nlabel.innerHTML = 'Heat map transparency'\nconst slider = document.createElement(\"input\");\nuiDiv.append(slider);\nslider.type = \"range\";\nslider.min = 0;\nslider.max = 255;\nslider.value = 100;\nsetHeatmapPalette(slider.value)\nslider.oninput = (e) => setHeatmapPalette(slider.value)\n","url":null,"readme":"Example on geographical data visualization by laying a 2D heatmap over a picture of a map.\n\nThis example displays a heat map data set of temperature grid measurements on the area of the United States. In geographical data visualization, grid measurements mean that data points are layed with regular latitude and longitude steps.\n\nThe data set used in this example has 500 columns (longitude) and 400 rows (latitude). This translates to roughly 12 km step between longitude measurements and 6 km step between latitude measurements. The total number of measurements is 200 000 data points.\n\nThe visualization is done by laying a predefined picture of a map under the heatmap, which is styled with transparent colours. This approach is simple, but only suitable when the geographical view is predefined. \n\nLightningChart JS can also be combined with mapping solutions such as [Leaflet](https://leafletjs.com/), which allows the combination of interactive, dynamic maps and the data visualization power of LightningChart.\n\nThe picture used in this example is quite low resolution (1600 x 883 px), if a high resolution picture is used, then zooming and panning can be enabled. Otherwise, the map picture would stretch and not look very good.\n\n# Real-Time Geographical Data Visualization\n\nThis example also generates a random data set that is used to showcase the real-time capabilities of LightningChart JS - the heat map visualization is animated continuously with smooth 60 refresh rate. Traditionally, this kind of applications do not exist in web pages because it requires too much processing power and results in bad user experience. However, LightningCharts real-time performance oriented heat map features enable running this example as well as even more stressful usage cases on desktop, mobile and tablet devices while leaving plenty of resources for the rest of the web page.\n\nTo learn more about the ground-breaking performance differences between LightningChart and traditional data visualization tools, please refer to our [performance comparison studies](https://www.arction.com/high-performance-javascript-charts/).\n\n**More map examples**:\n\n- [Data visualization over LightningChart JS Map Charts](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1103-mapChartVizXY.html)\n- [Data visualization over Google Maps](https://blog.arction.com/easy-geospatial-data-visualization-with-lightningchart-js-and-google)\n- [LightningChart JS Map Charts with Drill-down](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1111-covidDrillDownDashboard.html)\n- [Simple Countries Visualization](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1101-mapChartDynamicColor.html)\n\n# About LightningChart Heatmaps Performance\n\nSince September 2021, LightningChart JS is the proven performance leader in real-time and static heatmaps visualization in the web.\n\nAt that time, we took the initiative to compare the performance of the different commercial data visualization tools as well as open source tools, who offer generic heatmap chart solutions. You can find the study description and results [here](https://www.arction.com/js-heatmaps-performance-comparison/).\n\nThe most important finding from this study was that the maximum data visualization capacity of LightningChart JS greatly exceeds that of any other visualization library, being able to display more than **5 billion data points**. In context of this example, this translates to the latitude/longitude step between measurements that can be interpreted.\n\nAnother performance attribute where LightningChart dominated was real-time updates - for example, updating the heatmap data displayed over this map.\nThis is a crucial feature in real-time geographical data monitoring applications.\n","image":"geoChartUsaTemperature.png"},{"id":"lcjs-example-1111-covidDrillDownDashboard","title":"JavaScript Drill-Down CoVID Map Dashboard","tags":["xy","map","html","palette","line","cursor","ui","customtick"],"description":"In-depth example of map dashboard with data drill-down. Visualizes relations between CoVID vaccinations and cases","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-performance charts with maps, interactive map charts, charting library with maps, dynamic coloring maps, several map types.","src":"/*\n * In-depth example of map dashboard with data drill-down. Visualizes relations between CoVID vaccinations and cases\n */\n\nconst lcjs = require(\"@arction/lcjs\");\nconst {\n AxisScrollStrategies,\n AxisTickStrategies,\n emptyTick,\n AutoCursorModes,\n FormattingFunctions,\n LUT,\n lightningChart,\n UIElementBuilders,\n UILayoutBuilders,\n PointShape,\n ColorCSS,\n ColorRGBA,\n emptyFill,\n PalettedFill,\n SolidFill,\n emptyLine,\n synchronizeAxisIntervals,\n translatePoint,\n transparentFill,\n UIOrigins,\n MouseStyles,\n SolidLine,\n UIDraggingModes,\n Themes,\n} = lcjs;\n\nconst dashboardRows = 4;\nconst dashboard = lightningChart().Dashboard({\n numberOfColumns: 1,\n numberOfRows: dashboardRows,\n // theme: Themes.darkGold\n});\n\n// NOTE: Only affects 1 country view (full drill down)\nlet showRelativeValuesState = true\n\nconst lutNewCasesPerMillion = new LUT({\n interpolate: true,\n steps: [\n { value: -1, color: ColorRGBA(0, 0, 0) },\n { value: -0.1, color: ColorRGBA(0, 0, 0) },\n { value: 0, color: ColorRGBA(255, 255, 0) },\n { value: 1000, color: ColorRGBA(255, 0, 0) },\n ],\n});\n\nconst lutPeopleVaccinatedPerHundred = new LUT({\n interpolate: true,\n steps: [\n { value: -1, color: ColorRGBA(0, 0, 0, 100) },\n { value: -0.1, color: ColorRGBA(0, 0, 0, 100) },\n { value: 0, color: ColorRGBA(255, 0, 0, 100) },\n { value: 50, color: ColorRGBA(255, 255, 0, 100) },\n { value: 100, color: ColorRGBA(0, 255, 0, 100) },\n ],\n});\n\nconst highValueThresholds = {\n new_cases_per_million: 1000,\n hosp_patients_per_million: 100,\n icu_patients_per_million: 50,\n};\n\nconst drillDownRoutes = {\n World: [\n {\n mapType: \"NorthAmerica\",\n boundary: {\n bottomLeft: { x: 4, y: 52 },\n topRight: { x: 44, y: 93 },\n },\n },\n {\n mapType: \"SouthAmerica\",\n boundary: {\n bottomLeft: { x: 16, y: 14 },\n topRight: { x: 45, y: 50 },\n },\n },\n {\n mapType: \"Europe\",\n boundary: {\n bottomLeft: { x: 45, y: 64 },\n topRight: { x: 60, y: 93 },\n },\n },\n {\n mapType: \"Africa\",\n boundary: {\n bottomLeft: { x: 46, y: 15 },\n topRight: { x: 63, y: 64 },\n },\n },\n {\n mapType: \"Asia\",\n boundary: {\n bottomLeft: { x: 59, y: 40 },\n topRight: { x: 95, y: 91 },\n },\n },\n ],\n};\n\nconst drillDownTip = dashboard.addUIElement(UILayoutBuilders.Column, dashboard.uiScale)\n .setOrigin(UIOrigins.RightTop)\n .setPosition(translatePoint({ x: dashboard.engine.container.getBoundingClientRect().width - 8, y: dashboard.engine.container.getBoundingClientRect().height - 40 }, dashboard.engine.scale, dashboard.uiScale))\n .setBackground(background => background.setFillStyle(emptyFill).setStrokeStyle(emptyLine))\nconst drillDownTipIn = drillDownTip.addElement(UIElementBuilders.TextBox).setTextFont(font => font.setSize(10)).setText('Left click to drill down at mouse location')\nconst drillDownTipOut = drillDownTip.addElement(UIElementBuilders.TextBox).setTextFont(font => font.setSize(10)).setText('Double left click to zoom out')\n\nconst drillDownOutButton = dashboard.addUIElement(UIElementBuilders.TextBox, dashboard.uiScale)\n .setOrigin(UIOrigins.LeftTop)\n .setPosition(translatePoint({ x: 8, y: dashboard.engine.container.getBoundingClientRect().height - 8 }, dashboard.engine.scale, dashboard.uiScale))\n .setText('Zoom out')\n .setTextFont(font => font.setSize(20))\n .setDraggingMode(UIDraggingModes.notDraggable)\n .setMouseStyle(MouseStyles.Point)\n\n;(async () => {\n let covidData;\n let vaccinationData;\n let countriesData;\n await Promise.all([\n new Promise(async (resolve) => {\n console.time(\"loading covid data\");\n covidData = await fetch(\n document.head.baseURI + \"examples/assets/1111/owid-covid-data.json\"\n ).then((r) => r.json());\n console.timeEnd(\"loading covid data\");\n resolve();\n }),\n new Promise(async (resolve) => {\n console.time(\"loading covid vaccinations data\");\n vaccinationData = await fetch(\n document.head.baseURI + \"examples/assets/1111/vaccinations.json\"\n ).then((r) => r.json());\n console.timeEnd(\"loading covid vaccinations data\");\n resolve();\n }),\n new Promise(async (resolve) => {\n console.time(\"loading country locations data\");\n countriesData = await fetch(\n document.head.baseURI + \"examples/assets/1111/countries.json\"\n ).then((r) => r.json());\n console.timeEnd(\"loading country locations data\");\n resolve();\n }),\n ]);\n\n let totalCasesTimelineView;\n const newCasesHistoryDataTimeStart = new Date(2020, 10, 1).getTime();\n const activateTotalCasesTimelineView = () => {\n console.time(\"calculate new cases history\");\n const newCasesHistoryDataMap = new Map();\n const vaccinatedHistoryDataMap = new Map();\n for (const countryCode of Object.keys(covidData)) {\n const countryCovidData = covidData[countryCode];\n for (let i = 0; i < countryCovidData.data.length; i += 1) {\n const sample = countryCovidData.data[i];\n const newCases = sample.new_cases;\n if (newCases !== undefined) {\n const curSum = newCasesHistoryDataMap.get(sample.date);\n if (curSum) {\n newCasesHistoryDataMap.set(sample.date, curSum + newCases);\n } else {\n newCasesHistoryDataMap.set(sample.date, newCases);\n }\n }\n }\n\n const countryVaccinationData = vaccinationData.find(\n (item) => item.iso_code === countryCode\n );\n for (let i = 0; i < countryVaccinationData.data.length; i += 1) {\n const sample = countryVaccinationData.data[i];\n const peopleVaccinatedPerHundred = sample.people_vaccinated_per_hundred;\n if (peopleVaccinatedPerHundred !== undefined) {\n const cur = vaccinatedHistoryDataMap.get(sample.date);\n if (cur) {\n cur.count += 1\n cur.sum += peopleVaccinatedPerHundred\n } else {\n vaccinatedHistoryDataMap.set(sample.date, { count: 1, sum: peopleVaccinatedPerHundred });\n }\n }\n }\n }\n\n const newCasesHistoryDataXY = Array.from(newCasesHistoryDataMap.entries())\n .map(([dateIso, newCases]) => ({\n x: ISODateToTime(dateIso),\n y: newCases,\n }))\n .filter((point) => point.x >= newCasesHistoryDataTimeStart)\n .sort((a, b) => a.x - b.x)\n const vaccinatedPerHundredHistoryDataXY = Array.from(vaccinatedHistoryDataMap.entries())\n .map(([dateIso, value]) => ({\n x: ISODateToTime(dateIso),\n y: value.sum / value.count,\n }))\n .filter((point) => point.x >= newCasesHistoryDataTimeStart)\n .sort((a, b) => a.x - b.x)\n newCasesHistoryDataMap.clear();\n vaccinatedHistoryDataMap.clear();\n\n const timelineChart = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: 1,\n })\n .setTitle(\"Global CoVID daily new cases history\")\n .setAutoCursorMode(AutoCursorModes.disabled)\n .setMouseInteractions(false);\n\n const timeLineHighlighterAxis = timelineChart.addAxisX({opposite: true})\n .setTickStrategy(AxisTickStrategies.Empty)\n .setStrokeStyle(emptyLine)\n .setMouseInteractions(false)\n const timeLineHighlighter = timeLineHighlighterAxis.addCustomTick()\n .setMouseInteractions(true)\n .setAllocatesAxisSpace(false)\n .setTextFormatter((time) => new Date(time).toLocaleDateString(\"fin\", {}))\n synchronizeAxisIntervals(timelineChart.getDefaultAxisX(), timeLineHighlighterAxis)\n\n timelineChart\n .addLineSeries({ dataPattern: { pattern: \"ProgressiveX\" } })\n .setCursorInterpolationEnabled(false)\n .add(newCasesHistoryDataXY);\n timelineChart\n .getDefaultAxisY()\n .setMouseInteractions(false)\n .setTitle(\"New daily cases\")\n .setTitleFont(font => font.setSize(12))\n .setTickStrategy(AxisTickStrategies.Numeric, (ticks) =>\n ticks.setFormattingFunction(FormattingFunctions.NumericUnits)\n )\n .fit(false);\n\n const axisVaccinated = timelineChart.addAxisY({opposite: true})\n .setTitle('Vaccinated once (%)')\n .setTitleFont(font => font.setSize(12))\n .setMouseInteractions(false)\n .setInterval(0, 100, false, true)\n timelineChart.addLineSeries({dataPattern: {pattern: 'ProgressiveX'}, yAxis: axisVaccinated})\n .setCursorInterpolationEnabled(false)\n .add(vaccinatedPerHundredHistoryDataXY)\n .setStrokeStyle(new SolidLine({\n thickness: 2,\n fillStyle: new PalettedFill({\n lookUpProperty: 'y',\n lut: lutPeopleVaccinatedPerHundred,\n })\n }))\n\n timelineChart\n .getDefaultAxisX()\n .setTickStrategy(AxisTickStrategies.DateTime)\n .setMouseInteractions(false)\n .fit(false);\n timeLineHighlighter.onMouseDrag((_, event) => {\n const locationEngine = timelineChart.engine.clientLocation2Engine(\n event.clientX,\n event.clientY\n );\n const locationAxis = translatePoint(\n locationEngine,\n timelineChart.engine.scale,\n {\n x: timelineChart.getDefaultAxisX(),\n y: timelineChart.getDefaultAxisY(),\n }\n );\n const displayTimeNew = Math.min(Math.max(locationAxis.x, newCasesHistoryDataTimeStart), tMax)\n timeLineHighlighter.setValue(displayTimeNew)\n if (totalCasesTimelineView.onChange) {\n totalCasesTimelineView.onChange(displayTimeNew)\n }\n })\n timeLineHighlighter.onMouseEnter((_, e) => {\n timelineChart.engine.setMouseStyle(MouseStyles.Horizontal)\n })\n timeLineHighlighter.onMouseLeave((_, e) => {\n timelineChart.engine.setMouseStyle(MouseStyles.Default)\n })\n console.timeEnd(\"calculate new cases history\");\n\n totalCasesTimelineView = {\n chart: timelineChart,\n highlighter: timeLineHighlighter,\n onChange: () => {},\n deactivate: () => {\n timelineChart.dispose();\n totalCasesTimelineView = undefined;\n },\n };\n return totalCasesTimelineView;\n };\n\n let activeDisplayedTime = new Date(2022, 2, 11);\n let tMax = ISODateToTime(\n covidData[\"FIN\"].data[covidData[\"FIN\"].data.length - 1].date\n );\n let tLastMapViewChange = 0;\n\n const activateMapView = async (mapType) => {\n tLastMapViewChange = window.performance.now();\n totalCasesTimelineView =\n totalCasesTimelineView || activateTotalCasesTimelineView();\n\n // Drill down available\n drillDownTipIn.restore()\n if (mapType !== 'World') {\n // Return view available\n drillDownTipOut.restore()\n drillDownOutButton.restore()\n } else {\n drillDownTipOut.dispose()\n drillDownOutButton.dispose()\n }\n\n dashboard.setRowHeight(0, 4).setRowHeight(1, 1);\n for (let i = 2; i < dashboardRows; i += 1) {\n dashboard.setRowHeight(i, 0);\n }\n\n const mapChart = dashboard\n .createMapChart({\n columnIndex: 0,\n rowIndex: 0,\n type: mapType,\n })\n .setAutoCursorMode(AutoCursorModes.disabled)\n .setMouseInteractions(false)\n .setPadding({ top: 40 });\n\n const mapChartXY = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: 0,\n })\n .setTitle(\"\")\n .setBackgroundFillStyle(transparentFill)\n .setSeriesBackgroundFillStyle(transparentFill)\n .setAutoCursorMode(AutoCursorModes.disabled)\n .setMouseInteractions(false)\n\n mapChartXY.forEachAxis((axis) =>\n axis.setTickStrategy(AxisTickStrategies.Empty).setStrokeStyle(emptyLine)\n );\n\n mapChart.onViewChange((view) => {\n mapChartXY.setPadding({\n left: view.margin.left,\n right: view.margin.right,\n top: view.margin.top,\n bottom: view.margin.bottom,\n });\n mapChartXY\n .getDefaultAxisX()\n .setInterval(\n view.longitudeRange.start,\n view.longitudeRange.end,\n false,\n true\n );\n mapChartXY\n .getDefaultAxisY()\n .setInterval(\n view.latitudeRange.start,\n view.latitudeRange.end,\n false,\n true\n );\n });\n\n mapChart.setFillStyle(\n new PalettedFill({\n lut: lutPeopleVaccinatedPerHundred,\n })\n );\n\n const scatterSeries = mapChartXY\n .addPointSeries({ pointShape: PointShape.Circle })\n .setIndividualPointSizeEnabled(true)\n .setIndividualPointValueEnabled(true)\n .setPointFillStyle(new PalettedFill({ lut: lutNewCasesPerMillion }))\n .setMouseInteractions(false);\n\n const setDisplayTime = (time, updateTimeLineBand = false) => {\n activeDisplayedTime = time;\n const timeNumber = time.getTime();\n const timeIso = dateToIsoString(time);\n\n mapChart.setTitle(\n `CoVID vaccinations & new cases | ${time.toLocaleDateString(\"fin\", {})}`\n );\n\n scatterSeries.clear();\n\n mapChart.invalidateRegionValues((region, prev) => {\n const countryCode = region.ISO_A3;\n const countryCovidData = covidData[countryCode];\n const countryVaccinationData = vaccinationData.find(\n (item) => item.iso_code === countryCode\n );\n const countryInformation = countriesData.find(\n (item) => item.cca3 === countryCode\n );\n if (countryCovidData && countryVaccinationData && countryInformation) {\n const covidSample = countryCovidData.data.find(\n (sample) => sample.date === timeIso\n );\n const smoothedNewCasesPerMillion =\n covidSample && covidSample.new_cases_smoothed_per_million;\n\n let peopleVaccinatedPerHundred;\n for (let i = countryVaccinationData.data.length - 1; i >= 0; i -= 1) {\n const vaccinationSample = countryVaccinationData.data[i];\n if (vaccinationSample.people_vaccinated_per_hundred !== undefined) {\n const sampleDateTime = ISODateToTime(vaccinationSample.date);\n if (sampleDateTime <= timeNumber) {\n peopleVaccinatedPerHundred =\n vaccinationSample.people_vaccinated_per_hundred;\n break;\n }\n }\n }\n\n if (\n smoothedNewCasesPerMillion !== undefined &&\n peopleVaccinatedPerHundred !== undefined\n ) {\n // Add point to scatter chart.\n const latitude = countryInformation.latlng[0];\n const longitude = countryInformation.latlng[1];\n const pointSize =\n smoothedNewCasesPerMillion === 0\n ? 0\n : clampNumber(\n (25 * smoothedNewCasesPerMillion) / 1000,\n mapType === \"World\" ? 1 : 5,\n 25\n );\n scatterSeries.add({\n countryCode,\n smoothedNewCasesPerMillion,\n peopleVaccinatedPerHundred,\n x: longitude,\n y: latitude,\n value: smoothedNewCasesPerMillion,\n size: pointSize,\n });\n\n // Return value is used for map region coloring.\n return peopleVaccinatedPerHundred;\n }\n }\n return -1;\n });\n\n if (updateTimeLineBand && totalCasesTimelineView) {\n // Update displayed time line position.\n totalCasesTimelineView.highlighter.setValue(time.getTime());\n }\n };\n setDisplayTime(activeDisplayedTime, true);\n\n let shouldUpdateTimeRange;\n totalCasesTimelineView.onChange = (value) => {\n shouldUpdateTimeRange = new Date(value);\n };\n const intervalUpdateTimeRange = setInterval(() => {\n if (shouldUpdateTimeRange) {\n setDisplayTime(shouldUpdateTimeRange);\n shouldUpdateTimeRange = undefined;\n }\n }, 1000 / 60);\n\n const container =\n document.getElementById(\"chart-container\") || document.body;\n const containerOverlayCursor = document.createElement(\"div\");\n container.append(containerOverlayCursor);\n const chartOverlayCursor = lightningChart()\n .ChartXY({\n container: containerOverlayCursor,\n // theme: Themes.darkGold\n })\n .setTitle(\"\")\n .setPadding({ left: 0, bottom: 0, right: 0, top: 14 })\n .setMouseInteractions(false);\n chartOverlayCursor\n .setBackgroundFillStyle(emptyFill)\n .setSeriesBackgroundFillStyle(emptyFill);\n chartOverlayCursor.engine.setBackgroundFillStyle(emptyFill);\n chartOverlayCursor.getDefaultAxisY().dispose();\n chartOverlayCursor.getDefaultAxisX().setAnimationScroll(false);\n const chartOverlayUi = chartOverlayCursor\n .addUIElement(UILayoutBuilders.Column)\n .setPosition({ x: 0, y: 100 })\n .setOrigin(UIOrigins.LeftTop)\n .setBackground((background) =>\n background.setStrokeStyle(emptyLine).setFillStyle(emptyFill)\n );\n const ChartOverlayItem = (text) =>\n chartOverlayUi.addElement(UIElementBuilders.TextBox).setText(text);\n const chartOverlayTitle = ChartOverlayItem(\"\");\n if (! isThemeDark(chartOverlayCursor.getTheme())) {\n chartOverlayTitle.setTextFillStyle(new SolidFill({color: ColorCSS('rgb(255,255,255)')}))\n }\n const ChartOverlaySeries = (\n colorCss,\n label,\n highValue,\n format,\n dataSet\n ) => {\n const fill = new SolidFill({ color: ColorCSS(colorCss) });\n const yAxis = chartOverlayCursor\n .addAxisY()\n .setInterval(0, highValue)\n .setScrollStrategy(AxisScrollStrategies.expansion);\n return {\n series: chartOverlayCursor\n .addLineSeries({ yAxis, dataPattern: { pattern: \"ProgressiveX\" } })\n .setCursorInterpolationEnabled(false)\n .setStrokeStyle((stroke) => stroke.setFillStyle(fill)),\n label: ChartOverlayItem(label).setTextFillStyle(fill),\n valueLabel: chartOverlayCursor\n .addUIElement(UIElementBuilders.TextBox, {\n x: chartOverlayCursor.getDefaultAxisX(),\n y: yAxis,\n })\n .setOrigin(UIOrigins.RightBottom)\n .setTextFillStyle(fill)\n .setText(\"\")\n .setBackground((background) =>\n background.setStrokeStyle(emptyLine).setFillStyle(emptyFill)\n ),\n format,\n dataSet,\n };\n };\n const chartOverlaySeries = {\n people_vaccinated_per_hundred: ChartOverlaySeries(\n \"rgb(0, 255, 0)\",\n \"Vaccinations\",\n 100,\n (sample) =>\n sample.people_vaccinated_per_hundred !== undefined\n ? `${sample.people_vaccinated_per_hundred.toFixed(1)}%`\n : undefined,\n vaccinationData\n ),\n new_cases_per_million: ChartOverlaySeries(\n \"rgb(255, 255, 0)\",\n \"New cases\",\n highValueThresholds.new_cases_per_million,\n (sample) =>\n sample.new_cases !== undefined ? String(sample.new_cases) : undefined,\n covidData\n ),\n hosp_patients_per_million: ChartOverlaySeries(\n \"rgb(255, 127, 0)\",\n \"Hospitalized\",\n highValueThresholds.hosp_patients_per_million,\n (sample) =>\n sample.hosp_patients !== undefined\n ? String(sample.hosp_patients)\n : undefined,\n covidData\n ),\n icu_patients_per_million: ChartOverlaySeries(\n \"rgb(255, 0, 0)\",\n \"Severe cases\",\n highValueThresholds.icu_patients_per_million,\n (sample) =>\n sample.icu_patients !== undefined\n ? String(sample.icu_patients)\n : undefined,\n covidData\n ),\n };\n const overlayCursorWidth = 280;\n const overlayCursorHeight = 200;\n containerOverlayCursor.style.position = \"absolute\";\n containerOverlayCursor.style.backgroundColor = \"rgba(0,0,0,0.7)\";\n containerOverlayCursor.style.border = \"solid 8px transparent\";\n containerOverlayCursor.style.borderRadius = \"16px\";\n containerOverlayCursor.style.width = `${overlayCursorWidth}px`;\n containerOverlayCursor.style.height = `${overlayCursorHeight}px`;\n containerOverlayCursor.style.transition =\n \"left 0.2s, top 0.2s, opacity 0.5s\";\n containerOverlayCursor.style.opacity = \"0.0\";\n containerOverlayCursor.style.pointerEvents = \"none\";\n chartOverlayCursor.forEachAxis((axis) =>\n axis\n .setTickStrategy(AxisTickStrategies.Empty)\n .setStrokeStyle(emptyLine)\n .setMouseInteractions(false)\n );\n\n let cursorTarget;\n let cursorActiveCountry;\n let cursorLastPointedCountry;\n mapChartXY.onSeriesBackgroundMouseMove((_, event) => {\n const nearest = scatterSeries.solveNearestFromScreen(\n mapChartXY.engine.clientLocation2Engine(event.clientX, event.clientY)\n );\n if (nearest) {\n cursorTarget = nearest.location;\n cursorLastPointedCountry = cursorTarget.countryCode;\n }\n });\n mapChartXY.onSeriesBackgroundMouseLeave(() => {\n cursorActiveCountry = undefined;\n cursorTarget = undefined;\n });\n const intervalUpdateCursor = setInterval(() => {\n if (cursorTarget && cursorTarget.countryCode !== cursorActiveCountry) {\n const locationEngine = translatePoint(\n { x: cursorTarget.x, y: cursorTarget.y },\n { x: mapChartXY.getDefaultAxisX(), y: mapChartXY.getDefaultAxisY() },\n mapChartXY.engine.scale\n );\n const locationWebpage = mapChartXY.engine.engineLocation2Client(\n locationEngine.x,\n locationEngine.y\n );\n const containerBounds = container.getBoundingClientRect();\n containerOverlayCursor.style.left = `${Math.max(\n locationWebpage.x - (overlayCursorWidth + 10 + containerBounds.left),\n 10\n )}px`;\n containerOverlayCursor.style.top = `${Math.max(\n locationWebpage.y - (overlayCursorHeight + 10 + containerBounds.top),\n 10\n )}px`;\n containerOverlayCursor.style.opacity = \"1.0\";\n chartOverlayCursor.engine.layout();\n\n const showTimeHistoryDays = 30;\n const countryCovidData = covidData[cursorTarget.countryCode];\n const countryVaccinationData = vaccinationData.find(\n (item) => item.iso_code === cursorTarget.countryCode\n );\n const countryInformation = countriesData.find(\n (item) => item.cca3 === cursorTarget.countryCode\n );\n chartOverlayTitle.setText(\n `${countryInformation.name.common} previous 4 weeks`\n );\n const checkISODateInRange = createISODateRangeMatcher(\n new Date(\n activeDisplayedTime.getTime() -\n showTimeHistoryDays * 24 * 60 * 60 * 1000\n ),\n activeDisplayedTime\n );\n const covidSamplesInRange = countryCovidData.data.filter((sample) =>\n checkISODateInRange(sample.date)\n );\n const vaccinationSamplesInRange = countryVaccinationData.data.filter(\n (sample) => checkISODateInRange(sample.date)\n );\n\n for (const key of Object.keys(chartOverlaySeries)) {\n const { series, valueLabel, dataSet, format } =\n chartOverlaySeries[key];\n const samplesInRange =\n dataSet === covidData\n ? covidSamplesInRange\n : vaccinationSamplesInRange;\n const data = samplesInRange\n .map((sample) => ({\n x: ISODateToTime(sample.date),\n y: sample[key] !== undefined ? sample[key] : NaN,\n }))\n .filter((sample) => !Number.isNaN(sample.y));\n series.clear().add(data);\n\n let lastValue;\n for (let i = data.length - 1; i >= 0; i -= 1) {\n lastValue = data[i];\n if (!Number.isNaN(lastValue.y)) {\n break;\n }\n }\n\n valueLabel.setText(\"\");\n if (lastValue !== undefined) {\n let valueLabelText;\n for (let i = samplesInRange.length - 1; i >= 0; i -= 1) {\n valueLabelText = format(samplesInRange[i]);\n if (valueLabelText) break;\n }\n if (valueLabelText) {\n const valueLabelPosition = { x: lastValue.x, y: lastValue.y };\n valueLabel\n .setText(valueLabelText)\n .setPosition(valueLabelPosition);\n }\n }\n }\n\n cursorActiveCountry = cursorTarget.countryCode;\n }\n cursorTarget = undefined;\n if (!cursorActiveCountry) {\n containerOverlayCursor.style.opacity = \"0.0\";\n }\n }, 1000 / 60);\n\n detectMouseClicks(\n mapChartXY.onSeriesBackgroundMouseClick.bind(mapChartXY),\n mapChartXY.onSeriesBackgroundMouseDoubleClick.bind(mapChartXY),\n (e) => {\n if (window.performance.now() - tLastMapViewChange < 750) {\n return;\n }\n // Attempt drill down at mouse location.\n const locationEngine = mapChartXY.engine.clientLocation2Engine(\n e.clientX,\n e.clientY\n );\n const locationChart = translatePoint(\n locationEngine,\n mapChartXY.engine.scale,\n mapChartXY.uiScale\n );\n const routes = drillDownRoutes[mapType] || [];\n // Attempt to drill down to a smaller map view.\n for (const route of routes) {\n if (\n locationChart.x >= route.boundary.bottomLeft.x &&\n locationChart.x <= route.boundary.topRight.x &&\n locationChart.y >= route.boundary.bottomLeft.y &&\n locationChart.y <= route.boundary.topRight.y\n ) {\n disposeChart();\n activateMapView(route.mapType);\n return;\n }\n }\n\n // Drill down to nearest country\n if (cursorLastPointedCountry) {\n disposeChart();\n activateCountryView(cursorLastPointedCountry, mapType, showRelativeValuesState);\n }\n },\n (e) => {\n if (\n window.performance.now() - tLastMapViewChange > 2000 &&\n mapType !== \"World\"\n ) {\n disposeChart();\n activateMapView(\"World\");\n }\n }\n );\n\n const subDrillDownOutButtonClick = drillDownOutButton.onMouseClick((_, e) => {\n if (mapType !== 'World' && window.performance.now() - tLastMapViewChange > 500) {\n disposeChart();\n activateMapView(\"World\");\n }\n })\n\n let disposeChart = () => {\n clearInterval(intervalUpdateCursor);\n clearInterval(intervalUpdateTimeRange);\n mapChart.dispose();\n mapChartXY.dispose();\n chartOverlayCursor.dispose();\n containerOverlayCursor.remove();\n drillDownOutButton.offMouseClick(subDrillDownOutButtonClick)\n disposeChart = () => {};\n };\n };\n\n const activateCountryView = (countryCode, returnView, showRelativeValues) => {\n if (totalCasesTimelineView) {\n totalCasesTimelineView.deactivate();\n }\n\n drillDownTipIn.dispose()\n drillDownTipOut.restore()\n drillDownOutButton.restore()\n\n const countryCovidData = covidData[countryCode];\n const countryVaccinationData = vaccinationData.find(\n (item) => item.iso_code === countryCode\n );\n const countryInformation = countriesData.find(\n (item) => item.cca3 === countryCode\n );\n\n const marginLeft = 80;\n\n const Trend = (property, dataSet, title, titleY, maxY, format) => ({\n property,\n dataSet,\n title,\n titleY,\n maxY,\n format,\n });\n const trends = [\n Trend(\n \"people_vaccinated_per_hundred\",\n countryVaccinationData,\n \"Vaccination rate (at least 1 vaccine)\",\n \"Vaccinated (%)\",\n 100,\n (value) => `${value.toFixed(1)}% received at least 1 vaccine`\n ),\n Trend(\n showRelativeValues ? \"new_cases_per_million\" : \"new_cases\",\n countryCovidData,\n showRelativeValues ? \"New cases (relative to population)\" : \"New cases\",\n showRelativeValues ? \"per 1 million citizens\" : \"New cases\",\n showRelativeValues ? highValueThresholds.new_cases_per_million : undefined,\n showRelativeValues ? (value) => `${value.toFixed(0)} new cases per 1 million citizens` : (value) => `${value.toFixed(0)} new cases`\n ),\n Trend(\n showRelativeValues ? \"hosp_patients_per_million\" : \"hosp_patients\",\n countryCovidData,\n showRelativeValues ? \"Hospital patients (relative to population)\" : \"Hospital patients\",\n showRelativeValues ? \"per 1 million citizens\" : \"Hospital patients\",\n showRelativeValues ? highValueThresholds.hosp_patients_per_million : undefined,\n showRelativeValues ? (value) =>\n `${value.toFixed(0)} hospital patients per 1 million citizens` : (value) => `${value.toFixed(0)} hospital patients`\n ),\n Trend(\n showRelativeValues ? \"icu_patients_per_million\" : \"icu_patients\",\n countryCovidData,\n showRelativeValues ? \"Intensive hospital care patients (relative to population)\" : \"Intensive hospital care patients\",\n showRelativeValues ? \"per 1 million citizens\" : \"Intensive care patients\",\n showRelativeValues ? highValueThresholds.icu_patients_per_million : undefined,\n showRelativeValues ? (value) =>\n `${value.toFixed(0)} intensive care patients per 1 million citizens` : (value) => `${value.toFixed(0)} intensive care patients`\n ),\n ].map((trend, iTrend, _trends) => {\n const chart = dashboard\n .createChartXY({\n columnIndex: 0,\n rowIndex: iTrend,\n })\n .setTitle(trend.title)\n .setPadding({ left: 0 });\n\n if (iTrend === 0) {\n const dashboardTitle = chart\n .addUIElement(UIElementBuilders.TextBox)\n .setPosition({ x: 0, y: 100 })\n .setMargin({ left: 140, top: chart.getTitleMarginTop() })\n .setOrigin(UIOrigins.LeftTop)\n .setText(`${countryInformation.name.common}`)\n .setTextFont((font) => font.setSize(22))\n .setBackground((background) =>\n background.setFillStyle(emptyFill).setStrokeStyle(emptyLine)\n );\n\n // Add selector for displaying relative / actual values.\n const selector = chart.addUIElement(UIElementBuilders.TextBox)\n .setPosition({ x: 100, y: 100 })\n .setOrigin(UIOrigins.RightTop)\n .setMargin({top: 14, right: 24})\n .setDraggingMode(UIDraggingModes.notDraggable)\n selector.onMouseEnter((_) => chart.engine.setMouseStyle(MouseStyles.Point))\n selector.onMouseLeave((_) => chart.engine.setMouseStyle(MouseStyles.Default))\n const setState = (displayRelative) => {\n if (displayRelative !== showRelativeValuesState) {\n showRelativeValuesState = displayRelative\n // Reload view\n disposeChart()\n activateCountryView(countryCode, returnView, displayRelative)\n }\n selector.setText(displayRelative ? 'Show actual values' : 'Show relative values')\n }\n selector.onMouseClick((_) => setState(!showRelativeValuesState))\n setState(showRelativeValuesState)\n }\n\n const axisX = chart.getDefaultAxisX().setAnimationScroll(false);\n if (iTrend < _trends.length - 1) {\n axisX\n .setMouseInteractions(false)\n .setThickness(0)\n .setStrokeStyle(emptyLine)\n .setTickStrategy(AxisTickStrategies.DateTime, (ticks) =>\n ticks\n .setGreatTickStyle(emptyTick)\n .setMajorTickStyle((major) =>\n major.setLabelFillStyle(transparentFill).setTickStyle(emptyLine)\n )\n .setMinorTickStyle((minor) =>\n minor.setLabelFillStyle(transparentFill).setTickStyle(emptyLine)\n )\n );\n } else {\n axisX.setTickStrategy(AxisTickStrategies.DateTime);\n }\n\n const axisY = chart\n .getDefaultAxisY()\n .setTitle(trend.titleY || \"\")\n .setTitleFont(font => font.setSize(12))\n .setThickness({ min: marginLeft });\n if (trend.maxY !== undefined) {\n axisY\n .setInterval(0, trend.maxY)\n .setScrollStrategy(AxisScrollStrategies.expansion);\n }\n\n const series = chart\n .addLineSeries({\n dataPattern: { pattern: \"ProgressiveX\" },\n })\n .setName(`${countryInformation.name.common}`)\n .setCursorInterpolationEnabled(false)\n .setCursorResultTableFormatter((builder, _, x, y, dataPoint) =>\n builder\n .addRow(`${countryInformation.name.common}`)\n .addRow(axisX.formatValue(dataPoint.x))\n .addRow(trend.format(y))\n );\n const dataXY = trend.dataSet.data\n .map((sample) => ({\n x: ISODateToTime(sample.date),\n y: sample[trend.property],\n }))\n .filter(\n (point) =>\n point.y !== undefined && point.x >= newCasesHistoryDataTimeStart\n );\n series.add(dataXY);\n\n const averageData = averagesData && averagesData[trend.property];\n let seriesAverage;\n if (averageData) {\n seriesAverage = chart\n .addLineSeries({\n dataPattern: { pattern: \"ProgressiveX\" },\n })\n .setName(\"Global average\")\n .setCursorInterpolationEnabled(false)\n .setCursorResultTableFormatter((builder, _, x, y, dataPoint) =>\n builder\n .addRow(`Global average`)\n .addRow(axisX.formatValue(dataPoint.x))\n .addRow(trend.format(y))\n )\n .add(averageData);\n const styleNormal = series.getStrokeStyle();\n seriesAverage.setStrokeStyle(\n styleNormal.setFillStyle(styleNormal.getFillStyle().setA(100))\n );\n }\n\n return { ...trend, chart, series, seriesAverage };\n });\n\n synchronizeAxisIntervals(\n ...trends.map((trend) => trend.chart.getDefaultAxisX())\n );\n\n for (let i = 0; i < dashboardRows; i += 1) {\n dashboard.setRowHeight(i, i < trends.length ? 1 : 0);\n }\n\n const tEnd = Date.now() + 24 * 60 * 60 * 1000;\n const tStart = newCasesHistoryDataTimeStart;\n trends[0].chart.getDefaultAxisX().setInterval(tStart, tEnd, false, true);\n\n const returnPreviousView = () => {\n if (disposeChart) {\n disposeChart();\n }\n activateMapView(returnView);\n };\n trends.forEach((trend) => {\n detectMouseClicks(\n trend.chart.onSeriesBackgroundMouseClick.bind(trend.chart),\n trend.chart.onSeriesBackgroundMouseDoubleClick.bind(trend.chart),\n (e) => {},\n returnPreviousView\n );\n detectMouseClicks(\n trend.chart.onBackgroundMouseClick.bind(trend.chart),\n trend.chart.onBackgroundMouseDoubleClick.bind(trend.chart),\n (e) => {},\n returnPreviousView\n );\n });\n\n const subDrillDownOutButtonClick = drillDownOutButton.onMouseClick(() => returnPreviousView())\n\n let disposeChart = () => {\n trends.forEach((trend) => {\n trend.chart.dispose();\n });\n drillDownOutButton.offMouseClick(subDrillDownOutButtonClick)\n disposeChart = undefined;\n };\n\n tLastMapViewChange = window.performance.now();\n };\n\n let averagesData;\n console.time(\"calculate global averages\");\n averagesData = {\n new_cases_per_million: [],\n hosp_patients_per_million: [],\n icu_patients_per_million: [],\n };\n for (const key of Object.keys(averagesData)) {\n const dataMap = new Map();\n for (const countryCode of Object.keys(covidData)) {\n const countryData = covidData[countryCode];\n if (!countryData) {\n continue;\n }\n for (let i = 0; i < countryData.data.length; i += 1) {\n const sample = countryData.data[i];\n const curValue = sample[key];\n if (curValue !== undefined) {\n const cur = dataMap.get(sample.date);\n if (cur) {\n cur.count += 1;\n cur.sum += curValue;\n } else {\n dataMap.set(sample.date, { count: 1, sum: curValue });\n }\n }\n }\n }\n const dataXY = Array.from(dataMap.entries())\n .map(([dateIso, newCases]) => ({\n x: ISODateToTime(dateIso),\n y: newCases.sum / newCases.count,\n }))\n .sort((a, b) => a.x - b.x)\n .filter((point) => point.x >= newCasesHistoryDataTimeStart);\n averagesData[key] = dataXY;\n }\n console.timeEnd(\"calculate global averages\");\n\n activateMapView(\"World\");\n})();\n\nconst createISODateRangeMatcher = (dateStart, dateEnd) => {\n const yStart = dateStart.getFullYear();\n const mStart = dateStart.getMonth();\n const dStart = dateStart.getDate();\n const yEnd = dateEnd.getFullYear();\n const mEnd = dateEnd.getMonth();\n const dEnd = dateEnd.getDate();\n const tMonth = 31;\n const tYear = tMonth * 12;\n const tStart = yStart * tYear + mStart * tMonth + dStart;\n const tEnd = yEnd * tYear + mEnd * tMonth + dEnd;\n return (isoDate) => {\n const y = Number(isoDate.substring(0, 4));\n const m = Number(isoDate.substring(5, 7)) - 1;\n const d = Number(isoDate.substring(8, 10));\n const t = y * tYear + m * tMonth + d;\n const result = t >= tStart && t <= tEnd;\n return result;\n };\n};\n\nconst ISODateToTime = (isoString) => {\n const y = Number(isoString.substring(0, 4));\n const m = Number(isoString.substring(5, 7)) - 1;\n const d = Number(isoString.substring(8, 10));\n return new Date(y, m, d).getTime();\n};\n\nconst dateToIsoString = (date) => {\n return `${date.getFullYear()}-${integerToFixedLengthString(\n date.getMonth() + 1,\n 2\n )}-${integerToFixedLengthString(date.getDate(), 2)}`;\n};\n\nconst integerToFixedLengthString = (num, len) => {\n let str = String(num);\n while (str.length < len) {\n str = `0${str}`;\n }\n return str;\n};\n\nconst detectMouseClicks = (\n onMouseClick,\n onMouseDoubleClick,\n handleSingleClick,\n handleDoubleClick\n) => {\n let tLastDoubleClick = 0;\n onMouseClick((_, e) => {\n setTimeout(() => {\n if (window.performance.now() - tLastDoubleClick >= 500) {\n handleSingleClick(e);\n }\n }, 200);\n });\n onMouseDoubleClick((_, e) => {\n tLastDoubleClick = window.performance.now()\n handleDoubleClick(e);\n });\n};\n\nconst clampNumber = (num, min, max) => Math.min(Math.max(num, min), max);\n\n// Convenience function for checking if Theme is dark or light.\nconst isThemeDark = (theme) => [Themes.darkGold, Themes.darkGreen, Themes.darkLime, Themes.darkMagenta, Themes.darkRed, Themes.darkTurquoise, Themes.darkNature, Themes.blueSciFiNew].includes(theme)","url":null,"readme":"LightningChart JS example which showcases combination of `MapChart` and `ChartXY` features to implement a multi-dimensional data visualization. Amount of new CoVID cases in each country are displayed with a bubble (size and color represents number of new cases), while country color represents the vaccination coverage in the country (1 or more vaccines).\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nThe global number of daily cases as well as average vaccination coverage is displayed at the bottom. The active date that is displayed in the main chart above can be changed by dragging on the slider.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nBy placing mouse cursor above the main chart, a popup chart will be displayed over the nearest country from the mouse location. This chart shows the previous 4 weeks data from the active date. Depending on availability, the following data will be shown:\n\n- Vaccination coverage (1 vaccination, % of country population)\n- New CoVID cases (graph displays number relative to population, while label displays actual number of cases)\n- Hospitalized CoVID patients (graph displays number relative to population, while label displays actual number of patients)\n- Intensive care CoVID patients (graph displays number relative to population, while label displays actual number of patients)\n\nThe idea behind measurements relative to population is that the readings can be compared between countries, even if they might have different number of citizens. \n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\n**Drill-down to data**\n\nBy left-clicking once, you can drill down around the mouse location. For example, clicking around the Europe area will zoom the map view into just Europe. Further more, you can drill down into a single country to show the full historical progression of that country's CoVID data.\n\nIn this view you can also compare a single country's data to the calculated average from available global data.\n\n[//]: # \"IMPORTANT: The assets will not show before README.md is built - relative path is different!\"\n\n\n\nZooming back out can be done by double left-clicking.\n\n**Data sources**\n\nGeneral CoVID data is from the openly accessible _Owid Covid dataset_ found in [GitHub](https://github.com/owid/covid-19-data/tree/master/public/data).\n\nCoVID Vaccine data is referenced from the work of [Hasell, J., Mathie, E., Beltekia, D. et al. A cross-country database of COVID-19 testing. Sci Data 7, 345 (2020).](https://doi.org/10.1038/s41597-020-00688-8)\n\nContains information from [World countries by Modammed Le Doze](https://github.com/mledoze/countries), which is made available here under the [Open Database License (ODbL)](https://github.com/mledoze/countries/blob/master/LICENSE).\n\n**More map examples**:\n\n- [Data visualization over LightningChart JS Map Charts](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1103-mapChartVizXY.html)\n- [Data visualization over Google Maps](https://blog.arction.com/easy-geospatial-data-visualization-with-lightningchart-js-and-google)\n- [Simple Countries Visualization](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1101-mapChartDynamicColor.html)\n- [Data visualization over static map picture](https://www.arction.com/lightningchart-js-interactive-examples/examples/lcjs-example-1110-geoChartUsaTemperature.html)","image":"covidDrillDownDashboard.png"},{"id":"lcjs-example-1200-customThemeChartXY","title":"JavaScript Custom Color Theme ChartXY","tags":["theme","xy"],"description":"Example on ChartXY with Custom Color Theme","metaDescription":"LightningChart JS Interactive Examples. Fastest 2D & 3D JavaScript Charts: High-Performance Charts, Plot millions of data points in real-time. ECG Charts, XY Charts for real-time monitoring.","src":"/*\n * LightningChart JS Example on ChartXY with Custom Color Theme.\n */\n// Import LightningChartJS\nconst lcjs = require(\"@arction/lcjs\");\n\nconst {\n ColorCSS,\n SolidFill,\n SolidLine,\n lightningChart,\n customTheme,\n Themes,\n} = lcjs\n\nconst xydata = require(\"@arction/xydata\")\nconst { createProgressiveTraceGenerator } = xydata\n\nconst themeTextFillStyle = new SolidFill({ color: ColorCSS('#000000') })\nconst themeDataSeriesFillStyles = [new SolidFill({ color: ColorCSS('#ffe100') }), new SolidFill({ color: ColorCSS('#858585') })]\nconst themeAxisFillStyle = new SolidFill({ color: ColorCSS('#000000') })\nconst themeMajorTickFillStyle = new SolidFill({ color: ColorCSS('#000000') })\nconst themeMinorTickFillStyle = new SolidFill({ color: ColorCSS('#000000') })\nconst themeMajorGridlineFillStyle = new SolidFill({ color: ColorCSS('#00000032') })\nconst themeMinorGridlineFillStyle = new SolidFill({ color: ColorCSS('#00000014') })\nconst themeUiBackgroundFillStyle = new SolidFill({ color: ColorCSS('#dbdbdb') })\nconst themeUiBackgroundBorderFillStyle = new SolidFill({ color: ColorCSS('#2b2b2b') })\nconst themeCursorGridlineFillStyle = new SolidFill({ color: ColorCSS('#000000') })\n\nconst myTheme = customTheme(Themes.lightNew, {\n lcjsBackgroundFillStyle: new SolidFill({ color: ColorCSS('#00000000') }),\n panelBackgroundFillStyle: new SolidFill({ color: ColorCSS('#dbd4d3') }),\n seriesBackgroundFillStyle: new SolidFill({ color: ColorCSS('#d4cecd') }),\n chartTitleFillStyle: themeTextFillStyle,\n axisTitleFillStyle: themeTextFillStyle,\n axisStyle: new SolidLine({ thickness: 2, fillStyle: themeAxisFillStyle }),\n numericTickStrategy: Themes.lightNew.numericTickStrategy\n .setMajorTickStyle((majorTicks) =>\n majorTicks\n .setLabelFillStyle(themeTextFillStyle)\n .setTickStyle(new SolidLine({ thickness: 1, fillStyle: themeMajorTickFillStyle }))\n .setGridStrokeStyle(new SolidLine({ thickness: 1, fillStyle: themeMajorGridlineFillStyle })),\n )\n .setMinorTickStyle((minorTicks) =>\n minorTicks\n .setLabelFillStyle(themeTextFillStyle)\n .setTickStyle(new SolidLine({ thickness: 1, fillStyle: themeMinorTickFillStyle }))\n .setGridStrokeStyle(new SolidLine({ thickness: 1, fillStyle: themeMinorGridlineFillStyle })),\n ),\n seriesFillStyle: (i) => themeDataSeriesFillStyles[i % themeDataSeriesFillStyles.length],\n seriesStrokeStyle: (i) => new SolidLine({ thickness: 2, fillStyle: themeDataSeriesFillStyles[i % themeDataSeriesFillStyles.length] }),\n uiBackgroundFillStyle: themeUiBackgroundFillStyle,\n uiBackgroundStrokeStyle: new SolidLine({ thickness: 1, fillStyle: themeUiBackgroundBorderFillStyle }),\n uiTextFillStyle: themeTextFillStyle,\n resultTableFillStyle: themeUiBackgroundFillStyle,\n resultTableStrokeStyle: new SolidLine({ thickness: 1, fillStyle: themeUiBackgroundBorderFillStyle }),\n resultTableTextFillStyle: themeTextFillStyle,\n customTickGridStrokeStyle: new SolidLine({ thickness: 1, fillStyle: themeCursorGridlineFillStyle }),\n uiPointableTextBoxFillStyle: themeUiBackgroundFillStyle,\n uiPointableTextBoxStrokeStyle: new SolidLine({ thickness: 1, fillStyle: themeUiBackgroundBorderFillStyle }),\n uiPointableTextBoxTextFillStyle: themeTextFillStyle,\n pointMarkerFillStyle: new SolidFill({ color: ColorCSS('#000000') }),\n chartXYZoomingRectangleFillStyle: new SolidFill({ color: ColorCSS('#00000016') }),\n chartXYZoomingRectangleStrokeStyle: new SolidLine({ thickness: 1, fillStyle: new SolidFill({ color: ColorCSS('#4f4f4f') }) }),\n chartXYFittingRectangleFillStyle: new SolidFill({ color: ColorCSS('#00000016') }),\n chartXYFittingRectangleStrokeStyle: new SolidLine({ thickness: 1, fillStyle: new SolidFill({ color: ColorCSS('#4f4f4f') }) }),\n})\n\nconst chart = lightningChart()\n .ChartXY({ theme: myTheme })\n .setPadding({ right: 20 })\n .setTitle('Custom \\\"simple light gold\\\" Theme ChartXY')\n\nfor (let i = 1; i <= 2; i += 1) {\n const series = chart.addLineSeries({\n dataPattern: {\n pattern: 'ProgressiveX',\n },\n })\n\n createProgressiveTraceGenerator()\n .setNumberOfPoints(100 * 1000)\n .generate()\n .toPromise()\n .then((data) => {\n series.add(data)\n })\n}\n\nconst legend = chart.addLegendBox().add(chart)\n","url":null,"readme":"Example on creating a Custom Color Theme for a simple ChartXY.\n\nThis does not contain a complete color theme, only the properties which are present in this particular chart application are specified for simplicity.\n\nThe Custom theme is created by overriding select properties of a default theme, the `lightNew` Theme specifically.\n\nCustom themes are a good option to styling each component at a time, especially as custom themes can be much more easily shared between different charts or applications.\n","image":"customThemeChartXY.png"},{"id":"showcase 1","title":"Trading demo","tags":null,"description":"Trading chart with live data fetched from alphavantage.co","metaDescription":"","src":null,"url":"https://arction.github.io/lcjs-showcase-trading/","readme":"Trading chart with live data fetched from alphavantage.co\n\nFeatures:\n\n* OHLC\n* Simple Moving Average\n* Exponential Moving Average\n* Bollinger Bands\n* Volume\n* Relative Strength Index\n","image":"trading-demo.png"},{"id":"showcase 2","title":"Real-time scrolling","tags":null,"description":"Scrolling of large quantitities of random data in real-time, across multiple channels.","metaDescription":"","src":null,"url":"https://arction.github.io/lcjs-showcase-streamingData/","readme":"Scrolling of large quantitities of random data in real-time, across multiple channels.\n\nRendered frames-per-second (FPS) and incoming data points-per-second (PPS) are displayed on Chart.\n","image":"streaming-data-demo.png"},{"id":"showcase 3","title":"Static data speed test","tags":null,"description":"Measures the time (in milliseconds) required to visualize a Line Chart with 5 000 000 data points.","metaDescription":"","src":null,"url":"https://arction.github.io/lcjs-showcase-renderingSpeed/","readme":"Measures the time (in milliseconds) required to visualize a Line Chart with 5 000 000 data points.\n\nResult is shown on Chart.\n","image":"rendering-speed-demo.png"},{"id":"showcase 4","title":"Audio visualization","tags":null,"description":"The audio data is extracted in realtime using Web Audio API's.","metaDescription":"","src":null,"url":"https://arction.github.io/lcjs-showcase-audio/","readme":"The audio data is extracted in realtime using Web Audio API's.\n\nThe Web Audio API has an .createAnalyser() method that can be used to create a new AnalyzerNode. The AnalyzerNode has methods to get time-domain data (waveform) and frequency data which is data from Fast Fourier transform on the audio signal.\n\nThe time-domain data is shown as is on the Time Domain chart. That same data is also pushed to the Waveform history chart. This chart displays the last 1 million samples of the audio input.\n","image":"audio-visualisation-demo.png"}]
["xy","line","legendbox","scatter","point","spline","point-line","datapattern","step","point-cluster","rectangle","axis","realtime","datacleaning","customtick","time","high-precision","polygon","points","palette","date-time","trading","dashboard","ui","cursor","interactions","image","heatmap","real-time","logarithmic","bars","column","group","candlestick","ohlc","constantline","area","zoom band","range","bar","spider","radar","web","radial","gauge","pie","donut","funnel","pyramid","sliced","box","whiskers","violin","marker","band","html","bubble","ellipse","LineSeries","PointSeries","OnScreenMenuButton","PointShape","spectrogram","audio","3d","surface","mesh","lidar","polar","map","theme"]